Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

Move TeX-specific classes into sub-package

AuthorDaveJarvis <email>
Date2020-09-13 14:23:16 GMT-0700
Commit4605e31c79ff888d1e9d68dab577b3db705bd2f4
Parent8171250
Delta132 lines added, 41 lines removed, 91-line increase
src/main/java/com/scrivenvar/processors/markdown/tex/TeXInlineDelimiterProcessor.java
+package com.scrivenvar.processors.markdown.tex;
+
+import com.vladsch.flexmark.parser.InlineParser;
+import com.vladsch.flexmark.parser.core.delimiter.Delimiter;
+import com.vladsch.flexmark.parser.delimiter.DelimiterProcessor;
+import com.vladsch.flexmark.parser.delimiter.DelimiterRun;
+import com.vladsch.flexmark.util.ast.Node;
+
+public class TeXInlineDelimiterProcessor implements DelimiterProcessor {
+
+ @Override
+ public void process( final Delimiter opener, final Delimiter closer,
+ final int delimitersUsed ) {
+ final var node = new TeXNode();
+ opener.moveNodesBetweenDelimitersTo(node, closer);
+ }
+
+ @Override
+ public char getOpeningCharacter() {
+ return '$';
+ }
+
+ @Override
+ public char getClosingCharacter() {
+ return '$';
+ }
+
+ @Override
+ public int getMinLength() {
+ return 1;
+ }
+
+ /**
+ * Allow for $ or $$.
+ *
+ * @param opener One or more opening delimiter characters.
+ * @param closer One or more closing delimiter characters.
+ * @return The number of delimiters to use to determine whether a valid
+ * opening delimiter expression is found.
+ */
+ @Override
+ public int getDelimiterUse(
+ final DelimiterRun opener, final DelimiterRun closer ) {
+ return 1;
+ }
+
+ @Override
+ public boolean canBeOpener( final String before,
+ final String after,
+ final boolean leftFlanking,
+ final boolean rightFlanking,
+ final boolean beforeIsPunctuation,
+ final boolean afterIsPunctuation,
+ final boolean beforeIsWhitespace,
+ final boolean afterIsWhiteSpace ) {
+ return leftFlanking;
+ }
+
+ @Override
+ public boolean canBeCloser( final String before,
+ final String after,
+ final boolean leftFlanking,
+ final boolean rightFlanking,
+ final boolean beforeIsPunctuation,
+ final boolean afterIsPunctuation,
+ final boolean beforeIsWhitespace,
+ final boolean afterIsWhiteSpace ) {
+ return rightFlanking;
+ }
+
+ @Override
+ public Node unmatchedDelimiterNode(
+ final InlineParser inlineParser, final DelimiterRun delimiter ) {
+ return null;
+ }
+
+ @Override
+ public boolean skipNonOpenerCloser() {
+ return false;
+ }
+}
src/main/java/com/scrivenvar/processors/markdown/tex/TeXNode.java
+package com.scrivenvar.processors.markdown.tex;
+
+import com.vladsch.flexmark.ast.DelimitedNodeImpl;
+
+public class TeXNode extends DelimitedNodeImpl {
+
+ public TeXNode() {
+ }
+
+}
src/main/java/com/scrivenvar/processors/markdown/tex/TeXNodeRenderer.java
+package com.scrivenvar.processors.markdown.tex;
+
+import com.vladsch.flexmark.html.HtmlWriter;
+import com.vladsch.flexmark.html.renderer.NodeRenderer;
+import com.vladsch.flexmark.html.renderer.NodeRendererContext;
+import com.vladsch.flexmark.html.renderer.NodeRendererFactory;
+import com.vladsch.flexmark.html.renderer.NodeRenderingHandler;
+import com.vladsch.flexmark.util.data.DataHolder;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import java.util.HashSet;
+import java.util.Set;
+
+public class TeXNodeRenderer implements NodeRenderer {
+
+ public static class Factory implements NodeRendererFactory {
+ @NotNull
+ @Override
+ public NodeRenderer apply( @NotNull DataHolder options ) {
+ return new TeXNodeRenderer();
+ }
+ }
+
+ @Override
+ public @Nullable Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
+ final Set<NodeRenderingHandler<?>> set = new HashSet<>();
+ set.add( new NodeRenderingHandler<>(
+ TeXNode.class, this::render ) );
+
+ return set;
+ }
+
+ private void render( final TeXNode node,
+ final NodeRendererContext context,
+ final HtmlWriter html ) {
+ html.tag( "tex" );
+ html.raw( node.getText() );
+ html.closeTag( "tex" );
+ }
+}
src/main/java/com/scrivenvar/processors/markdown/TeXNodeRenderer.java
-package com.scrivenvar.processors.markdown;
-
-import com.vladsch.flexmark.html.HtmlWriter;
-import com.vladsch.flexmark.html.renderer.NodeRenderer;
-import com.vladsch.flexmark.html.renderer.NodeRendererContext;
-import com.vladsch.flexmark.html.renderer.NodeRendererFactory;
-import com.vladsch.flexmark.html.renderer.NodeRenderingHandler;
-import com.vladsch.flexmark.util.data.DataHolder;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-import java.util.HashSet;
-import java.util.Set;
-
-public class TeXNodeRenderer implements NodeRenderer {
-
- public static class Factory implements NodeRendererFactory {
- @NotNull
- @Override
- public NodeRenderer apply( @NotNull DataHolder options ) {
- return new TeXNodeRenderer();
- }
- }
-
- @Override
- public @Nullable Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
- final Set<NodeRenderingHandler<?>> set = new HashSet<>();
- set.add( new NodeRenderingHandler<>(
- TeXNode.class, this::render ) );
-
- return set;
- }
-
- private void render( final TeXNode node,
- final NodeRendererContext context,
- final HtmlWriter html ) {
- html.tag( "tex" );
- html.raw( node.getText() );
- html.closeTag( "tex" );
- }
-}