diff options
-rw-r--r-- | docs/src/lexers.txt | 4 | ||||
-rw-r--r-- | pygments/lexers/_mapping.py | 2 | ||||
-rw-r--r-- | pygments/lexers/text.py | 45 | ||||
-rw-r--r-- | tests/examplefiles/apache2.conf | 393 |
4 files changed, 417 insertions, 27 deletions
diff --git a/docs/src/lexers.txt b/docs/src/lexers.txt index bfae517f..ff20c241 100644 --- a/docs/src/lexers.txt +++ b/docs/src/lexers.txt @@ -707,8 +707,8 @@ Text lexers *New in Pygments 0.6.* - :Aliases: ``apacheconf``, ``aconf`` - :Filename patterns: ``.htaccess``, ``apache.conf`` + :Aliases: ``apacheconf``, ``aconf``, ``apache`` + :Filename patterns: ``.htaccess``, ``apache.conf``, ``apache2.conf`` :Mimetypes: None diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py index fb944275..0688ef11 100644 --- a/pygments/lexers/_mapping.py +++ b/pygments/lexers/_mapping.py @@ -14,7 +14,7 @@ """ LEXERS = { - 'ApacheConfLexer': ('pygments.lexers.text', 'ApacheConf', ('apacheconf', 'aconf'), ('.htaccess', 'apache.conf'), ()), + 'ApacheConfLexer': ('pygments.lexers.text', 'ApacheConf', ('apacheconf', 'aconf', 'apache'), ('.htaccess', 'apache.conf', 'apache2.conf'), ()), 'BBCodeLexer': ('pygments.lexers.text', 'BBCode', ('bbcode',), (), ()), 'BashLexer': ('pygments.lexers.other', 'Bash', ('bash', 'sh'), ('*.sh',), ('application/x-sh', 'application/x-shellscript')), 'BooLexer': ('pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',), ('text/x-boo',)), diff --git a/pygments/lexers/text.py b/pygments/lexers/text.py index 6d39bdfe..b8388dc4 100644 --- a/pygments/lexers/text.py +++ b/pygments/lexers/text.py @@ -274,38 +274,35 @@ class GroffLexer(RegexLexer): if text[1:3].isalnum() and text[3].isspace(): return 0.9 + class ApacheConfLexer(RegexLexer): """ Lex Apache configuration like files. """ name = 'ApacheConf' - aliases = ['apacheconf', 'aconf'] - filenames = ['.htaccess', 'apache.conf'] + aliases = ['apacheconf', 'aconf', 'apache'] + filenames = ['.htaccess', 'apache.conf', 'apache2.conf'] + flags = re.MULTILINE | re.IGNORECASE tokens = { 'root': [ - (r'(\s*)(#.*)', - bygroups(Text, Comment)), - (r'^(\s*)(</?\w+)', - bygroups(Text, Name.Tag), 'section'), - (r'^(\s*)(\w+)(\s+)', - bygroups(Text, Name.Attribute, Text), - 'value'), - (r'[^<\n]+', Text), - ], - 'datatypes': [ - (r'\d+\b', Number), - (r'"(\\\\|\\"|[^"\n])*"', String.Double), - (r'\S+\b', String.Symbol), - (r'[ \t]+', Text), - (r'[^\n]+', String), - ], - 'section': [ - (r'>', Name.Tag, '#pop'), - include('datatypes'), + (r'^(\s*)(#.*?)$', bygroups(Text, Comment)), + (r'\s+', Text), + (r'(<[^\s>]+)(?:(\s+)(.*?))?(>)', + bygroups(Name.Tag, Text, String, Name.Tag)), + (r'([a-zA-Z][a-zA-Z0-9]*)(\s+)', + bygroups(Name.Builtin, Text), 'value') ], 'value': [ - include('datatypes'), - (r'\n', Text, '#pop'), - ], + (r'$', Text, '#pop'), + (r'\s', Text), # XXX: \s+ does not work with examplefile + (r'\d+', Number), + (r'/([a-zA-Z0-9][a-zA-Z0-9_./-]+)', String.Other), + (r'(on|off|none|any|all|double|email|dns|min|minimal|' + r'os|productonly|full|emerg|alert|crit|error|warn|' + r'notice|info|debug|registry|script|inetd|standalone|' + r'user|group)\b', Keyword), + (r'"([^"\\]*(?:\\.[^"\\]*)*)"', String.Double), + (r'[^\s"]+', Text) + ] } diff --git a/tests/examplefiles/apache2.conf b/tests/examplefiles/apache2.conf new file mode 100644 index 00000000..d0e838e0 --- /dev/null +++ b/tests/examplefiles/apache2.conf @@ -0,0 +1,393 @@ +# Based upon the NCSA server configuration files originally by Rob McCool. +# Changed extensively for the Debian package by Daniel Stone <daniel@sfarc.net> +# and also by Thom May <thom@debian.org>. + +# ServerRoot: The top of the directory tree under which the server's +# configuration, error, and log files are kept. +# +# NOTE! If you intend to place this on an NFS (or otherwise network) +# mounted filesystem then please read the LockFile documentation +# (available at <URL:http://www.apache.org/docs/mod/core.html#lockfile>); +# you will save yourself a lot of trouble. + +ServerRoot "/etc/apache2" + +# The LockFile directive sets the path to the lockfile used when Apache +# is compiled with either USE_FCNTL_SERIALIZED_ACCEPT or +# USE_FLOCK_SERIALIZED_ACCEPT. This directive should normally be left at +# its default value. The main reason for changing it is if the logs +# directory is NFS mounted, since the lockfile MUST BE STORED ON A LOCAL +# DISK. The PID of the main server process is automatically appended to +# the filename. + +LockFile /var/lock/apache2/accept.lock + +# PidFile: The file in which the server should record its process +# identification number when it starts. + +PidFile /var/run/apache2.pid + +# Timeout: The number of seconds before receives and sends time out. + +Timeout 300 + +# KeepAlive: Whether or not to allow persistent connections (more than +# one request per connection). Set to "Off" to deactivate. + +KeepAlive On + +# MaxKeepAliveRequests: The maximum number of requests to allow +# during a persistent connection. Set to 0 to allow an unlimited amount. +# We recommend you leave this number high, for maximum performance. + +MaxKeepAliveRequests 100 + +# KeepAliveTimeout: Number of seconds to wait for the next request from the +# same client on the same connection. + +KeepAliveTimeout 15 + +## +## Server-Pool Size Regulation (MPM specific) +## + +# prefork MPM +# StartServers ......... number of server processes to start +# MinSpareServers ...... minimum number of server processes which are kept spare +# MaxSpareServers ...... maximum number of server processes which are kept spare +# MaxClients ........... maximum number of server processes allowed to start +# MaxRequestsPerChild .. maximum number of requests a server process serves +<IfModule prefork.c> +StartServers 5 +MinSpareServers 5 +MaxSpareServers 10 +MaxClients 20 +MaxRequestsPerChild 0 +</IfModule> + +# pthread MPM +# StartServers ......... initial number of server processes to start +# MaxClients ........... maximum number of server processes allowed to start +# MinSpareThreads ...... minimum number of worker threads which are kept spare +# MaxSpareThreads ...... maximum number of worker threads which are kept spare +# ThreadsPerChild ...... constant number of worker threads in each server process +# MaxRequestsPerChild .. maximum number of requests a server process serves +<IfModule worker.c> +StartServers 2 +MaxClients 150 +MinSpareThreads 25 +MaxSpareThreads 75 +ThreadsPerChild 25 +MaxRequestsPerChild 0 +</IfModule> + +# perchild MPM +# NumServers ........... constant number of server processes +# StartThreads ......... initial number of worker threads in each server process +# MinSpareThreads ...... minimum number of worker threads which are kept spare +# MaxSpareThreads ...... maximum number of worker threads which are kept spare +# MaxThreadsPerChild ... maximum number of worker threads in each server process +# MaxRequestsPerChild .. maximum number of connections per server process (then it dies) +<IfModule perchild.c> +NumServers 5 +StartThreads 5 +MinSpareThreads 5 +MaxSpareThreads 10 +MaxThreadsPerChild 20 +MaxRequestsPerChild 0 +AcceptMutex fcntl +</IfModule> + +User www-data +Group www-data + +# The following directives define some format nicknames for use with +# a CustomLog directive (see below). +LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined +LogFormat "%h %l %u %t \"%r\" %>s %b" common +LogFormat "%{Referer}i -> %U" referer +LogFormat "%{User-agent}i" agent + + +# Global error log. +ErrorLog /var/log/apache2/error.log + +# Include module configuration: +Include /etc/apache2/mods-enabled/*.load +Include /etc/apache2/mods-enabled/*.conf + +# Include all the user configurations: +Include /etc/apache2/httpd.conf + +# Include ports listing +Include /etc/apache2/ports.conf + +# Include generic snippets of statements +Include /etc/apache2/conf.d/[^.#]* + +#Let's have some Icons, shall we? +Alias /icons/ "/usr/share/apache2/icons/" +<Directory "/usr/share/apache2/icons"> + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Allow from all +</Directory> + +# Set up the default error docs. +# +# Customizable error responses come in three flavors: +# 1) plain text 2) local redirects 3) external redirects +# +# Some examples: +#ErrorDocument 500 "The server made a boo boo." +#ErrorDocument 404 /missing.html +#ErrorDocument 404 "/cgi-bin/missing_handler.pl" +#ErrorDocument 402 http://www.example.com/subscription_info.html +# + +# +# Putting this all together, we can Internationalize error responses. +# +# We use Alias to redirect any /error/HTTP_<error>.html.var response to +# our collection of by-error message multi-language collections. We use +# includes to substitute the appropriate text. +# +# You can modify the messages' appearance without changing any of the +# default HTTP_<error>.html.var files by adding the line; +# +# Alias /error/include/ "/your/include/path/" +# +# which allows you to create your own set of files by starting with the +# /usr/local/apache2/error/include/ files and +# copying them to /your/include/path/, even on a per-VirtualHost basis. +# + +<IfModule mod_negotiation.c> +<IfModule mod_include.c> + Alias /error/ "/usr/share/apache2/error/" + + <Directory "/usr/share/apache2/error"> + AllowOverride None + Options IncludesNoExec + AddOutputFilter Includes html + AddHandler type-map var + Order allow,deny + Allow from all + LanguagePriority en es de fr + ForceLanguagePriority Prefer Fallback + </Directory> + + ErrorDocument 400 /error/HTTP_BAD_REQUEST.html.var + ErrorDocument 401 /error/HTTP_UNAUTHORIZED.html.var + ErrorDocument 403 /error/HTTP_FORBIDDEN.html.var + ErrorDocument 404 /error/HTTP_NOT_FOUND.html.var + ErrorDocument 405 /error/HTTP_METHOD_NOT_ALLOWED.html.var + ErrorDocument 408 /error/HTTP_REQUEST_TIME_OUT.html.var + ErrorDocument 410 /error/HTTP_GONE.html.var + ErrorDocument 411 /error/HTTP_LENGTH_REQUIRED.html.var + ErrorDocument 412 /error/HTTP_PRECONDITION_FAILED.html.var + ErrorDocument 413 /error/HTTP_REQUEST_ENTITY_TOO_LARGE.html.var + ErrorDocument 414 /error/HTTP_REQUEST_URI_TOO_LARGE.html.var + ErrorDocument 415 /error/HTTP_SERVICE_UNAVAILABLE.html.var + ErrorDocument 500 /error/HTTP_INTERNAL_SERVER_ERROR.html.var + ErrorDocument 501 /error/HTTP_NOT_IMPLEMENTED.html.var + ErrorDocument 502 /error/HTTP_BAD_GATEWAY.html.var + ErrorDocument 503 /error/HTTP_SERVICE_UNAVAILABLE.html.var + ErrorDocument 506 /error/HTTP_VARIANT_ALSO_VARIES.html.var + +</IfModule> +</IfModule> + +DirectoryIndex index.html index.cgi index.pl index.php index.xhtml + +# UserDir is now a module +#UserDir public_html +#UserDir disabled root + +#<Directory /home/*/public_html> +# AllowOverride FileInfo AuthConfig Limit +# Options Indexes SymLinksIfOwnerMatch IncludesNoExec +#</Directory> + +AccessFileName .htaccess + +<Files ~ "^\.ht"> + Order allow,deny + Deny from all +</Files> + +UseCanonicalName Off + +TypesConfig /etc/mime.types +DefaultType text/plain + +HostnameLookups Off + +IndexOptions FancyIndexing VersionSort + +AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip + +AddIconByType (TXT,/icons/text.gif) text/* +AddIconByType (IMG,/icons/image2.gif) image/* +AddIconByType (SND,/icons/sound2.gif) audio/* +AddIconByType (VID,/icons/movie.gif) video/* + +# This really should be .jpg. + +AddIcon /icons/binary.gif .bin .exe +AddIcon /icons/binhex.gif .hqx +AddIcon /icons/tar.gif .tar +AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv +AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip +AddIcon /icons/a.gif .ps .ai .eps +AddIcon /icons/layout.gif .html .shtml .htm .pdf +AddIcon /icons/text.gif .txt +AddIcon /icons/c.gif .c +AddIcon /icons/p.gif .pl .py +AddIcon /icons/f.gif .for +AddIcon /icons/dvi.gif .dvi +AddIcon /icons/uuencoded.gif .uu +AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl +AddIcon /icons/tex.gif .tex +AddIcon /icons/bomb.gif core + +AddIcon /icons/back.gif .. +AddIcon /icons/hand.right.gif README +AddIcon /icons/folder.gif ^^DIRECTORY^^ +AddIcon /icons/blank.gif ^^BLANKICON^^ + + +# This is from Matty J's patch. Anyone want to make the icons? +#AddIcon /icons/dirsymlink.jpg ^^SYMDIR^^ +#AddIcon /icons/symlink.jpg ^^SYMLINK^^ + +DefaultIcon /icons/unknown.gif + +ReadmeName README.html +HeaderName HEADER.html + +IndexIgnore .??* *~ *# HEADER* RCS CVS *,t + +AddEncoding x-compress Z +AddEncoding x-gzip gz tgz + +AddLanguage da .dk +AddLanguage nl .nl +AddLanguage en .en +AddLanguage et .et +AddLanguage fr .fr +AddLanguage de .de +AddLanguage el .el +AddLanguage it .it +AddLanguage ja .ja +AddLanguage pl .po +AddLanguage ko .ko +AddLanguage pt .pt +AddLanguage no .no +AddLanguage pt-br .pt-br +AddLanguage ltz .ltz +AddLanguage ca .ca +AddLanguage es .es +AddLanguage sv .se +AddLanguage cz .cz +AddLanguage ru .ru +AddLanguage tw .tw +AddLanguage zh-tw .tw + +LanguagePriority en da nl et fr de el it ja ko no pl pt pt-br ltz ca es sv tw + + +#AddDefaultCharset ISO-8859-1 + +AddCharset ISO-8859-1 .iso8859-1 .latin1 +AddCharset ISO-8859-2 .iso8859-2 .latin2 .cen +AddCharset ISO-8859-3 .iso8859-3 .latin3 +AddCharset ISO-8859-4 .iso8859-4 .latin4 +AddCharset ISO-8859-5 .iso8859-5 .latin5 .cyr .iso-ru +AddCharset ISO-8859-6 .iso8859-6 .latin6 .arb +AddCharset ISO-8859-7 .iso8859-7 .latin7 .grk +AddCharset ISO-8859-8 .iso8859-8 .latin8 .heb +AddCharset ISO-8859-9 .iso8859-9 .latin9 .trk +AddCharset ISO-2022-JP .iso2022-jp .jis +AddCharset ISO-2022-KR .iso2022-kr .kis +AddCharset ISO-2022-CN .iso2022-cn .cis +AddCharset Big5 .Big5 .big5 +# For russian, more than one charset is used (depends on client, mostly): +AddCharset WINDOWS-1251 .cp-1251 .win-1251 +AddCharset CP866 .cp866 +AddCharset KOI8-r .koi8-r .koi8-ru +AddCharset KOI8-ru .koi8-uk .ua +AddCharset ISO-10646-UCS-2 .ucs2 +AddCharset ISO-10646-UCS-4 .ucs4 +AddCharset UTF-8 .utf8 + +AddCharset GB2312 .gb2312 .gb +AddCharset utf-7 .utf7 +AddCharset utf-8 .utf8 +AddCharset big5 .big5 .b5 +AddCharset EUC-TW .euc-tw +AddCharset EUC-JP .euc-jp +AddCharset EUC-KR .euc-kr +AddCharset shift_jis .sjis + +#AddType application/x-httpd-php .php +#AddType application/x-httpd-php-source .phps + +AddType application/x-tar .tgz + +# To use CGI scripts outside /cgi-bin/: +# +#AddHandler cgi-script .cgi + +# To use server-parsed HTML files +# +<FilesMatch "\.shtml(\..+)?$"> + SetOutputFilter INCLUDES +</FilesMatch> + +# If you wish to use server-parsed imagemap files, use +# +#AddHandler imap-file map + +BrowserMatch "Mozilla/2" nokeepalive +BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0 +BrowserMatch "RealPlayer 4\.0" force-response-1.0 +BrowserMatch "Java/1\.0" force-response-1.0 +BrowserMatch "JDK/1\.0" force-response-1.0 + +# +# The following directive disables redirects on non-GET requests for +# a directory that does not include the trailing slash. This fixes a +# problem with Microsoft WebFolders which does not appropriately handle +# redirects for folders with DAV methods. +# + +BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully +BrowserMatch "^WebDrive" redirect-carefully +BrowserMatch "^gnome-vfs" redirect-carefully +BrowserMatch "^WebDAVFS/1.[012]" redirect-carefully + +# Allow server status reports, with the URL of http://servername/server-status +# Change the ".your_domain.com" to match your domain to enable. +# +#<Location /server-status> +# SetHandler server-status +# Order deny,allow +# Deny from all +# Allow from .your_domain.com +#</Location> + +# Allow remote server configuration reports, with the URL of +# http://servername/server-info (requires that mod_info.c be loaded). +# Change the ".your_domain.com" to match your domain to enable. +# +#<Location /server-info> +# SetHandler server-info +# Order deny,allow +# Deny from all +# Allow from .your_domain.com +#</Location> + +# Include the virtual host configurations: +Include /etc/apache2/sites-enabled/[^.#]* |