001    /*
002     * Copyright 2006 Arnout Engelen <arnouten[remove] at bzzt dot net>
003     * Copyright 2004-2006 Geert Bevin <gbevin[remove] at uwyn dot com>
004     * Distributed under the terms of either:
005     * - the common development and distribution license (CDDL), v1.0; or
006     * - the GNU Lesser General Public License, v2.1 or later
007     * $Id: CppXhtmlRenderer.java 3108 2006-03-13 18:03:00Z gbevin $
008     */
009    package com.uwyn.jhighlight.renderer;
010    
011    import com.uwyn.jhighlight.highlighter.CppHighlighter;
012    import com.uwyn.jhighlight.highlighter.ExplicitStateHighlighter;
013    import com.uwyn.jhighlight.renderer.XhtmlRenderer;
014    import java.util.HashMap;
015    import java.util.Map;
016    
017    /**
018     * Generates highlighted syntax in XHTML from Cpp source.
019     *
020     * @author Arnout Engelen (arnouten[remove] at bzzt dot net)
021     * @author Geert Bevin (gbevin[remove] at uwyn dot com)
022     * @version $Revision: 0$
023     */
024    public class CppXhtmlRenderer extends XhtmlRenderer
025    {
026            public final static HashMap DEFAULT_CSS = new HashMap() {{
027                            put("h1",
028                                    "font-family: sans-serif; " +
029                                    "font-size: 16pt; " +
030                                    "font-weight: bold; " +
031                                    "color: rgb(0,0,0); " +
032                                    "background: rgb(210,210,210); " +
033                                    "border: solid 1px black; " +
034                                    "padding: 5px; " +
035                                    "text-align: center;");
036                            
037                            put("code",
038                                    "color: rgb(0,0,0); " +
039                                    "font-family: monospace; " +
040                                    "font-size: 12px; " +
041                                    "white-space: nowrap;");
042                            
043                            put(".cpp_plain",
044                                    "color: rgb(0,0,0);");
045                            
046                            put(".cpp_keyword",
047                                    "color: rgb(0,0,0); " +
048                                    "font-weight: bold;");
049                            
050                            put(".cpp_type",
051                                    "color: rgb(0,44,221);");
052                            
053                            put(".cpp_operator",
054                                    "color: rgb(0,124,31);");
055                            
056                            put(".cpp_separator",
057                                    "color: rgb(0,33,255);");
058                            
059                            put(".cpp_literal",
060                                    "color: rgb(188,0,0);");
061                            
062                            put(".cpp_comment",
063                                    "color: rgb(147,147,147); " +
064                                    "background-color: rgb(247,247,247);");
065                            
066                            put(".cpp_doxygen_comment",
067                                    "color: rgb(147,147,147); " +
068                                    "background-color: rgb(247,247,247); " +
069                                    "font-style: italic;");
070                            
071                            put(".cpp_doxygen_tag",
072                                    "color: rgb(147,147,147); " +
073                                    "background-color: rgb(247,247,247); " +
074                                    "font-style: italic; " +
075                                    "font-weight: bold;");
076                            
077                            put(".cpp_preproc",
078                                    "color: purple;");
079                    }};
080            
081            protected Map getDefaultCssStyles()
082            {
083                    return DEFAULT_CSS;
084            }
085                    
086            protected String getCssClass(int style)
087            {
088                    switch (style)
089                    {
090                            case CppHighlighter.PLAIN_STYLE:
091                                    return "cpp_plain";
092                            case CppHighlighter.KEYWORD_STYLE:
093                                    return "cpp_keyword";
094                            case CppHighlighter.TYPE_STYLE:
095                                    return "cpp_type";
096                            case CppHighlighter.OPERATOR_STYLE:
097                                    return "cpp_operator";
098                            case CppHighlighter.SEPARATOR_STYLE:
099                                    return "cpp_separator";
100                            case CppHighlighter.LITERAL_STYLE:
101                                    return "cpp_literal";
102                            case CppHighlighter.CPP_COMMENT_STYLE:
103                                    return "cpp_comment";
104                            case CppHighlighter.DOXYGEN_COMMENT_STYLE:
105                                    return "cpp_doxygen_comment";
106                            case CppHighlighter.DOXYGEN_TAG_STYLE:
107                                    return "cpp_doxygen_tag";
108                            case CppHighlighter.PREPROC_STYLE:
109                                    return "cpp_preproc";
110                    }
111                    
112                    return null;
113            }
114            
115            protected ExplicitStateHighlighter getHighlighter()
116            {
117                    return new CppHighlighter();
118            }
119    }
120