summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgbrandl <devnull@localhost>2006-10-28 20:28:46 +0200
committergbrandl <devnull@localhost>2006-10-28 20:28:46 +0200
commitd336a1d4c0375b2b7cf266b6073932e3abb0968d (patch)
treeb4c055b55cd39905b97bf742bde988ca68cf9b71
parent1612315c4b33db53324d6b1e0176b4a8c3f129ca (diff)
downloadpygments-d336a1d4c0375b2b7cf266b6073932e3abb0968d.tar.gz
[svn] Add mime type selection for lexers.
-rw-r--r--TODO4
-rw-r--r--pygments/lexer.py3
-rw-r--r--pygments/lexers/__init__.py37
-rw-r--r--pygments/lexers/_mapping.py105
-rw-r--r--pygments/lexers/agile.py4
-rw-r--r--pygments/lexers/compiled.py4
-rw-r--r--pygments/lexers/dotnet.py3
-rw-r--r--pygments/lexers/other.py1
-rw-r--r--pygments/lexers/special.py2
-rw-r--r--pygments/lexers/templates.py3
-rw-r--r--pygments/lexers/text.py3
-rw-r--r--pygments/lexers/web.py4
12 files changed, 112 insertions, 61 deletions
diff --git a/TODO b/TODO
index 9548e1bc..13337bb8 100644
--- a/TODO
+++ b/TODO
@@ -9,7 +9,7 @@ before 0.5
- more unit tests
-- docstrings?
+- documentation for new features (guessing)
- goto label HL support for languages that use it
@@ -52,6 +52,8 @@ for 0.6
- review perl lexer (numerous bugs)
+- docstrings?
+
for 0.7
-------
diff --git a/pygments/lexer.py b/pygments/lexer.py
index 55a74e19..e5264888 100644
--- a/pygments/lexer.py
+++ b/pygments/lexer.py
@@ -68,6 +68,9 @@ class Lexer(object):
#: fn alias filenames
alias_filenames = []
+ #: mime types
+ mimetypes = []
+
__metaclass__ = LexerMeta
def __init__(self, **options):
diff --git a/pygments/lexers/__init__.py b/pygments/lexers/__init__.py
index 2dcab576..f8e6c90a 100644
--- a/pygments/lexers/__init__.py
+++ b/pygments/lexers/__init__.py
@@ -39,7 +39,7 @@ def _load_lexers(module_name):
def _iter_lexers():
"""
- Returns a generator for all lexer classes
+ Returns an iterator over all lexer classes.
"""
for module_name, name, _, _ in LEXERS.itervalues():
if name not in _lexer_cache:
@@ -51,10 +51,10 @@ def _iter_lexers():
def get_lexer_by_name(_alias, **options):
"""
- Get a lexer by an alias
+ Get a lexer by an alias.
"""
# lookup builtin lexers
- for module_name, name, aliases, _ in LEXERS.itervalues():
+ for module_name, name, aliases, _, _ in LEXERS.itervalues():
if _alias in aliases:
if name not in _lexer_cache:
_load_lexers(module_name)
@@ -63,19 +63,40 @@ def get_lexer_by_name(_alias, **options):
for cls in find_plugin_lexers():
if _alias in cls.aliases:
return cls(**options)
- raise ValueError('no lexer for alias %r found' % alias)
+ raise ValueError('no lexer for alias %r found' % _alias)
def get_lexer_for_filename(_fn, **options):
"""
- Guess a lexer by a filename
+ Get a lexer for a filename.
"""
fn = basename(_fn)
- for lexer in _iter_lexers():
- for filename in lexer.filenames:
+ for modname, name, _, filenames, _ in LEXERS.itervalues():
+ for filename in filenames:
+ if fnmatch.fnmatch(_fn, filename):
+ if name not in _lexer_cache:
+ _load_lexers(modname)
+ return _lexer_cache[name](**options)
+ for cls in find_plugin_lexers():
+ for filename in cls.filenames:
if fnmatch.fnmatch(_fn, filename):
return lexer(**options)
- raise ValueError('no lexer for filename %r found' % fn)
+ raise ValueError('no lexer for filename %r found' % _fn)
+
+
+def get_lexer_for_mimetype(_mime, **options):
+ """
+ Get a lexer for a mimetype.
+ """
+ for modname, name, _, _, mimetypes in LEXERS.itervalues():
+ if _mime in mimetypes:
+ if name not in _lexer_cache:
+ _load_lexers(modname)
+ return _lexer_cache[name](**options)
+ for cls in find_plugin_lexers():
+ if _mime in cls.mimetypes:
+ return lexer(**options)
+ raise ValueError('no lexer for mimetype %r found' % _mime)
def guess_lexer_for_filename(_fn, _text, **options):
diff --git a/pygments/lexers/_mapping.py b/pygments/lexers/_mapping.py
index 4268435d..17755334 100644
--- a/pygments/lexers/_mapping.py
+++ b/pygments/lexers/_mapping.py
@@ -14,57 +14,57 @@
"""
LEXERS = {
- 'BooLexer': ('pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',)),
- 'BrainfuckLexer': ('pygments.lexers.other', 'Brainfuck', ('brainfuck', 'bf'), ('*.bf', '*.b')),
- 'CLexer': ('pygments.lexers.compiled', 'C', ('c',), ('*.c', '*.h')),
- 'CSharpLexer': ('pygments.lexers.dotnet', 'C#', ('csharp', 'c#'), ('*.cs',)),
- 'CppLexer': ('pygments.lexers.compiled', 'C++', ('cpp', 'c++'), ('*.cpp', '*.hpp', '*.c++', '*.h++')),
- 'CssDjangoLexer': ('pygments.lexers.templates', 'CSS+Django/Jinja', ('css+django', 'css+jinja'), ()),
- 'CssErbLexer': ('pygments.lexers.templates', 'CSS+Ruby', ('css+erb', 'css+ruby'), ()),
- 'CssGenshiLexer': ('pygments.lexers.templates', 'CSS+Genshi Text', ('css+genshitext', 'css+genshi'), ()),
- 'CssLexer': ('pygments.lexers.web', 'CSS', ('css',), ('*.css',)),
- 'CssPhpLexer': ('pygments.lexers.templates', 'CSS+PHP', ('css+php',), ()),
- 'CssSmartyLexer': ('pygments.lexers.templates', 'CSS+Smarty', ('css+smarty',), ()),
- 'DelphiLexer': ('pygments.lexers.compiled', 'Delphi', ('delphi', 'pas', 'pascal', 'objectpascal'), ('*.pas',)),
- 'DiffLexer': ('pygments.lexers.text', 'Diff', ('diff',), ('*.diff', '*.patch')),
- 'DjangoLexer': ('pygments.lexers.templates', 'Django/Jinja', ('django', 'jinja'), ()),
- 'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), ()),
- 'GenshiLexer': ('pygments.lexers.templates', 'Genshi', ('genshi', 'kid', 'xml+genshi', 'xml+kid'), ('*.kid',)),
- 'GenshiTextLexer': ('pygments.lexers.templates', 'Genshi Text', ('genshitext',), ()),
- 'HtmlDjangoLexer': ('pygments.lexers.templates', 'HTML+Django/Jinja', ('html+django', 'html+jinja'), ()),
- 'HtmlGenshiLexer': ('pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), ()),
- 'HtmlLexer': ('pygments.lexers.web', 'HTML', ('html',), ('*.html', '*.htm', '*.xhtml')),
- 'HtmlPhpLexer': ('pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',)),
- 'HtmlSmartyLexer': ('pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), ()),
- 'IniLexer': ('pygments.lexers.text', 'INI', ('ini', 'cfg'), ('*.ini', '*.cfg')),
- 'IrcLogsLexer': ('pygments.lexers.text', 'IRC logs', ('irc',), ()),
- 'JavaLexer': ('pygments.lexers.compiled', 'Java', ('java',), ('*.java',)),
- 'JavascriptDjangoLexer': ('pygments.lexers.templates', 'JavaScript+Django/Jinja', ('js+django', 'javascript+django', 'js+jinja', 'javascript+jinja'), ()),
- 'JavascriptErbLexer': ('pygments.lexers.templates', 'JavaScript+Ruby', ('js+erb', 'javascript+erb', 'js+ruby', 'javascript+ruby'), ()),
- 'JavascriptGenshiLexer': ('pygments.lexers.templates', 'JavaScript+Genshi Text', ('js+genshitext', 'js+genshi', 'javascript+genshitext', 'javascript+genshi'), ()),
- 'JavascriptLexer': ('pygments.lexers.web', 'JavaScript', ('js', 'javascript'), ('*.js',)),
- 'JavascriptPhpLexer': ('pygments.lexers.templates', 'JavaScript+PHP', ('js+php', 'javascript+php'), ()),
- 'JavascriptSmartyLexer': ('pygments.lexers.templates', 'JavaScript+Smarty', ('js+smarty', 'javascript+smarty'), ()),
- 'LuaLexer': ('pygments.lexers.agile', 'Lua', ('lua',), ('*.lua',)),
- 'MakefileLexer': ('pygments.lexers.text', 'Makefile', ('make', 'makefile', 'mf'), ('*.mak', 'Makefile', 'makefile')),
- 'PerlLexer': ('pygments.lexers.agile', 'Perl', ('perl', 'pl'), ('*.pl', '*.pm')),
- 'PhpLexer': ('pygments.lexers.web', 'PHP', ('php', 'php3', 'php4', 'php5'), ('*.php', '*.php[345]')),
- 'PythonConsoleLexer': ('pygments.lexers.agile', 'Python console session', ('pycon',), ()),
- 'PythonLexer': ('pygments.lexers.agile', 'Python', ('python', 'py'), ('*.py', '*.pyw')),
- 'RawTokenLexer': ('pygments.lexers.special', 'Raw token data', ('raw',), ('*.raw',)),
- 'RhtmlLexer': ('pygments.lexers.templates', 'RHTML', ('rhtml', 'html+erb', 'html+ruby'), ('*.rhtml',)),
- 'RubyConsoleLexer': ('pygments.lexers.agile', 'Ruby irb session', ('rbcon', 'irb'), ()),
- 'RubyLexer': ('pygments.lexers.agile', 'Ruby', ('rb', 'ruby'), ('*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx')),
- 'SmartyLexer': ('pygments.lexers.templates', 'Smarty', ('smarty',), ()),
- 'SqlLexer': ('pygments.lexers.other', 'SQL', ('sql',), ('*.sql',)),
- 'TexLexer': ('pygments.lexers.text', 'TeX', ('tex', 'latex'), ('*.tex', '*.aux', '*.toc')),
- 'TextLexer': ('pygments.lexers.special', 'Text only', ('text',), ('*.txt',)),
- 'VbNetLexer': ('pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet'), ('*.vb', '*.bas')),
- 'XmlDjangoLexer': ('pygments.lexers.templates', 'XML+Django/Jinja', ('xml+django', 'xml+jinja'), ()),
- 'XmlErbLexer': ('pygments.lexers.templates', 'XML+Ruby', ('xml+erb', 'xml+ruby'), ()),
- 'XmlLexer': ('pygments.lexers.web', 'XML', ('xml',), ('*.xml',)),
- 'XmlPhpLexer': ('pygments.lexers.templates', 'XML+PHP', ('xml+php',), ()),
- 'XmlSmartyLexer': ('pygments.lexers.templates', 'XML+Smarty', ('xml+smarty',), ())
+ 'BooLexer': ('pygments.lexers.dotnet', 'Boo', ('boo',), ('*.boo',), ('text/x-boo',)),
+ 'BrainfuckLexer': ('pygments.lexers.other', 'Brainfuck', ('bf', 'brainfuck'), ('*.b', '*.bf'), ()),
+ 'CLexer': ('pygments.lexers.compiled', 'C', ('c',), ('*.c', '*.h'), ('text/x-chdr', 'text/x-csrc')),
+ 'CSharpLexer': ('pygments.lexers.dotnet', 'C#', ('c#', 'csharp'), ('*.cs',), ('text/x-csharp',)),
+ 'CppLexer': ('pygments.lexers.compiled', 'C++', ('cpp', 'c++'), ('*.c++', '*.hpp', '*.cpp', '*.h++'), ('text/x-c++hdr', 'text/x-c++src')),
+ 'CssDjangoLexer': ('pygments.lexers.templates', 'CSS+Django/Jinja', ('css+jinja', 'css+django'), (), ()),
+ 'CssErbLexer': ('pygments.lexers.templates', 'CSS+Ruby', ('css+ruby', 'css+erb'), (), ()),
+ 'CssGenshiLexer': ('pygments.lexers.templates', 'CSS+Genshi Text', ('css+genshi', 'css+genshitext'), (), ()),
+ 'CssLexer': ('pygments.lexers.web', 'CSS', ('css',), ('*.css',), ('text/css',)),
+ 'CssPhpLexer': ('pygments.lexers.templates', 'CSS+PHP', ('css+php',), (), ()),
+ 'CssSmartyLexer': ('pygments.lexers.templates', 'CSS+Smarty', ('css+smarty',), (), ()),
+ 'DelphiLexer': ('pygments.lexers.compiled', 'Delphi', ('objectpascal', 'delphi', 'pas', 'pascal'), ('*.pas',), ('text/x-pascal',)),
+ 'DiffLexer': ('pygments.lexers.text', 'Diff', ('diff',), ('*.diff', '*.patch'), ('text/x-diff',)),
+ 'DjangoLexer': ('pygments.lexers.templates', 'Django/Jinja', ('jinja', 'django'), (), ()),
+ 'ErbLexer': ('pygments.lexers.templates', 'ERB', ('erb',), (), ()),
+ 'GenshiLexer': ('pygments.lexers.templates', 'Genshi', ('xml+kid', 'xml+genshi', 'genshi', 'kid'), ('*.kid',), ()),
+ 'GenshiTextLexer': ('pygments.lexers.templates', 'Genshi Text', ('genshitext',), (), ()),
+ 'HtmlDjangoLexer': ('pygments.lexers.templates', 'HTML+Django/Jinja', ('html+jinja', 'html+django'), (), ()),
+ 'HtmlGenshiLexer': ('pygments.lexers.templates', 'HTML+Genshi', ('html+genshi', 'html+kid'), (), ()),
+ 'HtmlLexer': ('pygments.lexers.web', 'HTML', ('html',), ('*.xhtml', '*.html', '*.htm'), ('text/html', 'application/xhtml+xml')),
+ 'HtmlPhpLexer': ('pygments.lexers.templates', 'HTML+PHP', ('html+php',), ('*.phtml',), ('text/x-php', 'application/x-php', 'application/x-httpd-php', 'application/x-httpd-php3', 'application/x-httpd-php4', 'application/x-httpd-php5')),
+ 'HtmlSmartyLexer': ('pygments.lexers.templates', 'HTML+Smarty', ('html+smarty',), (), ()),
+ 'IniLexer': ('pygments.lexers.text', 'INI', ('cfg', 'ini'), ('*.ini', '*.cfg'), ()),
+ 'IrcLogsLexer': ('pygments.lexers.text', 'IRC logs', ('irc',), (), ()),
+ 'JavaLexer': ('pygments.lexers.compiled', 'Java', ('java',), ('*.java',), ('text/x-java',)),
+ 'JavascriptDjangoLexer': ('pygments.lexers.templates', 'JavaScript+Django/Jinja', ('javascript+django', 'js+jinja', 'javascript+jinja', 'js+django'), (), ()),
+ 'JavascriptErbLexer': ('pygments.lexers.templates', 'JavaScript+Ruby', ('javascript+ruby', 'javascript+erb', 'js+ruby', 'js+erb'), (), ()),
+ 'JavascriptGenshiLexer': ('pygments.lexers.templates', 'JavaScript+Genshi Text', ('javascript+genshitext', 'javascript+genshi', 'js+genshitext', 'js+genshi'), (), ()),
+ 'JavascriptLexer': ('pygments.lexers.web', 'JavaScript', ('javascript', 'js'), ('*.js',), ('application/x-javascript', 'text/x-javascript')),
+ 'JavascriptPhpLexer': ('pygments.lexers.templates', 'JavaScript+PHP', ('js+php', 'javascript+php'), (), ()),
+ 'JavascriptSmartyLexer': ('pygments.lexers.templates', 'JavaScript+Smarty', ('javascript+smarty', 'js+smarty'), (), ()),
+ 'LuaLexer': ('pygments.lexers.agile', 'Lua', ('lua',), ('*.lua',), ('text/x-lua', 'application/x-lua')),
+ 'MakefileLexer': ('pygments.lexers.text', 'Makefile', ('make', 'mf', 'makefile'), ('Makefile', '*.mak', 'makefile'), ('text/x-makefile',)),
+ 'PerlLexer': ('pygments.lexers.agile', 'Perl', ('pl', 'perl'), ('*.pl', '*.pm'), ('text/x-perl', 'application/x-perl')),
+ 'PhpLexer': ('pygments.lexers.web', 'PHP', ('php4', 'php5', 'php', 'php3'), ('*.php', '*.php[345]'), ()),
+ 'PythonConsoleLexer': ('pygments.lexers.agile', 'Python console session', ('pycon',), (), ()),
+ 'PythonLexer': ('pygments.lexers.agile', 'Python', ('python', 'py'), ('*.pyw', '*.py'), ('text/x-python', 'application/x-python')),
+ 'RawTokenLexer': ('pygments.lexers.special', 'Raw token data', ('raw',), ('*.raw',), ('application/x-pygments-tokens',)),
+ 'RhtmlLexer': ('pygments.lexers.templates', 'RHTML', ('html+ruby', 'rhtml', 'html+erb'), ('*.rhtml',), ()),
+ 'RubyConsoleLexer': ('pygments.lexers.agile', 'Ruby irb session', ('irb', 'rbcon'), (), ()),
+ 'RubyLexer': ('pygments.lexers.agile', 'Ruby', ('ruby', 'rb'), ('*.rb', '*.rbx', '*.gemspec', 'Rakefile', '*.rake', '*.rbw'), ('text/x-ruby', 'application/x-ruby')),
+ 'SmartyLexer': ('pygments.lexers.templates', 'Smarty', ('smarty',), ('*.tpl',), ()),
+ 'SqlLexer': ('pygments.lexers.other', 'SQL', ('sql',), ('*.sql',), ('text/x-sql',)),
+ 'TexLexer': ('pygments.lexers.text', 'TeX', ('tex', 'latex'), ('*.toc', '*.tex', '*.aux'), ('text/x-tex', 'text/x-latex')),
+ 'TextLexer': ('pygments.lexers.special', 'Text only', ('text',), ('*.txt',), ('text/plain',)),
+ 'VbNetLexer': ('pygments.lexers.dotnet', 'VB.net', ('vb.net', 'vbnet'), ('*.bas', '*.vb'), ('text/x-vbnet', 'text/x-vba')),
+ 'XmlDjangoLexer': ('pygments.lexers.templates', 'XML+Django/Jinja', ('xml+django', 'xml+jinja'), (), ()),
+ 'XmlErbLexer': ('pygments.lexers.templates', 'XML+Ruby', ('xml+ruby', 'xml+erb'), (), ()),
+ 'XmlLexer': ('pygments.lexers.web', 'XML', ('xml',), ('*.xml',), ('text/xml', 'application/xml', 'image/svg+xml')),
+ 'XmlPhpLexer': ('pygments.lexers.templates', 'XML+PHP', ('xml+php',), (), ()),
+ 'XmlSmartyLexer': ('pygments.lexers.templates', 'XML+Smarty', ('xml+smarty',), (), ())
}
if __name__ == '__main__':
@@ -86,7 +86,8 @@ if __name__ == '__main__':
(module_name,
lexer.name,
tuple(lexer.aliases),
- tuple(lexer.filenames))))
+ tuple(lexer.filenames),
+ tuple(lexer.mimetypes))))
# sort them, that should make the diff files for svn smaller
found_lexers.sort()
diff --git a/pygments/lexers/agile.py b/pygments/lexers/agile.py
index aec32450..707bad33 100644
--- a/pygments/lexers/agile.py
+++ b/pygments/lexers/agile.py
@@ -32,6 +32,7 @@ class PythonLexer(RegexLexer):
name = 'Python'
aliases = ['python', 'py']
filenames = ['*.py', '*.pyw']
+ mimetypes = ['text/x-python', 'application/x-python']
tokens = {
'root': [
@@ -199,6 +200,7 @@ class RubyLexer(ExtendedRegexLexer):
name = 'Ruby'
aliases = ['rb', 'ruby']
filenames = ['*.rb', '*.rbw', 'Rakefile', '*.rake', '*.gemspec', '*.rbx']
+ mimetypes = ['text/x-ruby', 'application/x-ruby']
flags = re.DOTALL | re.MULTILINE
@@ -557,6 +559,7 @@ class PerlLexer(RegexLexer):
name = 'Perl'
aliases = ['perl', 'pl']
filenames = ['*.pl', '*.pm']
+ mimetypes = ['text/x-perl', 'application/x-perl']
flags = re.DOTALL | re.MULTILINE
# TODO: give this a perl guy who knows how to parse perl...
@@ -689,6 +692,7 @@ class LuaLexer(RegexLexer):
name = 'Lua'
aliases = ['lua']
filenames = ['*.lua']
+ mimetypes = ['text/x-lua', 'application/x-lua']
tokens = {
'root': [
diff --git a/pygments/lexers/compiled.py b/pygments/lexers/compiled.py
index dc154657..aa08de90 100644
--- a/pygments/lexers/compiled.py
+++ b/pygments/lexers/compiled.py
@@ -23,6 +23,7 @@ class CLexer(RegexLexer):
name = 'C'
aliases = ['c']
filenames = ['*.c', '*.h']
+ mimetypes = ['text/x-chdr', 'text/x-csrc']
#: optional Comment or Whitespace
_ws = r'(?:\s|//.*?\n|/[*].*?[*]/)+'
@@ -115,6 +116,7 @@ class CppLexer(RegexLexer):
name = 'C++'
aliases = ['cpp', 'c++']
filenames = ['*.cpp', '*.hpp', '*.c++', '*.h++']
+ mimetypes = ['text/x-c++hdr', 'text/x-c++src']
tokens = {
'root': [
@@ -184,6 +186,7 @@ class DelphiLexer(RegexLexer):
name = 'Delphi'
aliases = ['delphi', 'pas', 'pascal', 'objectpascal']
filenames = ['*.pas']
+ mimetypes = ['text/x-pascal']
flags = re.IGNORECASE | re.MULTILINE | re.DOTALL
tokens = {
@@ -269,6 +272,7 @@ class JavaLexer(RegexLexer):
name = 'Java'
aliases = ['java']
filenames = ['*.java']
+ mimetypes = ['text/x-java']
flags = re.MULTILINE | re.DOTALL
diff --git a/pygments/lexers/dotnet.py b/pygments/lexers/dotnet.py
index f3932c37..bfc59233 100644
--- a/pygments/lexers/dotnet.py
+++ b/pygments/lexers/dotnet.py
@@ -21,6 +21,7 @@ class CSharpLexer(RegexLexer):
name = 'C#'
aliases = ['csharp', 'c#']
filenames = ['*.cs']
+ mimetypes = ['text/x-csharp'] # inferred
flags = re.MULTILINE | re.DOTALL
@@ -77,6 +78,7 @@ class BooLexer(RegexLexer):
name = 'Boo'
aliases = ['boo']
filenames = ['*.boo']
+ mimetypes = ['text/x-boo']
tokens = {
'root': [
@@ -139,6 +141,7 @@ class VbNetLexer(RegexLexer):
name = 'VB.net'
aliases = ['vb.net', 'vbnet']
filenames = ['*.vb', '*.bas']
+ mimetypes = ['text/x-vbnet', 'text/x-vba'] # (?)
flags = re.MULTILINE | re.IGNORECASE
tokens = {
diff --git a/pygments/lexers/other.py b/pygments/lexers/other.py
index de9f5ccc..38fac7d4 100644
--- a/pygments/lexers/other.py
+++ b/pygments/lexers/other.py
@@ -23,6 +23,7 @@ class SqlLexer(RegexLexer):
name = 'SQL'
aliases = ['sql']
filenames = ['*.sql']
+ mimetypes = ['text/x-sql']
flags = re.IGNORECASE
tokens = {
diff --git a/pygments/lexers/special.py b/pygments/lexers/special.py
index 18a0e0cf..621145a2 100644
--- a/pygments/lexers/special.py
+++ b/pygments/lexers/special.py
@@ -24,6 +24,7 @@ class TextLexer(Lexer):
name = 'Text only'
aliases = ['text']
filenames = ['*.txt']
+ mimetypes = ['text/plain']
def get_tokens_unprocessed(self, text):
yield 0, Text, text
@@ -46,6 +47,7 @@ class RawTokenLexer(Lexer):
name = 'Raw token data'
aliases = ['raw']
filenames = ['*.raw']
+ mimetypes = ['application/x-pygments-tokens']
def __init__(self, **options):
self.compress = options.get('compress', '')
diff --git a/pygments/lexers/templates.py b/pygments/lexers/templates.py
index dddc14b4..09454f2b 100644
--- a/pygments/lexers/templates.py
+++ b/pygments/lexers/templates.py
@@ -440,6 +440,9 @@ class HtmlPhpLexer(DelegatingLexer):
filenames = ['*.phtml']
alias_filenames = ['*.php', '*.html', '*.htm', '*.xhtml',
'*.php[345]']
+ mimetypes = ['text/x-php', 'application/x-php',
+ 'application/x-httpd-php', 'application/x-httpd-php3',
+ 'application/x-httpd-php4', 'application/x-httpd-php5']
def __init__(self, **options):
super(HtmlPhpLexer, self).__init__(HtmlLexer, PhpLexer, **options)
diff --git a/pygments/lexers/text.py b/pygments/lexers/text.py
index 6bce841f..6c35e1d3 100644
--- a/pygments/lexers/text.py
+++ b/pygments/lexers/text.py
@@ -40,6 +40,7 @@ class MakefileLexer(RegexLexer):
name = 'Makefile'
aliases = ['make', 'makefile', 'mf']
filenames = ['*.mak', 'Makefile', 'makefile']
+ mimetypes = ['text/x-makefile']
tokens = {
'root': [
@@ -82,6 +83,7 @@ class DiffLexer(RegexLexer):
name = 'Diff'
aliases = ['diff']
filenames = ['*.diff', '*.patch']
+ mimetypes = ['text/x-diff']
tokens = {
'root': [
@@ -141,6 +143,7 @@ class TexLexer(RegexLexer):
name = 'TeX'
aliases = ['tex', 'latex']
filenames = ['*.tex', '*.aux', '*.toc']
+ mimetypes = ['text/x-tex', 'text/x-latex']
tokens = {
'general': [
diff --git a/pygments/lexers/web.py b/pygments/lexers/web.py
index 939144dd..8e7f3e01 100644
--- a/pygments/lexers/web.py
+++ b/pygments/lexers/web.py
@@ -30,6 +30,7 @@ class JavascriptLexer(RegexLexer):
name = 'JavaScript'
aliases = ['js', 'javascript']
filenames = ['*.js']
+ mimetypes = ['application/x-javascript', 'text/x-javascript']
flags = re.DOTALL
tokens = {
@@ -60,6 +61,7 @@ class CssLexer(RegexLexer):
name = 'CSS'
aliases = ['css']
filenames = ['*.css']
+ mimetypes = ['text/css']
tokens = {
'root': [
@@ -178,6 +180,7 @@ class HtmlLexer(RegexLexer):
name = 'HTML'
aliases = ['html']
filenames = ['*.html', '*.htm', '*.xhtml']
+ mimetypes = ['text/html', 'application/xhtml+xml']
flags = re.IGNORECASE | re.DOTALL
tokens = {
@@ -315,6 +318,7 @@ class XmlLexer(RegexLexer):
name = 'XML'
aliases = ['xml']
filenames = ['*.xml']
+ mimetypes = ['text/xml', 'application/xml', 'image/svg+xml']
tokens = {
'root': [