use of org.eclipse.mylyn.wikitext.parser.TableCellAttributes in project mylyn.docs by eclipse.
the class TableBlock method handleCellContent.
private void handleCellContent(String fullCellContent, int positionInLine) {
closeCellBlockIfNeeded();
String cellContent = fullCellContent.trim();
String blockContent;
if (format == TableFormat.COMMA_SEPARATED_VALUES) {
if (cellContent.startsWith("\"") && cellContent.endsWith("\"")) {
blockContent = cellContent.substring(1, cellContent.length() - 1).replaceAll("\"\"", "\"");
} else {
blockContent = cellContent;
}
} else {
String delimiter = getCellSeparator();
// $NON-NLS-1$
blockContent = cellContent.replaceAll("\\\\" + Pattern.quote(delimiter), delimiter);
}
if (isColFormatKnown() && cellsCount % colsAttribute.size() == 0) {
TableRowAttributes tableRowAttributes = new TableRowAttributes();
builder.beginBlock(BlockType.TABLE_ROW, tableRowAttributes);
}
TableCellAttributes attributes;
if (colsAttribute.isEmpty()) {
attributes = new TableCellAttributes();
} else {
attributes = colsAttribute.get(cellsCount % colsAttribute.size());
}
if (hasHeader && isFirstRow()) {
builder.beginBlock(BlockType.TABLE_CELL_HEADER, attributes);
} else {
builder.beginBlock(BlockType.TABLE_CELL_NORMAL, attributes);
}
cellBlockIsOpen = true;
int offset = fullCellContent.indexOf(cellContent);
markupLanguage.emitMarkupLine(parser, state, offset + positionInLine, blockContent, 0);
}
use of org.eclipse.mylyn.wikitext.parser.TableCellAttributes in project mylyn.docs by eclipse.
the class LanguageSupport method convertToTableCellAttributes.
private static TableCellAttributes convertToTableCellAttributes(String columnFormat) {
TableCellAttributes result = new TableCellAttributes();
Matcher alignMatcher = ALIGN_PATTERN.matcher(columnFormat);
int start = 0;
while (alignMatcher.find(start)) {
String align = alignMatcher.group(2);
if (".".equals(alignMatcher.group(1))) {
// $NON-NLS-1$
if ("<".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setValign("top");
} else if ("^".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setValign("middle");
} else if (">".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setValign("bottom");
}
} else {
if ("<".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setAlign("left");
} else if ("^".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setAlign("center");
} else if (">".equals(align)) {
// $NON-NLS-1$
// $NON-NLS-1$
result.setAlign("right");
}
}
start = alignMatcher.end();
}
return result;
}
use of org.eclipse.mylyn.wikitext.parser.TableCellAttributes in project mylyn.docs by eclipse.
the class TableBlock method processLineContent.
@Override
public int processLineContent(String line, int offset) {
if (blockLineCount++ == 0) {
TableAttributes attributes = new TableAttributes();
// first line opens table
String options = matcher.group(1);
if (options != null) {
Matcher optionsMatcher = optionsPattern.matcher(options);
while (optionsMatcher.find()) {
String optionName = optionsMatcher.group(1);
String optionValue = optionsMatcher.group(2);
if (optionName.equalsIgnoreCase("id")) {
// $NON-NLS-1$
attributes.setId(optionValue);
} else if (optionName.equalsIgnoreCase("style")) {
// $NON-NLS-1$
attributes.setCssStyle(optionValue);
} else if (optionName.equalsIgnoreCase("class")) {
// $NON-NLS-1$
attributes.setCssClass(optionValue);
} else if (optionName.equalsIgnoreCase("title")) {
// $NON-NLS-1$
attributes.setTitle(optionValue);
} else if (optionName.equalsIgnoreCase("border")) {
// $NON-NLS-1$
attributes.setBorder(optionValue);
} else if (optionName.equalsIgnoreCase("summary")) {
// $NON-NLS-1$
attributes.setSummary(optionValue);
} else if (optionName.equalsIgnoreCase("width")) {
// $NON-NLS-1$
attributes.setWidth(optionValue);
} else if (optionName.equalsIgnoreCase("frame")) {
// $NON-NLS-1$
attributes.setFrame(optionValue);
} else if (optionName.equalsIgnoreCase("rules")) {
// $NON-NLS-1$
attributes.setRules(optionValue);
} else if (optionName.equalsIgnoreCase("cellspacing")) {
// $NON-NLS-1$
attributes.setCellspacing(optionValue);
} else if (optionName.equalsIgnoreCase("cellpadding")) {
// $NON-NLS-1$
attributes.setCellpadding(optionValue);
} else if (optionName.equalsIgnoreCase("bgcolor")) {
// $NON-NLS-1$
attributes.setBgcolor(optionValue);
}
}
}
builder.beginBlock(BlockType.TABLE, attributes);
// table open line never has cells
return -1;
} else {
Matcher newRowMatcher = newRowPattern.matcher(line);
if (newRowMatcher.matches()) {
TableRowAttributes attributes = new TableRowAttributes();
String newRowOptions = newRowMatcher.group(1);
if (newRowOptions != null) {
Matcher optionsMatcher = optionsPattern.matcher(newRowOptions);
while (optionsMatcher.find()) {
String optionName = optionsMatcher.group(1);
String optionValue = optionsMatcher.group(2);
if (optionName.equalsIgnoreCase("id")) {
// $NON-NLS-1$
attributes.setId(optionValue);
} else if (optionName.equalsIgnoreCase("style")) {
// $NON-NLS-1$
attributes.setCssStyle(optionValue);
} else if (optionName.equalsIgnoreCase("class")) {
// $NON-NLS-1$
attributes.setCssClass(optionValue);
} else if (optionName.equalsIgnoreCase("title")) {
// $NON-NLS-1$
attributes.setTitle(optionValue);
} else if (optionName.equalsIgnoreCase("align")) {
// $NON-NLS-1$
attributes.setAlign(optionValue);
} else if (optionName.equalsIgnoreCase("valign")) {
// $NON-NLS-1$
attributes.setValign(optionValue);
} else if (optionName.equalsIgnoreCase("bgcolor")) {
// $NON-NLS-1$
attributes.setBgcolor(optionValue);
}
}
}
openRow(newRowMatcher.start(), attributes);
return -1;
} else {
Matcher endMatcher = endPattern.matcher(line);
if (endMatcher.matches()) {
setClosed(true);
return endMatcher.start(1);
} else {
Matcher cellMatcher = cellPattern.matcher(line);
if (cellMatcher.matches()) {
String kind = cellMatcher.group(1);
// $NON-NLS-1$
BlockType type = ("!".equals(kind)) ? BlockType.TABLE_CELL_HEADER : BlockType.TABLE_CELL_NORMAL;
String contents = cellMatcher.group(2);
if (contents == null) {
// cell was just opened, no cell options.
openCell(cellMatcher.start(), type, new TableCellAttributes());
return -1;
}
int contentsStart = cellMatcher.start(2);
emitCells(contentsStart, type, contents);
return -1;
} else {
// in case of cells this will be handled with NestedBlocks
return -1;
}
}
}
}
}
use of org.eclipse.mylyn.wikitext.parser.TableCellAttributes in project mylyn.docs by eclipse.
the class SplittingHtmlDocumentBuilder method emitNavigation.
private void emitNavigation(boolean header) {
String currentName = currentFile.getName();
List<SplitOutlineItem> pageOrder = outline.getPageOrder();
SplitOutlineItem previous = null;
SplitOutlineItem next = null;
SplitOutlineItem current = null;
boolean foundPage = false;
for (SplitOutlineItem page : pageOrder) {
if (page.getSplitTarget().equals(currentName)) {
foundPage = true;
current = page;
} else if (!foundPage) {
previous = page;
} else {
next = page;
break;
}
}
boolean rootPage = rootFile.getName().equals(currentFile.getName());
if (next == null && previous == null && rootPage) {
return;
}
if (!header) {
// $NON-NLS-1$
out.charactersUnescaped("<hr class=\"navigation-separator\"/>");
}
TableAttributes tableAttributes = new TableAttributes();
// $NON-NLS-1$
tableAttributes.setCssClass("navigation");
// $NON-NLS-1$
tableAttributes.setCssStyle("width: 100%;");
// $NON-NLS-1$
tableAttributes.setBorder("0");
// $NON-NLS-1$
tableAttributes.setSummary("navigation");
out.beginBlock(BlockType.TABLE, tableAttributes);
TableCellAttributes tableCellAttributes;
if (header) {
// header row, emit title of page
out.beginBlock(BlockType.TABLE_ROW, new Attributes());
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("center");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 100%");
// $NON-NLS-1$
tableCellAttributes.setColspan("3");
out.beginBlock(BlockType.TABLE_CELL_HEADER, tableCellAttributes);
if (rootPage) {
out.characters(rootBuilder.getTitle());
} else {
// $NON-NLS-1$
out.characters(current == null ? "" : current.getLabel());
}
out.endBlock();
out.endBlock();
}
// navigation row
out.beginBlock(BlockType.TABLE_ROW, new Attributes());
LinkAttributes linkAttributes;
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("left");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 20%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
if (previous != null) {
linkAttributes = new LinkAttributes();
linkAttributes.setTitle(previous.getLabel());
if (navigationImages) {
ImageAttributes imageAttributes = new ImageAttributes();
// $NON-NLS-1$
imageAttributes.setAlt(Messages.getString("SplittingHtmlDocumentBuilder.Previous"));
out.imageLink(linkAttributes, imageAttributes, previous.getSplitTarget(), // $NON-NLS-1$
computeNavImagePath(Messages.getString("SplittingHtmlDocumentBuilder.Previous_Image")));
} else {
out.link(linkAttributes, previous.getSplitTarget(), // $NON-NLS-1$
Messages.getString("SplittingHtmlDocumentBuilder.Previous"));
}
}
out.endBlock();
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("center");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 60%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
if (!header && !rootPage) {
linkAttributes = new LinkAttributes();
linkAttributes.setTitle(rootBuilder.getTitle());
if (navigationImages) {
ImageAttributes imageAttributes = new ImageAttributes();
imageAttributes.setAlt(rootBuilder.getTitle());
out.imageLink(linkAttributes, imageAttributes, rootFile.getName(), // $NON-NLS-1$
computeNavImagePath(Messages.getString("SplittingHtmlDocumentBuilder.Home_Image")));
} else {
// $NON-NLS-1$
out.link(linkAttributes, rootFile.getName(), Messages.getString("SplittingHtmlDocumentBuilder.Home"));
}
}
out.endBlock();
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("right");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 20%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
if (next != null) {
linkAttributes = new LinkAttributes();
linkAttributes.setTitle(next.getLabel());
if (navigationImages) {
ImageAttributes imageAttributes = new ImageAttributes();
// $NON-NLS-1$
imageAttributes.setAlt(Messages.getString("SplittingHtmlDocumentBuilder.Next"));
out.imageLink(linkAttributes, imageAttributes, next.getSplitTarget(), // $NON-NLS-1$
computeNavImagePath(Messages.getString("SplittingHtmlDocumentBuilder.Next_Image")));
} else {
out.link(linkAttributes, next.getSplitTarget(), // $NON-NLS-1$
Messages.getString("SplittingHtmlDocumentBuilder.Next"));
}
}
out.endBlock();
// navigation row
out.endBlock();
// navigation title row
out.beginBlock(BlockType.TABLE_ROW, new Attributes());
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("left");
// $NON-NLS-1$
tableCellAttributes.setValign("top");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 20%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
if (previous != null) {
out.characters(previous.getLabel());
}
out.endBlock();
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("center");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 60%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
out.endBlock();
tableCellAttributes = new TableCellAttributes();
// $NON-NLS-1$
tableCellAttributes.setAlign("right");
// $NON-NLS-1$
tableCellAttributes.setValign("top");
// $NON-NLS-1$
tableCellAttributes.setCssStyle("width: 20%");
out.beginBlock(BlockType.TABLE_CELL_NORMAL, tableCellAttributes);
if (next != null) {
out.characters(next.getLabel());
}
out.endBlock();
// navigation title row
out.endBlock();
// table
out.endBlock();
if (header) {
// $NON-NLS-1$
out.charactersUnescaped("<hr class=\"navigation-separator\"/>");
}
}
use of org.eclipse.mylyn.wikitext.parser.TableCellAttributes in project mylyn.docs by eclipse.
the class TableBlock method processLineContent.
@Override
public int processLineContent(String line, int offset) {
if (blockLineCount == 0) {
TableAttributes attributes = new TableAttributes();
if (matcher.group(1) != null) {
// 0-offset matches may start with the "table. " prefix.
Textile.configureAttributes(attributes, matcher, 2, true);
offset = line.length();
}
builder.beginBlock(BlockType.TABLE, attributes);
} else if (markupLanguage.isEmptyLine(line)) {
setClosed(true);
return 0;
}
++blockLineCount;
if (offset == line.length()) {
return -1;
}
String textileLine = offset == 0 ? line : line.substring(offset);
Matcher rowMatcher = TABLE_ROW_PATTERN.matcher(textileLine);
if (!rowMatcher.find()) {
setClosed(true);
return 0;
}
{
TableRowAttributes rowAttributes = new TableRowAttributes();
int rowStart = rowMatcher.start();
if (rowStart > 0) {
// if the row content starts somewhere in the line then it's likely
// that we have some row-level attributes
Matcher rowAttributesMatcher = rowAttributesPattern.matcher(textileLine);
if (rowAttributesMatcher.matches()) {
Textile.configureAttributes(rowAttributes, rowAttributesMatcher, 1, true);
}
}
builder.beginBlock(BlockType.TABLE_ROW, rowAttributes);
}
do {
int start = rowMatcher.start();
if (start == textileLine.length() - 1) {
break;
}
String colSpan = rowMatcher.group(1);
String rowSpan = rowMatcher.group(2);
String alignment = rowMatcher.group(3);
String headerIndicator = rowMatcher.group(8);
String text = rowMatcher.group(9);
int textLineOffset = rowMatcher.start(9);
// $NON-NLS-1$ //$NON-NLS-2$
boolean header = headerIndicator != null && ("_".equals(headerIndicator) || "|".equals(headerIndicator));
String textAlign = null;
if (alignment != null) {
if (alignment.equals("<>")) {
// $NON-NLS-1$
// $NON-NLS-1$
textAlign = "text-align: center;";
} else if (alignment.equals(">")) {
// $NON-NLS-1$
// $NON-NLS-1$
textAlign = "text-align: right;";
} else if (alignment.equals("<")) {
// $NON-NLS-1$
// $NON-NLS-1$
textAlign = "text-align: left;";
} else if (alignment.equals("^")) {
// $NON-NLS-1$
// $NON-NLS-1$
textAlign = "vertical-align: top;";
}
}
TableCellAttributes attributes = new TableCellAttributes();
attributes.setCssStyle(textAlign);
attributes.setRowspan(rowSpan);
attributes.setColspan(colSpan);
Textile.configureAttributes(attributes, rowMatcher, 4, false);
state.setLineCharacterOffset(start);
builder.beginBlock(header ? BlockType.TABLE_CELL_HEADER : BlockType.TABLE_CELL_NORMAL, attributes);
markupLanguage.emitMarkupLine(getParser(), state, textLineOffset, CharMatcher.WHITESPACE.trimTrailingFrom(text), 0);
// table cell
builder.endBlock();
} while (rowMatcher.find());
// table row
builder.endBlock();
return -1;
}
Aggregations