/* * Copyright 2015 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.robotframework.ide.eclipse.main.plugin.project.library; import java.util.ArrayList; import java.util.List; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Splitter; import com.google.common.collect.Lists; class RobotToHtmlConverter { public String convert(final String robotStyleString) { final List<String> splitted1 = Splitter.on('\n').splitToList(robotStyleString); final List<String> wrapped = Lists.transform(splitted1, new Function<String, String>() { @Override public String apply(final String line) { final String escaped = escapeGtLtAmp(line); return wrapLineIntoTags(escaped); } }); final String consecutiveParagraphsJoined = Joiner.on('\n').join(joinPargraphsToLists(wrapped)) .replaceAll("</p>\n<p>", "\n"); final List<String> splitted2 = Splitter.on('\n').splitToList(consecutiveParagraphsJoined); final List<String> spansWrappedIntoParagraphs = Lists.transform(splitted2, new Function<String, String>() { @Override public String apply(final String line) { return isSpan(line) ? "<p>" + line + "</p>" : line; } }); return Joiner.on('\n').join(spansWrappedIntoParagraphs); } private String wrapLineIntoTags(final String line) { if (line.isEmpty()) { return line; } else if (line.startsWith("|") || line.startsWith(" |")) { return "<span font=\"monospace\">" + line + "</span>"; } else if (line.startsWith("- ") || line.startsWith(" - ")) { return "<li>" + line.substring(2) + "</li>"; } else if (line.startsWith("=") || line.startsWith(" =")) { return "<span font=\"header\" color=\"header\">" + line.replaceAll("=", "").trim() + "</span>"; } else { return "<p>" + line + "</p>"; } } private List<String> joinPargraphsToLists(final List<String> lines) { final List<String> result = new ArrayList<>(); for (int i = 0; i < lines.size(); i++) { final String prevLine = i == 0 ? null : result.get(i - 1); final String currLine = lines.get(i); if (isLi(prevLine) && isParagraph(currLine)) { final String last = result.remove(result.size() - 1); result.add(last.substring(0, last.length() - 5)); result.add(currLine.substring(3, currLine.length() - 4) + "</li>"); } else { result.add(currLine); } } return result; } private String escapeGtLtAmp(final String line) { return line.replaceAll("&", "&").replaceAll("<", "<").replaceAll(">", ">"); } private boolean isParagraph(final String line) { return line != null && line.startsWith("<p>") && line.endsWith("</p>"); } private boolean isSpan(final String line) { return line != null && line.startsWith("<span") && line.endsWith("</span>"); } private boolean isLi(final String line) { return line != null && line.endsWith("</li>"); } }