Skip to content

Commit

Permalink
update: github wiki + refactor: better naming for docs gen
Browse files Browse the repository at this point in the history
  • Loading branch information
sakurawald committed Jul 21, 2024
1 parent d8dc89f commit f58d9e0
Showing 1 changed file with 53 additions and 24 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@

import static io.github.sakurawald.generator.JsonDocsGenerator.*;

@SuppressWarnings("StringBufferReplaceableByString")
@Slf4j
public class MarkdownDocsGenerator {

Expand All @@ -24,7 +25,11 @@ private String toMarkdown(JsonObject root) {
return text.toString();
}

private String translateDocumentation(String string, String indent) {
private String getIndent(int level) {
return ">".repeat(level) + " ";
}

private String makeDocumentation(String string, int level) {
StringBuilder text = new StringBuilder();

// drop first and last quote
Expand All @@ -36,6 +41,7 @@ private String translateDocumentation(String string, String indent) {

// add prefix indent
String[] lines = string.split("\n");
String indent = getIndent(level);
for (String line : lines) {
text.append(indent).append(line).append(System.lineSeparator());

Expand All @@ -47,17 +53,57 @@ private String translateDocumentation(String string, String indent) {
return text.toString().trim();
}

private String translateJsonPair(String key, JsonElement jsonElement, String indent) {
private String makeJsonPair(String key, JsonElement jsonElement, int level) {
StringBuilder text = new StringBuilder();
String indent = getIndent(level);
text.append(indent).append("```json").append(System.lineSeparator())
.append(indent).append("\"").append(key).append("\"").append(": ").append(jsonElement).append(System.lineSeparator())
.append(indent).append("```").append(System.lineSeparator())
.append(indent).append(System.lineSeparator());
return text.toString();
}

private String getIndent(int level) {
return ">".repeat(level) + " ";
private String makeBoxed(String string, int level) {
StringBuilder text = new StringBuilder();
String indent = getIndent(level);
// class documentation
text.append(indent).append("<table><tr><td>").append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(string)
.append(indent).append("</td></tr></table>").append(System.lineSeparator())
.append(indent).append(System.lineSeparator());

return text.toString();
}

private String makeDocumentedJsonPair(JsonObject node, String key, int level) {
String documentation = node.get(key + FIELD_DOCUMENTATION).getAsString();
String indent = getIndent(level);

StringBuilder text = new StringBuilder();
text.append(indent).append("<table><tr><td>").append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
// require 2 lines to let the parser work
.append(makeDocumentation(documentation, level)).append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
//
.append(makeJsonPair(key, node.get(key), level))

.append(indent).append("</td></tr></table>").append(System.lineSeparator());


return text.toString();
}

private void processJsonPair(StringBuilder text, JsonObject node, String key, int level) {
if (node.keySet().contains(key + FIELD_DOCUMENTATION)) {
// field documentation
text.append(makeDocumentedJsonPair(node, key, level));
} else {
// no documented field
text.append(makeJsonPair(key, node.get(key), level));
}
}

private void walk(StringBuilder sb, int level, JsonObject node) {
Expand All @@ -71,11 +117,7 @@ private void walk(StringBuilder sb, int level, JsonObject node) {
if (key.endsWith(SKIP_WALK) || key.endsWith(FIELD_DOCUMENTATION)) continue;
if (key.endsWith(CLASS_DOCUMENTATION)) {
// class documentation
sb.append(indent).append("<table><tr><td>").append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(translateDocumentation(value.toString(), indent)).append(System.lineSeparator())
.append(indent).append("</td></tr></table>").append(System.lineSeparator());
sb.append(indent).append(System.lineSeparator());
sb.append(makeBoxed(makeDocumentation(value.toString(), level) + System.lineSeparator(), level));
continue;
}

Expand All @@ -92,26 +134,13 @@ private void walk(StringBuilder sb, int level, JsonObject node) {

// note: skip walk
if (keys.contains(key + SKIP_WALK)) {
sb.append(translateJsonPair(key, value, indent));
processJsonPair(sb, node, key, level);
continue;
}

walk(sb, level + 1, (JsonObject) value);
} else {
if (keys.contains(key + FIELD_DOCUMENTATION)) {
// field documentation
String documentation = node.get(key + FIELD_DOCUMENTATION).getAsString();
sb.append(indent).append("<table><tr><td>").append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(translateDocumentation(documentation, indent)).append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(indent).append(System.lineSeparator())
.append(translateJsonPair(key, value, indent))
.append(indent).append("</td></tr></table>").append(System.lineSeparator());
} else {
// no documented field
sb.append(translateJsonPair(key, value, indent));
}
processJsonPair(sb, node, key, level);
}

// same level
Expand Down

0 comments on commit f58d9e0

Please sign in to comment.