in src/main/java/com/atlassian/uwc/converters/mediawiki/TableConverter.java [114:173]
protected String getReplacement(String input) {
input = input.replaceFirst(UNTIL_NL_PIPE_OR_BANG, "");
input = input.trim();
Matcher rowFinder = row.matcher(input);
StringBuffer sb = new StringBuffer();
boolean found = false;
String end = "";
String cToken = "";
boolean first = true;
while (rowFinder.find()) {
found = true;
String delim = rowFinder.group(1);
Context context = Context.getContext(delim);
String content = rowFinder.group(2);
content = content.replaceAll("(?<=[!|]) +(?=\n)", "");
content = content.replaceAll("(?<![!|])\n(?![!|])", TOKEN_NL);
String replacement = "";
switch (context) {
case CAPTION:
if (sb.toString().equals("")) {
content = cleanMacros(content);
replacement += "{panel:title="+content+CAPTION_PARAMS + "}\n";
end += "{panel}";
}
else {
cToken = CELL_DELIM;
replacement = handleCell(cToken, content, replacement);
}
break;
case ROW:
content = content.trim();
content = content.replaceFirst("^\\Q" + TOKEN_NL + "\\E", "");
content = content.replaceFirst("\\Q" + TOKEN_NL + "\\E$", "");
boolean needNL = (!sb.toString().endsWith("\n"));
if (!first) replacement += cToken + (needNL?"\n":"");
if ("".equals(content)) break; //otherwise, fall into the CELL handling
case CELL:
if ("}".equals(content)) break; //ending an inner table - edge case.
cToken = CELL_DELIM;
replacement = handleCell(cToken, content, replacement);
break;
case HEADER:
cToken = HEADER_DELIM;
replacement = handleCell(cToken, content, replacement);
break;
}
replacement = replacement.replaceAll("\\Q" + TOKEN_NL + "\\E", "\n");
replacement = RegexUtil.handleEscapesInReplacement(replacement);
rowFinder.appendReplacement(sb, replacement);
first = false;
}
if (found) {
if (!end.equals("")) end = "\n" + end;
if (endComplete.matcher(sb.toString()).find()) cToken = "";
sb.append(cToken + end);
rowFinder.appendTail(sb);
return sb.toString();
}
return input;
}