package eu.svjatoslav.sixth.core.document.text;
-import eu.svjatoslav.commons.string.tokenizer.InvalidSyntaxException;
import eu.svjatoslav.commons.string.tokenizer.Terminator;
import eu.svjatoslav.commons.string.tokenizer.TokenizerMatch;
public class Hyperlink implements FormattedTextElement {
public static final Terminator orgTerminator =
- new Terminator(PRESERVE, "\\[\\[.*\\]\\]", TG_HYPERLINK);
+ new Terminator(PRESERVE, "\\[\\[([\\s\\S]+)\\][ \\t\\r\\n]*\\[([\\s\\S]+)\\]\\]", TG_HYPERLINK);
+
+ public static final Terminator orgTerminator2 =
+ new Terminator(PRESERVE, "\\[\\[([\\s\\S]+)\\]\\]", TG_HYPERLINK);
private String label;
private String URL;
@Override
- public String compileMd() {
- return "<URL: " + URL + ", LABEL: " + label + ">";
+ public String toMD() {
+
+ if (URL.startsWith("id:"))
+ return label; // TODO
+
+ return "[" + label + "]("+ URL + ")";
}
- public static Hyperlink fromOrg(TokenizerMatch tokenizerMatch) throws InvalidSyntaxException {
+ public static Hyperlink fromOrg(TokenizerMatch tokenizerMatch) {
Hyperlink hyperlink = new Hyperlink();
- hyperlink.parseOrgSyntax(tokenizerMatch);
+ hyperlink.parseOrg(tokenizerMatch);
return hyperlink;
}
- private void parseOrgSyntax(TokenizerMatch tokenizerMatch) throws InvalidSyntaxException {
-// Tokenizer tokenizer = new Tokenizer(tokenizerMatch.reminder);
-// Terminator linkSeparator = tokenizer.addTerminator("][", PRESERVE);
-//
-// URL = tokenizer.expectAndConsumeNextTerminatorToken(null).token;
-//
-// if (tokenizer.hasMoreContent()){ // link label is optional
-// tokenizer.expectAndConsumeNextTerminatorToken(linkSeparator);
-// label = tokenizer.expectAndConsumeNextTerminatorToken(null).token;
-// }
+ private void parseOrg(TokenizerMatch tokenizerMatch) {
+ String[] regExpGroups = tokenizerMatch.getRegExpGroups();
+ URL = regExpGroups[0];
+ if (tokenizerMatch.terminator == orgTerminator){
+ label = regExpGroups[1];
+ }
+
}
}