use of org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType in project mylyn.docs by eclipse.
the class ListBlock method processLineContent.
@Override
public int processLineContent(String line, int offset) {
if (blockLineCount == 0) {
ListAttributes attributes = new ListAttributes();
String spaces = matcher.group(1);
String listSpec = matcher.group(2);
String numericListSpec = matcher.group(3);
if (numericListSpec != null && !"1".equals(numericListSpec)) {
// $NON-NLS-1$
attributes.setStart(numericListSpec);
}
int level = calculateLevel(spaces);
BlockType type = listSpec == null ? BlockType.NUMERIC_LIST : BlockType.BULLETED_LIST;
offset = matcher.start(LINE_REMAINDER_GROUP_OFFSET);
listState.push(new ListState(level, spaces.length(), offset, type));
builder.beginBlock(type, attributes);
} else {
ListAttributes attributes = new ListAttributes();
Matcher matcher = startPattern.matcher(line);
if (!matcher.matches()) {
Matcher nextLineMatcher = nextLinePattern.matcher(line);
ListState listState = this.listState.peek();
if (listState.openItem && nextLineMatcher.matches()) {
String spaces = nextLineMatcher.group(1);
if (spaces.length() > 0 && spaces.length() >= listState.numSpaces && spaces.length() <= listState.lineRemainderStart) {
++blockLineCount;
offset = nextLineMatcher.start(2) - 1;
markupLanguage.emitMarkupLine(getParser(), state, line, offset);
return -1;
}
}
setClosed(true);
return 0;
}
String spaces = matcher.group(1);
String listSpec = matcher.group(2);
String numericListSpec = matcher.group(3);
if (numericListSpec != null && !"1".equals(numericListSpec)) {
// $NON-NLS-1$
attributes.setStart(numericListSpec);
}
int level = calculateLevel(spaces);
BlockType type = listSpec == null ? BlockType.NUMERIC_LIST : BlockType.BULLETED_LIST;
offset = matcher.start(LINE_REMAINDER_GROUP_OFFSET);
for (ListState listState = this.listState.peek(); listState.level != level || listState.type != type; listState = this.listState.peek()) {
if (listState.level > level || (listState.level == level && listState.type != type)) {
closeOne();
if (this.listState.isEmpty()) {
this.listState.push(new ListState(1, spaces.length(), offset, type));
builder.beginBlock(type, attributes);
}
} else {
this.listState.push(new ListState(level, spaces.length(), offset, type));
builder.beginBlock(type, attributes);
}
}
}
++blockLineCount;
ListState listState = this.listState.peek();
if (listState.openItem) {
builder.endBlock();
}
listState.openItem = true;
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
markupLanguage.emitMarkupLine(getParser(), state, line, offset);
return -1;
}
use of org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType in project mylyn.docs by eclipse.
the class BlockStrategiesTest method fallBackToNoOp.
@Test
public void fallBackToNoOp() {
BlockStrategies strategies = new BlockStrategies(Sets.newHashSet(BlockType.PARAGRAPH));
List<BlockType> unsupportedBlockTypes = ImmutableList.of(BlockType.TABLE, BlockType.BULLETED_LIST, BlockType.NUMERIC_LIST, BlockType.DEFINITION_LIST);
for (BlockType blockType : unsupportedBlockTypes) {
BlockStrategy strategy = strategies.getStrategy(blockType, new Attributes());
assertNotNull(strategy);
assertTrue(NoOpBlockStrategy.class.equals(strategy.getClass()));
}
}
use of org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType in project mylyn.docs by eclipse.
the class ListBlock method processLineContent.
@Override
public int processLineContent(String line, int offset) {
boolean continuation = false;
if (blockLineCount == 0) {
listState = new Stack<ListState>();
String listSpec = matcher.group(1);
int level = calculateLevel(listSpec);
BlockType type = calculateType(listSpec.charAt(0));
offset = matcher.start(2);
listState.push(new ListState(1, type));
builder.beginBlock(type, new Attributes());
adjustLevel(level, type);
} else {
Matcher matcher = pattern.matcher(line);
if (!matcher.matches()) {
setClosed(true);
return 0;
}
String listSpec = matcher.group(1);
int lineLevel = calculateLevel(listSpec);
BlockType type = calculateType(listSpec.charAt(0));
offset = matcher.start(2);
continuation = adjustLevel(lineLevel, type);
}
++blockLineCount;
ListState listState = this.listState.peek();
if (!continuation && listState.openItem) {
listState.openItem = false;
builder.endBlock();
}
if (!listState.openItem) {
listState.openItem = true;
builder.beginBlock(BlockType.LIST_ITEM, new Attributes());
}
markupLanguage.emitMarkupLine(getParser(), state, line, offset);
return -1;
}
use of org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType in project mylyn.docs by eclipse.
the class MarkupEditor method updatePreview.
/**
* updates the preview and optionally reveal the section that corresponds to the given outline item.
*
* @param outlineItem
* the outline item, or null
*/
private void updatePreview(final OutlineItem outlineItem) {
if (previewDirty && browser != null) {
Object result = null;
try {
result = browser.evaluate(JAVASCRIPT_GETSCROLLTOP);
} catch (SWTException e) {
// bug 517281 javascript fails for some Linux configurations
logPreviewScrollingFailure(e);
}
final int verticalScrollbarPos = result != null ? ((Number) result).intValue() : 0;
String xhtml = null;
if (document == null) {
// $NON-NLS-1$
xhtml = "<?xml version=\"1.0\" ?><html xmlns=\"http://www.w3.org/1999/xhtml\"><body></body></html>";
} else {
try {
IFile file = getFile();
// $NON-NLS-1$
String title = file == null ? "" : file.getName();
if (title.lastIndexOf('.') != -1) {
title = title.substring(0, title.lastIndexOf('.'));
}
StringWriter writer = new StringWriter();
HtmlDocumentBuilder builder = new HtmlDocumentBuilder(writer) {
@Override
protected void emitAnchorHref(String href) {
if (href != null && href.startsWith("#")) {
// $NON-NLS-1$
// $NON-NLS-1$
writer.writeAttribute(// $NON-NLS-1$
"onclick", // $NON-NLS-1$
String.format("javascript: window.location.hash = '%s'; return false;", href));
// $NON-NLS-1$//$NON-NLS-2$
writer.writeAttribute("href", "#");
} else {
super.emitAnchorHref(href);
}
}
@Override
public void beginHeading(int level, Attributes attributes) {
attributes.appendCssClass(CSS_CLASS_EDITOR_PREVIEW);
super.beginHeading(level, attributes);
}
@Override
public void beginBlock(BlockType type, Attributes attributes) {
attributes.appendCssClass(CSS_CLASS_EDITOR_PREVIEW);
super.beginBlock(type, attributes);
}
};
builder.setTitle(title);
IPath location = file == null ? null : file.getLocation();
if (location != null) {
builder.setBaseInHead(true);
builder.setBase(location.removeLastSegments(1).toFile().toURI());
}
String css = WikiTextUiPlugin.getDefault().getPreferences().getMarkupViewerCss();
if (css != null && css.length() > 0) {
builder.addCssStylesheet(new HtmlDocumentBuilder.Stylesheet(new StringReader(css)));
}
MarkupLanguage markupLanguage = getMarkupLanguage();
if (markupLanguage != null) {
markupLanguage = markupLanguage.clone();
if (markupLanguage instanceof AbstractMarkupLanguage) {
((AbstractMarkupLanguage) markupLanguage).setEnableMacros(true);
}
if (markupLanguage instanceof AbstractMarkupLanguage) {
AbstractMarkupLanguage language = (AbstractMarkupLanguage) markupLanguage;
language.setFilterGenerativeContents(false);
language.setBlocksOnly(false);
}
MarkupParser markupParser = new MarkupParser();
markupParser.setBuilder(builder);
markupParser.setMarkupLanguage(markupLanguage);
markupParser.parse(document.get());
} else {
builder.beginDocument();
builder.beginBlock(BlockType.PREFORMATTED, new Attributes());
builder.characters(document.get());
builder.endBlock();
builder.endDocument();
}
xhtml = writer.toString();
} catch (Exception e) {
StringWriter stackTrace = new StringWriter();
PrintWriter writer = new PrintWriter(stackTrace);
e.printStackTrace(writer);
writer.close();
StringWriter documentWriter = new StringWriter();
HtmlDocumentBuilder builder = new HtmlDocumentBuilder(documentWriter);
builder.beginDocument();
builder.beginBlock(BlockType.PREFORMATTED, new Attributes());
builder.characters(stackTrace.toString());
builder.endBlock();
builder.endDocument();
xhtml = documentWriter.toString();
}
}
browser.addProgressListener(new ProgressAdapter() {
@Override
public void completed(ProgressEvent event) {
browser.removeProgressListener(this);
if (outlineItem != null) {
revealInBrowser(outlineItem);
} else {
// $NON-NLS-1$
browser.execute(String.format("window.scrollTo(0,%d);", verticalScrollbarPos));
}
}
});
browser.setText(xhtml);
previewDirty = false;
} else if (outlineItem != null && browser != null) {
revealInBrowser(outlineItem);
}
}
Aggregations