Search in sources :

Example 1 with TableCellAttributes

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);
}
Also used : TableRowAttributes(org.eclipse.mylyn.wikitext.parser.TableRowAttributes) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes)

Example 2 with TableCellAttributes

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;
}
Also used : Matcher(java.util.regex.Matcher) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes)

Example 3 with TableCellAttributes

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;
                }
            }
        }
    }
}
Also used : TableRowAttributes(org.eclipse.mylyn.wikitext.parser.TableRowAttributes) Matcher(java.util.regex.Matcher) BlockType(org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType) TableAttributes(org.eclipse.mylyn.wikitext.parser.TableAttributes) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes)

Example 4 with TableCellAttributes

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\"/>");
    }
}
Also used : LinkAttributes(org.eclipse.mylyn.wikitext.parser.LinkAttributes) ImageAttributes(org.eclipse.mylyn.wikitext.parser.ImageAttributes) LinkAttributes(org.eclipse.mylyn.wikitext.parser.LinkAttributes) Attributes(org.eclipse.mylyn.wikitext.parser.Attributes) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes) TableAttributes(org.eclipse.mylyn.wikitext.parser.TableAttributes) TableAttributes(org.eclipse.mylyn.wikitext.parser.TableAttributes) ImageAttributes(org.eclipse.mylyn.wikitext.parser.ImageAttributes) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes)

Example 5 with TableCellAttributes

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;
}
Also used : TableRowAttributes(org.eclipse.mylyn.wikitext.parser.TableRowAttributes) Matcher(java.util.regex.Matcher) CharMatcher(com.google.common.base.CharMatcher) TableAttributes(org.eclipse.mylyn.wikitext.parser.TableAttributes) TableCellAttributes(org.eclipse.mylyn.wikitext.parser.TableCellAttributes)

Aggregations

TableCellAttributes (org.eclipse.mylyn.wikitext.parser.TableCellAttributes)6 Matcher (java.util.regex.Matcher)4 TableAttributes (org.eclipse.mylyn.wikitext.parser.TableAttributes)3 TableRowAttributes (org.eclipse.mylyn.wikitext.parser.TableRowAttributes)3 CharMatcher (com.google.common.base.CharMatcher)1 Attributes (org.eclipse.mylyn.wikitext.parser.Attributes)1 BlockType (org.eclipse.mylyn.wikitext.parser.DocumentBuilder.BlockType)1 ImageAttributes (org.eclipse.mylyn.wikitext.parser.ImageAttributes)1 LinkAttributes (org.eclipse.mylyn.wikitext.parser.LinkAttributes)1