/******************************************************************************* * Copyright 2013 Jeremie Bresson * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. ******************************************************************************/ package net.apocalypselabs.symat; // Package name changed. import java.awt.Color; import java.util.List; import java.util.Map.Entry; import syntaxhighlight.ParseResult; import syntaxhighlight.Style; import syntaxhighlight.Theme; public class PrettifyToHtml { private static final String MAIN_CLASS = "prettyprint"; /** * Format the {@link ParseResult} into an HTML file. * @param content * @param parseResults * @return */ public static String toHtml(String content, List parseResults) { int endIndex = 0; StringBuilder sb = new StringBuilder(); sb.append("
"); sb.append("
");
		for (ParseResult pr : parseResults) {
			int startIndex = pr.getOffset();
			if(startIndex > endIndex) {
				sb.append(content.substring(endIndex, startIndex));
			}
			endIndex = startIndex + pr.getLength();
			sb.append("");
			sb.append(content.substring(startIndex, endIndex));
			sb.append("");
		}
		if(content.length() > endIndex) {
			sb.append(content.substring(endIndex, content.length()));				
		}
		sb.append("
"); sb.append("
"); return sb.toString(); } public static String toCss(Theme theme) { StringBuilder sb = new StringBuilder(); sb.append("." + MAIN_CLASS + " {"); sb.append("font-family:monospace; "); appendCssColor(sb, "background-color", theme.getBackground()); sb.append("}\n"); for (Entry entry : theme.getStyles().entrySet()) { sb.append("." + MAIN_CLASS + " ."+entry.getKey()+" {"); Style style = entry.getValue(); appendCssColor(sb, "background-color", style.getBackground()); appendCssColor(sb, "color", style.getColor()); appendCssText(sb, "font-weight: bold", style.isBold()); appendCssText(sb, "font-style: italic", style.isItalic()); appendCssText(sb, "text-decoration: underline", style.isUnderline()); sb.append("}\n"); } theme.getStyles(); return sb.toString(); } private static void appendCssColor(StringBuilder sb, String cssKey, Color color) { if(color != null) { sb.append(cssKey +": "+ encode(color) + "; "); } } private final static String encode(Color color) { String s = Integer.toHexString(color.getRGB() & 0xffffff); if (s.length() < 6) { s = "000000".substring(0, 6 - s.length()) + s; } return '#' + s; } private static void appendCssText(StringBuilder sb, String cssProp, boolean isSet) { if(isSet) { sb.append(cssProp + "; "); } } }