diff --git a/java/md2html/BlockCreator.java b/java/md2html/BlockCreator.java
new file mode 100644
index 0000000..e9afaa8
--- /dev/null
+++ b/java/md2html/BlockCreator.java
@@ -0,0 +1,67 @@
+package md2html;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BlockCreator {
+
+ private final String text;
+ private final List blocks;
+
+ public BlockCreator(String text) {
+ this.text = text;
+ blocks = new ArrayList<>();
+ }
+
+ public List divideByBlocks() {
+ StringBuilder sb = new StringBuilder();
+ int i = 0;
+ while (i < text.length()) {
+ if (isNewLine(text.charAt(i))) {
+ i = newLine(i);
+ if (i < text.length() && isNewLine(text.charAt(i))) {
+ i = newLine(i);
+ addToBlock(sb);
+ } else if (i < text.length()) {
+ if (!sb.isEmpty()) {
+ sb.append(System.lineSeparator());
+ }
+ sb.append(text.charAt(i++));
+ }
+ } else {
+ sb.append(text.charAt(i++));
+ }
+ }
+ addToBlock(sb);
+ return blocks;
+ }
+
+ private void addToBlock(StringBuilder item) {
+ if (!item.isEmpty()) {
+ blocks.add(item.toString());
+ item.setLength(0);
+ }
+ }
+
+ private int newLine(int i) {
+ if (i < text.length() && text.charAt(i) == '\r') {
+ i++;
+ if (i < text.length() && text.charAt(i) == '\n') {
+ i++;
+ }
+ } else {
+ i++;
+ }
+ return i;
+ }
+
+ private static boolean isNewLine(char ch) {
+ return (
+ (ch == '\u2028') ||
+ (ch == '\u2029') ||
+ (ch == '\u0085') ||
+ (ch == '\n') ||
+ (ch == '\r')
+ );
+ }
+}
diff --git a/java/md2html/Code.java b/java/md2html/Code.java
new file mode 100644
index 0000000..7fac999
--- /dev/null
+++ b/java/md2html/Code.java
@@ -0,0 +1,11 @@
+package md2html;
+
+import java.util.List;
+import markup.*;
+
+public class Code extends AbstractMarkup implements PartOfParagraph {
+
+ public Code(List items) {
+ super(items, "'", "code", "", "");
+ }
+}
diff --git a/java/md2html/Del.java b/java/md2html/Del.java
new file mode 100644
index 0000000..a3baeb5
--- /dev/null
+++ b/java/md2html/Del.java
@@ -0,0 +1,11 @@
+package md2html;
+
+import java.util.List;
+import markup.*;
+
+public class Del extends AbstractMarkup implements PartOfParagraph {
+
+ public Del(List items) {
+ super(items, "}}", "del", "", "");
+ }
+}
diff --git a/java/md2html/Header.java b/java/md2html/Header.java
new file mode 100644
index 0000000..c87ccd7
--- /dev/null
+++ b/java/md2html/Header.java
@@ -0,0 +1,11 @@
+package md2html;
+
+import java.util.List;
+import markup.*;
+
+public class Header extends AbstractMarkup implements PrimePart {
+
+ public Header(List items, int level) {
+ super(items, "#".repeat(level), "h" + level, "", "");
+ }
+}
diff --git a/java/md2html/Ins.java b/java/md2html/Ins.java
new file mode 100644
index 0000000..126ce00
--- /dev/null
+++ b/java/md2html/Ins.java
@@ -0,0 +1,11 @@
+package md2html;
+
+import java.util.List;
+import markup.*;
+
+public class Ins extends AbstractMarkup implements PartOfParagraph {
+
+ public Ins(List items) {
+ super(items, "<<", "ins", "", "");
+ }
+}