package de.ugoe.cs.swe.bnftools.ui.formatter;
import java.util.ArrayList;
import java.util.Iterator;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.parsetree.LeafNode;
import org.eclipse.xtext.parsetree.NodeUtil;
import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
import de.ugoe.cs.swe.bnftools.ebnf.Import;
import de.ugoe.cs.swe.bnftools.ebnf.Rule;
import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
import de.ugoe.cs.swe.bnftools.ebnf.Term;
public class EbnfHtmlFormatterVisitor extends EbnfFormatterVisitor {
private ArrayList ");
}
result.append("\n \n");
isParagraphOpen = true;
} else {
metaText("\n
");
result.append(commentPrefix + currentComment.getText() + commentSuffix);
// result.append("\n");
result.append("\n
");
// result.append("
" + commentPrefix + stripEndingNewline(currentComment.getText()) + commentSuffix);
} else {
// result.append(" " + stripEndingNewline(currentComment.getText()));
result.append(" " + commentPrefix + stripEndingNewline(currentComment.getText()) + commentSuffix);
}
result.append(lastWhiteSpaces);
}
bufferPositionOriginalText+=currentComment.getLength();
allCommentsPosition++;
}
} else { // disaster handling: return original unformatted text!
System.err.println("Disaster Recovery: returning original text!!");
buf = new StringBuffer();
buf.append(originalText);
return;
}
} else {
while (lastMetaTextBlock == 0 && (currentMetaText != null) && (bufferPositionFormattedTextNoWhitespaces >= currentMetaText.getOffset())) {
result.append(currentMetaText.getText());
metaTexts.remove(currentMetaText);
if (metaTexts.iterator().hasNext())
currentMetaText = metaTexts.iterator().next();
else
currentMetaText = null;
if ((currentMetaText == null) && (bufferPositionFormattedTextNoWhitespaces != currentMetaText.getOffset()))
lastMetaTextBlock = 1;
}
if (currentTransformedText != null && currentTransformedText.getOffset() == bufferPositionFormattedTextNoWhitespaces) {
result.append(currentTransformedText.getTransformedText());
bufferPositionOriginalText += currentTransformedText.getText().length();
bufferPositionFormattedText += currentTransformedText.getText().length();
bufferPositionFormattedTextNoWhitespaces += currentTransformedText.getText().replaceAll("[ \t\r\n]", "").length();
transformedTexts.remove(currentTransformedText);
currentTransformedText = null;
if (transformedTexts.iterator().hasNext())
currentTransformedText = transformedTexts.iterator().next();
} else {
String text = formattedText.substring(bufferPositionFormattedText, bufferPositionFormattedText+1);
result.append(text);
bufferPositionOriginalText++;
bufferPositionFormattedText++;
bufferPositionFormattedTextNoWhitespaces++;
}
while ( lastMetaTextBlock == 1 && currentMetaText != null && bufferPositionFormattedTextNoWhitespaces >= currentMetaText.getOffset()) {
result.append(currentMetaText.getText());
metaTexts.remove(currentMetaText);
if (metaTexts.iterator().hasNext()) {
currentMetaText = metaTexts.iterator().next();
} else {
currentMetaText = null;
}
if ((currentMetaText == null) || (bufferPositionFormattedTextNoWhitespaces != currentMetaText.getOffset()))
lastMetaTextBlock = 0;
}
}
}
while ( bufferPositionFormattedTextNoWhitespaces >= formattedTextNoWhitespaces.length()-1 && currentMetaText != null) {
result.append(currentMetaText.getText());
metaTexts.remove(currentMetaText);
if (metaTexts.iterator().hasNext()) {
currentMetaText = metaTexts.iterator().next();
} else {
currentMetaText = null;
}
}
buf = result;
}
protected void metaText(String str) {
MetaTextEntry metaTextEntry = new MetaTextEntry(str, buf.toString().replaceAll("[ \t\n\r]", "").length());
metaTexts.add(metaTextEntry);
}
protected void textTransformed(String original, String transformed) {
MetaTextEntry metaText = new MetaTextEntry(original, transformed, buf.toString().replaceAll("[ \t\n\r]", "").length());
transformedTexts.add(metaText);
buf.append(original);
newLineOffsetCounter += original.length();
}
protected void newLine() {
buf.append("\n");
if (!isParagraphOpen) {
metaText("\n
\n"); isParagraphOpen = true; } } // ----------------------------------------------------------------------------- protected void visitBefore(EtsiBnf node) { parserEtsiBnfNode = NodeUtil.getNodeAdapter(node).getParserNode(); collectAllComments(parserEtsiBnfNode); originalText = NodeUtil.getNodeAdapter(node).getParserNode().serialize(); originalTextNoWhitespaces = originalText.replaceAll("[ \t\n\r]", ""); textTransformed("grammar " + node.getName(), ""); if (node.getType() != null) textTransformed(node.getType(), ""); textTransformed(";", ""); // metaText("
"); // metaText("