generate rss feed from asciidoctor files
[www.git] / asciidoctor / src / main / java / Main.java
diff --git a/asciidoctor/src/main/java/Main.java b/asciidoctor/src/main/java/Main.java
new file mode 100644 (file)
index 0000000..228935d
--- /dev/null
@@ -0,0 +1,97 @@
+import java.io.*;
+import java.util.*;
+
+import org.asciidoctor.Asciidoctor;
+import org.asciidoctor.Asciidoctor.Factory;
+import org.asciidoctor.Options;
+import org.asciidoctor.ast.DocumentHeader;
+
+import com.rometools.rome.feed.synd.*;
+import com.rometools.rome.io.FeedException;
+import com.rometools.rome.io.SyndFeedOutput;
+
+public class Main {
+        private static File toHTMLFile(File dir, File adoc) {
+                int idx;
+                String name;
+                
+                name = adoc.getName(); 
+               
+                idx = name.lastIndexOf('.');
+                
+                if (idx >= 0)
+                        name = name.substring(0, idx);
+                
+                return new File(dir, name + ".html");
+        }
+        
+       public static void main(String[] args) throws FileNotFoundException, IOException, FeedException {
+               File inDir, html, outDir;
+               File[] adocs;
+               StringWriter sw;
+               Asciidoctor asciidoctor;
+               Options opts;
+               SyndFeed feed;
+               Properties props;
+               ArrayList<SyndEntry> entries;
+               SyndEntryImpl e;
+               InputStream in;
+               DocumentHeader h;
+               SyndContentImpl c;
+               
+               inDir = new File(args[0]);
+               outDir = new File(args[1]);
+               
+               props = new Properties();
+               in = new FileInputStream(args[2]);
+               props.load(in);
+               in.close();
+               
+               adocs = inDir.listFiles();
+
+               asciidoctor = Factory.create();
+
+               feed = new SyndFeedImpl();
+               feed.setTitle(props.getProperty("feed.title"));
+               feed.setDescription(props.getProperty("feed.description"));
+               feed.setLink(props.getProperty("feed.link"));
+               
+               entries = new ArrayList<SyndEntry>();
+               
+               for (File adoc: adocs) {
+                       if (!adoc.getName().endsWith(".adoc"))
+                               continue;
+                       
+                       sw = new StringWriter();
+                                               
+                       html = toHTMLFile(outDir, adoc);
+                       System.out.println(adoc + " => " + html);
+
+                       opts = new Options();
+                       opts.setToFile(html.getAbsolutePath());
+                       
+                       asciidoctor.renderFile(adoc, opts);
+                       
+                       h = asciidoctor.readDocumentHeader(adoc);
+                                                           
+                       asciidoctor.convert(new FileReader(adoc), sw, Collections.emptyMap());
+                       
+                       e = new SyndEntryImpl();
+                       e.setTitle(h.getDocumentTitle().getMain());
+                       
+                       c = new SyndContentImpl();
+                       c.setType("text/html");
+                       c.setValue(sw.toString());
+                       
+                       e.setDescription(c);
+                       
+                       entries.add(e);
+               }
+               
+               feed.setEntries(entries);
+               
+               feed.setFeedType("rss_2.0");                    
+               SyndFeedOutput output = new SyndFeedOutput();
+               System.out.println("" + output.outputString(feed));
+       }
+}
\ No newline at end of file