diff --git a/java/markup/AbstractList.java b/java/markup/AbstractList.java new file mode 100644 index 0000000..d082201 --- /dev/null +++ b/java/markup/AbstractList.java @@ -0,0 +1,47 @@ +package markup; + +import java.util.List; + +/** + * @author Nikita Doschennikov (me@fymio.us) + */ +public abstract class AbstractList implements ContainsInListItem { + + private final List items; + private final String highlight; + private final String texBegin; + private final String texEnd; + + protected AbstractList( + List items, + String highlight, + String texBegin, + String texEnd + ) { + this.items = items; + this.highlight = highlight; + this.texBegin = texBegin; + this.texEnd = texEnd; + } + + @Override + public void toHtml(StringBuilder sb) { + sb.append("<").append(highlight).append(">"); + for (ListItem item : items) { + item.toHtml(sb); + } + sb.append(""); + } + + @Override + public void toMarkdown(StringBuilder sb) {} + + @Override + public void toTex(StringBuilder sb) { + sb.append(texBegin); + for (ListItem item : items) { + item.toTex(sb); + } + sb.append(texEnd); + } +} diff --git a/java/markup/AbstractMarkup.java b/java/markup/AbstractMarkup.java new file mode 100644 index 0000000..216689f --- /dev/null +++ b/java/markup/AbstractMarkup.java @@ -0,0 +1,66 @@ +package markup; + +import java.util.List; + +/** + * @author Nikita Doschennikov (me@fymio.us) + */ +public abstract class AbstractMarkup implements Markdown, Html, Tex { + + protected final List items; + private final String highlightMarkdown; + private final String highlightHtml; + private final String highlightTexOpen; + private final String highlightTexClose; + + protected AbstractMarkup( + List items, + String highlightMarkdown, + String highlightHtml, + String highlightTexOpen, + String highlightTexClose + ) { + this.items = items; + this.highlightMarkdown = highlightMarkdown; + this.highlightHtml = highlightHtml; + this.highlightTexOpen = highlightTexOpen; + this.highlightTexClose = highlightTexClose; + } + + @Override + public void toMarkdown(StringBuilder sb) { + sb.append(highlightMarkdown); + for (Markup item : items) { + item.toMarkdown(sb); + } + sb.append(highlightMarkdown); + } + + @Override + public void toHtml(StringBuilder sb) { + if (!highlightHtml.isEmpty()) { + sb.append("<").append(highlightHtml).append(">"); + } + for (Markup item : items) { + item.toHtml(sb); + } + if (!highlightHtml.isEmpty()) { + sb.append(""); + } + } + + @Override + public void toTex(StringBuilder sb) { + sb.append(highlightTexOpen); + for (Markup item : items) { + if (item instanceof Text) { + ((Text) item).toTex(sb); + } else if (item instanceof AbstractMarkup) { + ((AbstractMarkup) item).toTex(sb); + } else if (item instanceof AbstractList) { + ((AbstractList) item).toTex(sb); + } + } + sb.append(highlightTexClose); + } +} diff --git a/java/markup/ContainsInListItem.java b/java/markup/ContainsInListItem.java new file mode 100644 index 0000000..585b427 --- /dev/null +++ b/java/markup/ContainsInListItem.java @@ -0,0 +1,6 @@ +package markup; + +/** + * @author Nikita Doschennikov (me@fymio.us) + */ +public interface ContainsInListItem extends Markup {} diff --git a/java/markup/Emphasis.java b/java/markup/Emphasis.java new file mode 100644 index 0000000..c2d0feb --- /dev/null +++ b/java/markup/Emphasis.java @@ -0,0 +1,13 @@ +package markup; + +import java.util.List; + +/** + * @author Nikita Doschennikov (me@fymio.us) + */ +public class Emphasis extends AbstractMarkup implements PartOfParagraph { + + public Emphasis(List items) { + super(items, "*", "em", "\\emph{", "}"); + } +} diff --git a/java/markup/Html.java b/java/markup/Html.java new file mode 100644 index 0000000..d8168d7 --- /dev/null +++ b/java/markup/Html.java @@ -0,0 +1,8 @@ +package markup; + +/** + * @author Nikita Doschennikov (me@fymio.us) + */ +public interface Html { + void toHtml(StringBuilder sb); +}