You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

BuildSite.java 4.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package com.gitblit;
  2. import java.io.BufferedReader;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.FilenameFilter;
  7. import java.io.InputStreamReader;
  8. import java.io.OutputStreamWriter;
  9. import java.nio.charset.Charset;
  10. import java.text.MessageFormat;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Arrays;
  13. import java.util.Date;
  14. import com.beust.jcommander.JCommander;
  15. import com.beust.jcommander.Parameter;
  16. import com.beust.jcommander.ParameterException;
  17. import com.beust.jcommander.Parameters;
  18. import com.gitblit.utils.MarkdownUtils;
  19. public class BuildSite {
  20. public static void main(String... args) {
  21. Params params = new Params();
  22. JCommander jc = new JCommander(params);
  23. try {
  24. jc.parse(args);
  25. } catch (ParameterException t) {
  26. usage(jc, t);
  27. }
  28. File sourceFolder = new File(params.sourceFolder);
  29. File destinationFolder = new File(params.outputFolder);
  30. File[] markdownFiles = sourceFolder.listFiles(new FilenameFilter() {
  31. @Override
  32. public boolean accept(File dir, String name) {
  33. return name.toLowerCase().endsWith(".mkd");
  34. }
  35. });
  36. Arrays.sort(markdownFiles);
  37. System.out.println(MessageFormat.format("Generating site from {0} Markdown Docs in {1} ", markdownFiles.length, sourceFolder.getAbsolutePath()));
  38. String linkPattern = "<a href=''{0}''>{1}</a>";
  39. StringBuilder sb = new StringBuilder();
  40. for (File file : markdownFiles) {
  41. String displayName = getDocumentName(file);
  42. String fileName = displayName + ".html";
  43. sb.append(MessageFormat.format(linkPattern, fileName, displayName));
  44. sb.append(" | ");
  45. }
  46. sb.setLength(sb.length() - 3);
  47. sb.trimToSize();
  48. String html_header = readContent(new File(params.pageHeader));
  49. String html_footer = readContent(new File(params.pageFooter));
  50. final String links = sb.toString();
  51. final String header = MessageFormat.format(html_header, Constants.FULL_NAME, links);
  52. final String date = new SimpleDateFormat("yyyy-MM-dd").format(new Date());
  53. final String footer = MessageFormat.format(html_footer, "generated " + date);
  54. for (File file : markdownFiles) {
  55. try {
  56. String displayName = getDocumentName(file);
  57. String fileName = displayName + ".html";
  58. System.out.println(MessageFormat.format(" {0} => {1}", file.getName(), fileName));
  59. InputStreamReader reader = new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8"));
  60. String content = MarkdownUtils.transformMarkdown(reader);
  61. if (displayName.equalsIgnoreCase("overview")) {
  62. content = MessageFormat.format(content, Constants.VERSION, "gitblit-" + Constants.VERSION + ".zip", Constants.getJGitVersion(), date);
  63. }
  64. OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(new File(destinationFolder, fileName)), Charset.forName("UTF-8"));
  65. writer.write(header);
  66. writer.write(content);
  67. writer.write(footer);
  68. reader.close();
  69. writer.close();
  70. } catch (Throwable t) {
  71. System.err.println("Failed to transform " + file.getName());
  72. t.printStackTrace();
  73. }
  74. }
  75. }
  76. private static String readContent(File file) {
  77. StringBuilder sb = new StringBuilder();
  78. try {
  79. InputStreamReader is = new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8"));
  80. BufferedReader reader = new BufferedReader(is);
  81. String line = null;
  82. while ((line = reader.readLine()) != null) {
  83. sb.append(line);
  84. }
  85. reader.close();
  86. } catch (Throwable t) {
  87. System.err.println("Failed to read content of " + file.getAbsolutePath());
  88. t.printStackTrace();
  89. }
  90. return sb.toString();
  91. }
  92. private static String getDocumentName(File file) {
  93. String displayName = file.getName().substring(0, file.getName().lastIndexOf('.')).toLowerCase();
  94. // trim leading ##_ which is to control display order
  95. return displayName.substring(3);
  96. }
  97. private static void usage(JCommander jc, ParameterException t) {
  98. System.out.println(Constants.getRunningVersion());
  99. System.out.println();
  100. if (t != null) {
  101. System.out.println(t.getMessage());
  102. System.out.println();
  103. }
  104. if (jc != null) {
  105. jc.usage();
  106. }
  107. System.exit(0);
  108. }
  109. @Parameters(separators = " ")
  110. private static class Params {
  111. @Parameter(names = { "--sourceFolder" }, description = "Markdown Source Folder", required = true)
  112. public String sourceFolder;
  113. @Parameter(names = { "--outputFolder" }, description = "HTML Ouptut Folder", required = true)
  114. public String outputFolder;
  115. @Parameter(names = { "--pageHeader" }, description = "Page Header HTML Snippet", required = true)
  116. public String pageHeader;
  117. @Parameter(names = { "--pageFooter" }, description = "Page Footer HTML Snippet", required = true)
  118. public String pageFooter;
  119. }
  120. }