1<?php
2/*************************************************************************************
3 * mysql.php
4 * ---------
5 * Author: Marjolein Katsma (marjolein.is.back@gmail.com)
6 * Copyright: (c) 2008 Marjolein Katsma (http://blog.marjoleinkatsma.com/)
7 * Release Version: 1.0.9.1
8 * Date Started: 2008-12-12
9 *
10 * MySQL language file for GeSHi.
11 *
12 * Based on original MySQL language file by Carl Fürstenberg (2004); brought
13 * up-to-date for current MySQL versions, and with more classes for different
14 * types of keywords; several minor errors were corrected as well.
15 *
16 * Some "classes" have two groups here: this is to allow for the fact that some
17 * keywords in MySQL have a double function: many of those are either a function
18 * (must be immediately followed by an opening bracket) or some other keyword:
19 * so they can be distinguished by the presence (or not) of that opening bracket.
20 * (An immediately following opening bracket is a default rule for functions in
21 * MySQL, though this may be overridden; because it's only a default, we use a
22 * regex lookahead only where necessary to distinguish homonyms, not generally
23 * to match any function.)
24 * Other keywords with double usage cannot be distinguished and are classified
25 * in the "Mix" category.
26 *
27 *************************************************************************************
28 *
29 * This file is part of GeSHi.
30 *
31 * GeSHi is free software; you can redistribute it and/or modify
32 * it under the terms of the GNU General Public License as published by
33 * the Free Software Foundation; either version 2 of the License, or
34 * (at your option) any later version.
35 *
36 * GeSHi is distributed in the hope that it will be useful,
37 * but WITHOUT ANY WARRANTY; without even the implied warranty of
38 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
39 * GNU General Public License for more details.
40 *
41 * You should have received a copy of the GNU General Public License
42 * along with GeSHi; if not, write to the Free Software
43 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
44 *
45 ************************************************************************************/
46
47$language_data = array (
48    'LANG_NAME' => 'MySQL',
49    //'COMMENT_SINGLE' => array(1 =>'--', 2 => '#'),    // '--' MUST be folowed by whitespace,not necessarily a space
50    'COMMENT_SINGLE' => array(
51        1 =>'-- ',
52        2 => '#'
53        ),
54    'COMMENT_REGEXP' => array(
55        1 => "/(?:--\s).*?$/",                          // double dash followed by any whitespace
56        ),
57    'COMMENT_MULTI' => array('/*' => '*/'),
58    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,            // @@@ would be nice if this could be defined per group!
59    'QUOTEMARKS' => array("'", '"', '`'),
60    'ESCAPE_CHAR' => '\\',                              // by default only, can be specified
61    'ESCAPE_REGEXP' => array(
62        1 => "/[_%]/",                                  // search wildcards
63        ),
64    'NUMBERS' =>
65        GESHI_NUMBER_INT_BASIC |
66        GESHI_NUMBER_OCT_PREFIX |
67        GESHI_NUMBER_HEX_PREFIX |
68        GESHI_NUMBER_FLT_NONSCI |
69        GESHI_NUMBER_FLT_SCI_SHORT |
70        GESHI_NUMBER_FLT_SCI_ZERO,
71    'KEYWORDS' => array(
72        1 => array(
73            // Mix: statement keywords and keywords that don't fit in any other
74            // category, or have multiple usage/meanings
75            'ACTION','ADD','AFTER','ALGORITHM','ALL','ALTER','ANALYZE','ANY',
76            'ASC','AS','BDB','BEGIN','BERKELEYDB','BINARY','BTREE','CALL',
77            'CASCADED','CASCADE','CHAIN','CHANGE','CHECK','COLUMNS','COLUMN',
78            'COMMENT','COMMIT','COMMITTED','CONSTRAINT','CONTAINS SQL',
79            'CONSISTENT','CONVERT','CREATE','CROSS','DATA','DATABASES',
80            'DECLARE','DEFINER','DELAYED','DELETE','DESCRIBE','DESC',
81            'DETERMINISTIC','DISABLE','DISCARD','DISTINCTROW','DISTINCT','DO',
82            'DROP','DUMPFILE','DUPLICATE KEY','ENABLE','ENCLOSED BY','ENGINE',
83            'ERRORS','ESCAPED BY','EXISTS','EXPLAIN','EXTENDED','FIELDS',
84            'FIRST','FOR EACH ROW','FORCE','FOREIGN KEY','FROM','FULL',
85            'FUNCTION','GLOBAL','GRANT','GROUP BY','HANDLER','HASH','HAVING',
86            'HELP','HIGH_PRIORITY','IF NOT EXISTS','IGNORE','IMPORT','INDEX',
87            'INFILE','INNER','INNODB','INOUT','INTO','INVOKER',
88            'ISOLATION LEVEL','JOIN','KEYS','KEY','KILL','LANGUAGE SQL','LAST',
89            'LIMIT','LINES','LOAD','LOCAL','LOCK','LOW_PRIORITY',
90            'MASTER_SERVER_ID','MATCH','MERGE','MIDDLEINT','MODIFIES SQL DATA',
91            'MODIFY','MRG_MYISAM','NATURAL','NEXT','NO SQL','NO','ON',
92            'OPTIMIZE','OPTIONALLY','OPTION','ORDER BY','OUTER','OUTFILE','OUT',
93            'PARTIAL','PARTITION','PREV','PRIMARY KEY','PRIVILEGES','PROCEDURE',
94            'PURGE','QUICK','READS SQL DATA','READ','REFERENCES','RELEASE',
95            'RENAME','REORGANIZE','REPEATABLE','REQUIRE','RESTRICT','RETURNS',
96            'REVOKE','ROLLBACK','ROUTINE','RTREE','SAVEPOINT','SELECT',
97            'SERIALIZABLE','SESSION','SET','SHARE MODE','SHOW','SIMPLE',
98            'SNAPSHOT','SOME','SONAME','SQL SECURITY','SQL_BIG_RESULT',
99            'SQL_BUFFER_RESULT','SQL_CACHE','SQL_CALC_FOUND_ROWS',
100            'SQL_NO_CACHE','SQL_SMALL_RESULT','SSL','START','STARTING BY',
101            'STATUS','STRAIGHT_JOIN','STRIPED','TABLESPACE','TABLES','TABLE',
102            'TEMPORARY','TEMPTABLE','TERMINATED BY','TO','TRANSACTIONS',
103            'TRANSACTION','TRIGGER','TYPES','TYPE','UNCOMMITTED','UNDEFINED',
104            'UNION','UNLOCK_TABLES','UPDATE','USAGE','USE','USER_RESOURCES',
105            'USING','VALUES','VALUE','VIEW','WARNINGS','WHERE','WITH ROLLUP',
106            'WITH','WORK','WRITE',
107            ),
108        2 => array(     //No ( must follow
109            // Mix: statement keywords distinguished from functions by the same name
110            "CURRENT_USER", "DATABASE", "IN", "INSERT", "DEFAULT", "REPLACE", "SCHEMA", "TRUNCATE"
111            ),
112        3 => array(
113            // Values (Constants)
114            'FALSE','NULL','TRUE',
115            ),
116        4 => array(
117            // Column Data Types
118            'BIGINT','BIT','BLOB','BOOLEAN','BOOL','CHARACTER VARYING',
119            'CHAR VARYING','DATETIME','DECIMAL','DEC','DOUBLE PRECISION',
120            'DOUBLE','ENUM','FIXED','FLOAT','GEOMETRYCOLLECTION','GEOMETRY',
121            'INTEGER','INT','LINESTRING','LONGBLOB','LONGTEXT','MEDIUMBLOB',
122            'MEDIUMINT','MEDIUMTEXT','MULTIPOINT','MULTILINESTRING',
123            'MULTIPOLYGON','NATIONAL CHARACTER','NATIONAL CHARACTER VARYING',
124            'NATIONAL CHAR VARYING','NATIONAL VARCHAR','NCHAR VARCHAR','NCHAR',
125            'NUMERIC','POINT','POLYGON','REAL','SERIAL',
126            'SMALLINT','TEXT','TIMESTAMP','TINYBLOB','TINYINT',
127            'TINYTEXT','VARBINARY','VARCHARACTER','VARCHAR',
128            ),
129        5 => array(     //No ( must follow
130            // Column data types distinguished from functions by the same name
131            "CHAR", "DATE", "TIME"
132            ),
133        6 => array(
134            // Table, Column & Index Attributes
135            'AUTO_INCREMENT','AVG_ROW_LENGTH','BOTH','CHECKSUM','CONNECTION',
136            'DATA DIRECTORY','DEFAULT NULL','DELAY_KEY_WRITE','FULLTEXT',
137            'INDEX DIRECTORY','INSERT_METHOD','LEADING','MAX_ROWS','MIN_ROWS',
138            'NOT NULL','PACK_KEYS','ROW_FORMAT','SERIAL DEFAULT VALUE','SIGNED',
139            'SPATIAL','TRAILING','UNIQUE','UNSIGNED','ZEROFILL'
140            ),
141        7 => array(     //No ( must follow
142            // Column attribute distinguished from function by the same name
143            "CHARSET"
144            ),
145        8 => array(
146            // Date and Time Unit Specifiers
147            'DAY_HOUR','DAY_MICROSECOND','DAY_MINUTE','DAY_SECOND',
148            'HOUR_MICROSECOND','HOUR_MINUTE','HOUR_SECOND',
149            'MINUTE_MICROSECOND','MINUTE_SECOND',
150            'SECOND_MICROSECOND','YEAR_MONTH'
151            ),
152        9 => array(     //No ( must follow
153            // Date-time unit specifiers distinguished from functions by the same name
154            "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER", "SECOND", "WEEK", "YEAR"
155            ),
156        10 => array(
157            // Operators (see also Symbols)
158            'AND','BETWEEN','CHARACTER SET','COLLATE','DIV','IS NOT NULL',
159            'IS NOT','IS NULL','IS','LIKE','NOT','OFFSET','OR','REGEXP','RLIKE',
160            'SOUNDS LIKE','XOR'
161            ),
162        11 => array(     //No ( must follow
163            // Operator distinghuished from function by the same name
164            "INTERVAL"
165            ),
166        12 => array(
167            // Control Flow (functions)
168            'CASE','ELSE','END','IFNULL','IF','NULLIF','THEN','WHEN',
169            ),
170        13 => array(
171            // String Functions
172            'ASCII','BIN','BIT_LENGTH','CHAR_LENGTH','CHARACTER_LENGTH',
173            'CONCAT_WS','CONCAT','ELT','EXPORT_SET','FIELD',
174            'FIND_IN_SET','FORMAT','HEX','INSTR','LCASE','LEFT','LENGTH',
175            'LOAD_FILE','LOCATE','LOWER','LPAD','LTRIM','MAKE_SET','MID',
176            'OCTET_LENGTH','ORD','POSITION','QUOTE','REPEAT','REVERSE',
177            'RIGHT','RPAD','RTRIM','SOUNDEX','SPACE','STRCMP','SUBSTRING_INDEX',
178            'SUBSTRING','TRIM','UCASE','UNHEX','UPPER',
179            ),
180        14 => array(     //A ( must follow
181            // String functions distinguished from other keywords by the same name
182            "INSERT", "REPLACE", "CHAR"
183            ),
184        15 => array(
185            // Numeric Functions
186            'ABS','ACOS','ASIN','ATAN2','ATAN','CEILING','CEIL',
187            'CONV','COS','COT','CRC32','DEGREES','EXP','FLOOR','LN','LOG10',
188            'LOG2','LOG','MOD','OCT','PI','POWER','POW','RADIANS','RAND',
189            'ROUND','SIGN','SIN','SQRT','TAN',
190            ),
191        16 => array(     //A ( must follow
192            // Numeric function distinguished from other keyword by the same name
193            "TRUNCATE"
194            ),
195        17 => array(
196            // Date and Time Functions
197            'ADDDATE','ADDTIME','CONVERT_TZ','CURDATE','CURRENT_DATE',
198            'CURRENT_TIME','CURRENT_TIMESTAMP','CURTIME','DATE_ADD',
199            'DATE_FORMAT','DATE_SUB','DATEDIFF','DAYNAME','DAYOFMONTH',
200            'DAYOFWEEK','DAYOFYEAR','EXTRACT','FROM_DAYS','FROM_UNIXTIME',
201            'GET_FORMAT','LAST_DAY','LOCALTIME','LOCALTIMESTAMP','MAKEDATE',
202            'MAKETIME','MONTHNAME','NOW','PERIOD_ADD',
203            'PERIOD_DIFF','SEC_TO_TIME','STR_TO_DATE','SUBDATE','SUBTIME',
204            'SYSDATE','TIME_FORMAT','TIME_TO_SEC',
205            'TIMESTAMPADD','TIMESTAMPDIFF','TO_DAYS',
206            'UNIX_TIMESTAMP','UTC_DATE','UTC_TIME','UTC_TIMESTAMP','WEEKDAY',
207            'WEEKOFYEAR','YEARWEEK',
208            ),
209        18 => array(     //A ( must follow
210            // Date-time functions distinguished from other keywords by the same name
211            "DATE", "DAY", "HOUR", "MICROSECOND", "MINUTE", "MONTH", "QUARTER",
212            "SECOND", "TIME", "WEEK", "YEAR"
213            ),
214        19 => array(
215            // Comparison Functions
216            'COALESCE','GREATEST','ISNULL','LEAST',
217            ),
218        20 => array(     //A ( must follow
219            // Comparison functions distinguished from other keywords by the same name
220            "IN", "INTERVAL"
221            ),
222        21 => array(
223            // Encryption and Compression Functions
224            'AES_DECRYPT','AES_ENCRYPT','COMPRESS','DECODE','DES_DECRYPT',
225            'DES_ENCRYPT','ENCODE','ENCRYPT','MD5','OLD_PASSWORD','PASSWORD',
226            'SHA1','SHA','UNCOMPRESS','UNCOMPRESSED_LENGTH',
227            ),
228        22 => array(
229            // GROUP BY (aggregate) Functions
230            'AVG','BIT_AND','BIT_OR','BIT_XOR','COUNT','GROUP_CONCAT',
231            'MAX','MIN','STDDEV_POP','STDDEV_SAMP','STDDEV','STD','SUM',
232            'VAR_POP','VAR_SAMP','VARIANCE',
233            ),
234        23 => array(
235            // Information Functions
236            'BENCHMARK','COERCIBILITY','COLLATION','CONNECTION_ID',
237            'FOUND_ROWS','LAST_INSERT_ID','ROW_COUNT',
238            'SESSION_USER','SYSTEM_USER','USER','VERSION',
239            ),
240        24 => array(     //A ( must follow
241            // Information functions distinguished from other keywords by the same name
242            "CURRENT_USER", "DATABASE", "SCHEMA", "CHARSET"
243            ),
244        25 => array(
245            // Miscellaneous Functions
246            'ExtractValue','BIT_COUNT','GET_LOCK','INET_ATON','INET_NTOA',
247            'IS_FREE_LOCK','IS_USED_LOCK','MASTER_POS_WAIT','NAME_CONST',
248            'RELEASE_LOCK','SLEEP','UpdateXML','UUID',
249            ),
250        26 => array(     //A ( must follow
251            // Miscellaneous function distinguished from other keyword by the same name
252            "DEFAULT"
253            ),
254        27 => array(
255            // Geometry Functions
256            'Area','AsBinary','AsText','AsWKB','AsWKT','Boundary','Buffer',
257            'Centroid','Contains','ConvexHull','Crosses',
258            'Difference','Dimension','Disjoint','Distance',
259            'EndPoint','Envelope','Equals','ExteriorRing',
260            'GLength','GeomCollFromText','GeomCollFromWKB','GeomFromText',
261            'GeomFromWKB','GeometryCollectionFromText',
262            'GeometryCollectionFromWKB','GeometryFromText','GeometryFromWKB',
263            'GeometryN','GeometryType',
264            'InteriorRingN','Intersection','Intersects','IsClosed','IsEmpty',
265            'IsRing','IsSimple',
266            'LineFromText','LineFromWKB','LineStringFromText',
267            'LineStringFromWKB',
268            'MBRContains','MBRDisjoint','MBREqual','MBRIntersects',
269            'MBROverlaps','MBRTouches','MBRWithin','MLineFromText',
270            'MLineFromWKB','MPointFromText','MPointFromWKB','MPolyFromText',
271            'MPolyFromWKB','MultiLineStringFromText','MultiLineStringFromWKB',
272            'MultiPointFromText','MultiPointFromWKB','MultiPolygonFromText',
273            'MultiPolygonFromWKB',
274            'NumGeometries','NumInteriorRings','NumPoints',
275            'Overlaps',
276            'PointFromText','PointFromWKB','PointN','PointOnSurface',
277            'PolyFromText','PolyFromWKB','PolygonFromText','PolygonFromWKB',
278            'Related','SRID','StartPoint','SymDifference',
279            'Touches',
280            'Union',
281            'Within',
282            'X',
283            'Y',
284            ),
285        ),
286    'SYMBOLS' => array(
287        1 => array(
288            /* Operators */
289            '=', ':=',                                      // assignment operators
290            '||', '&&', '!',                                // locical operators
291            '=', '<=>', '>=', '>', '<=', '<', '<>', '!=',   // comparison operators
292            '|', '&', '^', '~', '<<', '>>',                 // bitwise operators
293            '-', '+', '*', '/', '%',                        // numerical operators
294            ),
295        2 => array(
296            /* Other syntactical symbols */
297            '(', ')',
298            ',', ';',
299            ),
300        ),
301    'CASE_SENSITIVE' => array(
302        GESHI_COMMENTS => false,
303        1 => false,
304        2 => false,
305        3 => false,
306        4 => false,
307        5 => false,
308        6 => false,
309        7 => false,
310        8 => false,
311        9 => false,
312        10 => false,
313        11 => false,
314        12 => false,
315        13 => false,
316        14 => false,
317        15 => false,
318        16 => false,
319        17 => false,
320        18 => false,
321        19 => false,
322        20 => false,
323        21 => false,
324        22 => false,
325        23 => false,
326        24 => false,
327        25 => false,
328        26 => false,
329        27 => false,
330        ),
331    'STYLES' => array(
332        'KEYWORDS' => array(
333            1 => 'color: #990099; font-weight: bold;',      // mix
334            2 => 'color: #990099; font-weight: bold;',      // mix
335            3 => 'color: #9900FF; font-weight: bold;',      // constants
336            4 => 'color: #999900; font-weight: bold;',      // column data types
337            5 => 'color: #999900; font-weight: bold;',      // column data types
338            6 => 'color: #FF9900; font-weight: bold;',      // attributes
339            7 => 'color: #FF9900; font-weight: bold;',      // attributes
340            8 => 'color: #9900FF; font-weight: bold;',      // date-time units
341            9 => 'color: #9900FF; font-weight: bold;',      // date-time units
342
343            10 => 'color: #CC0099; font-weight: bold;',      // operators
344            11 => 'color: #CC0099; font-weight: bold;',      // operators
345
346            12 => 'color: #009900;',     // control flow (functions)
347            13 => 'color: #000099;',     // string functions
348            14 => 'color: #000099;',     // string functions
349            15 => 'color: #000099;',     // numeric functions
350            16 => 'color: #000099;',     // numeric functions
351            17 => 'color: #000099;',     // date-time functions
352            18 => 'color: #000099;',     // date-time functions
353            19 => 'color: #000099;',     // comparison functions
354            20 => 'color: #000099;',     // comparison functions
355            21 => 'color: #000099;',     // encryption functions
356            22 => 'color: #000099;',     // aggregate functions
357            23 => 'color: #000099;',     // information functions
358            24 => 'color: #000099;',     // information functions
359            25 => 'color: #000099;',     // miscellaneous functions
360            26 => 'color: #000099;',     // miscellaneous functions
361            27 => 'color: #00CC00;',     // geometry functions
362            ),
363        'COMMENTS' => array(
364            'MULTI' => 'color: #808000; font-style: italic;',
365            1 => 'color: #808080; font-style: italic;',
366            2 => 'color: #808080; font-style: italic;'
367            ),
368        'ESCAPE_CHAR' => array(
369            0 => 'color: #004000; font-weight: bold;',
370            1 => 'color: #008080; font-weight: bold;'       // search wildcards
371            ),
372        'BRACKETS' => array(
373            0 => 'color: #FF00FF;'
374            ),
375        'STRINGS' => array(
376            0 => 'color: #008000;'
377            ),
378        'NUMBERS' => array(
379            0 => 'color: #008080;'
380            ),
381        'METHODS' => array(
382            ),
383        'SYMBOLS' => array(
384            1 => 'color: #CC0099;',         // operators
385            2 => 'color: #000033;',         // syntax
386            ),
387        'SCRIPT' => array(
388            ),
389        'REGEXPS' => array(
390            )
391        ),
392    'URLS' => array(
393        1 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
394        2 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
395        3 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
396        4 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
397        5 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
398        6 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
399        7 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
400        8 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
401        9 => 'https://www.oracle.com/search/results?cat=mysql&amp;Ntk=SI-ALL5&amp;Ntt={FNAME}',
402
403        10 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',
404        11 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/non-typed-operators.html',
405
406        12 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/control-flow-functions.html',
407        13 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
408        14 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/string-functions.html',
409        15 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
410        16 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/numeric-functions.html',
411        17 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
412        18 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/date-and-time-functions.html',
413        19 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
414        20 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/comparison-operators.html',
415        21 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/encryption-functions.html',
416        22 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/group-by-functions-and-modifiers.html',
417        23 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
418        24 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/information-functions.html',
419        25 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
420        26 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/func-op-summary-ref.html',
421        27 => 'http://dev.mysql.com/doc/refman/%35%2E%31/en/analysing-spatial-information.html',
422        ),
423    'OOLANG' => false,
424    'OBJECT_SPLITTERS' => array(
425        ),
426    'REGEXPS' => array(
427        ),
428    'STRICT_MODE_APPLIES' => GESHI_NEVER,
429    'SCRIPT_DELIMITERS' => array(
430        ),
431    'HIGHLIGHT_STRICT_BLOCK' => array(
432        ),
433    'TAB_WIDTH' => 4,
434    'PARSER_CONTROL' => array(
435        'KEYWORDS' => array(
436            2 => array(
437                'DISALLOWED_AFTER' => '(?![\(\w])'
438                ),
439            5 => array(
440                'DISALLOWED_AFTER' => '(?![\(\w])'
441                ),
442            7 => array(
443                'DISALLOWED_AFTER' => '(?![\(\w])'
444                ),
445            9 => array(
446                'DISALLOWED_AFTER' => '(?![\(\w])'
447                ),
448            11 => array(
449                'DISALLOWED_AFTER' => '(?![\(\w])'
450                ),
451
452            14 => array(
453                'DISALLOWED_AFTER' => '(?=\()'
454                ),
455            16 => array(
456                'DISALLOWED_AFTER' => '(?=\()'
457                ),
458            18 => array(
459                'DISALLOWED_AFTER' => '(?=\()'
460                ),
461            20 => array(
462                'DISALLOWED_AFTER' => '(?=\()'
463                ),
464            24 => array(
465                'DISALLOWED_AFTER' => '(?=\()'
466                ),
467            26 => array(
468                'DISALLOWED_AFTER' => '(?=\()'
469                )
470            )
471        )
472);
473