blob: 76ec28ffe7712d050e97df5452e64c939ccdae5d [file] [log] [blame]
package com.atlassian.uwc.converters.dokuwiki;
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.log4j.Logger;
import com.atlassian.uwc.converters.BaseConverter;
import com.atlassian.uwc.converters.tikiwiki.RegexUtil;
import com.atlassian.uwc.ui.Page;
import com.atlassian.uwc.ui.VersionPage;
public class TableRowColSpanConverter extends BaseConverter {
Logger log = Logger.getLogger(this.getClass());
@Override
public void convert(Page page) {
String input = page.getOriginalText();
String tmpconverted = convertColspans(input);
if (!(page instanceof VersionPage) && !input.equals(tmpconverted))
log.debug("Colspans detected: '" + page.getName() + "' in space: " + page.getSpacekey());
String converted = convertRowspans(tmpconverted);
if (!(page instanceof VersionPage) && !tmpconverted.equals(converted))
log.debug("Rowspans detected: '" + page.getName() + "' in space: " + page.getSpacekey());
page.setConvertedText(converted);
}
Pattern td = Pattern.compile("<t([dh])>(.*?)</t[dh]>", Pattern.DOTALL);
Pattern uwctokencolspan = Pattern.compile("::" + PrepColSpansConverter.TOKENKEY + "(\\d+)::");
protected String convertColspans(String input) {
Matcher tdFinder = td.matcher(input);
StringBuffer sb = new StringBuffer();
boolean found = false;
while (tdFinder.find()) {
found = true;
String type = tdFinder.group(1);
String row = tdFinder.group(2);
Matcher uwctokenFinder = uwctokencolspan.matcher(row);
boolean found2 = false;
String len = "";
StringBuffer sb2 = new StringBuffer();
while (uwctokenFinder.find()) {
found2 = true;
len = uwctokenFinder.group(1);
String rep2= RegexUtil.handleEscapesInReplacement("");
uwctokenFinder.appendReplacement(sb2, rep2);
}
if (found2) {
uwctokenFinder.appendTail(sb2);
row = sb2.toString();
}
else continue;
String replacement = "<t"+type+" colspan='"+len+"'>"+row+"</t"+type+">";
replacement = RegexUtil.handleEscapesInReplacement(replacement);
tdFinder.appendReplacement(sb, replacement);
}
if (found) {
tdFinder.appendTail(sb);
return sb.toString();
}
return input;
}
Pattern uwctokenrowspan = Pattern.compile("::" + PrepRowSpansConverter.TOKENKEY + "(\\d+)::");
Pattern rowspan = Pattern.compile(":::");
protected String convertRowspans(String input) {
Matcher tdFinder = td.matcher(input);
StringBuffer sb = new StringBuffer();
boolean found = false;
while (tdFinder.find()) {
found = true;
String type = tdFinder.group(1);
String row = tdFinder.group(2);
Matcher rowspanFinder = rowspan.matcher(row);
if (rowspanFinder.find()) {
tdFinder.appendReplacement(sb, "");
continue;
}
Matcher uwctokenFinder = uwctokenrowspan.matcher(row);
boolean found2 = false;
String len = "";
StringBuffer sb2 = new StringBuffer();
while (uwctokenFinder.find()) {
found2 = true;
len = uwctokenFinder.group(1);
String rep2= RegexUtil.handleEscapesInReplacement("");
uwctokenFinder.appendReplacement(sb2, rep2);
}
if (found2) {
uwctokenFinder.appendTail(sb2);
row = sb2.toString();
}
else continue;
String replacement = "<t"+type+" rowspan='"+len+"'>"+row+"</t"+type+">";
replacement = RegexUtil.handleEscapesInReplacement(replacement);
tdFinder.appendReplacement(sb, replacement);
}
if (found) {
tdFinder.appendTail(sb);
return sb.toString();
}
return input;
}
}