001 002package gudusoft.gsqlparser.pp.output.html; 003 004import gudusoft.gsqlparser.EDbVendor; 005import gudusoft.gsqlparser.TSourceToken; 006import gudusoft.gsqlparser.pp.output.HighlightingElement; 007import gudusoft.gsqlparser.pp.output.HighlightingElementRender; 008import gudusoft.gsqlparser.pp.output.OutputConfig; 009import gudusoft.gsqlparser.pp.para.GFmtOpt; 010 011import java.awt.Color; 012import java.awt.Font; 013import java.util.HashMap; 014import java.util.Map; 015 016public class HtmlOutputConfig implements OutputConfig 017{ 018 019 private String globalFontName = "Courier New"; 020 private int globalFontSize = 10; 021 022 private Map<HighlightingElement, HighlightingElementRender> highlightingElementMap = new HashMap<HighlightingElement, HighlightingElementRender>( ); 023 private HtmlRenderUtil render; 024 private boolean init = false; 025 026 private void init( ) 027 { 028 init = true; 029 030 Font plainFont = new Font( globalFontName, Font.PLAIN, globalFontSize ); 031 Font boldFont = new Font( globalFontName, Font.BOLD, globalFontSize ); 032 Font italicFont = new Font( globalFontName, Font.ITALIC, globalFontSize ); 033 034 Color color_800000 = new Color( 0x80, 0, 0 ); 035 Color color_0000FF = new Color( 0, 0, 0xFF ); 036 Color color_000000 = new Color( 0, 0, 0 ); 037 Color color_C0C0C0 = new Color( 0xC0, 0xC0, 0xC0 ); 038 Color color_FF0080 = new Color( 0xFF, 0, 0x80 ); 039 Color color_16711935 = new Color( 16711935 ); 040 Color color_16711808 = new Color( 16711808 ); 041 Color color_FF0000 = new Color( 0xFF, 0, 0 ); 042 Color color_008000 = new Color( 0, 0x80, 0 ); 043 044 addHighlightingElementRender( HighlightingElement.sfkSpan, 045 new HtmlHighlightingElementRender( HighlightingElement.sfkSpan, 046 Color.WHITE, 047 plainFont ), 048 false ); 049 addHighlightingElementRender( HighlightingElement.sfkDefault, 050 new HtmlHighlightingElementRender( HighlightingElement.sfkDefault, 051 Color.BLACK, 052 plainFont ), 053 false ); 054 addHighlightingElementRender( HighlightingElement.sfkIdentifer, 055 new HtmlHighlightingElementRender( HighlightingElement.sfkIdentifer, 056 color_800000, 057 plainFont ), 058 false ); 059 addHighlightingElementRender( HighlightingElement.sfkStandardkeyword, 060 new HtmlHighlightingElementRender( HighlightingElement.sfkStandardkeyword, 061 color_0000FF, 062 plainFont ), 063 false ); 064 addHighlightingElementRender( HighlightingElement.sfkNumber, 065 new HtmlHighlightingElementRender( HighlightingElement.sfkNumber, 066 color_000000, 067 plainFont ), 068 false ); 069 addHighlightingElementRender( HighlightingElement.sfkDelimitedIdentifier, 070 new HtmlHighlightingElementRender( HighlightingElement.sfkDelimitedIdentifier, 071 color_800000, 072 plainFont ), 073 false ); 074 addHighlightingElementRender( HighlightingElement.sfkSymbol, 075 new HtmlHighlightingElementRender( HighlightingElement.sfkSymbol, 076 color_C0C0C0, 077 plainFont ), 078 false ); 079 addHighlightingElementRender( HighlightingElement.sfkFunction, 080 new HtmlHighlightingElementRender( HighlightingElement.sfkFunction, 081 color_FF0080, 082 boldFont ), 083 false ); 084 addHighlightingElementRender( HighlightingElement.sfkBuiltInFunction, 085 new HtmlHighlightingElementRender( HighlightingElement.sfkBuiltInFunction, 086 color_16711935, 087 italicFont ), 088 false ); 089 addHighlightingElementRender( HighlightingElement.sfkDatatype, 090 new HtmlHighlightingElementRender( HighlightingElement.sfkDatatype, 091 Color.BLACK, 092 italicFont ), 093 false ); 094 addHighlightingElementRender( HighlightingElement.sfkParameter, 095 new HtmlHighlightingElementRender( HighlightingElement.sfkParameter, 096 color_800000, 097 plainFont ), 098 false ); 099 addHighlightingElementRender( HighlightingElement.sfkbindvar, 100 new HtmlHighlightingElementRender( HighlightingElement.sfkbindvar, 101 color_800000, 102 plainFont ), 103 false ); 104 addHighlightingElementRender( HighlightingElement.sfkVendordbkeyword, 105 new HtmlHighlightingElementRender( HighlightingElement.sfkVendordbkeyword, 106 color_0000FF, 107 plainFont ), 108 false ); 109 addHighlightingElementRender( HighlightingElement.sfkSQString, 110 new HtmlHighlightingElementRender( HighlightingElement.sfkSQString, 111 color_FF0000, 112 plainFont ), 113 false ); 114 addHighlightingElementRender( HighlightingElement.sfkDQString, 115 new HtmlHighlightingElementRender( HighlightingElement.sfkDQString, 116 color_FF0000, 117 plainFont ), 118 false ); 119 addHighlightingElementRender( HighlightingElement.sfkComment_dh, 120 new HtmlHighlightingElementRender( HighlightingElement.sfkComment_dh, 121 color_008000, 122 italicFont ), 123 false ); 124 addHighlightingElementRender( HighlightingElement.sfkComment_ss, 125 new HtmlHighlightingElementRender( HighlightingElement.sfkComment_ss, 126 color_008000, 127 italicFont ), 128 false ); 129 addHighlightingElementRender( HighlightingElement.sfkComment_sign, 130 new HtmlHighlightingElementRender( HighlightingElement.sfkComment_sign, 131 color_008000, 132 italicFont ), 133 false ); 134 addHighlightingElementRender( HighlightingElement.sfkMssqlsystemvar, 135 new HtmlHighlightingElementRender( HighlightingElement.sfkMssqlsystemvar, 136 color_16711935, 137 italicFont ), 138 false ); 139 addHighlightingElementRender( HighlightingElement.sfksqlvar, 140 new HtmlHighlightingElementRender( HighlightingElement.sfksqlvar, 141 color_16711808, 142 plainFont ), 143 false ); 144 addHighlightingElementRender( HighlightingElement.sfkMssqlst1, 145 new HtmlHighlightingElementRender( HighlightingElement.sfkMssqlst1, 146 color_16711808, 147 plainFont ), 148 false ); 149 addHighlightingElementRender( HighlightingElement.sfkMssqlst2, 150 new HtmlHighlightingElementRender( HighlightingElement.sfkMssqlst2, 151 color_16711808, 152 plainFont ), 153 false ); 154 addHighlightingElementRender( HighlightingElement.sfkMssqlst3, 155 new HtmlHighlightingElementRender( HighlightingElement.sfkMssqlst3, 156 color_16711808, 157 plainFont ), 158 false ); 159 addHighlightingElementRender( HighlightingElement.sfkOracleplsqlkeyword, 160 new HtmlHighlightingElementRender( HighlightingElement.sfkOracleplsqlkeyword, 161 color_800000, 162 plainFont ), 163 false ); 164 addHighlightingElementRender( HighlightingElement.sfkOraclepackage, 165 new HtmlHighlightingElementRender( HighlightingElement.sfkOraclepackage, 166 color_800000, 167 plainFont ), 168 false ); 169 addHighlightingElementRender( HighlightingElement.sfkOraclecommand, 170 new HtmlHighlightingElementRender( HighlightingElement.sfkOraclecommand, 171 color_800000, 172 plainFont ), 173 false ); 174 addHighlightingElementRender( HighlightingElement.sfkOracleplsqlmethod, 175 new HtmlHighlightingElementRender( HighlightingElement.sfkOracleplsqlmethod, 176 color_800000, 177 plainFont ), 178 false ); 179 addHighlightingElementRender( HighlightingElement.sfkOraclerem, 180 new HtmlHighlightingElementRender( HighlightingElement.sfkOraclerem, 181 color_800000, 182 plainFont ), 183 false ); 184 addHighlightingElementRender( HighlightingElement.sfkOraclesqlplus, 185 new HtmlHighlightingElementRender( HighlightingElement.sfkOraclesqlplus, 186 color_800000, 187 plainFont ), 188 false ); 189 addHighlightingElementRender( HighlightingElement.sfkSybasesystemobj, 190 new HtmlHighlightingElementRender( HighlightingElement.sfkSybasesystemobj, 191 color_800000, 192 plainFont ), 193 false ); 194 addHighlightingElementRender( HighlightingElement.sfkSybasest, 195 new HtmlHighlightingElementRender( HighlightingElement.sfkSybasest, 196 color_800000, 197 plainFont ), 198 false ); 199 addHighlightingElementRender( HighlightingElement.sfkSybaseglobalvar, 200 new HtmlHighlightingElementRender( HighlightingElement.sfkSybaseglobalvar, 201 color_800000, 202 plainFont ), 203 false ); 204 addHighlightingElementRender( HighlightingElement.sfkopenbracket, 205 new HtmlHighlightingElementRender( HighlightingElement.sfkopenbracket, 206 color_800000, 207 plainFont ), 208 false ); 209 addHighlightingElementRender( HighlightingElement.sfkclosebracket, 210 new HtmlHighlightingElementRender( HighlightingElement.sfkclosebracket, 211 color_800000, 212 plainFont ), 213 false ); 214 addHighlightingElementRender( HighlightingElement.sfkUserCustomized, 215 new HtmlHighlightingElementRender( HighlightingElement.sfkUserCustomized, 216 color_800000, 217 plainFont ), 218 false ); 219 } 220 221 public HtmlOutputConfig( GFmtOpt option, EDbVendor dbVendor ) 222 { 223 render = new HtmlRenderUtil( this, option, dbVendor ); 224 } 225 226 public void addHighlightingElementRender( HighlightingElement element, 227 HighlightingElementRender setting ) 228 { 229 addHighlightingElementRender( element, setting, true ); 230 } 231 232 private void addHighlightingElementRender( HighlightingElement element, 233 HighlightingElementRender setting, boolean override ) 234 { 235 if ( override ) 236 { 237 highlightingElementMap.put( element, setting ); 238 } 239 else if ( !highlightingElementMap.containsKey( element ) ) 240 { 241 highlightingElementMap.put( element, setting ); 242 } 243 } 244 245 public boolean containsHighlightingElementRender( 246 HighlightingElement element ) 247 { 248 return highlightingElementMap.containsKey( element ); 249 } 250 251 public String getGlobalFontName( ) 252 { 253 return globalFontName; 254 } 255 256 public int getGlobalFontSize( ) 257 { 258 return globalFontSize; 259 } 260 261 public HighlightingElementRender getHighlightingElementRender( 262 HighlightingElement element ) 263 { 264 return highlightingElementMap.get( element ); 265 } 266 267 public void removeHighlightingElementRender( HighlightingElement element ) 268 { 269 highlightingElementMap.remove( element ); 270 } 271 272 public void setGlobalFontName( String globalFontName ) 273 { 274 this.globalFontName = globalFontName; 275 } 276 277 public void setGlobalFontSize( int globalFontSize ) 278 { 279 this.globalFontSize = globalFontSize; 280 } 281 282 public String renderHighlightingElement( TSourceToken token ) 283 { 284 if ( !init ) 285 init( ); 286 return render.renderToken( token ); 287 } 288}