summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--docs/src/lexers.txt4
-rw-r--r--pygments/lexers/_mapping.py2
-rw-r--r--pygments/lexers/text.py45
-rw-r--r--tests/examplefiles/apache2.conf393
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/[^.#]*