1<?php
2/**
3 * verilog.php
4 * -----------
5 * Author: Günter Dannoritzer <dannoritzer@web.de>
6 * Copyright: (C) 2008 Günter Dannoritzer
7 * Release Version: 1.0.9.1
8 * Date Started: 2008/05/28
9 *
10 * Verilog language file for GeSHi.
11 *
12 * CHANGES
13 * -------
14 * 2008/05/29
15 *   -  added regular expression to find numbers of the form 4'b001xz
16 *   -  added regular expression to find values for `timescale command
17 *   -  extended macro keywords
18 *
19 * TODO (updated 2008/05/29)
20 * -------------------------
21 *
22 * 2013/01/08
23 *   -  extended keywords to include system keywords
24 *
25 *************************************************************************************
26 *
27 *     This file is part of GeSHi.
28 *
29 *   GeSHi is free software; you can redistribute it and/or modify
30 *   it under the terms of the GNU General Public License as published by
31 *   the Free Software Foundation; either version 2 of the License, or
32 *   (at your option) any later version.
33 *
34 *   GeSHi is distributed in the hope that it will be useful,
35 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
36 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
37 *   GNU General Public License for more details.
38 *
39 *   You should have received a copy of the GNU General Public License
40 *   along with GeSHi; if not, write to the Free Software
41 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
42 *
43 ************************************************************************************/
44
45$language_data = array (
46    'LANG_NAME' => 'Verilog',
47    'COMMENT_SINGLE' => array(1 => '//'),
48    'COMMENT_MULTI' => array('/*' => '*/'),
49    'COMMENT_REGEXP' => array(1 => '/\/\/(?:\\\\\\\\|\\\\\\n|.)*$/m'),
50    'CASE_KEYWORDS' => GESHI_CAPS_NO_CHANGE,
51    'QUOTEMARKS' => array('"'),
52    'ESCAPE_CHAR' => '\\',
53    'KEYWORDS' => array(
54        // keywords
55        1 => array(
56            'accept_on','alias',
57            'always','always_comb','always_ff','always_latch','and','assert',
58            'assign','assume','automatic','before','begin','bind','bins','binsof',
59            'bit','break','buf','bufif0','bufif1','byte','case','casex','casez',
60            'cell','chandle','checker','class','clocking','cmos','config','const',
61            'constraint','context','continue','cover','covergroup','coverpoint','cross',
62            'deassign','default','defparam','design','disable','dist','do','edge','else',
63            'end','endcase','endchecker','endclass','endclocking','endconfig',
64            'endfunction','endgenerate','endgroup','endinterface','endmodule',
65            'endpackage','endprimitive','endprogram','endproperty','endspecify',
66            'endsequence','endtable','endtask','enum','event','eventually','expect',
67            'export','extends','extern','final','first_match','for','force','foreach',
68            'forever','fork','forkjoin','function','generate','genvar','global',
69            'highz0','highz1','if','iff','ifnone','ignore_bins','illegal_bins',
70            'implies','import','incdir','include','initial','inout','input','inside',
71            'instance','int','integer','interface','intersect','join','join_any',
72            'join_none','large','let','liblist','library','local','localparam',
73            'logic','longint','macromodule','matches','medium','modport','module','nand',
74            'negedge','new','nexttime','nmos','nor','noshowcancelled','not','notif0',
75            'notif1','null','or','output','package','packed','parameter','pmos','posedge',
76            'primitive','priority','program','property','protected','pull0','pull1',
77            'pulldown','pullup','pulsestyle_ondetect','pulsestyle_onevent','pure',
78            'rand','randc','randcase','randsequence','rcmos','real','realtime','ref',
79            'reg','reject_on','release','repeat','restrict','return','rnmos','rpmos',
80            'rtran','rtranif0','rtranif1','s_always','s_eventually','s_nexttime',
81            's_until','s_until_with','scalared','sequence','shortint','shortreal',
82            'showcancelled','signed','small','solve','specify','specparam','static',
83            'string','strong','strong0','strong1','struct','super','supply0','supply1',
84            'sync_accept_on','sync_reject_on','table','tagged','task','this','throughout',
85            'time','timeprecision','timeunit','tran','tranif0','tranif1','tri','tri0',
86            'tri1','triand','trior','trireg','type','typedef','union','unique','unique0',
87            'unsigned','until','until_with','untyped','use','uwire','var','vectored',
88            'virtual','void','wait','wait_order','wand','weak','weak0','weak1','while',
89            'wildcard','wire','with','within','wor','xnor','xor'
90            ),
91        // system tasks
92        2 => array(
93            '$display', '$monitor',
94            '$dumpall', '$dumpfile', '$dumpflush', '$dumplimit', '$dumpoff',
95            '$dumpon', '$dumpvars',
96            '$fclose', '$fdisplay', '$fopen',
97            '$finish', '$fmonitor', '$fstrobe', '$fwrite',
98            '$fgetc', '$ungetc', '$fgets', '$fscanf', '$fread', '$ftell',
99            '$fseek', '$frewind', '$ferror', '$fflush', '$feof',
100            '$random',
101            '$readmemb', '$readmemh', '$readmemx',
102            '$signed', '$stime', '$stop',
103            '$strobe', '$time', '$unsigned', '$write'
104            ),
105        // macros
106        3 => array(
107            '`default-net', '`define',
108            '`celldefine', '`default_nettype', '`else', '`elsif', '`endcelldefine',
109            '`endif', '`ifdef', '`ifndef', '`include', '`line', '`nounconnected_drive',
110            '`resetall', '`timescale', '`unconnected_drive', '`undef'
111            ),
112        ),
113    'SYMBOLS' => array(
114        '(', ')', '{', '}', '[', ']', '=', '+', '-', '*', '/', '!', '%',
115        '^', '&', '|', '~',
116        '?', ':',
117        '#', '<<', '<<<',
118        '>', '<', '>=', '<=',
119        '@', ';', ','
120        ),
121    'CASE_SENSITIVE' => array(
122        GESHI_COMMENTS => false,
123        1 => false,
124        2 => false,
125        3 => false
126        ),
127    'STYLES' => array(
128        'KEYWORDS' => array(
129            1 => 'color: #A52A2A; font-weight: bold;',
130            2 => 'color: #9932CC;',
131            3 => 'color: #008800;'
132            ),
133        'COMMENTS' => array(
134            1 => 'color: #00008B; font-style: italic;',
135            'MULTI' => 'color: #00008B; font-style: italic;'
136            ),
137        'ESCAPE_CHAR' => array(
138            0 => 'color: #9F79EE'
139            ),
140        'BRACKETS' => array(
141            0 => 'color: #9F79EE;'
142            ),
143        'STRINGS' => array(
144            0 => 'color: #FF00FF;'
145            ),
146        'NUMBERS' => array(
147            0 => 'color: #ff0055;'
148            ),
149        'METHODS' => array(
150            1 => 'color: #202020;',
151            2 => 'color: #202020;'
152            ),
153        'SYMBOLS' => array(
154            0 => 'color: #5D478B;'
155            ),
156        'REGEXPS' => array(
157            0 => 'color: #ff0055;',
158            1 => 'color: #ff0055;',
159            ),
160        'SCRIPT' => array(
161            0 => '',
162            1 => '',
163            2 => '',
164            3 => ''
165            )
166        ),
167    'URLS' => array(
168        1 => '',
169        2 => '',
170        3 => ''
171        ),
172    'OOLANG' => false,
173    'OBJECT_SPLITTERS' => array(
174        1 => ''
175        ),
176    'REGEXPS' => array(
177        // numbers
178        0 => "\d'[bdh][0-9_a-fA-FxXzZ]+",
179        // time -> 1, 10, or 100; s, ms, us, ns, ps, of fs
180        1 => "1[0]{0,2}[munpf]?s"
181        ),
182    'STRICT_MODE_APPLIES' => GESHI_NEVER,
183    'SCRIPT_DELIMITERS' => array(
184        1 => ''
185        ),
186    'HIGHLIGHT_STRICT_BLOCK' => array(
187        0 => true,
188        1 => true,
189        2 => true,
190        3 => true
191        ),
192    'TAB_WIDTH' => 4
193);
194