use of com.vladsch.flexmark.ext.abbreviation.Abbreviation in project flexmark-java by vsch.
the class AbbreviationNodePostProcessor method process.
@Override
public void process(NodeTracker state, Node node) {
if (abbreviations == null)
return;
BasedSequence original = node.getChars();
ReplacedTextMapper textMapper = new ReplacedTextMapper(original);
BasedSequence literal = Escaping.unescape(original, textMapper);
Matcher m = abbreviations.matcher(literal);
int lastEscaped = 0;
boolean wrapInTextBase = !(node.getParent() instanceof TextBase);
TextBase textBase = wrapInTextBase ? null : (TextBase) node.getParent();
while (m.find()) {
// String found = m.group();
if (abbreviationMap.containsKey(m.group(0))) {
BasedSequence abbreviation = abbreviationMap.get(m.group(0));
BasedSequence toDecorateText = literal.subSequence(m.start(0), m.end(0));
int startOffset = textMapper.originalOffset(m.start(0));
int endOffset = textMapper.originalOffset(m.end(0));
if (wrapInTextBase) {
wrapInTextBase = false;
textBase = new TextBase(original);
node.insertBefore(textBase);
state.nodeAdded(textBase);
}
if (startOffset != lastEscaped) {
BasedSequence escapedChars = original.subSequence(lastEscaped, startOffset);
Node node1 = new Text(escapedChars);
textBase.appendChild(node1);
state.nodeAdded(node1);
}
BasedSequence origToDecorateText = original.subSequence(startOffset, endOffset);
Abbreviation decorationNode = new Abbreviation(origToDecorateText, abbreviation);
textBase.appendChild(decorationNode);
// Text undecoratedTextNode = new Text(origToDecorateText);
// decorationNode.appendChild(undecoratedTextNode);
// state.nodeAddedWithChildren(decorationNode);
state.nodeAdded(decorationNode);
lastEscaped = endOffset;
}
}
if (lastEscaped > 0) {
if (lastEscaped != original.length()) {
BasedSequence escapedChars = original.subSequence(lastEscaped, original.length());
Node node1 = new Text(escapedChars);
textBase.appendChild(node1);
state.nodeAdded(node1);
}
node.unlink();
state.nodeRemoved(node);
}
}
Aggregations