protected String getReplacement()

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;
	}