2828public class GuideMetadataGenerator {
2929
3030 private static final Set <String > SKIP_DIRS = Set .of (
31- "target" , "docs" , "documentation" , "docs-maven-plugin" , "non-java-clients" , " .git" , ".github" );
31+ "target" , "docs" , "documentation" , "docs-maven-plugin" , ".git" , ".github" );
3232
3333 private final Path srcDir ;
3434 private final Path outputDir ;
@@ -63,12 +63,8 @@ public void generate() throws IOException {
6363 }
6464 Files .createDirectories (guidesOutputDir );
6565
66- Options options = Options .builder ()
67- .safe (SafeMode .UNSAFE )
68- .build ();
69-
7066 try (Asciidoctor asciidoctor = Asciidoctor .Factory .create ()) {
71- collectGuides (srcDir , "" , asciidoctor , options , guides , guidesOutputDir );
67+ collectGuides (srcDir , "" , asciidoctor , guides , guidesOutputDir );
7268 }
7369
7470 guides .sort (Comparator .comparing (g -> (String ) g .get ("id" )));
@@ -88,7 +84,7 @@ public void generate() throws IOException {
8884 }
8985
9086 private void collectGuides (Path dir , String prefix , Asciidoctor asciidoctor ,
91- Options options , List <Map <String , Object >> guides , Path guidesOutputDir )
87+ List <Map <String , Object >> guides , Path guidesOutputDir )
9288 throws IOException {
9389 try (Stream <Path > entries = Files .list (dir )) {
9490 List <Path > sorted = entries .sorted ().toList ();
@@ -104,10 +100,11 @@ private void collectGuides(Path dir, String prefix, Asciidoctor asciidoctor,
104100 String dirName = stripPrefix (entry .getFileName ().toString ());
105101 if (Files .exists (guideFile )) {
106102 String id = prefix .isEmpty () ? dirName : prefix + "-" + dirName ;
107- processGuide (guideFile , id , asciidoctor , options , guides , guidesOutputDir );
103+ String language = deriveLanguage (guideFile );
104+ processGuide (guideFile , id , language , asciidoctor , guides , guidesOutputDir );
108105 }
109106 String subPrefix = prefix .isEmpty () ? dirName : prefix + "-" + dirName ;
110- collectGuides (entry , subPrefix , asciidoctor , options , guides , guidesOutputDir );
107+ collectGuides (entry , subPrefix , asciidoctor , guides , guidesOutputDir );
111108 }
112109 }
113110 }
@@ -119,17 +116,33 @@ private String stripPrefix(String dirName) {
119116 return dirName ;
120117 }
121118
122- private void processGuide (Path guideFile , String id , Asciidoctor asciidoctor ,
123- Options options , List <Map <String , Object >> guides , Path guidesOutputDir )
119+ private static final String NON_JAVA_CLIENTS_DIR = "non-java-clients" ;
120+
121+ private String deriveLanguage (Path guideFile ) {
122+ Path relative = srcDir .relativize (guideFile .getParent ());
123+ if (relative .getNameCount () >= 2
124+ && relative .getName (0 ).toString ().equals (NON_JAVA_CLIENTS_DIR )) {
125+ return relative .getName (1 ).toString ();
126+ }
127+ return "java" ;
128+ }
129+
130+ private void processGuide (Path guideFile , String id , String language , Asciidoctor asciidoctor ,
131+ List <Map <String , Object >> guides , Path guidesOutputDir )
124132 throws IOException {
125133 String content = Files .readString (guideFile );
126- Document doc = asciidoctor .load (content , options );
134+ Options perGuideOptions = Options .builder ()
135+ .safe (SafeMode .UNSAFE )
136+ .baseDir (guideFile .getParent ().toFile ())
137+ .build ();
138+ Document doc = asciidoctor .load (content , perGuideOptions );
127139
128140 Map <String , Object > guide = new LinkedHashMap <>();
129141 guide .put ("id" , id );
130142 guide .put ("title" , doc .getDoctitle ());
131143 guide .put ("summary" , attrString (doc , "summary" ));
132144 guide .put ("mode" , attrString (doc , "mode" ));
145+ guide .put ("language" , language );
133146 guide .put ("topics" , splitComma (attrString (doc , "topics" )));
134147 guide .put ("keywords" , splitComma (attrString (doc , "keywords" )));
135148 guide .put ("source-dir" , attrString (doc , "source-dir" ));
0 commit comments