1 ;;; php-mode.el --- major mode for editing PHP code
3 ;; Copyright (C) 1999-2004 Turadg Aleahmad
5 ;; Maintainer: Turadg Aleahmad <turadg at users.sourceforge.net>
6 ;; Keywords: php languages oop
8 ;; Modified: 2004-01-24
9 ;; X-URL: http://php-mode.sourceforge.net/
11 (defconst php-version "1.1.0"
12 "PHP Mode version number.")
16 ;; This program is free software; you can redistribute it and/or
17 ;; modify it under the terms of the GNU General Public License
18 ;; as published by the Free Software Foundation; either version 2
19 ;; of the License, or (at your option) any later version.
21 ;; This program is distributed in the hope that it will be useful,
22 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24 ;; GNU General Public License for more details.
26 ;; You should have received a copy of the GNU General Public License
27 ;; along with this program; if not, write to the Free Software
28 ;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
32 ;; Rename this file to php-mode.el if it isn't already then place it in
33 ;; your Emacs lisp path (eg. site-lisp) and add to your .emacs file:
34 ;; (require 'php-mode)
36 ;; If you want colorization, turn on global-font-lock or
37 ;; add this to your .emacs:
38 ;; (add-hook 'php-mode-user-hook 'turn-on-font-lock)
40 ;; To use abbrev-mode, add lines like this:
41 ;; (add-hook 'php-mode-user-hook
42 ;; '(lambda () (define-abbrev php-mode-abbrev-table "ex" "extends")))
44 ;; To make php-mode compatible with html-mode, see http://php-mode.sf.net
46 ;; Many options available under Help:Customize
47 ;; Options specific to php-mode are in
48 ;; Programming/Languages/Php
49 ;; Since it inherits much functionality from c-mode, look there too
50 ;; Programming/Languages/C
54 ;; PHP mode is a major mode for editing PHP 3 and 4 source code. It's
55 ;; an extension of C mode; thus it inherits all C mode's navigation
56 ;; functionality. But it colors according to the PHP grammar and indents
57 ;; according to the PEAR coding guidelines. It also includes a couple
58 ;; handy IDE-type features such as documentation search and a source
62 ;;; Contributors: (in chronological order)
64 ;; Juanjo, Torsten Martinsen, Vinai Kopp, Sean Champ, Doug Marcey,
65 ;; Kevin Blake, Rex McMaster, Mathias Meyer, Boris Folgmann, Roland
66 ;; Rosenfeld, Fred Yankowski, Craig Andrews, John Keller, Ryan
67 ;; Sammartino, ppercot, Valentin Funk, Stig Bakken, Gregory Stark,
68 ;; Chris Morris, Nils Rennebarth, Gerrit Riessen, Eric Mc Sween,
69 ;; Ville Skytta, Giacomo Tesio
74 ;; Added PHP5 support (Giacomo Tesio)
75 ;; known problem: doesn't highlight after first 'implements'
76 ;; Better XEmacs compatibility (imenu, regexp, and comments!) (Ville Skytta)
77 ;; Improvement to php-conditional-key regexp (Eric Mc Sween)
80 ;; Incorporated speedbar defs by Gerrit Riessen
81 ;; Add "foreach" to conditional introducing keywords (Nils Rennebarth)
82 ;; Cleared the Changelog
83 ;; Moved contribution credits into comments above
93 (require 'regexp-opt))
97 "Major mode for editing PHP code."
101 (defcustom php-speedbar-config t
102 "*When set to true automatically configures Speedbar to observe PHP files.\
103 Ignores php-file patterns option; fixed to expression \"\\.\\(inc\\|php[s34]?\\)\""
107 (defcustom php-mode-speedbar-open nil
108 "Normally php-mode starts with the speedbar closed.\
109 Turning this on will open it whenever php-mode is loaded."
113 (defcustom php-manual-url "http://www.php.net/manual/en/manual.php"
114 "*URL at which to find PHP manual.\
115 You can replace \"en\" with your ISO language code."
119 (defcustom php-search-url "http://www.php.net/"
120 "*URL at which to search for documentation on a word"
125 (defcustom php-file-patterns (list "\\.php[s34]?\\'" "\\.phtml\\'" "\\.inc\\'")
126 "*List of file patterns for which to automatically invoke php-mode."
127 :type '(repeat (regexp :tag "Pattern"))
130 (defcustom php-mode-user-hook nil
131 "List of functions to be executed on entry to php-mode"
135 (defcustom php-mode-force-pear nil
136 "Normally PEAR coding rules are enforced only when the filename contains \"PEAR\"\
137 Turning this on will force PEAR rules on all PHP files."
141 ;; Note whether we're in XEmacs
142 (defconst xemacsp (string-match "Lucid\\|XEmacs" emacs-version)
143 "Non nil if using XEmacs.")
145 ;; XEmacs hack: autoload a dummy autoload instead of a derived mode.
146 ;;;###autoload(autoload 'php-mode "php-mode" nil t)
147 (define-derived-mode php-mode c-mode "PHP"
148 "Major mode for editing PHP code.\n\n\\{php-mode-map}"
150 (setq comment-start "// "
152 comment-start-skip "// *")
154 (setq c-class-key php-class-key)
155 (setq c-conditional-key php-conditional-key)
157 (defvar php-mode-syntax-table php-mode-syntax-table)
158 ;; this line makes $ into punctuation instead of a word constituent
159 ;; it used to be active, but it killed indenting of case lines that
160 ;; begin with '$' (many do). If anyone has a solution to this
161 ;; problem, please let me know. Of course, you're welcome to
162 ;; uncomment this line in your installation.
163 ; (modify-syntax-entry ?$ "." php-mode-syntax-table)
165 ;; The above causes XEmacs to handle shell-style comments correctly,
166 ;; but fails to work in GNU Emacs which fails to interpret \n as the
167 ;; end of the comment.
169 (modify-syntax-entry ?# "< b" php-mode-syntax-table)
170 (modify-syntax-entry ?\n "> b" php-mode-syntax-table)
173 (make-local-variable 'font-lock-defaults)
174 (setq font-lock-defaults
175 '((php-font-lock-keywords-1
176 php-font-lock-keywords-2
177 ;; Comment-out the next line if the font-coloring is too
178 ;; extreme/ugly for you.
179 php-font-lock-keywords-3
185 (font-lock-syntactic-keywords . php-font-lock-syntactic-keywords)))
187 (setq font-lock-maximum-decoration t
188 case-fold-search t ; PHP vars are case-sensitive
189 imenu-generic-expression php-imenu-generic-expression)
191 ;; Do not force newline at end of file. Such newlines can cause
192 ;; trouble if the PHP file is included in another file before calls
193 ;; to header() or cookie().
194 (set (make-local-variable 'require-final-newline) nil)
195 (set (make-local-variable 'next-line-add-newlines) nil)
197 ;; PEAR coding standards
198 (make-local-hook 'php-mode-pear-hook)
199 (add-hook 'php-mode-pear-hook
200 (lambda nil (set (make-local-variable 'tab-width) 4)) nil t)
201 (add-hook 'php-mode-pear-hook
202 (lambda nil (set (make-local-variable 'c-basic-offset) 4)) nil t)
203 (add-hook 'php-mode-pear-hook
204 (lambda nil (set (make-local-variable 'c-hanging-comment-ender-p) nil)) nil t)
205 (add-hook 'php-mode-pear-hook
206 (lambda nil (set (make-local-variable 'indent-tabs-mode) nil)) nil t)
207 (add-hook 'php-mode-pear-hook
208 (lambda nil (c-set-offset 'block-open' - )) nil t)
209 (add-hook 'php-mode-pear-hook
210 (lambda nil (c-set-offset 'block-close' 0 )) nil t)
212 (if (or php-mode-force-pear
213 (and (stringp buffer-file-name)
214 (string-match "PEAR\\|pear"
216 (string-match "\\.php$" (buffer-file-name))))
217 (run-hooks 'php-mode-pear-hook))
219 (run-hooks 'php-mode-user-hook)
222 ;; Make php-mode the default mode for PHP source code buffers.
224 (let ((php-file-patterns-temp php-file-patterns))
225 (while php-file-patterns-temp
226 (add-to-list 'auto-mode-alist
227 (cons (car php-file-patterns-temp) 'php-mode))
228 (setq php-file-patterns-temp (cdr php-file-patterns-temp))))
231 (if php-mode-speedbar-open
233 (if (and php-speedbar-config (symbolp 'speedbar))
234 (speedbar-add-supported-extension "\\.\\(inc\\|php[s34]?\\)"))
236 ;; Make a menu keymap (with a prompt string)
237 ;; and make it the menu bar item's definition.
238 (define-key php-mode-map [menu-bar] (make-sparse-keymap))
239 (define-key php-mode-map [menu-bar php]
240 (cons "PHP" (make-sparse-keymap "PHP")))
242 ;; Define specific subcommands in this menu.
243 (define-key php-mode-map [menu-bar php complete-function]
244 '("Complete function name" . php-complete-function))
245 (define-key php-mode-map
246 [menu-bar php browse-manual]
247 '("Browse manual" . php-browse-manual))
248 (define-key php-mode-map
249 [menu-bar php search-documentation]
250 '("Search documentation" . php-search-documentation))
252 ;; Define function name completion function
253 (defun php-complete-function ()
254 "Complete the function name at the point from known PHP functions."
256 (message "php-complete-function not implemented yet")
257 ;; how to read the list of functions from a separate file?
260 ;; Define function documentation function
261 (defun php-search-documentation ()
262 "Search PHP documentation for the word at the point."
264 (browse-url (concat php-search-url (current-word t)))
267 ;; Define function for browsing manual
268 (defun php-browse-manual ()
269 "Bring up manual for PHP."
271 (browse-url php-manual-url)
275 (define-key php-mode-map
277 'php-search-documentation)
280 (define-key php-mode-map
284 (defconst php-constants
288 "__LINE__" "__FILE__"
289 "PHP_OS" "PHP_VERSION"
290 "TRUE" "FALSE" "NULL"
291 "E_ERROR" "E_NOTICE" "E_PARSE" "E_WARNING" "E_ALL"
292 "E_USER_ERROR" "E_USER_WARNING" "E_USER_NOTICE"
293 "DEFAULT_INCLUDE_PATH" "PEAR_INSTALL_DIR" "PEAR_EXTENSION_DIR"
294 "PHP_BINDIR" "PHP_LIBDIR" "PHP_DATADIR" "PHP_SYSCONFDIR"
295 "PHP_LOCALSTATEDIR" "PHP_CONFIG_FILE_PATH"
297 ;; from ext/standard:
298 "EXTR_OVERWRITE" "EXTR_SKIP" "EXTR_PREFIX_SAME"
299 "EXTR_PREFIX_ALL" "EXTR_PREFIX_INVALID" "SORT_ASC" "SORT_DESC"
300 "SORT_REGULAR" "SORT_NUMERIC" "SORT_STRING" "ASSERT_ACTIVE"
301 "ASSERT_CALLBACK" "ASSERT_BAIL" "ASSERT_WARNING"
302 "ASSERT_QUIET_EVAL" "CONNECTION_ABORTED" "CONNECTION_NORMAL"
303 "CONNECTION_TIMEOUT" "M_E" "M_LOG2E" "M_LOG10E" "M_LN2"
304 "M_LN10" "M_PI" "M_PI_2" "M_PI_4" "M_1_PI" "M_2_PI"
305 "M_2_SQRTPI" "M_SQRT2" "M_SQRT1_2" "CRYPT_SALT_LENGTH"
306 "CRYPT_STD_DES" "CRYPT_EXT_DES" "CRYPT_MD5" "CRYPT_BLOWFISH"
307 "DIRECTORY_SEPARATOR" "SEEK_SET" "SEEK_CUR" "SEEK_END"
308 "LOCK_SH" "LOCK_EX" "LOCK_UN" "LOCK_NB" "HTML_SPECIALCHARS"
309 "HTML_ENTITIES" "ENT_COMPAT" "ENT_QUOTES" "ENT_NOQUOTES"
310 "INFO_GENERAL" "INFO_CREDITS" "INFO_CONFIGURATION"
311 "INFO_ENVIRONMENT" "INFO_VARIABLES" "INFO_LICENSE" "INFO_ALL"
312 "CREDITS_GROUP" "CREDITS_GENERAL" "CREDITS_SAPI"
313 "CREDITS_MODULES" "CREDITS_DOCS" "CREDITS_FULLPAGE"
314 "CREDITS_QA" "CREDITS_ALL" "PHP_OUTPUT_HANDLER_START"
315 "PHP_OUTPUT_HANDLER_CONT" "PHP_OUTPUT_HANDLER_END"
316 "STR_PAD_LEFT" "STR_PAD_RIGHT" "STR_PAD_BOTH"
317 "PATHINFO_DIRNAME" "PATHINFO_BASENAME" "PATHINFO_EXTENSION"
318 "CHAR_MAX" "LC_CTYPE" "LC_NUMERIC" "LC_TIME" "LC_COLLATE"
319 "LC_MONETARY" "LC_ALL" "LC_MESSAGES" "LOG_EMERG" "LOG_ALERT"
320 "LOG_CRIT" "LOG_ERR" "LOG_WARNING" "LOG_NOTICE" "LOG_INFO"
321 "LOG_DEBUG" "LOG_KERN" "LOG_USER" "LOG_MAIL" "LOG_DAEMON"
322 "LOG_AUTH" "LOG_SYSLOG" "LOG_LPR" "LOG_NEWS" "LOG_UUCP"
323 "LOG_CRON" "LOG_AUTHPRIV" "LOG_LOCAL0" "LOG_LOCAL1"
324 "LOG_LOCAL2" "LOG_LOCAL3" "LOG_LOCAL4" "LOG_LOCAL5"
325 "LOG_LOCAL6" "LOG_LOCAL7" "LOG_PID" "LOG_CONS" "LOG_ODELAY"
326 "LOG_NDELAY" "LOG_NOWAIT" "LOG_PERROR"
328 ;; Disabled by default because they slow buffer loading
329 ;; If you have use for them, decomment the strings
330 ;; that you want colored.
331 ;; To compile, you may have to increase 'max-specpdl-size'
333 ;; from other bundled extensions:
334 ; "CAL_EASTER_TO_xxx" "VT_NULL" "VT_EMPTY" "VT_UI1" "VT_I2"
335 ; "VT_I4" "VT_R4" "VT_R8" "VT_BOOL" "VT_ERROR" "VT_CY" "VT_DATE"
336 ; "VT_BSTR" "VT_DECIMAL" "VT_UNKNOWN" "VT_DISPATCH" "VT_VARIANT"
337 ; "VT_I1" "VT_UI2" "VT_UI4" "VT_INT" "VT_UINT" "VT_ARRAY"
338 ; "VT_BYREF" "CP_ACP" "CP_MACCP" "CP_OEMCP" "CP_SYMBOL"
339 ; "CP_THREAD_ACP" "CP_UTF7" "CP_UTF8" "CPDF_PM_NONE"
340 ; "CPDF_PM_OUTLINES" "CPDF_PM_THUMBS" "CPDF_PM_FULLSCREEN"
341 ; "CPDF_PL_SINGLE" "CPDF_PL_1COLUMN" "CPDF_PL_2LCOLUMN"
342 ; "CPDF_PL_2RCOLUMN" "CURLOPT_PORT" "CURLOPT_FILE"
343 ; "CURLOPT_INFILE" "CURLOPT_INFILESIZE" "CURLOPT_URL"
344 ; "CURLOPT_PROXY" "CURLOPT_VERBOSE" "CURLOPT_HEADER"
345 ; "CURLOPT_HTTPHEADER" "CURLOPT_NOPROGRESS" "CURLOPT_NOBODY"
346 ; "CURLOPT_FAILONERROR" "CURLOPT_UPLOAD" "CURLOPT_POST"
347 ; "CURLOPT_FTPLISTONLY" "CURLOPT_FTPAPPEND" "CURLOPT_NETRC"
348 ; "CURLOPT_FOLLOWLOCATION" "CURLOPT_FTPASCII" "CURLOPT_PUT"
349 ; "CURLOPT_MUTE" "CURLOPT_USERPWD" "CURLOPT_PROXYUSERPWD"
350 ; "CURLOPT_RANGE" "CURLOPT_TIMEOUT" "CURLOPT_POSTFIELDS"
351 ; "CURLOPT_REFERER" "CURLOPT_USERAGENT" "CURLOPT_FTPPORT"
352 ; "CURLOPT_LOW_SPEED_LIMIT" "CURLOPT_LOW_SPEED_TIME"
353 ; "CURLOPT_RESUME_FROM" "CURLOPT_COOKIE" "CURLOPT_SSLCERT"
354 ; "CURLOPT_SSLCERTPASSWD" "CURLOPT_WRITEHEADER"
355 ; "CURLOPT_COOKIEFILE" "CURLOPT_SSLVERSION"
356 ; "CURLOPT_TIMECONDITION" "CURLOPT_TIMEVALUE"
357 ; "CURLOPT_CUSTOMREQUEST" "CURLOPT_STDERR" "CURLOPT_TRANSFERTEXT"
358 ; "CURLOPT_RETURNTRANSFER" "CURLOPT_QUOTE" "CURLOPT_POSTQUOTE"
359 ; "CURLOPT_INTERFACE" "CURLOPT_KRB4LEVEL"
360 ; "CURLOPT_HTTPPROXYTUNNEL" "CURLOPT_FILETIME"
361 ; "CURLOPT_WRITEFUNCTION" "CURLOPT_READFUNCTION"
362 ; "CURLOPT_PASSWDFUNCTION" "CURLOPT_HEADERFUNCTION"
363 ; "CURLOPT_MAXREDIRS" "CURLOPT_MAXCONNECTS" "CURLOPT_CLOSEPOLICY"
364 ; "CURLOPT_FRESH_CONNECT" "CURLOPT_FORBID_REUSE"
365 ; "CURLOPT_RANDOM_FILE" "CURLOPT_EGDSOCKET"
366 ; "CURLOPT_CONNECTTIMEOUT" "CURLOPT_SSL_VERIFYPEER"
367 ; "CURLOPT_CAINFO" "CURLOPT_BINARYTRANSER"
368 ; "CURLCLOSEPOLICY_LEAST_RECENTLY_USED" "CURLCLOSEPOLICY_OLDEST"
369 ; "CURLINFO_EFFECTIVE_URL" "CURLINFO_HTTP_CODE"
370 ; "CURLINFO_HEADER_SIZE" "CURLINFO_REQUEST_SIZE"
371 ; "CURLINFO_TOTAL_TIME" "CURLINFO_NAMELOOKUP_TIME"
372 ; "CURLINFO_CONNECT_TIME" "CURLINFO_PRETRANSFER_TIME"
373 ; "CURLINFO_SIZE_UPLOAD" "CURLINFO_SIZE_DOWNLOAD"
374 ; "CURLINFO_SPEED_DOWNLOAD" "CURLINFO_SPEED_UPLOAD"
375 ; "CURLINFO_FILETIME" "CURLE_OK" "CURLE_UNSUPPORTED_PROTOCOL"
376 ; "CURLE_FAILED_INIT" "CURLE_URL_MALFORMAT"
377 ; "CURLE_URL_MALFORMAT_USER" "CURLE_COULDNT_RESOLVE_PROXY"
378 ; "CURLE_COULDNT_RESOLVE_HOST" "CURLE_COULDNT_CONNECT"
379 ; "CURLE_FTP_WEIRD_SERVER_REPLY" "CURLE_FTP_ACCESS_DENIED"
380 ; "CURLE_FTP_USER_PASSWORD_INCORRECT"
381 ; "CURLE_FTP_WEIRD_PASS_REPLY" "CURLE_FTP_WEIRD_USER_REPLY"
382 ; "CURLE_FTP_WEIRD_PASV_REPLY" "CURLE_FTP_WEIRD_227_FORMAT"
383 ; "CURLE_FTP_CANT_GET_HOST" "CURLE_FTP_CANT_RECONNECT"
384 ; "CURLE_FTP_COULDNT_SET_BINARY" "CURLE_PARTIAL_FILE"
385 ; "CURLE_FTP_COULDNT_RETR_FILE" "CURLE_FTP_WRITE_ERROR"
386 ; "CURLE_FTP_QUOTE_ERROR" "CURLE_HTTP_NOT_FOUND"
387 ; "CURLE_WRITE_ERROR" "CURLE_MALFORMAT_USER"
388 ; "CURLE_FTP_COULDNT_STOR_FILE" "CURLE_READ_ERROR"
389 ; "CURLE_OUT_OF_MEMORY" "CURLE_OPERATION_TIMEOUTED"
390 ; "CURLE_FTP_COULDNT_SET_ASCII" "CURLE_FTP_PORT_FAILED"
391 ; "CURLE_FTP_COULDNT_USE_REST" "CURLE_FTP_COULDNT_GET_SIZE"
392 ; "CURLE_HTTP_RANGE_ERROR" "CURLE_HTTP_POST_ERROR"
393 ; "CURLE_SSL_CONNECT_ERROR" "CURLE_FTP_BAD_DOWNLOAD_RESUME"
394 ; "CURLE_FILE_COULDNT_READ_FILE" "CURLE_LDAP_CANNOT_BIND"
395 ; "CURLE_LDAP_SEARCH_FAILED" "CURLE_LIBRARY_NOT_FOUND"
396 ; "CURLE_FUNCTION_NOT_FOUND" "CURLE_ABORTED_BY_CALLBACK"
397 ; "CURLE_BAD_FUNCTION_ARGUMENT" "CURLE_BAD_CALLING_ORDER"
398 ; "CURLE_HTTP_PORT_FAILED" "CURLE_BAD_PASSWORD_ENTERED"
399 ; "CURLE_TOO_MANY_REDIRECTS" "CURLE_UNKOWN_TELNET_OPTION"
400 ; "CURLE_TELNET_OPTION_SYNTAX" "CURLE_ALREADY_COMPLETE"
401 ; "DBX_MYSQL" "DBX_ODBC" "DBX_PGSQL" "DBX_MSSQL" "DBX_PERSISTENT"
402 ; "DBX_RESULT_INFO" "DBX_RESULT_INDEX" "DBX_RESULT_ASSOC"
403 ; "DBX_CMP_TEXT" "DBX_CMP_NUMBER" "XML_ELEMENT_NODE"
404 ; "XML_ATTRIBUTE_NODE" "XML_TEXT_NODE" "XML_CDATA_SECTION_NODE"
405 ; "XML_ENTITY_REF_NODE" "XML_ENTITY_NODE" "XML_PI_NODE"
406 ; "XML_COMMENT_NODE" "XML_DOCUMENT_NODE" "XML_DOCUMENT_TYPE_NODE"
407 ; "XML_DOCUMENT_FRAG_NODE" "XML_NOTATION_NODE"
408 ; "XML_HTML_DOCUMENT_NODE" "XML_DTD_NODE" "XML_ELEMENT_DECL_NODE"
409 ; "XML_ATTRIBUTE_DECL_NODE" "XML_ENTITY_DECL_NODE"
410 ; "XML_NAMESPACE_DECL_NODE" "XML_GLOBAL_NAMESPACE"
411 ; "XML_LOCAL_NAMESPACE" "XML_ATTRIBUTE_CDATA" "XML_ATTRIBUTE_ID"
412 ; "XML_ATTRIBUTE_IDREF" "XML_ATTRIBUTE_IDREFS"
413 ; "XML_ATTRIBUTE_ENTITY" "XML_ATTRIBUTE_NMTOKEN"
414 ; "XML_ATTRIBUTE_NMTOKENS" "XML_ATTRIBUTE_ENUMERATION"
415 ; "XML_ATTRIBUTE_NOTATION" "XPATH_UNDEFINED" "XPATH_NODESET"
416 ; "XPATH_BOOLEAN" "XPATH_NUMBER" "XPATH_STRING" "XPATH_POINT"
417 ; "XPATH_RANGE" "XPATH_LOCATIONSET" "XPATH_USERS" "FBSQL_ASSOC"
418 ; "FBSQL_NUM" "FBSQL_BOTH" "FDFValue" "FDFStatus" "FDFFile"
419 ; "FDFID" "FDFFf" "FDFSetFf" "FDFClearFf" "FDFFlags" "FDFSetF"
420 ; "FDFClrF" "FDFAP" "FDFAS" "FDFAction" "FDFAA" "FDFAPRef"
421 ; "FDFIF" "FDFEnter" "FDFExit" "FDFDown" "FDFUp" "FDFFormat"
422 ; "FDFValidate" "FDFKeystroke" "FDFCalculate"
423 ; "FRIBIDI_CHARSET_UTF8" "FRIBIDI_CHARSET_8859_6"
424 ; "FRIBIDI_CHARSET_8859_8" "FRIBIDI_CHARSET_CP1255"
425 ; "FRIBIDI_CHARSET_CP1256" "FRIBIDI_CHARSET_ISIRI_3342"
426 ; "FTP_ASCII" "FTP_BINARY" "FTP_IMAGE" "FTP_TEXT" "IMG_GIF"
427 ; "IMG_JPG" "IMG_JPEG" "IMG_PNG" "IMG_WBMP" "IMG_COLOR_TILED"
428 ; "IMG_COLOR_STYLED" "IMG_COLOR_BRUSHED"
429 ; "IMG_COLOR_STYLEDBRUSHED" "IMG_COLOR_TRANSPARENT"
430 ; "IMG_ARC_ROUNDED" "IMG_ARC_PIE" "IMG_ARC_CHORD"
431 ; "IMG_ARC_NOFILL" "IMG_ARC_EDGED" "GMP_ROUND_ZERO"
432 ; "GMP_ROUND_PLUSINF" "GMP_ROUND_MINUSINF" "HW_ATTR_LANG"
433 ; "HW_ATTR_NR" "HW_ATTR_NONE" "IIS_READ" "IIS_WRITE"
434 ; "IIS_EXECUTE" "IIS_SCRIPT" "IIS_ANONYMOUS" "IIS_BASIC"
435 ; "IIS_NTLM" "NIL" "OP_DEBUG" "OP_READONLY" "OP_ANONYMOUS"
436 ; "OP_SHORTCACHE" "OP_SILENT" "OP_PROTOTYPE" "OP_HALFOPEN"
437 ; "OP_EXPUNGE" "OP_SECURE" "CL_EXPUNGE" "FT_UID" "FT_PEEK"
438 ; "FT_NOT" "FT_INTERNAL" "FT_PREFETCHTEXT" "ST_UID" "ST_SILENT"
439 ; "ST_SET" "CP_UID" "CP_MOVE" "SE_UID" "SE_FREE" "SE_NOPREFETCH"
440 ; "SO_FREE" "SO_NOSERVER" "SA_MESSAGES" "SA_RECENT" "SA_UNSEEN"
441 ; "SA_UIDNEXT" "SA_UIDVALIDITY" "SA_ALL" "LATT_NOINFERIORS"
442 ; "LATT_NOSELECT" "LATT_MARKED" "LATT_UNMARKED" "SORTDATE"
443 ; "SORTARRIVAL" "SORTFROM" "SORTSUBJECT" "SORTTO" "SORTCC"
444 ; "SORTSIZE" "TYPETEXT" "TYPEMULTIPART" "TYPEMESSAGE"
445 ; "TYPEAPPLICATION" "TYPEAUDIO" "TYPEIMAGE" "TYPEVIDEO"
446 ; "TYPEOTHER" "ENC7BIT" "ENC8BIT" "ENCBINARY" "ENCBASE64"
447 ; "ENCQUOTEDPRINTABLE" "ENCOTHER" "INGRES_ASSOC" "INGRES_NUM"
448 ; "INGRES_BOTH" "IBASE_DEFAULT" "IBASE_TEXT" "IBASE_UNIXTIME"
449 ; "IBASE_READ" "IBASE_COMMITTED" "IBASE_CONSISTENCY"
450 ; "IBASE_NOWAIT" "IBASE_TIMESTAMP" "IBASE_DATE" "IBASE_TIME"
451 ; "LDAP_DEREF_NEVER" "LDAP_DEREF_SEARCHING" "LDAP_DEREF_FINDING"
452 ; "LDAP_DEREF_ALWAYS" "LDAP_OPT_DEREF" "LDAP_OPT_SIZELIMIT"
453 ; "LDAP_OPT_TIMELIMIT" "LDAP_OPT_PROTOCOL_VERSION"
454 ; "LDAP_OPT_ERROR_NUMBER" "LDAP_OPT_REFERRALS" "LDAP_OPT_RESTART"
455 ; "LDAP_OPT_HOST_NAME" "LDAP_OPT_ERROR_STRING"
456 ; "LDAP_OPT_MATCHED_DN" "LDAP_OPT_SERVER_CONTROLS"
457 ; "LDAP_OPT_CLIENT_CONTROLS" "GSLC_SSL_NO_AUTH"
458 ; "GSLC_SSL_ONEWAY_AUTH" "GSLC_SSL_TWOWAY_AUTH" "MCAL_SUNDAY"
459 ; "MCAL_MONDAY" "MCAL_TUESDAY" "MCAL_WEDNESDAY" "MCAL_THURSDAY"
460 ; "MCAL_FRIDAY" "MCAL_SATURDAY" "MCAL_JANUARY" "MCAL_FEBRUARY"
461 ; "MCAL_MARCH" "MCAL_APRIL" "MCAL_MAY" "MCAL_JUNE" "MCAL_JULY"
462 ; "MCAL_AUGUST" "MCAL_SEPTEMBER" "MCAL_OCTOBER" "MCAL_NOVEMBER"
463 ; "MCAL_RECUR_NONE" "MCAL_RECUR_DAILY" "MCAL_RECUR_WEEKLY"
464 ; "MCAL_RECUR_MONTHLY_MDAY" "MCAL_RECUR_MONTHLY_WDAY"
465 ; "MCAL_RECUR_YEARLY" "MCAL_M_SUNDAY" "MCAL_M_MONDAY"
466 ; "MCAL_M_TUESDAY" "MCAL_M_WEDNESDAY" "MCAL_M_THURSDAY"
467 ; "MCAL_M_FRIDAY" "MCAL_M_SATURDAY" "MCAL_M_WEEKDAYS"
468 ; "MCAL_M_WEEKEND" "MCAL_M_ALLDAYS" "MCRYPT_" "MCRYPT_"
469 ; "MCRYPT_ENCRYPT" "MCRYPT_DECRYPT" "MCRYPT_DEV_RANDOM"
470 ; "MCRYPT_DEV_URANDOM" "MCRYPT_RAND" "SWFBUTTON_HIT"
471 ; "SWFBUTTON_DOWN" "SWFBUTTON_OVER" "SWFBUTTON_UP"
472 ; "SWFBUTTON_MOUSEUPOUTSIDE" "SWFBUTTON_DRAGOVER"
473 ; "SWFBUTTON_DRAGOUT" "SWFBUTTON_MOUSEUP" "SWFBUTTON_MOUSEDOWN"
474 ; "SWFBUTTON_MOUSEOUT" "SWFBUTTON_MOUSEOVER"
475 ; "SWFFILL_RADIAL_GRADIENT" "SWFFILL_LINEAR_GRADIENT"
476 ; "SWFFILL_TILED_BITMAP" "SWFFILL_CLIPPED_BITMAP"
477 ; "SWFTEXTFIELD_HASLENGTH" "SWFTEXTFIELD_NOEDIT"
478 ; "SWFTEXTFIELD_PASSWORD" "SWFTEXTFIELD_MULTILINE"
479 ; "SWFTEXTFIELD_WORDWRAP" "SWFTEXTFIELD_DRAWBOX"
480 ; "SWFTEXTFIELD_NOSELECT" "SWFTEXTFIELD_HTML"
481 ; "SWFTEXTFIELD_ALIGN_LEFT" "SWFTEXTFIELD_ALIGN_RIGHT"
482 ; "SWFTEXTFIELD_ALIGN_CENTER" "SWFTEXTFIELD_ALIGN_JUSTIFY"
483 ; "UDM_FIELD_URLID" "UDM_FIELD_URL" "UDM_FIELD_CONTENT"
484 ; "UDM_FIELD_TITLE" "UDM_FIELD_KEYWORDS" "UDM_FIELD_DESC"
485 ; "UDM_FIELD_DESCRIPTION" "UDM_FIELD_TEXT" "UDM_FIELD_SIZE"
486 ; "UDM_FIELD_RATING" "UDM_FIELD_SCORE" "UDM_FIELD_MODIFIED"
487 ; "UDM_FIELD_ORDER" "UDM_FIELD_CRC" "UDM_FIELD_CATEGORY"
488 ; "UDM_PARAM_PAGE_SIZE" "UDM_PARAM_PAGE_NUM"
489 ; "UDM_PARAM_SEARCH_MODE" "UDM_PARAM_CACHE_MODE"
490 ; "UDM_PARAM_TRACK_MODE" "UDM_PARAM_PHRASE_MODE"
491 ; "UDM_PARAM_CHARSET" "UDM_PARAM_STOPTABLE"
492 ; "UDM_PARAM_STOP_TABLE" "UDM_PARAM_STOPFILE"
493 ; "UDM_PARAM_STOP_FILE" "UDM_PARAM_WEIGHT_FACTOR"
494 ; "UDM_PARAM_WORD_MATCH" "UDM_PARAM_MAX_WORD_LEN"
495 ; "UDM_PARAM_MAX_WORDLEN" "UDM_PARAM_MIN_WORD_LEN"
496 ; "UDM_PARAM_MIN_WORDLEN" "UDM_PARAM_ISPELL_PREFIXES"
497 ; "UDM_PARAM_ISPELL_PREFIX" "UDM_PARAM_PREFIXES"
498 ; "UDM_PARAM_PREFIX" "UDM_PARAM_CROSS_WORDS"
499 ; "UDM_PARAM_CROSSWORDS" "UDM_LIMIT_CAT" "UDM_LIMIT_URL"
500 ; "UDM_LIMIT_TAG" "UDM_LIMIT_LANG" "UDM_LIMIT_DATE"
501 ; "UDM_PARAM_FOUND" "UDM_PARAM_NUM_ROWS" "UDM_PARAM_WORDINFO"
502 ; "UDM_PARAM_WORD_INFO" "UDM_PARAM_SEARCHTIME"
503 ; "UDM_PARAM_SEARCH_TIME" "UDM_PARAM_FIRST_DOC"
504 ; "UDM_PARAM_LAST_DOC" "UDM_MODE_ALL" "UDM_MODE_ANY"
505 ; "UDM_MODE_BOOL" "UDM_MODE_PHRASE" "UDM_CACHE_ENABLED"
506 ; "UDM_CACHE_DISABLED" "UDM_TRACK_ENABLED" "UDM_TRACK_DISABLED"
507 ; "UDM_PHRASE_ENABLED" "UDM_PHRASE_DISABLED"
508 ; "UDM_CROSS_WORDS_ENABLED" "UDM_CROSSWORDS_ENABLED"
509 ; "UDM_CROSS_WORDS_DISABLED" "UDM_CROSSWORDS_DISABLED"
510 ; "UDM_PREFIXES_ENABLED" "UDM_PREFIX_ENABLED"
511 ; "UDM_ISPELL_PREFIXES_ENABLED" "UDM_ISPELL_PREFIX_ENABLED"
512 ; "UDM_PREFIXES_DISABLED" "UDM_PREFIX_DISABLED"
513 ; "UDM_ISPELL_PREFIXES_DISABLED" "UDM_ISPELL_PREFIX_DISABLED"
514 ; "UDM_ISPELL_TYPE_AFFIX" "UDM_ISPELL_TYPE_SPELL"
515 ; "UDM_ISPELL_TYPE_DB" "UDM_ISPELL_TYPE_SERVER" "UDM_MATCH_WORD"
516 ; "UDM_MATCH_BEGIN" "UDM_MATCH_SUBSTR" "UDM_MATCH_END"
517 ; "MSQL_ASSOC" "MSQL_NUM" "MSQL_BOTH" "MYSQL_ASSOC" "MYSQL_NUM"
518 ; "MYSQL_BOTH" "MYSQL_USE_RESULT" "MYSQL_STORE_RESULT"
519 ; "OCI_DEFAULT" "OCI_DESCRIBE_ONLY" "OCI_COMMIT_ON_SUCCESS"
520 ; "OCI_EXACT_FETCH" "SQLT_BFILEE" "SQLT_CFILEE" "SQLT_CLOB"
521 ; "SQLT_BLOB" "SQLT_RDD" "OCI_B_SQLT_NTY" "OCI_SYSDATE"
522 ; "OCI_B_BFILE" "OCI_B_CFILEE" "OCI_B_CLOB" "OCI_B_BLOB"
523 ; "OCI_B_ROWID" "OCI_B_CURSOR" "OCI_B_BIN" "OCI_ASSOC" "OCI_NUM"
524 ; "OCI_BOTH" "OCI_RETURN_NULLS" "OCI_RETURN_LOBS"
525 ; "OCI_DTYPE_FILE" "OCI_DTYPE_LOB" "OCI_DTYPE_ROWID" "OCI_D_FILE"
526 ; "OCI_D_LOB" "OCI_D_ROWID" "ODBC_TYPE" "ODBC_BINMODE_PASSTHRU"
527 ; "ODBC_BINMODE_RETURN" "ODBC_BINMODE_CONVERT" "SQL_ODBC_CURSORS"
528 ; "SQL_CUR_USE_DRIVER" "SQL_CUR_USE_IF_NEEDED" "SQL_CUR_USE_ODBC"
529 ; "SQL_CONCURRENCY" "SQL_CONCUR_READ_ONLY" "SQL_CONCUR_LOCK"
530 ; "SQL_CONCUR_ROWVER" "SQL_CONCUR_VALUES" "SQL_CURSOR_TYPE"
531 ; "SQL_CURSOR_FORWARD_ONLY" "SQL_CURSOR_KEYSET_DRIVEN"
532 ; "SQL_CURSOR_DYNAMIC" "SQL_CURSOR_STATIC" "SQL_KEYSET_SIZE"
533 ; "SQL_CHAR" "SQL_VARCHAR" "SQL_LONGVARCHAR" "SQL_DECIMAL"
534 ; "SQL_NUMERIC" "SQL_BIT" "SQL_TINYINT" "SQL_SMALLINT"
535 ; "SQL_INTEGER" "SQL_BIGINT" "SQL_REAL" "SQL_FLOAT" "SQL_DOUBLE"
536 ; "SQL_BINARY" "SQL_VARBINARY" "SQL_LONGVARBINARY" "SQL_DATE"
537 ; "SQL_TIME" "SQL_TIMESTAMP" "SQL_TYPE_DATE" "SQL_TYPE_TIME"
538 ; "SQL_TYPE_TIMESTAMP" "SQL_BEST_ROWID" "SQL_ROWVER"
539 ; "SQL_SCOPE_CURROW" "SQL_SCOPE_TRANSACTION" "SQL_SCOPE_SESSION"
540 ; "SQL_NO_NULLS" "SQL_NULLABLE" "SQL_INDEX_UNIQUE"
541 ; "SQL_INDEX_ALL" "SQL_ENSURE" "SQL_QUICK"
542 ; "X509_PURPOSE_SSL_CLIENT" "X509_PURPOSE_SSL_SERVER"
543 ; "X509_PURPOSE_NS_SSL_SERVER" "X509_PURPOSE_SMIME_SIGN"
544 ; "X509_PURPOSE_SMIME_ENCRYPT" "X509_PURPOSE_CRL_SIGN"
545 ; "X509_PURPOSE_ANY" "PKCS7_DETACHED" "PKCS7_TEXT"
546 ; "PKCS7_NOINTERN" "PKCS7_NOVERIFY" "PKCS7_NOCHAIN"
547 ; "PKCS7_NOCERTS" "PKCS7_NOATTR" "PKCS7_BINARY" "PKCS7_NOSIGS"
548 ; "OPENSSL_PKCS1_PADDING" "OPENSSL_SSLV23_PADDING"
549 ; "OPENSSL_NO_PADDING" "OPENSSL_PKCS1_OAEP_PADDING"
550 ; "ORA_BIND_INOUT" "ORA_BIND_IN" "ORA_BIND_OUT"
551 ; "ORA_FETCHINTO_ASSOC" "ORA_FETCHINTO_NULLS"
552 ; "PREG_PATTERN_ORDER" "PREG_SET_ORDER" "PREG_SPLIT_NO_EMPTY"
553 ; "PREG_SPLIT_DELIM_CAPTURE" "PGSQL_ASSOC" "PGSQL_NUM"
554 ; "PGSQL_BOTH" "PRINTER_COPIES" "PRINTER_MODE" "PRINTER_TITLE"
555 ; "PRINTER_DEVICENAME" "PRINTER_DRIVERVERSION"
556 ; "PRINTER_RESOLUTION_Y" "PRINTER_RESOLUTION_X" "PRINTER_SCALE"
557 ; "PRINTER_BACKGROUND_COLOR" "PRINTER_PAPER_LENGTH"
558 ; "PRINTER_PAPER_WIDTH" "PRINTER_PAPER_FORMAT"
559 ; "PRINTER_FORMAT_CUSTOM" "PRINTER_FORMAT_LETTER"
560 ; "PRINTER_FORMAT_LEGAL" "PRINTER_FORMAT_A3" "PRINTER_FORMAT_A4"
561 ; "PRINTER_FORMAT_A5" "PRINTER_FORMAT_B4" "PRINTER_FORMAT_B5"
562 ; "PRINTER_FORMAT_FOLIO" "PRINTER_ORIENTATION"
563 ; "PRINTER_ORIENTATION_PORTRAIT" "PRINTER_ORIENTATION_LANDSCAPE"
564 ; "PRINTER_TEXT_COLOR" "PRINTER_TEXT_ALIGN" "PRINTER_TA_BASELINE"
565 ; "PRINTER_TA_BOTTOM" "PRINTER_TA_TOP" "PRINTER_TA_CENTER"
566 ; "PRINTER_TA_LEFT" "PRINTER_TA_RIGHT" "PRINTER_PEN_SOLID"
567 ; "PRINTER_PEN_DASH" "PRINTER_PEN_DOT" "PRINTER_PEN_DASHDOT"
568 ; "PRINTER_PEN_DASHDOTDOT" "PRINTER_PEN_INVISIBLE"
569 ; "PRINTER_BRUSH_SOLID" "PRINTER_BRUSH_CUSTOM"
570 ; "PRINTER_BRUSH_DIAGONAL" "PRINTER_BRUSH_CROSS"
571 ; "PRINTER_BRUSH_DIAGCROSS" "PRINTER_BRUSH_FDIAGONAL"
572 ; "PRINTER_BRUSH_HORIZONTAL" "PRINTER_BRUSH_VERTICAL"
573 ; "PRINTER_FW_THIN" "PRINTER_FW_ULTRALIGHT" "PRINTER_FW_LIGHT"
574 ; "PRINTER_FW_NORMAL" "PRINTER_FW_MEDIUM" "PRINTER_FW_BOLD"
575 ; "PRINTER_FW_ULTRABOLD" "PRINTER_FW_HEAVY" "PRINTER_ENUM_LOCAL"
576 ; "PRINTER_ENUM_NAME" "PRINTER_ENUM_SHARED"
577 ; "PRINTER_ENUM_DEFAULT" "PRINTER_ENUM_CONNECTIONS"
578 ; "PRINTER_ENUM_NETWORK" "PRINTER_ENUM_REMOTE" "PSPELL_FAST"
579 ; "PSPELL_NORMAL" "PSPELL_BAD_SPELLERS" "PSPELL_RUN_TOGETHER"
580 ; "SID" "SID" "AF_UNIX" "AF_INET" "SOCK_STREAM" "SOCK_DGRAM"
581 ; "SOCK_RAW" "SOCK_SEQPACKET" "SOCK_RDM" "MSG_OOB" "MSG_WAITALL"
582 ; "MSG_PEEK" "MSG_DONTROUTE" "SO_DEBUG" "SO_REUSEADDR"
583 ; "SO_KEEPALIVE" "SO_DONTROUTE" "SO_LINGER" "SO_BROADCAST"
584 ; "SO_OOBINLINE" "SO_SNDBUF" "SO_RCVBUF" "SO_SNDLOWAT"
585 ; "SO_RCVLOWAT" "SO_SNDTIMEO" "SO_RCVTIMEO" "SO_TYPE" "SO_ERROR"
586 ; "SOL_SOCKET" "PHP_NORMAL_READ" "PHP_BINARY_READ"
587 ; "PHP_SYSTEM_READ" "SOL_TCP" "SOL_UDP" "MOD_COLOR" "MOD_MATRIX"
588 ; "TYPE_PUSHBUTTON" "TYPE_MENUBUTTON" "BSHitTest" "BSDown"
589 ; "BSOver" "BSUp" "OverDowntoIdle" "IdletoOverDown"
590 ; "OutDowntoIdle" "OutDowntoOverDown" "OverDowntoOutDown"
591 ; "OverUptoOverDown" "OverUptoIdle" "IdletoOverUp" "ButtonEnter"
592 ; "ButtonExit" "MenuEnter" "MenuExit" "XML_ERROR_NONE"
593 ; "XML_ERROR_NO_MEMORY" "XML_ERROR_SYNTAX"
594 ; "XML_ERROR_NO_ELEMENTS" "XML_ERROR_INVALID_TOKEN"
595 ; "XML_ERROR_UNCLOSED_TOKEN" "XML_ERROR_PARTIAL_CHAR"
596 ; "XML_ERROR_TAG_MISMATCH" "XML_ERROR_DUPLICATE_ATTRIBUTE"
597 ; "XML_ERROR_JUNK_AFTER_DOC_ELEMENT" "XML_ERROR_PARAM_ENTITY_REF"
598 ; "XML_ERROR_UNDEFINED_ENTITY" "XML_ERROR_RECURSIVE_ENTITY_REF"
599 ; "XML_ERROR_ASYNC_ENTITY" "XML_ERROR_BAD_CHAR_REF"
600 ; "XML_ERROR_BINARY_ENTITY_REF"
601 ; "XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF"
602 ; "XML_ERROR_MISPLACED_XML_PI" "XML_ERROR_UNKNOWN_ENCODING"
603 ; "XML_ERROR_INCORRECT_ENCODING"
604 ; "XML_ERROR_UNCLOSED_CDATA_SECTION"
605 ; "XML_ERROR_EXTERNAL_ENTITY_HANDLING" "XML_OPTION_CASE_FOLDING"
606 ; "XML_OPTION_TARGET_ENCODING" "XML_OPTION_SKIP_TAGSTART"
607 ; "XML_OPTION_SKIP_WHITE" "YPERR_BADARGS" "YPERR_BADDB"
608 ; "YPERR_BUSY" "YPERR_DOMAIN" "YPERR_KEY" "YPERR_MAP"
609 ; "YPERR_NODOM" "YPERR_NOMORE" "YPERR_PMAP" "YPERR_RESRC"
610 ; "YPERR_RPC" "YPERR_YPBIND" "YPERR_YPERR" "YPERR_YPSERV"
611 ; "YPERR_VERS" "FORCE_GZIP" "FORCE_DEFLATE"
614 ; "PEAR_ERROR_RETURN" "PEAR_ERROR_PRINT" "PEAR_ERROR_TRIGGER"
615 ; "PEAR_ERROR_DIE" "PEAR_ERROR_CALLBACK" "OS_WINDOWS" "OS_UNIX"
616 ; "PEAR_OS" "DB_OK" "DB_ERROR" "DB_ERROR_SYNTAX"
617 ; "DB_ERROR_CONSTRAINT" "DB_ERROR_NOT_FOUND"
618 ; "DB_ERROR_ALREADY_EXISTS" "DB_ERROR_UNSUPPORTED"
619 ; "DB_ERROR_MISMATCH" "DB_ERROR_INVALID" "DB_ERROR_NOT_CAPABLE"
620 ; "DB_ERROR_TRUNCATED" "DB_ERROR_INVALID_NUMBER"
621 ; "DB_ERROR_INVALID_DATE" "DB_ERROR_DIVZERO"
622 ; "DB_ERROR_NODBSELECTED" "DB_ERROR_CANNOT_CREATE"
623 ; "DB_ERROR_CANNOT_DELETE" "DB_ERROR_CANNOT_DROP"
624 ; "DB_ERROR_NOSUCHTABLE" "DB_ERROR_NOSUCHFIELD"
625 ; "DB_ERROR_NEED_MORE_DATA" "DB_ERROR_NOT_LOCKED"
626 ; "DB_ERROR_VALUE_COUNT_ON_ROW" "DB_ERROR_INVALID_DSN"
627 ; "DB_ERROR_CONNECT_FAILED" "DB_WARNING" "DB_WARNING_READ_ONLY"
628 ; "DB_PARAM_SCALAR" "DB_PARAM_OPAQUE" "DB_BINMODE_PASSTHRU"
629 ; "DB_BINMODE_RETURN" "DB_BINMODE_CONVERT" "DB_FETCHMODE_DEFAULT"
630 ; "DB_FETCHMODE_ORDERED" "DB_FETCHMODE_ASSOC"
631 ; "DB_FETCHMODE_FLIPPED" "DB_GETMODE_ORDERED" "DB_GETMODE_ASSOC"
632 ; "DB_GETMODE_FLIPPED" "DB_TABLEINFO_ORDER"
633 ; "DB_TABLEINFO_ORDERTABLE" "DB_TABLEINFO_FULL"
638 (defconst php-keywords
641 ;; "class", "new" and "extends" get special treatment
642 ;; "case" and "default" get special treatment elsewhere
643 '("and" "as" "break" "continue" "declare" "do" "echo" "else" "elseif"
644 "endfor" "endforeach" "endif" "endswitch" "endwhile" "exit"
645 "extends" "for" "foreach" "global" "if" "include" "include_once"
646 "next" "or" "require" "require_once" "return" "static" "switch"
647 "then" "var" "while" "xor" "private" "throw" "catch" "try"
648 "instanceof" "catch all" "finally")))
651 (defconst php-identifier
653 '"[a-zA-Z\_\x7f-\xff][a-zA-Z0-9\_\x7f-\xff]*")
654 "Characters in a PHP identifier.")
658 (regexp-opt '("array" "bool" "boolean" "char" "const" "double" "float"
659 "int" "integer" "long" "mixed" "object" "real"
663 (defconst php-superglobals
665 (regexp-opt '("_GET" "_POST" "_COOKIE" "_SESSION" "_ENV" "GLOBALS"
666 "_SERVER" "_FILES" "_REQUEST")))
667 "PHP superglobal variables.")
669 ;; Set up font locking
670 (defconst php-font-lock-keywords-1
674 (concat "\\<\\(" php-constants "\\)\\>")
675 'font-lock-constant-face)
679 (concat "\\<\\(" php-keywords "\\)\\>")
680 'font-lock-keyword-face)
682 ;; Fontify keywords and targets, and case default tags.
683 (list "\\<\\(break\\|case\\|continue\\)\\>[ \t]*\\(-?\\(?:\\sw\\|\\s_\\)+\\)?"
684 '(1 font-lock-keyword-face) '(2 font-lock-constant-face t t))
685 ;; This must come after the one for keywords and targets.
686 '(":" ("^[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)[ \t]*:[ \t]*$"
687 (beginning-of-line) (end-of-line)
688 (1 font-lock-constant-face)))
690 ;; treat 'print' as keyword only when not used like a function name
691 '("\\<print\\s-*(" . default)
692 '("\\<print\\>" . font-lock-keyword-face)
695 '("<\\?\\(php\\)?" . font-lock-constant-face)
696 '("\\?>" . font-lock-constant-face)
698 ;; Fontify ASP-style tag
699 '("<\\%\\(=\\)?" . font-lock-constant-face)
700 '("\\%>" . font-lock-constant-face)
703 "Subdued level highlighting for PHP mode.")
705 (defconst php-font-lock-keywords-2
707 php-font-lock-keywords-1
711 '("\\<\\(class\\|interface\\)[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?"
712 (1 font-lock-keyword-face) (2 font-lock-type-face nil t))
713 ;; handle several words specially, to include following word,
714 ;; thereby excluding it from unknown-symbol checks later
715 ;; FIX to handle implementing multiple
716 ;; currently breaks on "class Foo implements Bar, Baz"
717 '("\\<\\(new\\|extends\\|implements\\)\\s-+\\$?\\(\\(?:\\sw\\|\\s_\\)+\\)"
718 (1 font-lock-keyword-face) (2 font-lock-type-face))
720 ;; function declaration
721 '("\\<\\(function\\)\\s-+&?\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*("
722 (1 font-lock-keyword-face)
723 (2 font-lock-function-name-face nil t))
726 '("\\(self\\|parent\\)\\W" (1 font-lock-constant-face nil nil))
728 ;; method and variable features
729 '("\\<\\(private\\|protected\\|public\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
730 (1 font-lock-keyword-face))
733 '("^[ \t]*\\(abstract\\|static\\|final\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
734 (1 font-lock-keyword-face))
737 '("^[ \t]*\\(static\\|const\\)\\s-+\\$?\\(?:\\sw\\|\\s_\\)+"
738 (1 font-lock-keyword-face))
740 "Medium level highlighting for PHP mode.")
742 (defconst php-font-lock-keywords-3
744 php-font-lock-keywords-2
747 ;; <word> or </word> for HTML
748 '("</?\\sw+[^>]*>" . font-lock-constant-face)
751 '("&\\w+;" . font-lock-variable-name-face)
753 ;; warn about '$' immediately after ->
754 '("\\$\\(?:\\sw\\|\\s_\\)+->\\s-*\\(\\$\\)\\(\\(?:\\sw\\|\\s_\\)+\\)"
755 (1 font-lock-warning-face) (2 default))
757 ;; warn about $word.word -- it could be a valid concatenation,
758 ;; but without any spaces we'll assume $word->word was meant.
759 '("\\$\\(?:\\sw\\|\\s_\\)+\\(\\.\\)\\sw"
760 1 font-lock-warning-face)
762 ;; Warn about ==> instead of =>
763 '("==+>" . font-lock-warning-face)
765 ;; exclude casts from bare-word treatment (may contain spaces)
766 `(,(concat "(\\s-*\\(" php-types "\\)\\s-*)")
767 1 font-lock-type-face)
769 ;; PHP5: function declarations may contain classes as parameters type
770 `(,(concat "[(,]\\s-*\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-+\\$\\(?:\\sw\\|\\s_\\)+\\>")
771 1 font-lock-type-face)
773 ;; Fontify variables and function calls
774 '("\\$\\(this\\|that\\)\\W" (1 font-lock-constant-face nil nil))
775 `(,(concat "\\$\\(" php-superglobals "\\)\\W")
776 (1 font-lock-constant-face nil nil)) ; $_GET & co
777 '("\\$\\(\\(?:\\sw\\|\\s_\\)+\\)" (1 font-lock-variable-name-face)) ; $variable
778 '("->\\(\\(?:\\sw\\|\\s_\\)+\\)" (1 font-lock-variable-name-face t t)) ; ->variable
779 '("->\\(\\(?:\\sw\\|\\s_\\)+\\)\\s-*(" . (1 default t t)) ; ->function_call
780 '("\\(?:\\sw\\|\\s_\\)+::\\(?:\\sw\\|\\s_\\)+\\s-*(" . default) ; class::method call
781 '("\\<\\(?:\\sw\\|\\s_\\)+\\s-*[[(]" . default) ; word( or word[
782 '("\\<[0-9]+" . default) ; number (also matches word)
784 ;; Warn on any words not already fontified
785 '("\\<\\(?:\\sw\\|\\s_\\)+\\>" . font-lock-warning-face)
787 "Gauchy level highlighting for PHP mode.")
789 (defconst php-font-lock-syntactic-keywords
791 ;; Mark shell-style comments. font-lock handles this in a
792 ;; separate pass from normal syntactic scanning (somehow), so we
793 ;; get a chance to mark these in addition to C and C++ style
794 ;; comments. This only works in GNU Emacs, not XEmacs 21 which
795 ;; seems to ignore this same code if we try to use it.
797 ;; Mark _all_ # chars as being comment-start. That will be
798 ;; ignored when inside a quoted string.
801 ;; Mark all newlines ending a line with # as being comment-end.
802 ;; This causes a problem, premature end-of-comment, when '#'
803 ;; appears inside a multiline C-style comment. Oh well.
808 ;; Define the imenu-generic-expression for PHP mode.
809 ;; To use, execute M-x imenu, then click on Functions or Classes,
810 ;; then select given function/class name to go to its definition.
811 ;; [Contributed by Gerrit Riessen]
812 (defvar php-imenu-generic-expression
815 "^\\s-*function\\s-+\\([a-zA-Z0-9_]+\\)\\s-*(" 1)
817 "^\\s-*class\\s-+\\([a-zA-Z0-9_]+\\)\\s-*" 1)
819 "Imenu generic expression for PHP Mode. See `imenu-generic-expression'."
822 ;; Add "foreach" to conditional introducing keywords
823 (defconst php-conditional-key nil)
824 (let ((all-kws "for\\|if\\|do\\|else\\|while\\|switch\\|foreach\\|elseif\\|try\\|finally\\|try\\|catch all")
827 (setq php-conditional-key (concat front all-kws back)))
829 (defconst php-class-kwds "class\\|interface")
831 (defconst php-class-key
833 "\\(" php-class-kwds "\\)\\s +"
834 c-symbol-key ;name of the class
835 "\\(\\s *extends\\s *" c-symbol-key "\\)?" ;maybe followed by superclass
836 "\\(\\s *implements *[^{]+{\\)?" ;maybe the adopted protocols list
839 ;; Create "default" symbol for GNU Emacs so that both XEmacs and GNU
840 ;; emacs can refer to the default face by a variable named "default".
841 (unless (boundp 'default)
842 (defvar default 'default))
844 ;; Create faces for XEmacs
845 (unless (boundp 'font-lock-keyword-face)
846 (copy-face 'bold 'font-lock-keyword-face))
847 (unless (boundp 'font-lock-constant-face)
848 (copy-face 'font-lock-keyword-face 'font-lock-constant-face))
852 ;;; php-mode.el ends here