Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package md2html;
- import java.io.*;
- import java.nio.charset.StandardCharsets;
- import java.util.LinkedList;
- import java.util.List;
- import java.util.Stack;
- public class Md2Html {
- private static List<StringBuilder> sbParagraphList = new LinkedList<>();
- private static Stack<StringBuilder> sbWordsStack = new Stack<>();
- private static Stack<StringBuilder> sbWordsStack2 = new Stack<>();
- private static Stack<String> strMarksStack = new Stack<>();
- private static Stack<String> strMarksStack2 = new Stack<>();
- private static String fout = "";
- public static void main(String[] args) throws IOException {
- Scanner scanner;
- fout = args[1];
- scanner = new Scanner(new File(args[0]), "utf8");
- while (scanner.hasNextLine()) {
- StringBuilder strBuild = scanner.getParagraph();
- getType(strBuild);
- }
- scanner.close();
- parse(sbParagraphList);
- }
- private static void parse(List<StringBuilder> strBHL) throws IOException {
- Scanner scanner;
- BufferedWriter writer;
- writer = new BufferedWriter(
- new OutputStreamWriter(
- new FileOutputStream(fout),
- "utf8"
- )
- );
- for (StringBuilder str : strBHL) {
- sbWordsStack = new Stack<>();
- sbWordsStack2 = new Stack<>();
- strMarksStack = new Stack<>();
- strMarksStack2 = new Stack<>();
- scanner = new Scanner(str.toString());
- while (scanner.hasNextLine()) {
- StringBuilder tmpSB = scanner.getStringBeforeMark();
- String tmpStr = scanner.nextMark();
- if (!strMarksStack.empty() && tmpStr.equals(strMarksStack.peek())) {
- strMarksStack.pop();
- StringBuilder sb = new StringBuilder();
- if (tmpStr.equals("*") || tmpStr.equals("_")) {
- sb.append("<em>");
- sb.append(tmpSB);
- sb.append("</em>");
- }
- if (tmpStr.equals("**") || tmpStr.equals("__")) {
- sb.append("<strong>");
- sb.append(tmpSB);
- sb.append("</strong>");
- }
- if (tmpStr.equals("--")) {
- sb.append("<s>");
- sb.append(tmpSB);
- sb.append("</s>");
- }
- if (tmpStr.equals("`")) {
- sb.append("<code>");
- String tmp = tmpSB.toString();
- if (tmpSB.length() == 1) {
- switch (tmpSB.charAt(0)) {
- case '<':
- tmp = "<";
- break;
- case '>':
- tmp = ">";
- break;
- case '&':
- tmp = "&";
- break;
- }
- }
- sb.append(tmp);
- sb.append("</code>");
- }
- sbWordsStack.push(sb);
- } else {
- sbWordsStack.push(tmpSB);
- strMarksStack.push(tmpStr);
- }
- }
- scanner.close();
- strMarksStack.pop();
- while (!sbWordsStack.empty() ) {
- sbWordsStack2.push(sbWordsStack.pop());
- }
- while (!strMarksStack.empty() ) {
- strMarksStack2.push(strMarksStack.pop());
- }
- while (!sbWordsStack2.empty() || !strMarksStack2.empty()) {
- StringBuilder sbb = sbWordsStack2.pop();
- writer.write(sbb.toString());
- if (!strMarksStack2.empty()) {
- writer.write(strMarksStack2.pop());
- }
- //System.out.print(sbb);
- }
- writer.write('\n');
- }
- writer.close();
- }
- private static void getType(StringBuilder stringBuilder) {
- boolean isOctothorp = stringBuilder.charAt(0) == '#';
- int countOctothorp = 0;
- int position = 0;
- while (stringBuilder.charAt(position) == '#') {
- position++;
- }
- boolean isEndOctothorp = Character.isWhitespace(stringBuilder.charAt(position));
- countOctothorp += position;
- if (isOctothorp && isEndOctothorp) {
- sbParagraphList.add(new StringBuilder("<h" + countOctothorp + ">" + stringBuilder.substring(countOctothorp + 1) + "</h" + countOctothorp + ">"));
- } else {
- sbParagraphList.add(new StringBuilder("<p>" + stringBuilder + "</p>"));
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement