Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Znai

Znai is a tool to author and generate user guide documentation from markdown files.
It consist of ReactJS (@znai-reactjs) for rendering content and Java for parsing markdown with custom
extensions.

# DocElement

Instead of generating html from md files directly, znai generates DocElement pieces and stores them as JSON. ReactJS App displays
JSON pieces at runtime. This allows UI to customize rendering depending on the context. E.g. it can render it as part of search preview. Or
render as presentation mode.
Original file line number Diff line number Diff line change
Expand Up @@ -48,5 +48,9 @@ default SearchText textForSearch() {
return null;
}

default String markdownRepresentation() {
return "";
}

default PluginParamsDefinition parameters() { return PluginParamsDefinition.undefined(); }
}
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public class FileIncludePlugin implements IncludePlugin {
private PluginFeatureList features;

private ManipulatedSnippetContentProvider contentProvider;
private String lang;

@Override
public PluginParamsDefinition parameters() {
Expand Down Expand Up @@ -75,10 +76,8 @@ public PluginResult process(ComponentsRegistry componentsRegistry,
features = new PluginFeatureList();
features.add(SnippetsCommon.createCommonFeatures(componentsRegistry, markupPath, pluginParams, contentProvider).asList());

String providedLang = pluginParams.getOpts().getString("lang");
String langToUse = (providedLang == null) ? langFromFileName(fileName) : providedLang;

Map<String, Object> props = CodeSnippetsProps.create(langToUse, contentProvider.snippetContent());
this.lang = getLang(pluginParams);
Map<String, Object> props = CodeSnippetsProps.create(lang, contentProvider.snippetContent());
props.putAll(pluginParams.getOpts().toMap());

features.updateProps(props);
Expand All @@ -97,6 +96,28 @@ public SearchText textForSearch() {
return SearchScore.HIGH.text(contentProvider.snippetContent());
}

@Override
public String markdownRepresentation() {
if (contentProvider == null) {
return "";
}

StringBuilder markdown = new StringBuilder();
markdown.append("```").append(lang).append("\n");
markdown.append(contentProvider.snippetContent());
if (!contentProvider.snippetContent().endsWith("\n")) {
markdown.append("\n");
}
markdown.append("```");

return markdown.toString();
}

private String getLang(PluginParams pluginParams) {
var providedLang = pluginParams.getOpts().getString("lang");
return (providedLang == null) ? langFromFileName(fileName) : providedLang;
}

private static String langFromFileName(String fileName) {
return extFromFileName(fileName);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -63,4 +63,23 @@ public PluginResult process(ComponentsRegistry componentsRegistry,

return commonProcess(componentsRegistry, markupPath, pluginParams, json);
}

@Override
public String markdownRepresentation() {
if (resourcesResolver == null) {
return "";
}

String json = resourcesResolver.textContent(fileName);

StringBuilder markdown = new StringBuilder();
markdown.append("```json\n");
markdown.append(json);
if (!json.endsWith("\n")) {
markdown.append("\n");
}
markdown.append("```");

return markdown.toString();
}
}
Loading