Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,9 +1,22 @@
package org.commonmark.ext.gfm.strikethrough;

import org.commonmark.node.CustomNode;
import org.commonmark.node.Delimited;

/**
* A strikethrough node containing text and other inline nodes nodes as children.
*/
public class Strikethrough extends CustomNode {
public class Strikethrough extends CustomNode implements Delimited {

private static final String DELIMITER = "~~";

@Override
public String getOpeningDelimiter() {
return DELIMITER;
}

@Override
public String getClosingDelimiter() {
return DELIMITER;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,16 @@

import org.commonmark.Extension;
import org.commonmark.html.HtmlRenderer;
import org.commonmark.node.Node;
import org.commonmark.parser.Parser;
import org.commonmark.test.RenderingTestCase;
import org.junit.Test;

import java.util.Collections;
import java.util.Set;

import static org.junit.Assert.assertEquals;

public class StrikethroughTest extends RenderingTestCase {

private static final Set<Extension> EXTENSIONS = Collections.singleton(StrikethroughExtension.create());
Expand Down Expand Up @@ -63,6 +66,14 @@ public void insideBlockQuote() {
"<blockquote>\n<p>strike <del>that</del></p>\n</blockquote>\n");
}

@Test
public void delimited() {
Node document = PARSER.parse("~~foo~~");
Strikethrough strikethrough = (Strikethrough) document.getFirstChild().getFirstChild();
assertEquals("~~", strikethrough.getOpeningDelimiter());
assertEquals("~~", strikethrough.getClosingDelimiter());
}

@Override
protected String render(String source) {
return RENDERER.render(PARSER.parse(source));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package org.commonmark.internal.inline;

import org.commonmark.parser.DelimiterProcessor;
import org.commonmark.node.Emphasis;
import org.commonmark.node.Node;
import org.commonmark.node.StrongEmphasis;
import org.commonmark.node.Text;
import org.commonmark.parser.DelimiterProcessor;

public abstract class EmphasisDelimiterProcessor implements DelimiterProcessor {

Expand All @@ -26,7 +26,10 @@ public int getDelimiterUse(int openerCount, int closerCount) {

@Override
public void process(Text opener, Text closer, int delimiterUse) {
Node emphasis = delimiterUse == 1 ? new Emphasis() : new StrongEmphasis();
String singleDelimiter = String.valueOf(getDelimiterChar());
Node emphasis = delimiterUse == 1
? new Emphasis(singleDelimiter)
: new StrongEmphasis(singleDelimiter + singleDelimiter);

Node tmp = opener.getNext();
while (tmp != null && tmp != closer) {
Expand Down
17 changes: 17 additions & 0 deletions commonmark/src/main/java/org/commonmark/node/Delimited.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package org.commonmark.node;

/**
* A node that uses delimiters in the source form (e.g. <code>*bold*</code>).
*/
public interface Delimited {

/**
* @return the opening (beginning) delimiter, e.g. <code>*</code>
*/
String getOpeningDelimiter();

/**
* @return the closing (ending) delimiter, e.g. <code>*</code>
*/
String getClosingDelimiter();
}
25 changes: 24 additions & 1 deletion commonmark/src/main/java/org/commonmark/node/Emphasis.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,29 @@
package org.commonmark.node;

public class Emphasis extends Node {
public class Emphasis extends Node implements Delimited {

private String delimiter;

public Emphasis() {
}

public Emphasis(String delimiter) {
this.delimiter = delimiter;
}

public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}

@Override
public String getOpeningDelimiter() {
return delimiter;
}

@Override
public String getClosingDelimiter() {
return delimiter;
}

@Override
public void accept(Visitor visitor) {
Expand Down
25 changes: 24 additions & 1 deletion commonmark/src/main/java/org/commonmark/node/StrongEmphasis.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,29 @@
package org.commonmark.node;

public class StrongEmphasis extends Node {
public class StrongEmphasis extends Node implements Delimited {

private String delimiter;

public StrongEmphasis() {
}

public StrongEmphasis(String delimiter) {
this.delimiter = delimiter;
}

public void setDelimiter(String delimiter) {
this.delimiter = delimiter;
}

@Override
public String getOpeningDelimiter() {
return delimiter;
}

@Override
public String getClosingDelimiter() {
return delimiter;
}

@Override
public void accept(Visitor visitor) {
Expand Down
54 changes: 54 additions & 0 deletions commonmark/src/test/java/org/commonmark/test/DelimitedTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package org.commonmark.test;

import org.commonmark.node.*;
import org.commonmark.parser.Parser;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

import static org.junit.Assert.assertEquals;

public class DelimitedTest {

@Test
public void emphasisDelimiters() {
String input = "* *emphasis* \n"
+ "* **strong** \n"
+ "* _important_ \n"
+ "* __CRITICAL__ \n";

Parser parser = Parser.builder().build();
Node document = parser.parse(input);

final List<Delimited> list = new ArrayList<>();
Visitor visitor = new AbstractVisitor() {
@Override
public void visit(Emphasis node) {
list.add(node);
}

@Override
public void visit(StrongEmphasis node) {
list.add(node);
}
};
document.accept(visitor);

assertEquals(4, list.size());

Delimited emphasis = list.get(0);
Delimited strong = list.get(1);
Delimited important = list.get(2);
Delimited critical = list.get(3);

assertEquals("*", emphasis.getOpeningDelimiter());
assertEquals("*", emphasis.getClosingDelimiter());
assertEquals("**", strong.getOpeningDelimiter());
assertEquals("**", strong.getClosingDelimiter());
assertEquals("_", important.getOpeningDelimiter());
assertEquals("_", important.getClosingDelimiter());
assertEquals("__", critical.getOpeningDelimiter());
assertEquals("__", critical.getClosingDelimiter());
}
}