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}