}
@Override
public int processLineContent(String line,int offset) {
if (blockLineCount == 0) {
Attributes attributes = new Attributes();
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 (dialect.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);
boolean header = headerIndicator != null && ("_".equals(headerIndicator) || "|".equals(headerIndicator));
String textAlign = null;
if (alignment != null) {
if (alignment.equals("<>")) {
textAlign = "text-align: center;";
} else if (alignment.equals(">")) {
textAlign = "text-align: right;";
} else if (alignment.equals("<")) {
textAlign = "text-align: left;";
} else if (alignment.equals("^")) {
textAlign = "text-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);