/** * ***************************************************************************** * 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; /** * * @author Skylar */ 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(); } /** * * @param theme * @return */ 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 + "; "); } } }