Advertisement
Guest User

Untitled

a guest
Nov 17th, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.99 KB | None | 0 0
  1. package md2html;
  2.  
  3. import java.io.*;
  4. import java.nio.charset.StandardCharsets;
  5. import java.util.LinkedList;
  6. import java.util.List;
  7. import java.util.Stack;
  8.  
  9. public class Md2Html {
  10.     private static List<StringBuilder> sbParagraphList = new LinkedList<>();
  11.     private static Stack<StringBuilder> sbWordsStack = new Stack<>();
  12.     private static Stack<StringBuilder> sbWordsStack2 = new Stack<>();
  13.     private static Stack<String> strMarksStack = new Stack<>();
  14.     private static Stack<String> strMarksStack2 = new Stack<>();
  15.     private static String fout = "";
  16.  
  17.     public static void main(String[] args) throws IOException {
  18.         Scanner scanner;
  19.         fout = args[1];
  20.         scanner = new Scanner(new File(args[0]), "utf8");
  21.         while (scanner.hasNextLine()) {
  22.             StringBuilder strBuild = scanner.getParagraph();
  23.             getType(strBuild);
  24.         }
  25.         scanner.close();
  26.         parse(sbParagraphList);
  27.     }
  28.  
  29.     private static void parse(List<StringBuilder> strBHL) throws IOException {
  30.         Scanner scanner;
  31.         BufferedWriter writer;
  32.  
  33.         writer = new BufferedWriter(
  34.                 new OutputStreamWriter(
  35.                         new FileOutputStream(fout),
  36.                         "utf8"
  37.                 )
  38.         );
  39.         for (StringBuilder str : strBHL) {
  40.             sbWordsStack = new Stack<>();
  41.             sbWordsStack2 = new Stack<>();
  42.             strMarksStack = new Stack<>();
  43.             strMarksStack2 = new Stack<>();
  44.             scanner = new Scanner(str.toString());
  45.             while (scanner.hasNextLine()) {
  46.                 StringBuilder tmpSB = scanner.getStringBeforeMark();
  47.                 String tmpStr = scanner.nextMark();
  48.                 if (!strMarksStack.empty() && tmpStr.equals(strMarksStack.peek())) {
  49.                     strMarksStack.pop();
  50.                     StringBuilder sb = new StringBuilder();
  51.                     if (tmpStr.equals("*") || tmpStr.equals("_")) {
  52.                         sb.append("<em>");
  53.                         sb.append(tmpSB);
  54.                         sb.append("</em>");
  55.                     }
  56.                     if (tmpStr.equals("**") || tmpStr.equals("__")) {
  57.                         sb.append("<strong>");
  58.                         sb.append(tmpSB);
  59.                         sb.append("</strong>");
  60.                     }
  61.                     if (tmpStr.equals("--")) {
  62.                         sb.append("<s>");
  63.                         sb.append(tmpSB);
  64.                         sb.append("</s>");
  65.                     }
  66.                     if (tmpStr.equals("`")) {
  67.                         sb.append("<code>");
  68.                         String tmp = tmpSB.toString();
  69.                         if (tmpSB.length() == 1) {
  70.                             switch (tmpSB.charAt(0)) {
  71.                                 case '<':
  72.                                     tmp = "&lt;";
  73.                                     break;
  74.                                 case '>':
  75.                                     tmp = "&gt;";
  76.                                     break;
  77.                                 case '&':
  78.                                     tmp = "&amp;";
  79.                                     break;
  80.                             }
  81.                         }
  82.                         sb.append(tmp);
  83.                         sb.append("</code>");
  84.                     }
  85.                     sbWordsStack.push(sb);
  86.                 } else {
  87.                     sbWordsStack.push(tmpSB);
  88.                     strMarksStack.push(tmpStr);
  89.                 }
  90.             }
  91.             scanner.close();
  92.             strMarksStack.pop();
  93.             while (!sbWordsStack.empty() ) {
  94.                 sbWordsStack2.push(sbWordsStack.pop());
  95.             }
  96.             while (!strMarksStack.empty() ) {
  97.                 strMarksStack2.push(strMarksStack.pop());
  98.             }
  99.  
  100.             while (!sbWordsStack2.empty() || !strMarksStack2.empty()) {
  101.                 StringBuilder sbb = sbWordsStack2.pop();
  102.                 writer.write(sbb.toString());
  103.                 if (!strMarksStack2.empty()) {
  104.                     writer.write(strMarksStack2.pop());
  105.                 }
  106.                 //System.out.print(sbb);
  107.             }
  108.             writer.write('\n');
  109.         }
  110.         writer.close();
  111.     }
  112.  
  113.     private static void getType(StringBuilder stringBuilder) {
  114.         boolean isOctothorp = stringBuilder.charAt(0) == '#';
  115.         int countOctothorp = 0;
  116.         int position = 0;
  117.         while (stringBuilder.charAt(position) == '#') {
  118.             position++;
  119.         }
  120.         boolean isEndOctothorp = Character.isWhitespace(stringBuilder.charAt(position));
  121.         countOctothorp += position;
  122.         if (isOctothorp && isEndOctothorp) {
  123.             sbParagraphList.add(new StringBuilder("<h" + countOctothorp + ">" + stringBuilder.substring(countOctothorp + 1) + "</h" + countOctothorp + ">"));
  124.         } else {
  125.             sbParagraphList.add(new StringBuilder("<p>" + stringBuilder + "</p>"));
  126.         }
  127.  
  128.  
  129.     }
  130. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement