diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,30 @@
+Copyright Alex Suraci 2010
+
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+
+    * Neither the name of Alex Suraci nor the names of other
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,3 @@
+#!/usr/bin/env runhaskell
+import Distribution.Simple
+main = defaultMain
diff --git a/highlighter.cabal b/highlighter.cabal
new file mode 100644
--- /dev/null
+++ b/highlighter.cabal
@@ -0,0 +1,165 @@
+name:                highlighter
+version:             0.1
+synopsis:            source code highlighting
+description:
+    Processes source code using tons of lexers, tokenizing it and formatting it as e.g. HTML.
+    .
+    Very similar to the Python Pygments library; many lexers directly converted from it.
+license:             BSD3
+license-file:        LICENSE
+author:              Alex Suraci
+maintainer:          i.am@toogeneric.com
+stability:           Experimental
+
+category:            Text
+
+build-type:          Simple
+
+cabal-version:       >= 1.6
+
+flag executable
+  description: Install a "highlighter" executable for highlighting source code as HTML.
+  default: False
+
+library
+  hs-source-dirs:    src
+
+  exposed-modules:
+    { Text.Highlighter
+    , Text.Highlighter.Types
+    , Text.Highlighter.Lexer
+    , Text.Highlighter.Lexers
+    , Text.Highlighter.Formatters.Html
+    , Text.Highlighter.Lexers.Brainfuck
+    , Text.Highlighter.Lexers.Bash
+    , Text.Highlighter.Lexers.ApacheConf
+    , Text.Highlighter.Lexers.Erlang
+    , Text.Highlighter.Lexers.CoffeeScript
+    , Text.Highlighter.Lexers.MySql
+    , Text.Highlighter.Lexers.Cpp
+    , Text.Highlighter.Lexers.Felix
+    , Text.Highlighter.Lexers.CMake
+    , Text.Highlighter.Lexers.Mako
+    , Text.Highlighter.Lexers.Python
+    , Text.Highlighter.Lexers.Boo
+    , Text.Highlighter.Lexers.ActionScript
+    , Text.Highlighter.Lexers.VbNet
+    , Text.Highlighter.Lexers.SquidConf
+    , Text.Highlighter.Lexers.D
+    , Text.Highlighter.Lexers.Logtalk
+    , Text.Highlighter.Lexers.BBCode
+    , Text.Highlighter.Lexers.MuPAD
+    , Text.Highlighter.Lexers.DebianControl
+    , Text.Highlighter.Lexers.PythonTraceback
+    , Text.Highlighter.Lexers.Coldfusion
+    , Text.Highlighter.Lexers.Objdump
+    , Text.Highlighter.Lexers.Gherkin
+    , Text.Highlighter.Lexers.Io
+    , Text.Highlighter.Lexers.Vala
+    , Text.Highlighter.Lexers.Haskell
+    , Text.Highlighter.Lexers.Lua
+    , Text.Highlighter.Lexers.Xml
+    , Text.Highlighter.Lexers.Groff
+    , Text.Highlighter.Lexers.GLShader
+    , Text.Highlighter.Lexers.GenshiText
+    , Text.Highlighter.Lexers.Gas
+    , Text.Highlighter.Lexers.Go
+    , Text.Highlighter.Lexers.Perl
+    , Text.Highlighter.Lexers.Ini
+    , Text.Highlighter.Lexers.Tcsh
+    , Text.Highlighter.Lexers.DarcsPatch
+    , Text.Highlighter.Lexers.Llvm
+    , Text.Highlighter.Lexers.NginxConf
+    , Text.Highlighter.Lexers.AppleScript
+    , Text.Highlighter.Lexers.MiniD
+    , Text.Highlighter.Lexers.Ooc
+    , Text.Highlighter.Lexers.Sql
+    , Text.Highlighter.Lexers.Nasm
+    , Text.Highlighter.Lexers.SourcesList
+    , Text.Highlighter.Lexers.NumPy
+    , Text.Highlighter.Lexers.Modula2
+    , Text.Highlighter.Lexers.Vim
+    , Text.Highlighter.Lexers.Ragel
+    , Text.Highlighter.Lexers.Haxe
+    , Text.Highlighter.Lexers.Redcode
+    , Text.Highlighter.Lexers.Django
+    , Text.Highlighter.Lexers.Scala
+    , Text.Highlighter.Lexers.LighttpdConf
+    , Text.Highlighter.Lexers.Css
+    , Text.Highlighter.Lexers.Fortran
+    , Text.Highlighter.Lexers.Gnuplot
+    , Text.Highlighter.Lexers.Befunge
+    , Text.Highlighter.Lexers.Dylan
+    , Text.Highlighter.Lexers.Matlab
+    , Text.Highlighter.Lexers.Html
+    , Text.Highlighter.Lexers.IrcLogs
+    , Text.Highlighter.Lexers.Prolog
+    , Text.Highlighter.Lexers.Smalltalk
+    , Text.Highlighter.Lexers.Xslt
+    , Text.Highlighter.Lexers.S
+    , Text.Highlighter.Lexers.Ocaml
+    , Text.Highlighter.Lexers.Gettext
+    , Text.Highlighter.Lexers.Povray
+    , Text.Highlighter.Lexers.ABAP
+    , Text.Highlighter.Lexers.Diff
+    , Text.Highlighter.Lexers.Python3Traceback
+    , Text.Highlighter.Lexers.Python3
+    , Text.Highlighter.Lexers.Batch
+    , Text.Highlighter.Lexers.Antlr
+    , Text.Highlighter.Lexers.Cython
+    , Text.Highlighter.Lexers.Scheme
+    , Text.Highlighter.Lexers.Clojure
+    , Text.Highlighter.Lexers.Modelica
+    , Text.Highlighter.Lexers.Tcl
+    , Text.Highlighter.Lexers.MOOCode
+    , Text.Highlighter.Lexers.Newspeak
+    , Text.Highlighter.Lexers.Tex
+    , Text.Highlighter.Lexers.Javascript
+    , Text.Highlighter.Lexers.CommonLisp
+    , Text.Highlighter.Lexers.RagelEmbedded
+    , Text.Highlighter.Lexers.Atomo
+    , Text.Highlighter.Lexers.C
+    , Text.Highlighter.Lexers.Smarty
+    , Text.Highlighter.Lexers.Java
+    , Text.Highlighter.Lexers.Ada
+    , Text.Highlighter.Lexers.ObjectiveJ
+    , Text.Highlighter.Lexers.Mxml
+    , Text.Highlighter.Lexers.Php
+    , Text.Highlighter.Lexers.Asymptote
+    , Text.Highlighter.Lexers.MoinWiki
+    , Text.Highlighter.Lexers.ObjectiveC
+    , Text.Highlighter.Lexers.ActionScript3
+    }
+
+  build-depends:
+    { base >= 4 && < 5
+    , blaze-html
+    , bytestring
+    , filepath
+    , mtl
+    , pcre-light
+    , text
+    }
+
+executable highlighter
+  if !flag(executable)
+    buildable: False
+
+  hs-source-dirs:    src
+  main-is:           Main.hs
+
+  ghc-options:      -Wall -fno-warn-unused-do-bind
+
+  extensions:       OverloadedStrings
+
+  build-depends:
+    { base >= 4 && < 5
+    , blaze-html
+    , bytestring
+    , filepath
+    , mtl
+    , pcre-light
+    , text
+    }
+
+
diff --git a/src/Main.hs b/src/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/Main.hs
@@ -0,0 +1,37 @@
+import Prelude hiding (head)
+
+import Text.Highlighter
+import Text.Highlighter.Formatters.Html
+
+import System.Environment
+import Text.Blaze.Html5
+import Text.Blaze.Html5.Attributes
+import Text.Blaze.Renderer.String
+import qualified Data.ByteString as BS
+
+main :: IO ()
+main = do
+    as <- getArgs
+
+    case as of
+        [fn] -> do
+            case lexerFromFilename fn of
+                Just l -> do
+                    s <- BS.readFile fn
+                    case runLexer l s of
+                        Right ts ->
+                            putStrLn . renderHtml . mainPage . format True $ ts
+
+                        Left e ->
+                            error (show e)
+                Nothing -> error "unknown file type"
+
+        _ -> putStrLn "usage: hspygments FILENAME"
+
+mainPage :: Html -> Html
+mainPage h =
+    docTypeHtml $ do
+        head $
+            link ! rel "stylesheet" ! href "highlight.css"
+
+        body h
diff --git a/src/Text/Highlighter.hs b/src/Text/Highlighter.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter.hs
@@ -0,0 +1,15 @@
+module Text.Highlighter
+    ( module Text.Highlighter.Lexer
+    , module Text.Highlighter.Lexers
+    , module Text.Highlighter.Types
+    , lexerFromFilename
+    ) where
+
+import Text.Highlighter.Lexer
+import Text.Highlighter.Lexers
+import Text.Highlighter.Types
+
+import System.FilePath
+
+lexerFromFilename :: FilePath -> Maybe Lexer
+lexerFromFilename = flip lookup lexers . takeExtension
diff --git a/src/Text/Highlighter/Formatters/Html.hs b/src/Text/Highlighter/Formatters/Html.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Formatters/Html.hs
@@ -0,0 +1,51 @@
+{-# LANGUAGE OverloadedStrings #-}
+module Text.Highlighter.Formatters.Html (format) where
+
+import Data.Text.Encoding (decodeUtf8)
+import Prelude hiding (div, span)
+import Text.Blaze.Html5
+import Text.Blaze.Html5.Attributes hiding (span)
+import qualified Data.ByteString as BS
+
+import Text.Highlighter.Types
+
+
+format :: Bool -> [Token] -> Html
+format ls ts
+    | ls =
+        table ! class_ "highlighttable" $ tr $ do
+            td ! class_ "linenos" $
+                div ! class_ "linenodiv" $
+                    pre (lineNos (countLines ts))
+
+            td ! class_ "code" $
+                div ! class_ "highlight" $
+                    pre $ highlight ts
+    | otherwise =
+        div ! class_ "highlight" $
+            pre $ highlight ts
+
+highlight :: [Token] -> Html
+highlight [] = return ()
+highlight (Token t s:ts) = do
+    span ! class_ (stringValue $ shortName t) $ text (decodeUtf8 s)
+    highlight ts
+
+countLines :: [Token] -> Int
+countLines [] = 0
+countLines (Token _ s:ts) =
+    length (BS.elemIndices (toEnum . fromEnum $ '\n') s) + countLines ts
+
+lineNos :: Int -> Html
+lineNos n = lineNos' 1
+  where
+    lineNos' c
+        | c <= n = do
+            a ! href (stringValue $ "#L-" ++ show c)
+              ! name (stringValue $ "L-" ++ show c) $
+                string (show c)
+
+            string "\n"
+
+            lineNos' (c + 1)
+        | otherwise = return ()
diff --git a/src/Text/Highlighter/Lexer.hs b/src/Text/Highlighter/Lexer.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexer.hs
@@ -0,0 +1,153 @@
+module Text.Highlighter.Lexer where
+
+import Control.Monad.Error
+import Control.Monad.State
+import Prelude hiding (lex)
+import Text.Regex.PCRE.Light hiding (compile)
+import Text.Regex.PCRE.Light.Char8 (compile)
+import qualified Data.ByteString as BS
+
+import Text.Highlighter.Types
+
+
+data LexerState =
+    LexerState
+        { lsLexer :: Lexer
+        , lsInput :: BS.ByteString
+        , lsState :: [TokenMatcher]
+        , lsLexed :: [Token]
+        }
+    deriving Show
+
+type LexerM = ErrorT LexerError (State LexerState)
+
+data LexerError
+    = NoMatchFor BS.ByteString
+    | OtherLexerError String
+    deriving Show
+
+instance Error LexerError where
+    noMsg = OtherLexerError "unknown"
+    strMsg = OtherLexerError
+
+runLexer :: Lexer -> BS.ByteString -> Either LexerError [Token]
+runLexer l s = evalState (runErrorT lex) (LexerState l s [lStart l] [])
+
+lex :: LexerM [Token]
+lex = do
+    done <- gets (BS.null . lsInput)
+
+    if done
+        then gets lsLexed
+        else do
+
+    ms <- getState
+    ts <- tryAll ms
+    modify $ \ls -> ls { lsLexed = lsLexed ls ++ ts }
+    lex
+  where
+    getState = gets (head . lsState)
+
+tryAll :: [Match] -> LexerM [Token]
+tryAll [] = do
+    i <- gets lsInput
+    throwError (NoMatchFor i)
+tryAll (AnyOf ms:ms') =
+    tryAll (ms ++ ms')
+tryAll (m:ms) = do
+    atbol <- isBOL
+    fs <- gets (lFlags . lsLexer)
+
+    let opts
+            | atbol     = [exec_anchored]
+            | otherwise = [exec_anchored, exec_notbol]
+
+    i <- gets lsInput
+    case match (compile (mRegexp m) fs) i opts of
+        Just [] -> do
+            nextState (mNextState m)
+            return []
+
+        Just (s:ss) -> do
+            modify $ \ls -> ls { lsInput = BS.drop (BS.length s) i }
+
+            nextState (mNextState m)
+
+            toTokens (s:ss) (mType m)
+
+        Nothing ->
+            tryAll ms `catchError` trySkipping
+  where
+    trySkipping e = do
+        case e of
+            NoMatchFor _ ->
+                tryAllFirst (m:ms)
+
+            _ -> throwError e
+
+tryAllFirst :: [Match] -> LexerM [Token]
+tryAllFirst [] = do
+    i <- gets lsInput
+    throwError (NoMatchFor i)
+tryAllFirst (AnyOf ms:ms') =
+    tryAllFirst (ms ++ ms')
+tryAllFirst (m:ms) = do
+    atbol <- isBOL
+    fs <- gets (lFlags . lsLexer)
+
+    let opts
+            | atbol     = []
+            | otherwise = [exec_notbol]
+
+    i <- gets lsInput
+    case match (compile (mRegexp m) fs) i opts of
+        Just (s:ss) -> do
+            let (skipped, next) = skipFailed i s
+            modify $ \ls -> ls { lsInput = next }
+            ts <- toTokens (s:ss) (mType m)
+            return (Token Error skipped:ts)
+
+        _ -> tryAllFirst ms
+
+    
+isBOL :: LexerM Bool
+isBOL = do
+    ld <- gets lsLexed
+    case ld of
+        [] -> return True
+        ts ->
+            let nonempty = dropWhile (BS.null . tText) (reverse ts)
+            in
+                case nonempty of
+                    [] -> return True
+                    (t:_) -> return (BS.last (tText t) == 10)
+
+toTokens :: [BS.ByteString] -> TokenType -> LexerM [Token]
+toTokens (s:_) (Using l) = do
+    either throwError return (runLexer l s)
+toTokens (_:ss) (ByGroups ts) = liftM concat $ zipWithM (\s t -> toTokens [s] t) ss ts
+toTokens (s:_) t = return [Token t s]
+toTokens [] _ = return []
+
+-- Given the starting point, return the text preceding and after
+-- the failing regexp match
+skipFailed :: BS.ByteString -> BS.ByteString -> (BS.ByteString, BS.ByteString)
+skipFailed i r
+    | r `BS.isPrefixOf` i = (BS.empty, BS.drop (BS.length r) i)
+    | otherwise =
+        let (pre, next) = skipFailed (BS.tail i) r
+        in (BS.cons (BS.head i) pre, next)
+            
+nextState :: NextState -> LexerM ()
+nextState Continue = return ()
+nextState Pop =
+    modify $ \ls -> ls { lsState = tail (lsState ls) }
+nextState (PopNum n) =
+    modify $ \ls -> ls { lsState = drop n (lsState ls) }
+nextState Push =
+    modify $ \ls -> ls { lsState = head (lsState ls) : lsState ls }
+nextState (GoTo n) =
+    modify $ \ls -> ls { lsState = n : lsState ls }
+nextState (DoAll nss) = mapM_ nextState nss
+nextState (Combined nss) =
+    modify $ \ls -> ls { lsState = concat nss : lsState ls }
diff --git a/src/Text/Highlighter/Lexers.hs b/src/Text/Highlighter/Lexers.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers.hs
@@ -0,0 +1,208 @@
+module Text.Highlighter.Lexers where
+
+import Text.Highlighter.Types
+
+import qualified Text.Highlighter.Lexers.Brainfuck
+import qualified Text.Highlighter.Lexers.Bash
+import qualified Text.Highlighter.Lexers.ApacheConf
+import qualified Text.Highlighter.Lexers.Erlang
+import qualified Text.Highlighter.Lexers.CoffeeScript
+import qualified Text.Highlighter.Lexers.MySql
+import qualified Text.Highlighter.Lexers.Cpp
+import qualified Text.Highlighter.Lexers.Felix
+import qualified Text.Highlighter.Lexers.CMake
+import qualified Text.Highlighter.Lexers.Mako
+import qualified Text.Highlighter.Lexers.Python
+import qualified Text.Highlighter.Lexers.Boo
+import qualified Text.Highlighter.Lexers.ActionScript
+import qualified Text.Highlighter.Lexers.VbNet
+import qualified Text.Highlighter.Lexers.SquidConf
+import qualified Text.Highlighter.Lexers.D
+import qualified Text.Highlighter.Lexers.Logtalk
+import qualified Text.Highlighter.Lexers.BBCode
+import qualified Text.Highlighter.Lexers.MuPAD
+import qualified Text.Highlighter.Lexers.DebianControl
+import qualified Text.Highlighter.Lexers.PythonTraceback
+import qualified Text.Highlighter.Lexers.Coldfusion
+import qualified Text.Highlighter.Lexers.Objdump
+import qualified Text.Highlighter.Lexers.Gherkin
+import qualified Text.Highlighter.Lexers.Io
+import qualified Text.Highlighter.Lexers.Vala
+import qualified Text.Highlighter.Lexers.Haskell
+import qualified Text.Highlighter.Lexers.Lua
+import qualified Text.Highlighter.Lexers.Xml
+import qualified Text.Highlighter.Lexers.Groff
+import qualified Text.Highlighter.Lexers.GLShader
+import qualified Text.Highlighter.Lexers.GenshiText
+import qualified Text.Highlighter.Lexers.Gas
+import qualified Text.Highlighter.Lexers.Go
+import qualified Text.Highlighter.Lexers.Perl
+import qualified Text.Highlighter.Lexers.Ini
+import qualified Text.Highlighter.Lexers.Tcsh
+import qualified Text.Highlighter.Lexers.DarcsPatch
+import qualified Text.Highlighter.Lexers.Llvm
+import qualified Text.Highlighter.Lexers.NginxConf
+import qualified Text.Highlighter.Lexers.AppleScript
+import qualified Text.Highlighter.Lexers.MiniD
+import qualified Text.Highlighter.Lexers.Ooc
+import qualified Text.Highlighter.Lexers.Sql
+import qualified Text.Highlighter.Lexers.Nasm
+import qualified Text.Highlighter.Lexers.SourcesList
+import qualified Text.Highlighter.Lexers.NumPy
+import qualified Text.Highlighter.Lexers.Modula2
+import qualified Text.Highlighter.Lexers.Vim
+import qualified Text.Highlighter.Lexers.Ragel
+import qualified Text.Highlighter.Lexers.Haxe
+import qualified Text.Highlighter.Lexers.Redcode
+import qualified Text.Highlighter.Lexers.Django
+import qualified Text.Highlighter.Lexers.Scala
+import qualified Text.Highlighter.Lexers.LighttpdConf
+import qualified Text.Highlighter.Lexers.Css
+import qualified Text.Highlighter.Lexers.Fortran
+import qualified Text.Highlighter.Lexers.Gnuplot
+import qualified Text.Highlighter.Lexers.Befunge
+import qualified Text.Highlighter.Lexers.Dylan
+import qualified Text.Highlighter.Lexers.Matlab
+import qualified Text.Highlighter.Lexers.Html
+import qualified Text.Highlighter.Lexers.IrcLogs
+import qualified Text.Highlighter.Lexers.Prolog
+import qualified Text.Highlighter.Lexers.Smalltalk
+import qualified Text.Highlighter.Lexers.Xslt
+import qualified Text.Highlighter.Lexers.S
+import qualified Text.Highlighter.Lexers.Ocaml
+import qualified Text.Highlighter.Lexers.Gettext
+import qualified Text.Highlighter.Lexers.Povray
+import qualified Text.Highlighter.Lexers.ABAP
+import qualified Text.Highlighter.Lexers.Diff
+import qualified Text.Highlighter.Lexers.Python3Traceback
+import qualified Text.Highlighter.Lexers.Python3
+import qualified Text.Highlighter.Lexers.Batch
+import qualified Text.Highlighter.Lexers.Antlr
+import qualified Text.Highlighter.Lexers.Cython
+import qualified Text.Highlighter.Lexers.Scheme
+import qualified Text.Highlighter.Lexers.Clojure
+import qualified Text.Highlighter.Lexers.Modelica
+import qualified Text.Highlighter.Lexers.Tcl
+import qualified Text.Highlighter.Lexers.MOOCode
+import qualified Text.Highlighter.Lexers.Newspeak
+import qualified Text.Highlighter.Lexers.Tex
+import qualified Text.Highlighter.Lexers.Javascript
+import qualified Text.Highlighter.Lexers.CommonLisp
+import qualified Text.Highlighter.Lexers.RagelEmbedded
+import qualified Text.Highlighter.Lexers.Atomo
+import qualified Text.Highlighter.Lexers.C
+import qualified Text.Highlighter.Lexers.Smarty
+import qualified Text.Highlighter.Lexers.Java
+import qualified Text.Highlighter.Lexers.Ada
+import qualified Text.Highlighter.Lexers.ObjectiveJ
+import qualified Text.Highlighter.Lexers.Mxml
+import qualified Text.Highlighter.Lexers.Php
+import qualified Text.Highlighter.Lexers.Asymptote
+import qualified Text.Highlighter.Lexers.MoinWiki
+import qualified Text.Highlighter.Lexers.ObjectiveC
+import qualified Text.Highlighter.Lexers.ActionScript3
+
+
+lexers :: [(String, Lexer)]
+lexers = concat
+    [ map (\e -> (e, Text.Highlighter.Lexers.Brainfuck.lexer)) (lExtensions Text.Highlighter.Lexers.Brainfuck.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Bash.lexer)) (lExtensions Text.Highlighter.Lexers.Bash.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ApacheConf.lexer)) (lExtensions Text.Highlighter.Lexers.ApacheConf.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Erlang.lexer)) (lExtensions Text.Highlighter.Lexers.Erlang.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.CoffeeScript.lexer)) (lExtensions Text.Highlighter.Lexers.CoffeeScript.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.MySql.lexer)) (lExtensions Text.Highlighter.Lexers.MySql.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Cpp.lexer)) (lExtensions Text.Highlighter.Lexers.Cpp.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Felix.lexer)) (lExtensions Text.Highlighter.Lexers.Felix.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.CMake.lexer)) (lExtensions Text.Highlighter.Lexers.CMake.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Mako.lexer)) (lExtensions Text.Highlighter.Lexers.Mako.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Python.lexer)) (lExtensions Text.Highlighter.Lexers.Python.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Boo.lexer)) (lExtensions Text.Highlighter.Lexers.Boo.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ActionScript.lexer)) (lExtensions Text.Highlighter.Lexers.ActionScript.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.VbNet.lexer)) (lExtensions Text.Highlighter.Lexers.VbNet.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.SquidConf.lexer)) (lExtensions Text.Highlighter.Lexers.SquidConf.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.D.lexer)) (lExtensions Text.Highlighter.Lexers.D.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Logtalk.lexer)) (lExtensions Text.Highlighter.Lexers.Logtalk.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.BBCode.lexer)) (lExtensions Text.Highlighter.Lexers.BBCode.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.MuPAD.lexer)) (lExtensions Text.Highlighter.Lexers.MuPAD.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.DebianControl.lexer)) (lExtensions Text.Highlighter.Lexers.DebianControl.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.PythonTraceback.lexer)) (lExtensions Text.Highlighter.Lexers.PythonTraceback.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Coldfusion.lexer)) (lExtensions Text.Highlighter.Lexers.Coldfusion.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Objdump.lexer)) (lExtensions Text.Highlighter.Lexers.Objdump.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Gherkin.lexer)) (lExtensions Text.Highlighter.Lexers.Gherkin.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Io.lexer)) (lExtensions Text.Highlighter.Lexers.Io.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Vala.lexer)) (lExtensions Text.Highlighter.Lexers.Vala.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Haskell.lexer)) (lExtensions Text.Highlighter.Lexers.Haskell.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Lua.lexer)) (lExtensions Text.Highlighter.Lexers.Lua.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Xml.lexer)) (lExtensions Text.Highlighter.Lexers.Xml.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Groff.lexer)) (lExtensions Text.Highlighter.Lexers.Groff.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.GLShader.lexer)) (lExtensions Text.Highlighter.Lexers.GLShader.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.GenshiText.lexer)) (lExtensions Text.Highlighter.Lexers.GenshiText.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Gas.lexer)) (lExtensions Text.Highlighter.Lexers.Gas.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Go.lexer)) (lExtensions Text.Highlighter.Lexers.Go.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Perl.lexer)) (lExtensions Text.Highlighter.Lexers.Perl.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Ini.lexer)) (lExtensions Text.Highlighter.Lexers.Ini.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Tcsh.lexer)) (lExtensions Text.Highlighter.Lexers.Tcsh.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.DarcsPatch.lexer)) (lExtensions Text.Highlighter.Lexers.DarcsPatch.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Llvm.lexer)) (lExtensions Text.Highlighter.Lexers.Llvm.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.NginxConf.lexer)) (lExtensions Text.Highlighter.Lexers.NginxConf.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.AppleScript.lexer)) (lExtensions Text.Highlighter.Lexers.AppleScript.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.MiniD.lexer)) (lExtensions Text.Highlighter.Lexers.MiniD.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Ooc.lexer)) (lExtensions Text.Highlighter.Lexers.Ooc.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Sql.lexer)) (lExtensions Text.Highlighter.Lexers.Sql.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Nasm.lexer)) (lExtensions Text.Highlighter.Lexers.Nasm.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.SourcesList.lexer)) (lExtensions Text.Highlighter.Lexers.SourcesList.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.NumPy.lexer)) (lExtensions Text.Highlighter.Lexers.NumPy.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Modula2.lexer)) (lExtensions Text.Highlighter.Lexers.Modula2.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Vim.lexer)) (lExtensions Text.Highlighter.Lexers.Vim.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Ragel.lexer)) (lExtensions Text.Highlighter.Lexers.Ragel.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Haxe.lexer)) (lExtensions Text.Highlighter.Lexers.Haxe.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Redcode.lexer)) (lExtensions Text.Highlighter.Lexers.Redcode.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Django.lexer)) (lExtensions Text.Highlighter.Lexers.Django.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Scala.lexer)) (lExtensions Text.Highlighter.Lexers.Scala.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.LighttpdConf.lexer)) (lExtensions Text.Highlighter.Lexers.LighttpdConf.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Css.lexer)) (lExtensions Text.Highlighter.Lexers.Css.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Fortran.lexer)) (lExtensions Text.Highlighter.Lexers.Fortran.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Gnuplot.lexer)) (lExtensions Text.Highlighter.Lexers.Gnuplot.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Befunge.lexer)) (lExtensions Text.Highlighter.Lexers.Befunge.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Dylan.lexer)) (lExtensions Text.Highlighter.Lexers.Dylan.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Matlab.lexer)) (lExtensions Text.Highlighter.Lexers.Matlab.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Html.lexer)) (lExtensions Text.Highlighter.Lexers.Html.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.IrcLogs.lexer)) (lExtensions Text.Highlighter.Lexers.IrcLogs.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Prolog.lexer)) (lExtensions Text.Highlighter.Lexers.Prolog.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Smalltalk.lexer)) (lExtensions Text.Highlighter.Lexers.Smalltalk.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Xslt.lexer)) (lExtensions Text.Highlighter.Lexers.Xslt.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.S.lexer)) (lExtensions Text.Highlighter.Lexers.S.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Ocaml.lexer)) (lExtensions Text.Highlighter.Lexers.Ocaml.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Gettext.lexer)) (lExtensions Text.Highlighter.Lexers.Gettext.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Povray.lexer)) (lExtensions Text.Highlighter.Lexers.Povray.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ABAP.lexer)) (lExtensions Text.Highlighter.Lexers.ABAP.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Diff.lexer)) (lExtensions Text.Highlighter.Lexers.Diff.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Python3Traceback.lexer)) (lExtensions Text.Highlighter.Lexers.Python3Traceback.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Python3.lexer)) (lExtensions Text.Highlighter.Lexers.Python3.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Batch.lexer)) (lExtensions Text.Highlighter.Lexers.Batch.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Antlr.lexer)) (lExtensions Text.Highlighter.Lexers.Antlr.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Cython.lexer)) (lExtensions Text.Highlighter.Lexers.Cython.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Scheme.lexer)) (lExtensions Text.Highlighter.Lexers.Scheme.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Clojure.lexer)) (lExtensions Text.Highlighter.Lexers.Clojure.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Modelica.lexer)) (lExtensions Text.Highlighter.Lexers.Modelica.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Tcl.lexer)) (lExtensions Text.Highlighter.Lexers.Tcl.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.MOOCode.lexer)) (lExtensions Text.Highlighter.Lexers.MOOCode.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Newspeak.lexer)) (lExtensions Text.Highlighter.Lexers.Newspeak.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Tex.lexer)) (lExtensions Text.Highlighter.Lexers.Tex.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Javascript.lexer)) (lExtensions Text.Highlighter.Lexers.Javascript.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.CommonLisp.lexer)) (lExtensions Text.Highlighter.Lexers.CommonLisp.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.RagelEmbedded.lexer)) (lExtensions Text.Highlighter.Lexers.RagelEmbedded.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Atomo.lexer)) (lExtensions Text.Highlighter.Lexers.Atomo.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.C.lexer)) (lExtensions Text.Highlighter.Lexers.C.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Smarty.lexer)) (lExtensions Text.Highlighter.Lexers.Smarty.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Java.lexer)) (lExtensions Text.Highlighter.Lexers.Java.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Ada.lexer)) (lExtensions Text.Highlighter.Lexers.Ada.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ObjectiveJ.lexer)) (lExtensions Text.Highlighter.Lexers.ObjectiveJ.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Mxml.lexer)) (lExtensions Text.Highlighter.Lexers.Mxml.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Php.lexer)) (lExtensions Text.Highlighter.Lexers.Php.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.Asymptote.lexer)) (lExtensions Text.Highlighter.Lexers.Asymptote.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.MoinWiki.lexer)) (lExtensions Text.Highlighter.Lexers.MoinWiki.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ObjectiveC.lexer)) (lExtensions Text.Highlighter.Lexers.ObjectiveC.lexer)
+    , map (\e -> (e, Text.Highlighter.Lexers.ActionScript3.lexer)) (lExtensions Text.Highlighter.Lexers.ActionScript3.lexer)
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ABAP.hs b/src/Text/Highlighter/Lexers/ABAP.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ABAP.hs
@@ -0,0 +1,52 @@
+module Text.Highlighter.Lexers.ABAP (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\66\65\80"
+    , lAliases = ["\97\98\97\112"]
+    , lExtensions = ["\46\97\98\97\112"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\97\98\97\112"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+variableNames' :: TokenMatcher
+variableNames' =
+    [ tok "\60\91\92\83\95\93\43\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\92\119\93\91\92\119\95\126\93\42\40\63\58\40\92\91\92\93\41\124\45\62\92\42\41\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf common'
+    , tok "\40\67\65\76\76\92\115\43\40\63\58\66\65\68\73\124\67\85\83\84\79\77\69\82\45\70\85\78\67\84\73\79\78\124\70\85\78\67\84\73\79\78\41\41\40\92\115\43\41\40\92\39\63\92\83\43\92\39\63\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\67\65\76\76\92\115\43\40\63\58\68\73\65\76\79\71\124\83\67\82\69\69\78\124\83\85\66\83\67\82\69\69\78\124\83\69\76\69\67\84\73\79\78\45\83\67\82\69\69\78\124\84\82\65\78\83\65\67\84\73\79\78\124\84\82\65\78\83\70\79\82\77\65\84\73\79\78\41\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\70\79\82\77\124\80\69\82\70\79\82\77\41\40\92\115\43\41\40\91\92\119\95\93\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\80\69\82\70\79\82\77\41\40\92\115\43\41\40\92\40\41\40\91\92\119\95\93\43\41\40\92\41\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\77\79\68\85\76\69\41\40\92\115\43\41\40\92\83\43\41\40\92\115\43\41\40\73\78\80\85\84\124\79\85\84\80\85\84\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\40\77\69\84\72\79\68\41\40\92\115\43\41\40\91\92\119\95\126\93\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\92\115\43\41\40\91\92\119\95\92\45\93\43\41\40\91\61\92\45\93\62\41\40\91\92\119\95\92\45\126\93\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\63\60\61\40\61\124\45\41\62\41\40\91\92\119\95\92\45\126\93\43\41\40\63\61\92\40\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\40\65\68\68\45\67\79\82\82\69\83\80\79\78\68\73\78\71\124\65\85\84\72\79\82\73\84\89\45\67\72\69\67\75\124\67\76\65\83\83\45\68\65\84\65\124\67\76\65\83\83\45\69\86\69\78\84\83\124\67\76\65\83\83\45\77\69\84\72\79\68\83\124\67\76\65\83\83\45\80\79\79\76\124\68\69\76\69\84\69\45\65\68\74\65\67\69\78\84\124\68\73\86\73\68\69\45\67\79\82\82\69\83\80\79\78\68\73\78\71\124\69\68\73\84\79\82\45\67\65\76\76\124\69\78\72\65\78\67\69\77\69\78\84\45\80\79\73\78\84\124\69\78\72\65\78\67\69\77\69\78\84\45\83\69\67\84\73\79\78\124\69\88\73\84\45\67\79\77\77\65\78\68\124\70\73\69\76\68\45\71\82\79\85\80\83\124\70\73\69\76\68\45\83\89\77\66\79\76\83\124\70\85\78\67\84\73\79\78\45\80\79\79\76\124\73\78\84\69\82\70\65\67\69\45\80\79\79\76\124\73\78\86\69\82\84\69\68\45\68\65\84\69\124\76\79\65\68\45\79\70\45\80\82\79\71\82\65\77\124\76\79\71\45\80\79\73\78\84\124\77\69\83\83\65\71\69\45\73\68\124\77\79\86\69\45\67\79\82\82\69\83\80\79\78\68\73\78\71\124\77\85\76\84\73\80\76\89\45\67\79\82\82\69\83\80\79\78\68\73\78\71\124\78\69\87\45\76\73\78\69\124\78\69\87\45\80\65\71\69\124\78\69\87\45\83\69\67\84\73\79\78\124\78\79\45\69\88\84\69\78\83\73\79\78\124\79\85\84\80\85\84\45\76\69\78\71\84\72\124\80\82\73\78\84\45\67\79\78\84\82\79\76\124\83\69\76\69\67\84\45\79\80\84\73\79\78\83\124\83\84\65\82\84\45\79\70\45\83\69\76\69\67\84\73\79\78\124\83\85\66\84\82\65\67\84\45\67\79\82\82\69\83\80\79\78\68\73\78\71\124\83\89\78\84\65\88\45\67\72\69\67\75\124\83\89\83\84\69\77\45\69\88\67\69\80\84\73\79\78\83\124\84\89\80\69\45\80\79\79\76\124\84\89\80\69\45\80\79\79\76\83\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\67\82\69\65\84\69\92\115\43\40\80\85\66\76\73\67\124\80\82\73\86\65\84\69\124\68\65\84\65\124\79\66\74\69\67\84\41\124\40\40\80\85\66\76\73\67\124\80\82\73\86\65\84\69\124\80\82\79\84\69\67\84\69\68\41\92\115\43\83\69\67\84\73\79\78\124\40\84\89\80\69\124\76\73\75\69\41\40\92\115\43\40\76\73\78\69\92\115\43\79\70\124\82\69\70\92\115\43\84\79\124\40\83\79\82\84\69\68\124\83\84\65\78\68\65\82\68\124\72\65\83\72\69\68\41\92\115\43\84\65\66\76\69\92\115\43\79\70\41\41\63\124\70\82\79\77\92\115\43\40\68\65\84\65\66\65\83\69\124\77\69\77\79\82\89\41\124\67\65\76\76\92\115\43\77\69\84\72\79\68\124\40\71\82\79\85\80\124\79\82\68\69\82\41\32\66\89\124\72\65\86\73\78\71\124\83\69\80\65\82\65\84\69\68\32\66\89\124\71\69\84\92\115\43\40\66\65\68\73\124\66\73\84\124\67\85\82\83\79\82\124\68\65\84\65\83\69\84\124\76\79\67\65\76\69\124\80\65\82\65\77\69\84\69\82\124\80\70\45\83\84\65\84\85\83\124\40\80\82\79\80\69\82\84\89\124\82\69\70\69\82\69\78\67\69\41\92\115\43\79\70\124\82\85\78\92\115\43\84\73\77\69\124\84\73\77\69\92\115\43\40\83\84\65\77\80\41\63\41\63\124\83\69\84\92\115\43\40\66\73\84\124\66\76\65\78\75\92\115\43\76\73\78\69\83\124\67\79\85\78\84\82\89\124\67\85\82\83\79\82\124\68\65\84\65\83\69\84\124\69\88\84\69\78\68\69\68\92\115\43\67\72\69\67\75\124\72\65\78\68\76\69\82\124\72\79\76\68\92\115\43\68\65\84\65\124\76\65\78\71\85\65\71\69\124\76\69\70\84\92\115\43\83\67\82\79\76\76\45\66\79\85\78\68\65\82\89\124\76\79\67\65\76\69\124\77\65\82\71\73\78\124\80\65\82\65\77\69\84\69\82\124\80\70\45\83\84\65\84\85\83\124\80\82\79\80\69\82\84\89\92\115\43\79\70\124\82\85\78\92\115\43\84\73\77\69\92\115\43\40\65\78\65\76\89\90\69\82\124\67\76\79\67\75\92\115\43\82\69\83\79\76\85\84\73\79\78\41\124\83\67\82\69\69\78\124\84\73\84\76\69\66\65\82\124\85\80\65\68\84\69\92\115\43\84\65\83\75\92\115\43\76\79\67\65\76\124\85\83\69\82\45\67\79\77\77\65\78\68\41\124\67\79\78\86\69\82\84\92\115\43\40\40\73\78\86\69\82\84\69\68\45\41\63\68\65\84\69\124\84\73\77\69\124\84\73\77\69\92\115\43\83\84\65\77\80\124\84\69\88\84\41\124\40\67\76\79\83\69\124\79\80\69\78\41\92\115\43\40\68\65\84\65\83\69\84\124\67\85\82\83\79\82\41\124\40\84\79\124\70\82\79\77\41\92\115\43\40\68\65\84\65\32\66\85\70\70\69\82\124\73\78\84\69\82\78\65\76\32\84\65\66\76\69\124\77\69\77\79\82\89\32\73\68\124\68\65\84\65\66\65\83\69\124\83\72\65\82\69\68\92\115\43\40\77\69\77\79\82\89\124\66\85\70\70\69\82\41\41\124\68\69\83\67\82\73\66\69\92\115\43\40\68\73\83\84\65\78\67\69\92\115\43\66\69\84\87\69\69\78\124\70\73\69\76\68\124\76\73\83\84\124\84\65\66\76\69\41\124\70\82\69\69\92\115\40\77\69\77\79\82\89\124\79\66\74\69\67\84\41\63\124\80\82\79\67\69\83\83\92\115\43\40\66\69\70\79\82\69\92\115\43\79\85\84\80\85\84\124\65\70\84\69\82\92\115\43\73\78\80\85\84\124\79\78\92\115\43\40\86\65\76\85\69\45\82\69\81\85\69\83\84\124\72\69\76\80\45\82\69\81\85\69\83\84\41\41\124\65\84\92\115\43\40\76\73\78\69\45\83\69\76\69\67\84\73\79\78\124\85\83\69\82\45\67\79\77\77\65\78\68\124\69\78\68\92\115\43\79\70\124\78\69\87\41\124\65\84\92\115\43\83\69\76\69\67\84\73\79\78\45\83\67\82\69\69\78\40\92\115\43\40\79\78\40\92\115\43\40\66\76\79\67\75\124\40\72\69\76\80\124\86\65\76\85\69\41\45\82\69\81\85\69\83\84\92\115\43\70\79\82\124\69\78\68\92\115\43\79\70\124\82\65\68\73\79\66\85\84\84\79\78\92\115\43\71\82\79\85\80\41\41\63\124\79\85\84\80\85\84\41\41\63\124\83\69\76\69\67\84\73\79\78\45\83\67\82\69\69\78\58\63\92\115\43\40\40\66\69\71\73\78\124\69\78\68\41\92\115\43\79\70\92\115\43\40\40\84\65\66\66\69\68\92\115\43\41\63\66\76\79\67\75\124\76\73\78\69\124\83\67\82\69\69\78\41\124\67\79\77\77\69\78\84\124\70\85\78\67\84\73\79\78\92\115\43\75\69\89\124\73\78\67\76\85\68\69\92\115\43\66\76\79\67\75\83\124\80\79\83\73\84\73\79\78\124\80\85\83\72\66\85\84\84\79\78\124\83\75\73\80\124\85\76\73\78\69\41\124\76\69\65\86\69\92\115\43\40\76\73\83\84\45\80\82\79\67\69\83\83\73\78\71\124\80\82\79\71\82\65\77\124\83\67\82\69\69\78\124\84\79\32\76\73\83\84\45\80\82\79\67\69\83\83\73\78\71\124\84\79\32\84\82\65\78\83\65\67\84\73\79\78\41\40\69\78\68\73\78\71\124\83\84\65\82\84\73\78\71\41\92\115\43\65\84\124\70\79\82\77\65\84\92\115\43\40\67\79\76\79\82\124\73\78\84\69\78\83\73\70\73\69\68\124\73\78\86\69\82\83\69\124\72\79\84\83\80\79\84\124\73\78\80\85\84\124\70\82\65\77\69\83\124\82\69\83\69\84\41\124\65\83\92\115\43\40\67\72\69\67\75\66\79\88\124\83\85\66\83\67\82\69\69\78\124\87\73\78\68\79\87\41\124\87\73\84\72\92\115\43\40\40\40\78\79\78\45\41\63\85\78\73\81\85\69\41\63\92\115\43\75\69\89\124\70\82\65\77\69\41\124\40\66\69\71\73\78\124\69\78\68\41\92\115\43\79\70\124\68\69\76\69\84\69\40\92\115\43\65\68\74\65\67\69\78\84\92\115\43\68\85\80\76\73\67\65\84\69\83\92\115\70\82\79\77\41\63\124\67\79\77\80\65\82\73\78\71\40\92\115\43\65\76\76\92\115\43\70\73\69\76\68\83\41\63\124\73\78\83\69\82\84\40\92\115\43\73\78\73\84\73\65\76\92\115\43\76\73\78\69\92\115\43\73\78\84\79\124\92\115\43\76\73\78\69\83\92\115\43\79\70\41\63\124\73\78\92\115\43\40\40\66\89\84\69\124\67\72\65\82\65\67\84\69\82\41\92\115\43\77\79\68\69\124\80\82\79\71\82\65\77\41\124\69\78\68\45\79\70\45\40\68\69\70\73\78\73\84\73\79\78\124\80\65\71\69\124\83\69\76\69\67\84\73\79\78\41\124\87\73\84\72\92\115\43\70\82\65\77\69\40\92\115\43\84\73\84\76\69\41\124\65\78\68\92\115\43\40\77\65\82\75\124\82\69\84\85\82\78\41\124\67\76\73\69\78\84\92\115\43\83\80\69\67\73\70\73\69\68\124\67\79\82\82\69\83\80\79\78\68\73\78\71\92\115\43\70\73\69\76\68\83\92\115\43\79\70\124\73\70\92\115\43\70\79\85\78\68\124\70\79\82\92\115\43\69\86\69\78\84\124\73\78\72\69\82\73\84\73\78\71\92\115\43\70\82\79\77\124\76\69\65\86\69\92\115\43\84\79\92\115\43\83\67\82\69\69\78\124\76\79\79\80\92\115\43\65\84\92\115\43\40\83\67\82\69\69\78\41\63\124\76\79\87\69\82\92\115\43\67\65\83\69\124\77\65\84\67\72\67\79\68\69\92\115\43\79\66\74\69\67\84\124\77\79\68\73\70\92\115\43\73\68\124\77\79\68\73\70\89\92\115\43\83\67\82\69\69\78\124\78\69\83\84\73\78\71\92\115\43\76\69\86\69\76\124\78\79\92\115\43\73\78\84\69\82\86\65\76\83\124\79\70\92\115\43\83\84\82\85\67\84\85\82\69\124\82\65\68\73\79\66\85\84\84\79\78\92\115\43\71\82\79\85\80\124\82\65\78\71\69\92\115\43\79\70\124\82\69\70\92\115\43\84\79\124\83\85\80\80\82\69\83\83\32\68\73\65\76\79\71\124\84\65\66\76\69\92\115\43\79\70\124\85\80\80\69\82\92\115\43\67\65\83\69\124\84\82\65\78\83\80\79\82\84\73\78\71\92\115\43\78\79\92\115\43\70\73\69\76\68\83\124\86\65\76\85\69\92\115\43\67\72\69\67\75\124\86\73\83\73\66\76\69\92\115\43\76\69\78\71\84\72\124\72\69\65\68\69\82\92\115\43\76\73\78\69\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\94\124\40\63\60\61\40\92\115\124\92\46\41\41\41\40\65\66\66\82\69\86\73\65\84\69\68\124\65\68\68\124\65\76\73\65\83\69\83\124\65\80\80\69\78\68\124\65\83\83\69\82\84\124\65\83\83\73\71\78\40\73\78\71\41\63\124\65\84\40\92\115\43\70\73\82\83\84\41\63\124\66\65\67\75\124\66\76\79\67\75\124\66\82\69\65\75\45\80\79\73\78\84\124\67\65\83\69\124\67\65\84\67\72\124\67\72\65\78\71\73\78\71\124\67\72\69\67\75\124\67\76\65\83\83\124\67\76\69\65\82\124\67\79\76\76\69\67\84\124\67\79\76\79\82\124\67\79\77\77\73\84\124\67\82\69\65\84\69\124\67\79\77\77\85\78\73\67\65\84\73\79\78\124\67\79\77\80\79\78\69\78\84\83\63\124\67\79\77\80\85\84\69\124\67\79\78\67\65\84\69\78\65\84\69\124\67\79\78\68\69\78\83\69\124\67\79\78\83\84\65\78\84\83\124\67\79\78\84\69\88\84\83\124\67\79\78\84\73\78\85\69\124\67\79\78\84\82\79\76\83\124\68\65\84\65\124\68\69\67\73\77\65\76\83\124\68\69\70\65\85\76\84\124\68\69\70\73\78\69\124\68\69\70\73\78\73\84\73\79\78\124\68\69\70\69\82\82\69\68\124\68\69\77\65\78\68\124\68\69\84\65\73\76\124\68\73\82\69\67\84\79\82\89\124\68\73\86\73\68\69\124\68\79\124\69\76\83\69\40\73\70\41\63\124\69\78\68\65\84\124\69\78\68\67\65\83\69\124\69\78\68\67\76\65\83\83\124\69\78\68\68\79\124\69\78\68\70\79\82\77\124\69\78\68\70\85\78\67\84\73\79\78\124\69\78\68\73\70\124\69\78\68\76\79\79\80\124\69\78\68\77\69\84\72\79\68\124\69\78\68\77\79\68\85\76\69\124\69\78\68\83\69\76\69\67\84\124\69\78\68\84\82\89\124\69\78\72\65\78\67\69\77\69\78\84\124\69\86\69\78\84\83\124\69\88\67\69\80\84\73\79\78\83\124\69\88\73\84\124\69\88\80\79\82\84\124\69\88\80\79\82\84\73\78\71\124\69\88\84\82\65\67\84\124\70\69\84\67\72\124\70\73\69\76\68\83\63\124\70\73\78\68\124\70\79\82\124\70\79\82\77\124\70\79\82\77\65\84\124\70\82\69\69\124\70\82\79\77\124\72\73\68\69\124\73\68\124\73\70\124\73\77\80\79\82\84\124\73\77\80\76\69\77\69\78\84\65\84\73\79\78\124\73\77\80\79\82\84\73\78\71\124\73\78\124\73\78\67\76\85\68\69\124\73\78\67\76\85\68\73\78\71\124\73\78\68\69\88\124\73\78\70\79\84\89\80\69\83\124\73\78\73\84\73\65\76\73\90\65\84\73\79\78\124\73\78\84\69\82\70\65\67\69\124\73\78\84\69\82\70\65\67\69\83\124\73\78\84\79\124\76\69\78\71\84\72\124\76\73\78\69\83\124\76\79\65\68\124\76\79\67\65\76\124\74\79\73\78\124\75\69\89\124\77\65\88\73\77\85\77\124\77\69\83\83\65\71\69\124\77\69\84\72\79\68\91\83\93\63\124\77\73\78\73\77\85\77\124\77\79\68\85\76\69\124\77\79\68\73\70\89\124\77\79\86\69\124\77\85\76\84\73\80\76\89\124\78\79\68\69\83\124\79\66\76\73\71\65\84\79\82\89\124\79\70\124\79\70\70\124\79\78\124\79\86\69\82\76\65\89\124\80\65\67\75\124\80\65\82\65\77\69\84\69\82\83\124\80\69\82\67\69\78\84\65\71\69\124\80\79\83\73\84\73\79\78\124\80\82\79\71\82\65\77\124\80\82\79\86\73\68\69\124\80\85\66\76\73\67\124\80\85\84\124\82\65\73\83\69\124\82\65\73\83\73\78\71\124\82\65\78\71\69\83\124\82\69\65\68\124\82\69\67\69\73\86\69\124\82\69\70\82\69\83\72\124\82\69\74\69\67\84\124\82\69\80\79\82\84\124\82\69\83\69\82\86\69\124\82\69\83\85\77\69\124\82\69\84\82\89\124\82\69\84\85\82\78\124\82\69\84\85\82\78\73\78\71\124\82\73\71\72\84\124\82\79\76\76\66\65\67\75\124\83\67\82\79\76\76\124\83\69\65\82\67\72\124\83\69\76\69\67\84\124\83\72\73\70\84\124\83\73\78\71\76\69\124\83\75\73\80\124\83\79\82\84\124\83\80\76\73\84\124\83\84\65\84\73\67\83\124\83\84\79\80\124\83\85\66\77\73\84\124\83\85\66\84\82\65\67\84\124\83\85\77\124\83\85\77\77\65\82\89\124\83\85\77\77\73\78\71\124\83\85\80\80\76\89\124\84\65\66\76\69\124\84\65\66\76\69\83\124\84\73\77\69\83\124\84\73\84\76\69\124\84\79\124\84\79\80\45\79\70\45\80\65\71\69\124\84\82\65\78\83\70\69\82\124\84\82\65\78\83\76\65\84\69\124\84\82\89\124\84\89\80\69\83\124\85\76\73\78\69\124\85\78\68\69\82\124\85\78\80\65\67\75\124\85\80\68\65\84\69\124\85\83\73\78\71\124\86\65\76\85\69\124\86\65\76\85\69\83\124\86\73\65\124\87\65\73\84\124\87\72\69\78\124\87\72\69\82\69\124\87\72\73\76\69\124\87\73\84\72\124\87\73\78\68\79\87\124\87\82\73\84\69\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\98\115\124\97\99\111\115\124\97\115\105\110\124\97\116\97\110\124\98\111\111\108\99\124\98\111\111\108\120\124\98\105\116\95\115\101\116\124\99\104\97\114\95\111\102\102\124\99\104\97\114\108\101\110\124\99\101\105\108\124\99\109\97\120\124\99\109\105\110\124\99\111\110\100\101\110\115\101\124\99\111\110\116\97\105\110\115\124\99\111\110\116\97\105\110\115\95\97\110\121\95\111\102\124\99\111\110\116\97\105\110\115\95\97\110\121\95\110\111\116\95\111\102\124\99\111\110\99\97\116\95\108\105\110\101\115\95\111\102\124\99\111\115\124\99\111\115\104\124\99\111\117\110\116\124\99\111\117\110\116\95\97\110\121\95\111\102\124\99\111\117\110\116\95\97\110\121\95\110\111\116\95\111\102\124\100\98\109\97\120\108\101\110\124\100\105\115\116\97\110\99\101\124\101\115\99\97\112\101\124\101\120\112\124\102\105\110\100\124\102\105\110\100\95\101\110\100\124\102\105\110\100\95\97\110\121\95\111\102\124\102\105\110\100\95\97\110\121\95\110\111\116\95\111\102\124\102\108\111\111\114\124\102\114\97\99\124\102\114\111\109\95\109\105\120\101\100\124\105\110\115\101\114\116\124\108\105\110\101\115\124\108\111\103\124\108\111\103\49\48\124\109\97\116\99\104\124\109\97\116\99\104\101\115\124\110\109\97\120\124\110\109\105\110\124\110\117\109\111\102\99\104\97\114\124\114\101\112\101\97\116\124\114\101\112\108\97\99\101\124\114\101\115\99\97\108\101\124\114\101\118\101\114\115\101\124\114\111\117\110\100\124\115\101\103\109\101\110\116\124\115\104\105\102\116\95\108\101\102\116\124\115\104\105\102\116\95\114\105\103\104\116\124\115\105\103\110\124\115\105\110\124\115\105\110\104\124\115\113\114\116\124\115\116\114\108\101\110\124\115\117\98\115\116\114\105\110\103\124\115\117\98\115\116\114\105\110\103\95\97\102\116\101\114\124\115\117\98\115\116\114\105\110\103\95\102\114\111\109\124\115\117\98\115\116\114\105\110\103\95\98\101\102\111\114\101\124\115\117\98\115\116\114\105\110\103\95\116\111\124\116\97\110\124\116\97\110\104\124\116\111\95\117\112\112\101\114\124\116\111\95\108\111\119\101\114\124\116\111\95\109\105\120\101\100\124\116\114\97\110\115\108\97\116\101\124\116\114\117\110\99\124\120\115\116\114\108\101\110\41\40\92\40\41\92\98" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\38\91\48\45\57\93" (Arbitrary "\78\97\109\101")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\40\63\60\61\40\92\115\124\46\41\41\40\65\78\68\124\69\81\124\78\69\124\71\84\124\76\84\124\71\69\124\76\69\124\67\79\124\67\78\124\67\65\124\78\65\124\67\83\124\78\79\84\124\78\83\124\67\80\124\78\80\124\66\89\84\69\45\67\79\124\66\89\84\69\45\67\78\124\66\89\84\69\45\67\65\124\66\89\84\69\45\78\65\124\66\89\84\69\45\67\83\124\66\89\84\69\45\78\83\124\73\83\92\115\43\40\78\79\84\92\115\43\41\63\40\73\78\73\84\73\65\76\124\65\83\83\73\71\78\69\68\124\82\69\81\85\69\83\84\69\68\124\66\79\85\78\68\41\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , anyOf variableNames'
+    , tok "\91\63\42\60\62\61\92\45\43\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\39\40\39\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\47\59\58\40\41\92\91\92\93\44\92\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+common' :: TokenMatcher
+common' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\94\92\42\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\34\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ActionScript.hs b/src/Text/Highlighter/Lexers/ActionScript.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ActionScript.hs
@@ -0,0 +1,36 @@
+module Text.Highlighter.Lexers.ActionScript (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\99\116\105\111\110\83\99\114\105\112\116"
+    , lAliases = ["\97\115", "\97\99\116\105\111\110\115\99\114\105\112\116"]
+    , lExtensions = ["\46\97\115"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\97\99\116\105\111\110\115\99\114\105\112\116", "\116\101\120\116\47\120\45\97\99\116\105\111\110\115\99\114\105\112\116", "\116\101\120\116\47\97\99\116\105\111\110\115\99\114\105\112\116"]
+    , lStart = root'
+    , lFlags = [dotall]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\47\40\92\92\92\92\124\92\92\47\124\91\94\47\92\110\93\41\42\47\91\103\105\109\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\91\126\92\94\92\42\33\37\38\60\62\92\124\43\61\58\59\44\47\63\92\92\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\123\125\92\91\92\93\40\41\59\46\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\99\97\115\101\124\100\101\102\97\117\108\116\124\102\111\114\124\101\97\99\104\124\105\110\124\119\104\105\108\101\124\100\111\124\98\114\101\97\107\124\114\101\116\117\114\110\124\99\111\110\116\105\110\117\101\124\105\102\124\101\108\115\101\124\116\104\114\111\119\124\116\114\121\124\99\97\116\99\104\124\118\97\114\124\119\105\116\104\124\110\101\119\124\116\121\112\101\111\102\124\97\114\103\117\109\101\110\116\115\124\105\110\115\116\97\110\99\101\111\102\124\116\104\105\115\124\115\119\105\116\99\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\108\97\115\115\124\112\117\98\108\105\99\124\102\105\110\97\108\124\105\110\116\101\114\110\97\108\124\110\97\116\105\118\101\124\111\118\101\114\114\105\100\101\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\115\116\97\116\105\99\124\105\109\112\111\114\116\124\101\120\116\101\110\100\115\124\105\109\112\108\101\109\101\110\116\115\124\105\110\116\101\114\102\97\99\101\124\105\110\116\114\105\110\115\105\99\124\114\101\116\117\114\110\124\115\117\112\101\114\124\100\121\110\97\109\105\99\124\102\117\110\99\116\105\111\110\124\99\111\110\115\116\124\103\101\116\124\110\97\109\101\115\112\97\99\101\124\112\97\99\107\97\103\101\124\115\101\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\78\97\78\124\73\110\102\105\110\105\116\121\124\45\73\110\102\105\110\105\116\121\124\117\110\100\101\102\105\110\101\100\124\86\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\65\99\99\101\115\115\105\98\105\108\105\116\121\124\65\99\99\101\115\115\105\98\105\108\105\116\121\80\114\111\112\101\114\116\105\101\115\124\65\99\116\105\111\110\83\99\114\105\112\116\86\101\114\115\105\111\110\124\65\99\116\105\118\105\116\121\69\118\101\110\116\124\65\110\116\105\65\108\105\97\115\84\121\112\101\124\65\112\112\108\105\99\97\116\105\111\110\68\111\109\97\105\110\124\65\115\66\114\111\97\100\99\97\115\116\101\114\124\65\114\114\97\121\124\65\115\121\110\99\69\114\114\111\114\69\118\101\110\116\124\65\86\77\49\77\111\118\105\101\124\66\101\118\101\108\70\105\108\116\101\114\124\66\105\116\109\97\112\124\66\105\116\109\97\112\68\97\116\97\124\66\105\116\109\97\112\68\97\116\97\67\104\97\110\110\101\108\124\66\105\116\109\97\112\70\105\108\116\101\114\124\66\105\116\109\97\112\70\105\108\116\101\114\81\117\97\108\105\116\121\124\66\105\116\109\97\112\70\105\108\116\101\114\84\121\112\101\124\66\108\101\110\100\77\111\100\101\124\66\108\117\114\70\105\108\116\101\114\124\66\111\111\108\101\97\110\124\66\121\116\101\65\114\114\97\121\124\67\97\109\101\114\97\124\67\97\112\97\98\105\108\105\116\105\101\115\124\67\97\112\115\83\116\121\108\101\124\67\108\97\115\115\124\67\111\108\111\114\124\67\111\108\111\114\77\97\116\114\105\120\70\105\108\116\101\114\124\67\111\108\111\114\84\114\97\110\115\102\111\114\109\124\67\111\110\116\101\120\116\77\101\110\117\124\67\111\110\116\101\120\116\77\101\110\117\66\117\105\108\116\73\110\73\116\101\109\115\124\67\111\110\116\101\120\116\77\101\110\117\69\118\101\110\116\124\67\111\110\116\101\120\116\77\101\110\117\73\116\101\109\124\67\111\110\118\117\108\116\105\111\110\70\105\108\116\101\114\124\67\83\77\83\101\116\116\105\110\103\115\124\68\97\116\97\69\118\101\110\116\124\68\97\116\101\124\68\101\102\105\110\105\116\105\111\110\69\114\114\111\114\124\68\101\108\101\116\101\79\98\106\101\99\116\83\97\109\112\108\101\124\68\105\99\116\105\111\110\97\114\121\124\68\105\115\112\108\97\99\109\101\110\116\77\97\112\70\105\108\116\101\114\124\68\105\115\112\108\97\121\79\98\106\101\99\116\124\68\105\115\112\108\97\99\109\101\110\116\77\97\112\70\105\108\116\101\114\77\111\100\101\124\68\105\115\112\108\97\121\79\98\106\101\99\116\67\111\110\116\97\105\110\101\114\124\68\114\111\112\83\104\97\100\111\119\70\105\108\116\101\114\124\69\110\100\105\97\110\124\69\79\70\69\114\114\111\114\124\69\114\114\111\114\124\69\114\114\111\114\69\118\101\110\116\124\69\118\97\108\69\114\114\111\114\124\69\118\101\110\116\124\69\118\101\110\116\68\105\115\112\97\116\99\104\101\114\124\69\118\101\110\116\80\104\97\115\101\124\69\120\116\101\114\110\97\108\73\110\116\101\114\102\97\99\101\124\70\105\108\101\70\105\108\116\101\114\124\70\105\108\101\82\101\102\101\114\101\110\99\101\124\70\105\108\101\82\101\102\101\114\101\110\99\101\76\105\115\116\124\70\111\99\117\115\68\105\114\101\99\116\105\111\110\124\70\111\99\117\115\69\118\101\110\116\124\70\111\110\116\124\70\111\110\116\83\116\121\108\101\124\70\111\110\116\84\121\112\101\124\70\114\97\109\101\76\97\98\101\108\124\70\117\108\108\83\99\114\101\101\110\69\118\101\110\116\124\70\117\110\99\116\105\111\110\124\71\108\111\119\70\105\108\116\101\114\124\71\114\97\100\105\101\110\116\66\101\118\101\108\70\105\108\116\101\114\124\71\114\97\100\105\101\110\116\71\108\111\119\70\105\108\116\101\114\124\71\114\97\100\105\101\110\116\84\121\112\101\124\71\114\97\112\104\105\99\115\124\71\114\105\100\70\105\116\84\121\112\101\124\72\84\84\80\83\116\97\116\117\115\69\118\101\110\116\124\73\66\105\116\109\97\112\68\114\97\119\97\98\108\101\124\73\68\51\73\110\102\111\124\73\68\97\116\97\73\110\112\117\116\124\73\68\97\116\97\79\117\116\112\117\116\124\73\68\121\110\97\109\105\99\80\114\111\112\101\114\116\121\79\117\116\112\117\116\73\68\121\110\97\109\105\99\80\114\111\112\101\114\116\121\87\114\105\116\101\114\124\73\69\118\101\110\116\68\105\115\112\97\116\99\104\101\114\124\73\69\120\116\101\114\110\97\108\105\122\97\98\108\101\124\73\108\108\101\103\97\108\79\112\101\114\97\116\105\111\110\69\114\114\111\114\124\73\77\69\124\73\77\69\67\111\110\118\101\114\115\105\111\110\77\111\100\101\124\73\77\69\69\118\101\110\116\124\105\110\116\124\73\110\116\101\114\97\99\116\105\118\101\79\98\106\101\99\116\124\73\110\116\101\114\112\111\108\97\116\105\111\110\77\101\116\104\111\100\124\73\110\118\97\108\105\100\83\87\70\69\114\114\111\114\124\73\110\118\111\107\101\69\118\101\110\116\124\73\79\69\114\114\111\114\124\73\79\69\114\114\111\114\69\118\101\110\116\124\74\111\105\110\116\83\116\121\108\101\124\75\101\121\124\75\101\121\98\111\97\114\100\124\75\101\121\98\111\97\114\100\69\118\101\110\116\124\75\101\121\76\111\99\97\116\105\111\110\124\76\105\110\101\83\99\97\108\101\77\111\100\101\124\76\111\97\100\101\114\124\76\111\97\100\101\114\67\111\110\116\101\120\116\124\76\111\97\100\101\114\73\110\102\111\124\76\111\97\100\86\97\114\115\124\76\111\99\97\108\67\111\110\110\101\99\116\105\111\110\124\76\111\99\97\108\101\124\77\97\116\104\124\77\97\116\114\105\120\124\77\101\109\111\114\121\69\114\114\111\114\124\77\105\99\114\111\112\104\111\110\101\124\77\111\114\112\104\83\104\97\112\101\124\77\111\117\115\101\124\77\111\117\115\101\69\118\101\110\116\124\77\111\118\105\101\67\108\105\112\124\77\111\118\105\101\67\108\105\112\76\111\97\100\101\114\124\78\97\109\101\115\112\97\99\101\124\78\101\116\67\111\110\110\101\99\116\105\111\110\124\78\101\116\83\116\97\116\117\115\69\118\101\110\116\124\78\101\116\83\116\114\101\97\109\124\78\101\119\79\98\106\101\99\116\83\97\109\112\108\101\124\78\117\109\98\101\114\124\79\98\106\101\99\116\124\79\98\106\101\99\116\69\110\99\111\100\105\110\103\124\80\105\120\101\108\83\110\97\112\112\105\110\103\124\80\111\105\110\116\124\80\114\105\110\116\74\111\98\124\80\114\105\110\116\74\111\98\79\112\116\105\111\110\115\124\80\114\105\110\116\74\111\98\79\114\105\101\110\116\97\116\105\111\110\124\80\114\111\103\114\101\115\115\69\118\101\110\116\124\80\114\111\120\121\124\81\78\97\109\101\124\82\97\110\103\101\69\114\114\111\114\124\82\101\99\116\97\110\103\108\101\124\82\101\102\101\114\101\110\99\101\69\114\114\111\114\124\82\101\103\69\120\112\124\82\101\115\112\111\110\100\101\114\124\83\97\109\112\108\101\124\83\99\101\110\101\124\83\99\114\105\112\116\84\105\109\101\111\117\116\69\114\114\111\114\124\83\101\99\117\114\105\116\121\124\83\101\99\117\114\105\116\121\68\111\109\97\105\110\124\83\101\99\117\114\105\116\121\69\114\114\111\114\124\83\101\99\117\114\105\116\121\69\114\114\111\114\69\118\101\110\116\124\83\101\99\117\114\105\116\121\80\97\110\101\108\124\83\101\108\101\99\116\105\111\110\124\83\104\97\112\101\124\83\104\97\114\101\100\79\98\106\101\99\116\124\83\104\97\114\101\100\79\98\106\101\99\116\70\108\117\115\104\83\116\97\116\117\115\124\83\105\109\112\108\101\66\117\116\116\111\110\124\83\111\99\107\101\116\124\83\111\117\110\100\124\83\111\117\110\100\67\104\97\110\110\101\108\124\83\111\117\110\100\76\111\97\100\101\114\67\111\110\116\101\120\116\124\83\111\117\110\100\77\105\120\101\114\124\83\111\117\110\100\84\114\97\110\115\102\111\114\109\124\83\112\114\101\97\100\77\101\116\104\111\100\124\83\112\114\105\116\101\124\83\116\97\99\107\70\114\97\109\101\124\83\116\97\99\107\79\118\101\114\102\108\111\119\69\114\114\111\114\124\83\116\97\103\101\124\83\116\97\103\101\65\108\105\103\110\124\83\116\97\103\101\68\105\115\112\108\97\121\83\116\97\116\101\124\83\116\97\103\101\81\117\97\108\105\116\121\124\83\116\97\103\101\83\99\97\108\101\77\111\100\101\124\83\116\97\116\105\99\84\101\120\116\124\83\116\97\116\117\115\69\118\101\110\116\124\83\116\114\105\110\103\124\83\116\121\108\101\83\104\101\101\116\124\83\87\70\86\101\114\115\105\111\110\124\83\121\110\99\69\118\101\110\116\124\83\121\110\116\97\120\69\114\114\111\114\124\83\121\115\116\101\109\124\84\101\120\116\67\111\108\111\114\84\121\112\101\124\84\101\120\116\70\105\101\108\100\124\84\101\120\116\70\105\101\108\100\65\117\116\111\83\105\122\101\124\84\101\120\116\70\105\101\108\100\84\121\112\101\124\84\101\120\116\70\111\114\109\97\116\124\84\101\120\116\70\111\114\109\97\116\65\108\105\103\110\124\84\101\120\116\76\105\110\101\77\101\116\114\105\99\115\124\84\101\120\116\82\101\110\100\101\114\101\114\124\84\101\120\116\83\110\97\112\115\104\111\116\124\84\105\109\101\114\124\84\105\109\101\114\69\118\101\110\116\124\84\114\97\110\115\102\111\114\109\124\84\121\112\101\69\114\114\111\114\124\117\105\110\116\124\85\82\73\69\114\114\111\114\124\85\82\76\76\111\97\100\101\114\124\85\82\76\76\111\97\100\101\114\68\97\116\97\70\111\114\109\97\116\124\85\82\76\82\101\113\117\101\115\116\124\85\82\76\82\101\113\117\101\115\116\72\101\97\100\101\114\124\85\82\76\82\101\113\117\101\115\116\77\101\116\104\111\100\124\85\82\76\83\116\114\101\97\109\124\85\82\76\86\97\114\105\97\98\101\108\101\115\124\86\101\114\105\102\121\69\114\114\111\114\124\86\105\100\101\111\124\88\77\76\124\88\77\76\68\111\99\117\109\101\110\116\124\88\77\76\76\105\115\116\124\88\77\76\78\111\100\101\124\88\77\76\78\111\100\101\84\121\112\101\124\88\77\76\83\111\99\107\101\116\124\88\77\76\85\73\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\100\101\99\111\100\101\85\82\73\124\100\101\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\101\110\99\111\100\101\85\82\73\124\101\115\99\97\112\101\124\101\118\97\108\124\105\115\70\105\110\105\116\101\124\105\115\78\97\78\124\105\115\88\77\76\78\97\109\101\124\99\108\101\97\114\73\110\116\101\114\118\97\108\124\102\115\99\111\109\109\97\110\100\124\103\101\116\84\105\109\101\114\124\103\101\116\85\82\76\124\103\101\116\86\101\114\115\105\111\110\124\105\115\70\105\110\105\116\101\124\112\97\114\115\101\70\108\111\97\116\124\112\97\114\115\101\73\110\116\124\115\101\116\73\110\116\101\114\118\97\108\124\116\114\97\99\101\124\117\112\100\97\116\101\65\102\116\101\114\69\118\101\110\116\124\117\110\101\115\99\97\112\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\79\116\104\101\114")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ActionScript3.hs b/src/Text/Highlighter/Lexers/ActionScript3.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ActionScript3.hs
@@ -0,0 +1,58 @@
+module Text.Highlighter.Lexers.ActionScript3 (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\99\116\105\111\110\83\99\114\105\112\116\32\51"
+    , lAliases = ["\97\115\51", "\97\99\116\105\111\110\115\99\114\105\112\116\51"]
+    , lExtensions = ["\46\97\115"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\97\99\116\105\111\110\115\99\114\105\112\116", "\116\101\120\116\47\120\45\97\99\116\105\111\110\115\99\114\105\112\116", "\116\101\120\116\47\97\99\116\105\111\110\115\99\114\105\112\116"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+defval' :: TokenMatcher
+defval' =
+    [ tokNext "\40\61\41\40\92\115\42\41\40\91\94\40\41\44\93\43\41\40\92\115\42\41\40\44\63\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Using lexer), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) Pop
+    , tokNext "\44\63" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    ]
+
+type' :: TokenMatcher
+type' =
+    [ tokNext "\40\92\115\42\41\40\58\41\40\92\115\42\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\92\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")]) (PopNum 2)
+    , tokNext "\92\115\42" (Arbitrary "\84\101\120\116") (PopNum 2)
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\40\102\117\110\99\116\105\111\110\92\115\43\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) (GoTo funcparams')
+    , tok "\40\118\97\114\124\99\111\110\115\116\41\40\92\115\43\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\58\41\40\92\115\42\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")])
+    , tok "\40\105\109\112\111\114\116\124\112\97\99\107\97\103\101\41\40\92\115\43\41\40\40\63\58\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\92\46\41\43\41\40\92\115\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")])
+    , tok "\40\110\101\119\41\40\92\115\43\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\47\40\92\92\92\92\124\92\92\47\124\91\94\92\110\93\41\42\47\91\103\105\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\40\92\46\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")])
+    , tok "\40\99\97\115\101\124\100\101\102\97\117\108\116\124\102\111\114\124\101\97\99\104\124\105\110\124\119\104\105\108\101\124\100\111\124\98\114\101\97\107\124\114\101\116\117\114\110\124\99\111\110\116\105\110\117\101\124\105\102\124\101\108\115\101\124\116\104\114\111\119\124\116\114\121\124\99\97\116\99\104\124\119\105\116\104\124\110\101\119\124\116\121\112\101\111\102\124\97\114\103\117\109\101\110\116\115\124\105\110\115\116\97\110\99\101\111\102\124\116\104\105\115\124\115\119\105\116\99\104\124\105\109\112\111\114\116\124\105\110\99\108\117\100\101\124\97\115\124\105\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\108\97\115\115\124\112\117\98\108\105\99\124\102\105\110\97\108\124\105\110\116\101\114\110\97\108\124\110\97\116\105\118\101\124\111\118\101\114\114\105\100\101\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\115\116\97\116\105\99\124\105\109\112\111\114\116\124\101\120\116\101\110\100\115\124\105\109\112\108\101\109\101\110\116\115\124\105\110\116\101\114\102\97\99\101\124\105\110\116\114\105\110\115\105\99\124\114\101\116\117\114\110\124\115\117\112\101\114\124\100\121\110\97\109\105\99\124\102\117\110\99\116\105\111\110\124\99\111\110\115\116\124\103\101\116\124\110\97\109\101\115\112\97\99\101\124\112\97\99\107\97\103\101\124\115\101\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\78\97\78\124\73\110\102\105\110\105\116\121\124\45\73\110\102\105\110\105\116\121\124\117\110\100\101\102\105\110\101\100\124\118\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\100\101\99\111\100\101\85\82\73\124\100\101\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\101\110\99\111\100\101\85\82\73\124\101\115\99\97\112\101\124\101\118\97\108\124\105\115\70\105\110\105\116\101\124\105\115\78\97\78\124\105\115\88\77\76\78\97\109\101\124\99\108\101\97\114\73\110\116\101\114\118\97\108\124\102\115\99\111\109\109\97\110\100\124\103\101\116\84\105\109\101\114\124\103\101\116\85\82\76\124\103\101\116\86\101\114\115\105\111\110\124\105\115\70\105\110\105\116\101\124\112\97\114\115\101\70\108\111\97\116\124\112\97\114\115\101\73\110\116\124\115\101\116\73\110\116\101\114\118\97\108\124\116\114\97\99\101\124\117\112\100\97\116\101\65\102\116\101\114\69\118\101\110\116\124\117\110\101\115\99\97\112\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\126\92\94\92\42\33\37\38\60\62\92\124\43\61\58\59\44\47\63\92\92\123\125\92\91\92\93\40\41\59\46\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+funcparams' :: TokenMatcher
+funcparams' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\40\92\115\42\41\40\92\46\92\46\92\46\41\63\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\58\41\40\92\115\42\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\92\42\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116")]) (GoTo defval')
+    , tokNext "\92\41" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo type')
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Ada.hs b/src/Text/Highlighter/Lexers/Ada.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Ada.hs
@@ -0,0 +1,125 @@
+module Text.Highlighter.Lexers.Ada (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\100\97"
+    , lAliases = ["\97\100\97", "\97\100\97\57\53\97\100\97\50\48\48\53"]
+    , lExtensions = ["\46\97\100\98", "\46\97\100\115", "\46\97\100\97"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\97\100\97"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+package_instantiation' :: TokenMatcher
+package_instantiation' =
+    [ tok "\40\34\91\94\34\93\43\34\124\91\97\45\122\48\45\57\95\93\43\41\40\92\115\43\41\40\61\62\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\97\45\122\48\45\57\46\95\92\39\34\93" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf root'
+    ]
+
+formal_part' :: TokenMatcher
+formal_part' =
+    [ tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\40\91\97\45\122\48\45\57\95\93\43\41\40\92\115\42\41\40\44\124\58\91\94\61\93\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\105\110\124\110\111\116\124\110\117\108\108\124\111\117\116\124\97\99\99\101\115\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , anyOf root'
+    ]
+
+attribute' :: TokenMatcher
+attribute' =
+    [ tok "\40\39\41\40\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")])
+    ]
+
+subprogram' :: TokenMatcher
+subprogram' =
+    [ tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [Pop, (GoTo formal_part')])
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\105\115\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") Pop
+    , tok "\34\91\94\34\93\43\34\124\91\97\45\122\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , anyOf root'
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\91\48\45\57\95\93\43\35\91\48\45\57\97\45\102\93\43\35" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\95\93\43\92\46\91\48\45\57\95\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+type_def' :: TokenMatcher
+type_def' =
+    [ tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo formal_part')
+    , tok "\119\105\116\104\124\97\110\100\124\117\115\101" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tokNext "\97\114\114\97\121\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") (DoAll [Pop, (GoTo array_def')])
+    , tokNext "\114\101\99\111\114\100\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") (GoTo formal_part')
+    , anyOf root'
+    ]
+
+end' :: TokenMatcher
+end' =
+    [ tok "\40\105\102\124\99\97\115\101\124\114\101\99\111\114\100\124\108\111\111\112\124\115\101\108\101\99\116\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\34\91\94\34\93\43\34\124\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\10\92\115\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+array_def' :: TokenMatcher
+array_def' =
+    [ tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\40\91\97\45\122\48\45\57\95\93\43\41\40\92\115\43\41\40\114\97\110\103\101\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")])
+    , anyOf root'
+    ]
+
+package' :: TokenMatcher
+package' =
+    [ tok "\98\111\100\121" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\105\115\92\115\43\110\101\119\124\114\101\110\97\109\101\115" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tokNext "\105\115" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") Pop
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo package_instantiation')
+    , tok "\40\91\97\45\122\65\45\90\48\45\57\95\46\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , anyOf root'
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tokNext "\91\97\45\122\48\45\57\95\46\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\45\45\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\102\117\110\99\116\105\111\110\124\112\114\111\99\101\100\117\114\101\124\101\110\116\114\121" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo subprogram')
+    , tokNext "\40\115\117\98\116\121\112\101\124\116\121\112\101\41\40\92\115\43\41\40\91\97\45\122\48\45\57\95\93\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")]) (GoTo type_def')
+    , tok "\116\97\115\107\124\112\114\111\116\101\99\116\101\100" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\115\117\98\116\121\112\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\40\101\110\100\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100"), (Arbitrary "\84\101\120\116")]) (GoTo end')
+    , tok "\40\112\114\97\103\109\97\41\40\92\115\43\41\40\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\66\121\116\101\124\67\104\97\114\97\99\116\101\114\124\70\108\111\97\116\124\73\110\116\101\103\101\114\124\76\111\110\103\95\70\108\111\97\116\124\76\111\110\103\95\73\110\116\101\103\101\114\124\76\111\110\103\95\76\111\110\103\95\70\108\111\97\116\124\76\111\110\103\95\76\111\110\103\95\73\110\116\101\103\101\114\124\78\97\116\117\114\97\108\124\80\111\115\105\116\105\118\101\124\83\104\111\114\116\95\70\108\111\97\116\124\83\104\111\114\116\95\73\110\116\101\103\101\114\124\83\104\111\114\116\95\83\104\111\114\116\95\70\108\111\97\116\124\83\104\111\114\116\95\83\104\111\114\116\95\73\110\116\101\103\101\114\124\83\116\114\105\110\103\124\87\105\100\101\95\83\116\114\105\110\103\124\68\117\114\97\116\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\97\110\100\40\92\115\43\116\104\101\110\41\63\124\105\110\124\109\111\100\124\110\111\116\124\111\114\40\92\115\43\101\108\115\101\41\124\114\101\109\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\103\101\110\101\114\105\99\124\112\114\105\118\97\116\101" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tokNext "\112\97\99\107\97\103\101" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo package')
+    , tokNext "\97\114\114\97\121\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") (GoTo array_def')
+    , tokNext "\40\119\105\116\104\124\117\115\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , tok "\40\91\97\45\122\48\45\57\95\93\43\41\40\92\115\42\41\40\58\41\40\92\115\42\41\40\99\111\110\115\116\97\110\116\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")])
+    , tok "\60\60\91\97\45\122\48\45\57\95\93\43\62\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\40\91\97\45\122\48\45\57\95\93\43\41\40\92\115\42\41\40\58\41\40\92\115\42\41\40\100\101\99\108\97\114\101\124\98\101\103\105\110\124\108\111\111\112\124\102\111\114\124\119\104\105\108\101\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")])
+    , tok "\92\98\40\97\98\111\114\116\124\97\98\115\124\97\98\115\116\114\97\99\116\124\97\99\99\101\112\116\124\97\99\99\101\115\115\124\97\108\105\97\115\101\100\124\97\108\108\124\97\114\114\97\121\124\97\116\124\98\101\103\105\110\124\98\111\100\121\124\99\97\115\101\124\99\111\110\115\116\97\110\116\124\100\101\99\108\97\114\101\124\100\101\108\97\121\124\100\101\108\116\97\124\100\105\103\105\116\115\124\100\111\124\101\108\115\101\124\101\108\115\105\102\124\101\110\100\124\101\110\116\114\121\124\101\120\99\101\112\116\105\111\110\124\101\120\105\116\124\105\110\116\101\114\102\97\99\101\124\102\111\114\124\103\111\116\111\124\105\102\124\105\115\124\108\105\109\105\116\101\100\124\108\111\111\112\124\110\101\119\124\110\117\108\108\124\111\102\124\111\114\124\111\116\104\101\114\115\124\111\117\116\124\111\118\101\114\114\105\100\105\110\103\124\112\114\97\103\109\97\124\112\114\111\116\101\99\116\101\100\124\114\97\105\115\101\124\114\97\110\103\101\124\114\101\99\111\114\100\124\114\101\110\97\109\101\115\124\114\101\113\117\101\117\101\124\114\101\116\117\114\110\124\114\101\118\101\114\115\101\124\115\101\108\101\99\116\124\115\101\112\97\114\97\116\101\124\115\117\98\116\121\112\101\124\115\121\110\99\104\114\111\110\105\122\101\100\124\116\97\115\107\124\116\97\103\103\101\100\124\116\101\114\109\105\110\97\116\101\124\116\104\101\110\124\116\121\112\101\124\117\110\116\105\108\124\119\104\101\110\124\119\104\105\108\101\124\120\111\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\34\91\94\34\93\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , anyOf attribute'
+    , anyOf numbers'
+    , tok "\39\91\94\39\93\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114\97\99\116\101\114")
+    , tok "\40\91\97\45\122\48\45\57\95\93\43\41\40\92\115\42\124\91\40\44\93\41" (ByGroups [(Arbitrary "\78\97\109\101"), (Using lexer)])
+    , tok "\40\60\62\124\61\62\124\58\61\124\91\92\40\92\41\92\124\58\59\44\46\39\93\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\42\60\62\43\61\47\38\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\110\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Antlr.hs b/src/Text/Highlighter/Lexers/Antlr.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Antlr.hs
@@ -0,0 +1,118 @@
+module Text.Highlighter.Lexers.Antlr (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\78\84\76\82"
+    , lAliases = ["\97\110\116\108\114"]
+    , lExtensions = []
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+tokens' :: TokenMatcher
+tokens' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tok "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\91\65\45\90\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\61\41\63\40\92\115\42\41\40\92\39\40\63\58\92\92\92\92\124\92\92\92\39\124\91\94\92\39\93\42\41\92\39\41\63\40\92\115\42\41\40\59\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+exception' :: TokenMatcher
+exception' =
+    [ tokNext "\92\110" (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101") Pop
+    , tok "\92\115" (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")
+    , anyOf comments'
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo nestedArgAction')
+    , tokNext "\92\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo action')
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")
+    ]
+
+action' :: TokenMatcher
+action' =
+    [ tok "\40\91\94\92\36\123\125\92\39\34\47\92\92\93\43\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\47\47\46\42\36\92\110\63\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\124\92\92\40\63\33\37\41\124\47\41\43" (Arbitrary "\79\116\104\101\114")
+    , tok "\40\92\92\41\40\37\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\79\116\104\101\114")])
+    , tok "\40\92\36\91\97\45\122\65\45\90\93\43\41\40\92\46\63\41\40\116\101\120\116\124\118\97\108\117\101\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\80\114\111\112\101\114\116\121")])
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+nestedArgAction' :: TokenMatcher
+nestedArgAction' =
+    [ tok "\40\91\94\92\36\92\91\92\93\92\39\34\47\93\43\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\47\47\46\42\36\92\110\63\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\124\47\41\43" (Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\40\92\36\91\97\45\122\65\45\90\93\43\41\40\92\46\63\41\40\116\101\120\116\124\118\97\108\117\101\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\80\114\111\112\101\114\116\121")])
+    , tok "\40\92\92\92\92\124\92\92\92\93\124\92\92\92\91\124\91\94\92\91\92\93\93\41\43" (Arbitrary "\79\116\104\101\114")
+    ]
+
+rulePrelims' :: TokenMatcher
+rulePrelims' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tok "\114\101\116\117\114\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo nestedArgAction')
+    , tokNext "\92\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo action')
+    , tok "\40\116\104\114\111\119\115\41\40\92\115\43\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")])
+    , tok "\40\63\58\40\44\41\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\41\43" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")])
+    , tokNext "\111\112\116\105\111\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo options')
+    , tokNext "\40\115\99\111\112\101\41\40\92\115\43\41\40\123\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo action')
+    , tok "\40\115\99\111\112\101\41\40\92\115\43\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\59\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\40\64\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\123\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo action')
+    , tokNext "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tok "\40\108\101\120\101\114\124\112\97\114\115\101\114\124\116\114\101\101\41\63\40\92\115\42\41\40\103\114\97\109\109\97\114\92\98\41\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\59\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\111\112\116\105\111\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo options')
+    , tokNext "\116\111\107\101\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo tokens')
+    , tokNext "\40\115\99\111\112\101\41\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\123\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo action')
+    , tokNext "\40\99\97\116\99\104\124\102\105\110\97\108\108\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo exception')
+    , tokNext "\40\64\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\58\58\41\63\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\123\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo action')
+    , tokNext "\40\40\63\58\112\114\111\116\101\99\116\101\100\124\112\114\105\118\97\116\101\124\112\117\98\108\105\99\124\102\114\97\103\109\101\110\116\41\92\98\41\63\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\33\41\63" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (DoAll [(GoTo ruleAlts'), (GoTo rulePrelims')])
+    ]
+
+ruleAlts' :: TokenMatcher
+ruleAlts' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tokNext "\111\112\116\105\111\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo options')
+    , tok "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\60\60\40\91\94\62\93\124\62\91\94\62\93\41\62\62" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\36\63\91\65\45\90\95\93\91\65\45\90\97\45\122\95\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\36\63\91\97\45\122\95\93\91\65\45\90\97\45\122\95\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\92\43\124\92\124\124\45\62\124\61\62\124\61\124\92\40\124\92\41\124\92\46\92\46\124\92\46\124\92\63\124\92\42\124\92\94\124\33\124\92\35\124\126\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo nestedArgAction')
+    , tokNext "\92\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo action')
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\47\47\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\92\42\40\46\124\92\110\41\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+options' :: TokenMatcher
+options' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tok "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\41\40\92\115\42\41\40\61\41\40\92\115\42\41\40\91\65\45\90\97\45\122\93\91\65\45\90\97\45\122\95\48\45\57\93\42\124\92\39\40\63\58\92\92\92\92\124\92\92\92\39\124\91\94\92\39\93\42\41\92\39\124\91\48\45\57\93\43\124\92\42\41\40\92\115\42\41\40\59\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ApacheConf.hs b/src/Text/Highlighter/Lexers/ApacheConf.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ApacheConf.hs
@@ -0,0 +1,36 @@
+module Text.Highlighter.Lexers.ApacheConf (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\112\97\99\104\101\67\111\110\102"
+    , lAliases = ["\97\112\97\99\104\101\99\111\110\102", "\97\99\111\110\102", "\97\112\97\99\104\101"]
+    , lExtensions = ["\46\104\116\97\99\99\101\115\115", "\97\112\97\99\104\101\46\99\111\110\102", "\97\112\97\99\104\101\50\46\99\111\110\102"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\97\112\97\99\104\101\99\111\110\102"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\35\46\42\63\41\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\60\91\94\92\115\62\93\43\41\40\63\58\40\92\115\43\41\40\46\42\63\41\41\63\40\62\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")])
+    , tokNext "\40\91\97\45\122\65\45\90\93\91\97\45\122\65\45\90\48\45\57\93\42\41\40\92\115\43\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")]) (GoTo value')
+    , tok "\92\46\43" (Arbitrary "\84\101\120\116")
+    ]
+
+value' :: TokenMatcher
+value' =
+    [ tokNext "\36" (Arbitrary "\84\101\120\116") Pop
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\100\43\92\46\92\100\43\92\46\92\100\43\92\46\92\100\43\40\63\58\47\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\47\40\91\97\45\122\65\45\90\48\45\57\93\91\97\45\122\65\45\90\48\45\57\95\46\47\45\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\40\111\110\124\111\102\102\124\110\111\110\101\124\97\110\121\124\97\108\108\124\100\111\117\98\108\101\124\101\109\97\105\108\124\100\110\115\124\109\105\110\124\109\105\110\105\109\97\108\124\111\115\124\112\114\111\100\117\99\116\111\110\108\121\124\102\117\108\108\124\101\109\101\114\103\124\97\108\101\114\116\124\99\114\105\116\124\101\114\114\111\114\124\119\97\114\110\124\110\111\116\105\99\101\124\105\110\102\111\124\100\101\98\117\103\124\114\101\103\105\115\116\114\121\124\115\99\114\105\112\116\124\105\110\101\116\100\124\115\116\97\110\100\97\108\111\110\101\124\117\115\101\114\124\103\114\111\117\112\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\34\40\91\94\34\92\92\93\42\40\63\58\92\92\46\91\94\34\92\92\93\42\41\42\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\91\94\92\115\34\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/AppleScript.hs b/src/Text/Highlighter/Lexers/AppleScript.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/AppleScript.hs
@@ -0,0 +1,55 @@
+module Text.Highlighter.Lexers.AppleScript (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\112\112\108\101\83\99\114\105\112\116"
+    , lAliases = ["\97\112\112\108\101\115\99\114\105\112\116"]
+    , lExtensions = ["\46\97\112\112\108\101\115\99\114\105\112\116"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tokNext "\92\40\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\42\92\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\94\42\40\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\42\40\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\172\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\39\115\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\45\45\124\35\41\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\92\40\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tok "\91\92\40\92\41\123\125\33\44\46\58\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\171\41\40\91\94\187\93\43\41\40\187\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\92\98\40\40\63\58\99\111\110\115\105\100\101\114\105\110\103\124\105\103\110\111\114\105\110\103\41\92\115\42\41\40\97\112\112\108\105\99\97\116\105\111\110\32\114\101\115\112\111\110\115\101\115\124\99\97\115\101\124\100\105\97\99\114\105\116\105\99\97\108\115\124\104\121\112\104\101\110\115\124\110\117\109\101\114\105\99\32\115\116\114\105\110\103\115\124\112\117\110\99\116\117\97\116\105\111\110\124\119\104\105\116\101\32\115\112\97\99\101\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")])
+    , tok "\40\45\124\92\42\124\92\43\124\38\124\8800\124\62\61\63\124\60\61\63\124\61\124\8805\124\8804\124\47\124\247\124\92\94\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\40\97\110\100\124\111\114\124\105\115\32\101\113\117\97\108\124\101\113\117\97\108\115\124\40\105\115\32\41\63\101\113\117\97\108\32\116\111\124\105\115\32\110\111\116\124\105\115\110\39\116\124\105\115\110\39\116\32\101\113\117\97\108\40\32\116\111\41\63\124\105\115\32\110\111\116\32\101\113\117\97\108\40\32\116\111\41\63\124\100\111\101\115\110\39\116\32\101\113\117\97\108\124\100\111\101\115\32\110\111\116\32\101\113\117\97\108\124\40\105\115\32\41\63\103\114\101\97\116\101\114\32\116\104\97\110\124\99\111\109\101\115\32\97\102\116\101\114\124\105\115\32\110\111\116\32\108\101\115\115\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\105\115\110\39\116\32\108\101\115\115\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\40\105\115\32\41\63\108\101\115\115\32\116\104\97\110\124\99\111\109\101\115\32\98\101\102\111\114\101\124\105\115\32\110\111\116\32\103\114\101\97\116\101\114\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\105\115\110\39\116\32\103\114\101\97\116\101\114\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\40\105\115\32\32\41\63\103\114\101\97\116\101\114\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\105\115\32\110\111\116\32\108\101\115\115\32\116\104\97\110\124\105\115\110\39\116\32\108\101\115\115\32\116\104\97\110\124\100\111\101\115\32\110\111\116\32\99\111\109\101\32\98\101\102\111\114\101\124\100\111\101\115\110\39\116\32\99\111\109\101\32\98\101\102\111\114\101\124\40\105\115\32\41\63\108\101\115\115\32\116\104\97\110\32\111\114\32\101\113\117\97\108\40\32\116\111\41\63\124\105\115\32\110\111\116\32\103\114\101\97\116\101\114\32\116\104\97\110\124\105\115\110\39\116\32\103\114\101\97\116\101\114\32\116\104\97\110\124\100\111\101\115\32\110\111\116\32\99\111\109\101\32\97\102\116\101\114\124\100\111\101\115\110\39\116\32\99\111\109\101\32\97\102\116\101\114\124\115\116\97\114\116\115\63\32\119\105\116\104\124\98\101\103\105\110\115\63\32\119\105\116\104\124\101\110\100\115\63\32\119\105\116\104\124\99\111\110\116\97\105\110\115\63\124\100\111\101\115\32\110\111\116\32\99\111\110\116\97\105\110\124\100\111\101\115\110\39\116\32\99\111\110\116\97\105\110\124\105\115\32\105\110\124\105\115\32\99\111\110\116\97\105\110\101\100\32\98\121\124\105\115\32\110\111\116\32\105\110\124\105\115\32\110\111\116\32\99\111\110\116\97\105\110\101\100\32\98\121\124\105\115\110\39\116\32\99\111\110\116\97\105\110\101\100\32\98\121\124\100\105\118\124\109\111\100\124\110\111\116\124\40\97\32\32\41\63\40\114\101\102\40\32\116\111\41\63\124\114\101\102\101\114\101\110\99\101\32\116\111\41\124\105\115\124\100\111\101\115\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\94\40\92\115\42\40\63\58\111\110\124\101\110\100\41\92\115\43\41\40\97\99\99\101\112\116\32\111\117\116\108\105\110\101\32\100\114\111\112\124\97\99\99\101\112\116\32\116\97\98\108\101\32\100\114\111\112\124\97\99\116\105\111\110\124\97\99\116\105\118\97\116\101\100\124\97\108\101\114\116\32\101\110\100\101\100\124\97\119\97\107\101\32\102\114\111\109\32\110\105\98\124\98\101\99\97\109\101\32\107\101\121\124\98\101\99\97\109\101\32\109\97\105\110\124\98\101\103\105\110\32\101\100\105\116\105\110\103\124\98\111\117\110\100\115\32\99\104\97\110\103\101\100\124\99\101\108\108\32\118\97\108\117\101\124\99\101\108\108\32\118\97\108\117\101\32\99\104\97\110\103\101\100\124\99\104\97\110\103\101\32\99\101\108\108\32\118\97\108\117\101\124\99\104\97\110\103\101\32\105\116\101\109\32\118\97\108\117\101\124\99\104\97\110\103\101\100\124\99\104\105\108\100\32\111\102\32\105\116\101\109\124\99\104\111\111\115\101\32\109\101\110\117\32\105\116\101\109\124\99\108\105\99\107\101\100\124\99\108\105\99\107\101\100\32\116\111\111\108\98\97\114\32\105\116\101\109\124\99\108\111\115\101\100\124\99\111\108\117\109\110\32\99\108\105\99\107\101\100\124\99\111\108\117\109\110\32\109\111\118\101\100\124\99\111\108\117\109\110\32\114\101\115\105\122\101\100\124\99\111\110\99\108\117\100\101\32\100\114\111\112\124\100\97\116\97\32\114\101\112\114\101\115\101\110\116\97\116\105\111\110\124\100\101\109\105\110\105\97\116\117\114\105\122\101\100\124\100\105\97\108\111\103\32\101\110\100\101\100\124\100\111\99\117\109\101\110\116\32\110\105\98\32\110\97\109\101\124\100\111\117\98\108\101\32\99\108\105\99\107\101\100\124\100\114\97\103\40\32\40\101\110\116\101\114\101\100\124\101\120\105\116\101\100\124\117\112\100\97\116\101\100\41\41\63\124\100\114\111\112\124\101\110\100\32\101\100\105\116\105\110\103\124\101\120\112\111\115\101\100\124\105\100\108\101\124\105\116\101\109\32\101\120\112\97\110\100\97\98\108\101\124\105\116\101\109\32\118\97\108\117\101\124\105\116\101\109\32\118\97\108\117\101\32\99\104\97\110\103\101\100\124\105\116\101\109\115\32\99\104\97\110\103\101\100\124\107\101\121\98\111\97\114\100\32\100\111\119\110\124\107\101\121\98\111\97\114\100\32\117\112\124\108\97\117\110\99\104\101\100\124\108\111\97\100\32\100\97\116\97\32\114\101\112\114\101\115\101\110\116\97\116\105\111\110\124\109\105\110\105\97\116\117\114\105\122\101\100\124\109\111\117\115\101\32\100\111\119\110\124\109\111\117\115\101\32\100\114\97\103\103\101\100\124\109\111\117\115\101\32\101\110\116\101\114\101\100\124\109\111\117\115\101\32\101\120\105\116\101\100\124\109\111\117\115\101\32\109\111\118\101\100\124\109\111\117\115\101\32\117\112\124\109\111\118\101\100\124\110\117\109\98\101\114\32\111\102\32\98\114\111\119\115\101\114\32\114\111\119\115\124\110\117\109\98\101\114\32\111\102\32\105\116\101\109\115\124\110\117\109\98\101\114\32\111\102\32\114\111\119\115\124\111\112\101\110\32\117\110\116\105\116\108\101\100\124\111\112\101\110\101\100\124\112\97\110\101\108\32\101\110\100\101\100\124\112\97\114\97\109\101\116\101\114\115\32\117\112\100\97\116\101\100\124\112\108\117\103\105\110\32\108\111\97\100\101\100\124\112\114\101\112\97\114\101\32\100\114\111\112\124\112\114\101\112\97\114\101\32\111\117\116\108\105\110\101\32\100\114\97\103\124\112\114\101\112\97\114\101\32\111\117\116\108\105\110\101\32\100\114\111\112\124\112\114\101\112\97\114\101\32\116\97\98\108\101\32\100\114\97\103\124\112\114\101\112\97\114\101\32\116\97\98\108\101\32\100\114\111\112\124\114\101\97\100\32\102\114\111\109\32\102\105\108\101\124\114\101\115\105\103\110\101\100\32\97\99\116\105\118\101\124\114\101\115\105\103\110\101\100\32\107\101\121\124\114\101\115\105\103\110\101\100\32\109\97\105\110\124\114\101\115\105\122\101\100\40\32\115\117\98\32\118\105\101\119\115\41\63\124\114\105\103\104\116\32\109\111\117\115\101\32\100\111\119\110\124\114\105\103\104\116\32\109\111\117\115\101\32\100\114\97\103\103\101\100\124\114\105\103\104\116\32\109\111\117\115\101\32\117\112\124\114\111\119\115\32\99\104\97\110\103\101\100\124\115\99\114\111\108\108\32\119\104\101\101\108\124\115\101\108\101\99\116\101\100\32\116\97\98\32\118\105\101\119\32\105\116\101\109\124\115\101\108\101\99\116\105\111\110\32\99\104\97\110\103\101\100\124\115\101\108\101\99\116\105\111\110\32\99\104\97\110\103\105\110\103\124\115\104\111\117\108\100\32\98\101\103\105\110\32\101\100\105\116\105\110\103\124\115\104\111\117\108\100\32\99\108\111\115\101\124\115\104\111\117\108\100\32\99\111\108\108\97\112\115\101\32\105\116\101\109\124\115\104\111\117\108\100\32\101\110\100\32\101\100\105\116\105\110\103\124\115\104\111\117\108\100\32\101\120\112\97\110\100\32\105\116\101\109\124\115\104\111\117\108\100\32\111\112\101\110\40\32\117\110\116\105\116\108\101\100\41\63\124\115\104\111\117\108\100\32\113\117\105\116\40\32\97\102\116\101\114\32\108\97\115\116\32\119\105\110\100\111\119\32\99\108\111\115\101\100\41\63\124\115\104\111\117\108\100\32\115\101\108\101\99\116\32\99\111\108\117\109\110\124\115\104\111\117\108\100\32\115\101\108\101\99\116\32\105\116\101\109\124\115\104\111\117\108\100\32\115\101\108\101\99\116\32\114\111\119\124\115\104\111\117\108\100\32\115\101\108\101\99\116\32\116\97\98\32\118\105\101\119\32\105\116\101\109\124\115\104\111\117\108\100\32\115\101\108\101\99\116\105\111\110\32\99\104\97\110\103\101\124\115\104\111\117\108\100\32\122\111\111\109\124\115\104\111\119\110\124\117\112\100\97\116\101\32\109\101\110\117\32\105\116\101\109\124\117\112\100\97\116\101\32\112\97\114\97\109\101\116\101\114\115\124\117\112\100\97\116\101\32\116\111\111\108\98\97\114\32\105\116\101\109\124\119\97\115\32\104\105\100\100\101\110\124\119\97\115\32\109\105\110\105\97\116\117\114\105\122\101\100\124\119\105\108\108\32\98\101\99\111\109\101\32\97\99\116\105\118\101\124\119\105\108\108\32\99\108\111\115\101\124\119\105\108\108\32\100\105\115\109\105\115\115\124\119\105\108\108\32\100\105\115\112\108\97\121\32\98\114\111\119\115\101\114\32\99\101\108\108\124\119\105\108\108\32\100\105\115\112\108\97\121\32\99\101\108\108\124\119\105\108\108\32\100\105\115\112\108\97\121\32\105\116\101\109\32\99\101\108\108\124\119\105\108\108\32\100\105\115\112\108\97\121\32\111\117\116\108\105\110\101\32\99\101\108\108\124\119\105\108\108\32\102\105\110\105\115\104\32\108\97\117\110\99\104\105\110\103\124\119\105\108\108\32\104\105\100\101\124\119\105\108\108\32\109\105\110\105\97\116\117\114\105\122\101\124\119\105\108\108\32\109\111\118\101\124\119\105\108\108\32\111\112\101\110\124\119\105\108\108\32\112\111\112\32\117\112\124\119\105\108\108\32\113\117\105\116\124\119\105\108\108\32\114\101\115\105\103\110\32\97\99\116\105\118\101\124\119\105\108\108\32\114\101\115\105\122\101\40\32\115\117\98\32\118\105\101\119\115\41\63\124\119\105\108\108\32\115\101\108\101\99\116\32\116\97\98\32\118\105\101\119\32\105\116\101\109\124\119\105\108\108\32\115\104\111\119\124\119\105\108\108\32\122\111\111\109\124\119\114\105\116\101\32\116\111\32\102\105\108\101\124\122\111\111\109\101\100\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\94\40\92\115\42\41\40\105\110\124\111\110\124\115\99\114\105\112\116\124\116\111\41\40\92\115\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tok "\92\98\40\97\115\32\41\40\97\108\105\97\115\32\124\97\112\112\108\105\99\97\116\105\111\110\32\124\98\111\111\108\101\97\110\32\124\99\108\97\115\115\32\124\99\111\110\115\116\97\110\116\32\124\100\97\116\101\32\124\102\105\108\101\32\124\105\110\116\101\103\101\114\32\124\108\105\115\116\32\124\110\117\109\98\101\114\32\124\80\79\83\73\88\32\102\105\108\101\32\124\114\101\97\108\32\124\114\101\99\111\114\100\32\124\114\101\102\101\114\101\110\99\101\32\124\82\71\66\32\99\111\108\111\114\32\124\115\99\114\105\112\116\32\124\116\101\120\116\32\124\117\110\105\116\32\116\121\112\101\115\124\40\85\110\105\99\111\100\101\32\41\63\116\101\120\116\124\115\116\114\105\110\103\41\92\98" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")])
+    , tok "\92\98\40\65\112\112\108\101\83\99\114\105\112\116\124\99\117\114\114\101\110\116\32\97\112\112\108\105\99\97\116\105\111\110\124\102\97\108\115\101\124\108\105\110\101\102\101\101\100\124\109\105\115\115\105\110\103\32\118\97\108\117\101\124\112\105\124\113\117\111\116\101\124\114\101\115\117\108\116\124\114\101\116\117\114\110\124\115\112\97\99\101\124\116\97\98\124\116\101\120\116\32\105\116\101\109\32\100\101\108\105\109\105\116\101\114\115\124\116\114\117\101\124\118\101\114\115\105\111\110\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\98\40\65\83\67\73\73\32\40\99\104\97\114\97\99\116\101\114\124\110\117\109\98\101\114\41\124\97\99\116\105\118\97\116\101\124\98\101\101\112\124\99\104\111\111\115\101\32\85\82\76\124\99\104\111\111\115\101\32\97\112\112\108\105\99\97\116\105\111\110\124\99\104\111\111\115\101\32\99\111\108\111\114\124\99\104\111\111\115\101\32\102\105\108\101\40\32\110\97\109\101\41\63\124\99\104\111\111\115\101\32\102\111\108\100\101\114\124\99\104\111\111\115\101\32\102\114\111\109\32\108\105\115\116\124\99\104\111\111\115\101\32\114\101\109\111\116\101\32\97\112\112\108\105\99\97\116\105\111\110\124\99\108\105\112\98\111\97\114\100\32\105\110\102\111\124\99\108\111\115\101\40\32\97\99\99\101\115\115\41\63\124\99\111\112\121\124\99\111\117\110\116\124\99\117\114\114\101\110\116\32\100\97\116\101\124\100\101\108\97\121\124\100\101\108\101\116\101\124\100\105\115\112\108\97\121\32\40\97\108\101\114\116\124\100\105\97\108\111\103\41\124\100\111\32\115\104\101\108\108\32\115\99\114\105\112\116\124\100\117\112\108\105\99\97\116\101\124\101\120\105\115\116\115\124\103\101\116\32\101\111\102\124\103\101\116\32\118\111\108\117\109\101\32\115\101\116\116\105\110\103\115\124\105\110\102\111\32\102\111\114\124\108\97\117\110\99\104\124\108\105\115\116\32\40\100\105\115\107\115\124\102\111\108\100\101\114\41\124\108\111\97\100\32\115\99\114\105\112\116\124\108\111\103\124\109\97\107\101\124\109\111\117\110\116\32\118\111\108\117\109\101\124\110\101\119\124\111\102\102\115\101\116\124\111\112\101\110\40\32\40\102\111\114\32\97\99\99\101\115\115\124\108\111\99\97\116\105\111\110\41\41\63\124\112\97\116\104\32\116\111\124\112\114\105\110\116\124\113\117\105\116\124\114\97\110\100\111\109\32\110\117\109\98\101\114\124\114\101\97\100\124\114\111\117\110\100\124\114\117\110\40\32\115\99\114\105\112\116\41\63\124\115\97\121\124\115\99\114\105\112\116\105\110\103\32\99\111\109\112\111\110\101\110\116\115\124\115\101\116\32\40\101\111\102\124\116\104\101\32\99\108\105\112\98\111\97\114\100\32\116\111\124\118\111\108\117\109\101\41\124\115\116\111\114\101\32\115\99\114\105\112\116\124\115\117\109\109\97\114\105\122\101\124\115\121\115\116\101\109\32\97\116\116\114\105\98\117\116\101\124\115\121\115\116\101\109\32\105\110\102\111\124\116\104\101\32\99\108\105\112\98\111\97\114\100\124\116\105\109\101\32\116\111\32\71\77\84\124\119\114\105\116\101\124\113\117\111\116\101\100\32\102\111\114\109\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\99\111\110\115\105\100\101\114\105\110\103\124\101\108\115\101\124\101\114\114\111\114\124\101\120\105\116\124\102\114\111\109\124\105\102\124\105\103\110\111\114\105\110\103\124\105\110\124\114\101\112\101\97\116\124\116\101\108\108\124\116\104\101\110\124\116\105\109\101\115\124\116\111\124\116\114\121\124\117\110\116\105\108\124\117\115\105\110\103\32\116\101\114\109\115\32\102\114\111\109\124\119\104\105\108\101\124\119\104\105\116\104\124\119\105\116\104\32\116\105\109\101\111\117\116\40\32\111\102\41\63\124\119\105\116\104\32\116\114\97\110\115\97\99\116\105\111\110\124\98\121\124\99\111\110\116\105\110\117\101\124\101\110\100\124\105\116\115\63\124\109\101\124\109\121\124\114\101\116\117\114\110\124\111\102\124\97\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\103\108\111\98\97\108\124\108\111\99\97\108\124\112\114\111\112\40\101\114\116\121\41\63\124\115\101\116\124\103\101\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\98\117\116\124\112\117\116\124\114\101\116\117\114\110\105\110\103\124\116\104\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\97\116\116\97\99\104\109\101\110\116\124\97\116\116\114\105\98\117\116\101\32\114\117\110\124\99\104\97\114\97\99\116\101\114\124\100\97\121\124\109\111\110\116\104\124\112\97\114\97\103\114\97\112\104\124\119\111\114\100\124\121\101\97\114\41\115\63\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\97\98\111\117\116\124\97\98\111\118\101\124\97\103\97\105\110\115\116\124\97\112\97\114\116\32\102\114\111\109\124\97\114\111\117\110\100\124\97\115\105\100\101\32\102\114\111\109\124\97\116\124\98\101\108\111\119\124\98\101\110\101\97\116\104\124\98\101\115\105\100\101\124\98\101\116\119\101\101\110\124\102\111\114\124\103\105\118\101\110\124\105\110\115\116\101\97\100\32\111\102\124\111\110\124\111\110\116\111\124\111\117\116\32\111\102\124\111\118\101\114\124\115\105\110\99\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\97\99\99\101\112\116\115\32\97\114\114\111\119\32\107\101\121\124\97\99\116\105\111\110\32\109\101\116\104\111\100\124\97\99\116\105\118\101\124\97\108\105\103\110\109\101\110\116\124\97\108\108\111\119\101\100\32\105\100\101\110\116\105\102\105\101\114\115\124\97\108\108\111\119\115\32\98\114\97\110\99\104\32\115\101\108\101\99\116\105\111\110\124\97\108\108\111\119\115\32\99\111\108\117\109\110\32\114\101\111\114\100\101\114\105\110\103\124\97\108\108\111\119\115\32\99\111\108\117\109\110\32\114\101\115\105\122\105\110\103\124\97\108\108\111\119\115\32\99\111\108\117\109\110\32\115\101\108\101\99\116\105\111\110\124\97\108\108\111\119\115\32\99\117\115\116\111\109\105\122\97\116\105\111\110\124\97\108\108\111\119\115\32\101\100\105\116\105\110\103\32\116\101\120\116\32\97\116\116\114\105\98\117\116\101\115\124\97\108\108\111\119\115\32\101\109\112\116\121\32\115\101\108\101\99\116\105\111\110\124\97\108\108\111\119\115\32\109\105\120\101\100\32\115\116\97\116\101\124\97\108\108\111\119\115\32\109\117\108\116\105\112\108\101\32\115\101\108\101\99\116\105\111\110\124\97\108\108\111\119\115\32\114\101\111\114\100\101\114\105\110\103\124\97\108\108\111\119\115\32\117\110\100\111\124\97\108\112\104\97\40\32\118\97\108\117\101\41\63\124\97\108\116\101\114\110\97\116\101\32\105\109\97\103\101\124\97\108\116\101\114\110\97\116\101\32\105\110\99\114\101\109\101\110\116\32\118\97\108\117\101\124\97\108\116\101\114\110\97\116\101\32\116\105\116\108\101\124\97\110\105\109\97\116\105\111\110\32\100\101\108\97\121\124\97\115\115\111\99\105\97\116\101\100\32\102\105\108\101\32\110\97\109\101\124\97\115\115\111\99\105\97\116\101\100\32\111\98\106\101\99\116\124\97\117\116\111\32\99\111\109\112\108\101\116\101\115\124\97\117\116\111\32\100\105\115\112\108\97\121\124\97\117\116\111\32\101\110\97\98\108\101\115\32\105\116\101\109\115\124\97\117\116\111\32\114\101\112\101\97\116\124\97\117\116\111\32\114\101\115\105\122\101\115\40\32\111\117\116\108\105\110\101\32\99\111\108\117\109\110\41\63\124\97\117\116\111\32\115\97\118\101\32\101\120\112\97\110\100\101\100\32\105\116\101\109\115\124\97\117\116\111\32\115\97\118\101\32\110\97\109\101\124\97\117\116\111\32\115\97\118\101\32\116\97\98\108\101\32\99\111\108\117\109\110\115\124\97\117\116\111\32\115\97\118\101\115\32\99\111\110\102\105\103\117\114\97\116\105\111\110\124\97\117\116\111\32\115\99\114\111\108\108\124\97\117\116\111\32\115\105\122\101\115\32\97\108\108\32\99\111\108\117\109\110\115\32\116\111\32\102\105\116\124\97\117\116\111\32\115\105\122\101\115\32\99\101\108\108\115\124\98\97\99\107\103\114\111\117\110\100\32\99\111\108\111\114\124\98\101\122\101\108\32\115\116\97\116\101\124\98\101\122\101\108\32\115\116\121\108\101\124\98\101\122\101\108\101\100\124\98\111\114\100\101\114\32\114\101\99\116\124\98\111\114\100\101\114\32\116\121\112\101\124\98\111\114\100\101\114\101\100\124\98\111\117\110\100\115\40\32\114\111\116\97\116\105\111\110\41\63\124\98\111\120\32\116\121\112\101\124\98\117\116\116\111\110\32\114\101\116\117\114\110\101\100\124\98\117\116\116\111\110\32\116\121\112\101\124\99\97\110\32\99\104\111\111\115\101\32\100\105\114\101\99\116\111\114\105\101\115\124\99\97\110\32\99\104\111\111\115\101\32\102\105\108\101\115\124\99\97\110\32\100\114\97\119\124\99\97\110\32\104\105\100\101\124\99\101\108\108\40\32\40\98\97\99\107\103\114\111\117\110\100\32\99\111\108\111\114\124\115\105\122\101\124\116\121\112\101\41\41\63\124\99\104\97\114\97\99\116\101\114\115\124\99\108\97\115\115\124\99\108\105\99\107\32\99\111\117\110\116\124\99\108\105\99\107\101\100\40\32\100\97\116\97\41\63\32\99\111\108\117\109\110\124\99\108\105\99\107\101\100\32\100\97\116\97\32\105\116\101\109\124\99\108\105\99\107\101\100\40\32\100\97\116\97\41\63\32\114\111\119\124\99\108\111\115\101\97\98\108\101\124\99\111\108\108\97\116\105\110\103\124\99\111\108\111\114\40\32\40\109\111\100\101\124\112\97\110\101\108\41\41\124\99\111\109\109\97\110\100\32\107\101\121\32\100\111\119\110\124\99\111\110\102\105\103\117\114\97\116\105\111\110\124\99\111\110\116\101\110\116\40\115\124\32\40\115\105\122\101\124\118\105\101\119\40\32\109\97\114\103\105\110\115\41\63\41\41\63\124\99\111\110\116\101\120\116\124\99\111\110\116\105\110\117\111\117\115\124\99\111\110\116\114\111\108\32\107\101\121\32\100\111\119\110\124\99\111\110\116\114\111\108\32\115\105\122\101\124\99\111\110\116\114\111\108\32\116\105\110\116\124\99\111\110\116\114\111\108\32\118\105\101\119\124\99\111\110\116\114\111\108\108\101\114\32\118\105\115\105\98\108\101\124\99\111\111\114\100\105\110\97\116\101\32\115\121\115\116\101\109\124\99\111\112\105\101\115\40\32\111\110\32\115\99\114\111\108\108\41\63\124\99\111\114\110\101\114\32\118\105\101\119\124\99\117\114\114\101\110\116\32\99\101\108\108\124\99\117\114\114\101\110\116\32\99\111\108\117\109\110\124\99\117\114\114\101\110\116\40\32\102\105\101\108\100\41\63\32\32\101\100\105\116\111\114\124\99\117\114\114\101\110\116\40\32\109\101\110\117\41\63\32\105\116\101\109\124\99\117\114\114\101\110\116\32\114\111\119\124\99\117\114\114\101\110\116\32\116\97\98\32\118\105\101\119\32\105\116\101\109\124\100\97\116\97\32\115\111\117\114\99\101\124\100\101\102\97\117\108\116\32\105\100\101\110\116\105\102\105\101\114\115\124\100\101\108\116\97\32\40\120\124\121\124\122\41\124\100\101\115\116\105\110\97\116\105\111\110\32\119\105\110\100\111\119\124\100\105\114\101\99\116\111\114\121\124\100\105\115\112\108\97\121\32\109\111\100\101\124\100\105\115\112\108\97\121\101\100\32\99\101\108\108\124\100\111\99\117\109\101\110\116\40\32\40\101\100\105\116\101\100\124\114\101\99\116\124\118\105\101\119\41\41\63\124\100\111\117\98\108\101\32\118\97\108\117\101\124\100\114\97\103\103\101\100\32\99\111\108\117\109\110\124\100\114\97\103\103\101\100\32\100\105\115\116\97\110\99\101\124\100\114\97\103\103\101\100\32\105\116\101\109\115\124\100\114\97\119\115\40\32\99\101\108\108\41\63\32\98\97\99\107\103\114\111\117\110\100\124\100\114\97\119\115\32\103\114\105\100\124\100\121\110\97\109\105\99\97\108\108\121\32\115\99\114\111\108\108\115\124\101\99\104\111\115\32\98\117\108\108\101\116\115\124\101\100\103\101\124\101\100\105\116\97\98\108\101\124\101\100\105\116\101\100\40\32\100\97\116\97\41\63\32\99\111\108\117\109\110\124\101\100\105\116\101\100\32\100\97\116\97\32\105\116\101\109\124\101\100\105\116\101\100\40\32\100\97\116\97\41\63\32\114\111\119\124\101\110\97\98\108\101\100\124\101\110\99\108\111\115\105\110\103\32\115\99\114\111\108\108\32\118\105\101\119\124\101\110\100\105\110\103\32\112\97\103\101\124\101\114\114\111\114\32\104\97\110\100\108\105\110\103\124\101\118\101\110\116\32\110\117\109\98\101\114\124\101\118\101\110\116\32\116\121\112\101\124\101\120\99\108\117\100\101\100\32\102\114\111\109\32\119\105\110\100\111\119\115\32\109\101\110\117\124\101\120\101\99\117\116\97\98\108\101\32\112\97\116\104\124\101\120\112\97\110\100\101\100\124\102\97\120\32\110\117\109\98\101\114\124\102\105\101\108\100\32\101\100\105\116\111\114\124\102\105\108\101\32\107\105\110\100\124\102\105\108\101\32\110\97\109\101\124\102\105\108\101\32\116\121\112\101\124\102\105\114\115\116\32\114\101\115\112\111\110\100\101\114\124\102\105\114\115\116\32\118\105\115\105\98\108\101\32\99\111\108\117\109\110\124\102\108\105\112\112\101\100\124\102\108\111\97\116\105\110\103\124\102\111\110\116\40\32\112\97\110\101\108\41\63\124\102\111\114\109\97\116\116\101\114\124\102\114\97\109\101\119\111\114\107\115\32\112\97\116\104\124\102\114\111\110\116\109\111\115\116\124\103\97\118\101\32\117\112\124\103\114\105\100\32\99\111\108\111\114\124\104\97\115\32\100\97\116\97\32\105\116\101\109\115\124\104\97\115\32\104\111\114\105\122\111\110\116\97\108\32\114\117\108\101\114\124\104\97\115\32\104\111\114\105\122\111\110\116\97\108\32\115\99\114\111\108\108\101\114\124\104\97\115\32\112\97\114\101\110\116\32\100\97\116\97\32\105\116\101\109\124\104\97\115\32\114\101\115\105\122\101\32\105\110\100\105\99\97\116\111\114\124\104\97\115\32\115\104\97\100\111\119\124\104\97\115\32\115\117\98\32\109\101\110\117\124\104\97\115\32\118\101\114\116\105\99\97\108\32\114\117\108\101\114\124\104\97\115\32\118\101\114\116\105\99\97\108\32\115\99\114\111\108\108\101\114\124\104\101\97\100\101\114\32\99\101\108\108\124\104\101\97\100\101\114\32\118\105\101\119\124\104\105\100\100\101\110\124\104\105\100\101\115\32\119\104\101\110\32\100\101\97\99\116\105\118\97\116\101\100\124\104\105\103\104\108\105\103\104\116\115\32\98\121\124\104\111\114\105\122\111\110\116\97\108\32\108\105\110\101\32\115\99\114\111\108\108\124\104\111\114\105\122\111\110\116\97\108\32\112\97\103\101\32\115\99\114\111\108\108\124\104\111\114\105\122\111\110\116\97\108\32\114\117\108\101\114\32\118\105\101\119\124\104\111\114\105\122\111\110\116\97\108\108\121\32\114\101\115\105\122\97\98\108\101\124\105\99\111\110\32\105\109\97\103\101\124\105\100\124\105\100\101\110\116\105\102\105\101\114\124\105\103\110\111\114\101\115\32\109\117\108\116\105\112\108\101\32\99\108\105\99\107\115\124\105\109\97\103\101\40\32\40\97\108\105\103\110\109\101\110\116\124\100\105\109\115\32\119\104\101\110\32\100\105\115\97\98\108\101\100\124\102\114\97\109\101\32\115\116\121\108\101\124\115\99\97\108\105\110\103\41\41\63\124\105\109\112\111\114\116\115\32\103\114\97\112\104\105\99\115\124\105\110\99\114\101\109\101\110\116\32\118\97\108\117\101\124\105\110\100\101\110\116\97\116\105\111\110\32\112\101\114\32\108\101\118\101\108\124\105\110\100\101\116\101\114\109\105\110\97\116\101\124\105\110\100\101\120\124\105\110\116\101\103\101\114\32\118\97\108\117\101\124\105\110\116\101\114\99\101\108\108\32\115\112\97\99\105\110\103\124\105\116\101\109\32\104\101\105\103\104\116\124\107\101\121\40\32\40\99\111\100\101\124\101\113\117\105\118\97\108\101\110\116\40\32\109\111\100\105\102\105\101\114\41\63\124\119\105\110\100\111\119\41\41\63\124\107\110\111\98\32\116\104\105\99\107\110\101\115\115\124\108\97\98\101\108\124\108\97\115\116\40\32\118\105\115\105\98\108\101\41\63\32\99\111\108\117\109\110\124\108\101\97\100\105\110\103\32\111\102\102\115\101\116\124\108\101\97\102\124\108\101\118\101\108\124\108\105\110\101\32\115\99\114\111\108\108\124\108\111\97\100\101\100\124\108\111\99\97\108\105\122\101\100\32\115\111\114\116\124\108\111\99\97\116\105\111\110\124\108\111\111\112\32\109\111\100\101\124\109\97\105\110\40\32\40\98\117\110\100\101\124\109\101\110\117\124\119\105\110\100\111\119\41\41\63\124\109\97\114\107\101\114\32\102\111\108\108\111\119\115\32\99\101\108\108\124\109\97\116\114\105\120\32\109\111\100\101\124\109\97\120\105\109\117\109\40\32\99\111\110\116\101\110\116\41\63\32\115\105\122\101\124\109\97\120\105\109\117\109\32\118\105\115\105\98\108\101\32\99\111\108\117\109\110\115\124\109\101\110\117\40\32\102\111\114\109\32\114\101\112\114\101\115\101\110\116\97\116\105\111\110\41\63\124\109\105\110\105\97\116\117\114\105\122\97\98\108\101\124\109\105\110\105\97\116\117\114\105\122\101\100\124\109\105\110\105\109\105\122\101\100\32\105\109\97\103\101\124\109\105\110\105\109\105\122\101\100\32\116\105\116\108\101\124\109\105\110\105\109\117\109\32\99\111\108\117\109\110\32\119\105\100\116\104\124\109\105\110\105\109\117\109\40\32\99\111\110\116\101\110\116\41\63\32\115\105\122\101\124\109\111\100\97\108\124\109\111\100\105\102\105\101\100\124\109\111\117\115\101\32\100\111\119\110\32\115\116\97\116\101\124\109\111\118\105\101\40\32\40\99\111\110\116\114\111\108\108\101\114\124\102\105\108\101\124\114\101\99\116\41\41\63\124\109\117\116\101\100\124\110\97\109\101\124\110\101\101\100\115\32\100\105\115\112\108\97\121\124\110\101\120\116\32\115\116\97\116\101\124\110\101\120\116\32\116\101\120\116\124\110\117\109\98\101\114\32\111\102\32\116\105\99\107\32\109\97\114\107\115\124\111\110\108\121\32\116\105\99\107\32\109\97\114\107\32\118\97\108\117\101\115\124\111\112\97\113\117\101\124\111\112\101\110\32\112\97\110\101\108\124\111\112\116\105\111\110\32\107\101\121\32\100\111\119\110\124\111\117\116\108\105\110\101\32\116\97\98\108\101\32\99\111\108\117\109\110\124\112\97\103\101\32\115\99\114\111\108\108\124\112\97\103\101\115\32\97\99\114\111\115\115\124\112\97\103\101\115\32\100\111\119\110\124\112\97\108\101\116\116\101\32\108\97\98\101\108\124\112\97\110\101\32\115\112\108\105\116\116\101\114\124\112\97\114\101\110\116\32\100\97\116\97\32\105\116\101\109\124\112\97\114\101\110\116\32\119\105\110\100\111\119\124\112\97\115\116\101\98\111\97\114\100\124\112\97\116\104\40\32\40\110\97\109\101\115\124\115\101\112\97\114\97\116\111\114\41\41\63\124\112\108\97\121\105\110\103\124\112\108\97\121\115\32\101\118\101\114\121\32\102\114\97\109\101\124\112\108\97\121\115\32\115\101\108\101\99\116\105\111\110\32\111\110\108\121\124\112\111\115\105\116\105\111\110\124\112\114\101\102\101\114\114\101\100\32\101\100\103\101\124\112\114\101\102\101\114\114\101\100\32\116\121\112\101\124\112\114\101\115\115\117\114\101\124\112\114\101\118\105\111\117\115\32\116\101\120\116\124\112\114\111\109\112\116\124\112\114\111\112\101\114\116\105\101\115\124\112\114\111\116\111\116\121\112\101\32\99\101\108\108\124\112\117\108\108\115\32\100\111\119\110\124\114\97\116\101\124\114\101\108\101\97\115\101\100\32\119\104\101\110\32\99\108\111\115\101\100\124\114\101\112\101\97\116\101\100\124\114\101\113\117\101\115\116\101\100\32\112\114\105\110\116\32\116\105\109\101\124\114\101\113\117\105\114\101\100\32\102\105\108\101\32\116\121\112\101\124\114\101\115\105\122\97\98\108\101\124\114\101\115\105\122\101\100\32\99\111\108\117\109\110\124\114\101\115\111\117\114\99\101\32\112\97\116\104\124\114\101\116\117\114\110\115\32\114\101\99\111\114\100\115\124\114\101\117\115\101\115\32\99\111\108\117\109\110\115\124\114\105\99\104\32\116\101\120\116\124\114\111\108\108\32\111\118\101\114\124\114\111\119\32\104\101\105\103\104\116\124\114\117\108\101\114\115\32\118\105\115\105\98\108\101\124\115\97\118\101\32\112\97\110\101\108\124\115\99\114\105\112\116\115\32\112\97\116\104\124\115\99\114\111\108\108\97\98\108\101\124\115\101\108\101\99\116\97\98\108\101\40\32\105\100\101\110\116\105\102\105\101\114\115\41\63\124\115\101\108\101\99\116\101\100\32\99\101\108\108\124\115\101\108\101\99\116\101\100\40\32\100\97\116\97\41\63\32\99\111\108\117\109\110\115\63\124\115\101\108\101\99\116\101\100\32\100\97\116\97\32\105\116\101\109\115\63\124\115\101\108\101\99\116\101\100\40\32\100\97\116\97\41\63\32\114\111\119\115\63\124\115\101\108\101\99\116\101\100\32\105\116\101\109\32\105\100\101\110\116\105\102\105\101\114\124\115\101\108\101\99\116\105\111\110\32\98\121\32\114\101\99\116\124\115\101\110\100\32\97\99\116\105\111\110\32\111\110\32\97\114\114\111\119\32\107\101\121\124\115\101\110\100\115\32\97\99\116\105\111\110\32\119\104\101\110\32\100\111\110\101\32\101\100\105\116\105\110\103\124\115\101\112\97\114\97\116\101\115\32\99\111\108\117\109\110\115\124\115\101\112\97\114\97\116\111\114\32\105\116\101\109\124\115\101\113\117\101\110\99\101\32\110\117\109\98\101\114\124\115\101\114\118\105\99\101\115\32\109\101\110\117\124\115\104\97\114\101\100\32\102\114\97\109\101\119\111\114\107\115\32\112\97\116\104\124\115\104\97\114\101\100\32\115\117\112\112\111\114\116\32\112\97\116\104\124\115\104\101\101\116\124\115\104\105\102\116\32\107\101\121\32\100\111\119\110\124\115\104\111\119\115\32\97\108\112\104\97\124\115\104\111\119\115\32\115\116\97\116\101\32\98\121\124\115\105\122\101\40\32\109\111\100\101\41\63\124\115\109\97\114\116\32\105\110\115\101\114\116\32\100\101\108\101\116\101\32\101\110\97\98\108\101\100\124\115\111\114\116\32\99\97\115\101\32\115\101\110\115\105\116\105\118\105\116\121\124\115\111\114\116\32\99\111\108\117\109\110\124\115\111\114\116\32\111\114\100\101\114\124\115\111\114\116\32\116\121\112\101\124\115\111\114\116\101\100\40\32\100\97\116\97\32\114\111\119\115\41\63\124\115\111\117\110\100\124\115\111\117\114\99\101\40\32\109\97\115\107\41\63\124\115\112\101\108\108\32\99\104\101\99\107\105\110\103\32\101\110\97\98\108\101\100\124\115\116\97\114\116\105\110\103\32\112\97\103\101\124\115\116\97\116\101\124\115\116\114\105\110\103\32\118\97\108\117\101\124\115\117\98\32\109\101\110\117\124\115\117\112\101\114\32\109\101\110\117\124\115\117\112\101\114\32\118\105\101\119\124\116\97\98\32\107\101\121\32\116\114\97\118\101\114\115\101\115\32\99\101\108\108\115\124\116\97\98\32\115\116\97\116\101\124\116\97\98\32\116\121\112\101\124\116\97\98\32\118\105\101\119\124\116\97\98\108\101\32\118\105\101\119\124\116\97\103\124\116\97\114\103\101\116\40\32\112\114\105\110\116\101\114\41\63\124\116\101\120\116\32\99\111\108\111\114\124\116\101\120\116\32\99\111\110\116\97\105\110\101\114\32\105\110\115\101\114\116\124\116\101\120\116\32\99\111\110\116\97\105\110\101\114\32\111\114\105\103\105\110\124\116\101\120\116\32\114\101\116\117\114\110\101\100\124\116\105\99\107\32\109\97\114\107\32\112\111\115\105\116\105\111\110\124\116\105\109\101\32\115\116\97\109\112\124\116\105\116\108\101\40\100\124\32\40\99\101\108\108\124\102\111\110\116\124\104\101\105\103\104\116\124\112\111\115\105\116\105\111\110\124\114\101\99\116\41\41\63\124\116\111\111\108\32\116\105\112\124\116\111\111\108\98\97\114\124\116\114\97\105\108\105\110\103\32\111\102\102\115\101\116\124\116\114\97\110\115\112\97\114\101\110\116\124\116\114\101\97\116\32\112\97\99\107\97\103\101\115\32\97\115\32\100\105\114\101\99\116\111\114\105\101\115\124\116\114\117\110\99\97\116\101\100\32\108\97\98\101\108\115\124\116\121\112\101\115\124\117\110\109\111\100\105\102\105\101\100\32\99\104\97\114\97\99\116\101\114\115\124\117\112\100\97\116\101\32\118\105\101\119\115\124\117\115\101\32\115\111\114\116\32\105\110\100\105\99\97\116\111\114\124\117\115\101\114\32\100\101\102\97\117\108\116\115\124\117\115\101\115\32\100\97\116\97\32\115\111\117\114\99\101\124\117\115\101\115\32\114\117\108\101\114\124\117\115\101\115\32\116\104\114\101\97\100\101\100\32\97\110\105\109\97\116\105\111\110\124\117\115\101\115\32\116\105\116\108\101\32\102\114\111\109\32\112\114\101\118\105\111\117\115\32\99\111\108\117\109\110\124\118\97\108\117\101\32\119\114\97\112\115\124\118\101\114\115\105\111\110\124\118\101\114\116\105\99\97\108\40\32\40\108\105\110\101\32\115\99\114\111\108\108\124\112\97\103\101\32\115\99\114\111\108\108\124\114\117\108\101\114\32\118\105\101\119\41\41\63\124\118\101\114\116\105\99\97\108\108\121\32\114\101\115\105\122\97\98\108\101\124\118\105\101\119\124\118\105\115\105\98\108\101\40\32\100\111\99\117\109\101\110\116\32\114\101\99\116\41\63\124\118\111\108\117\109\101\124\119\105\100\116\104\124\119\105\110\100\111\119\124\119\105\110\100\111\119\115\32\109\101\110\117\124\119\114\97\112\115\124\122\111\111\109\97\98\108\101\124\122\111\111\109\101\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tok "\92\98\40\97\99\116\105\111\110\32\99\101\108\108\124\97\108\101\114\116\32\114\101\112\108\121\124\97\112\112\108\105\99\97\116\105\111\110\124\98\111\120\124\98\114\111\119\115\101\114\40\32\99\101\108\108\41\63\124\98\117\110\100\108\101\124\98\117\116\116\111\110\40\32\99\101\108\108\41\63\124\99\101\108\108\124\99\108\105\112\32\118\105\101\119\124\99\111\108\111\114\32\119\101\108\108\124\99\111\108\111\114\45\112\97\110\101\108\124\99\111\109\98\111\32\98\111\120\40\32\105\116\101\109\41\63\124\99\111\110\116\114\111\108\124\100\97\116\97\40\32\40\99\101\108\108\124\99\111\108\117\109\110\124\105\116\101\109\124\114\111\119\124\115\111\117\114\99\101\41\41\63\124\100\101\102\97\117\108\116\32\101\110\116\114\121\124\100\105\97\108\111\103\32\114\101\112\108\121\124\100\111\99\117\109\101\110\116\124\100\114\97\103\32\105\110\102\111\124\100\114\97\119\101\114\124\101\118\101\110\116\124\102\111\110\116\40\45\112\97\110\101\108\41\63\124\102\111\114\109\97\116\116\101\114\124\105\109\97\103\101\40\32\40\99\101\108\108\124\118\105\101\119\41\41\63\124\109\97\116\114\105\120\124\109\101\110\117\40\32\105\116\101\109\41\63\124\105\116\101\109\124\109\111\118\105\101\40\32\118\105\101\119\41\63\124\111\112\101\110\45\112\97\110\101\108\124\111\117\116\108\105\110\101\32\118\105\101\119\124\112\97\110\101\108\124\112\97\115\116\101\98\111\97\114\100\124\112\108\117\103\105\110\124\112\111\112\117\112\32\98\117\116\116\111\110\124\112\114\111\103\114\101\115\115\32\105\110\100\105\99\97\116\111\114\124\114\101\115\112\111\110\100\101\114\124\115\97\118\101\45\112\97\110\101\108\124\115\99\114\111\108\108\32\118\105\101\119\124\115\101\99\117\114\101\32\116\101\120\116\32\102\105\101\108\100\40\32\99\101\108\108\41\63\124\115\108\105\100\101\114\124\115\111\117\110\100\124\115\112\108\105\116\32\118\105\101\119\124\115\116\101\112\112\101\114\124\116\97\98\32\118\105\101\119\40\32\105\116\101\109\41\63\124\116\97\98\108\101\40\32\40\99\111\108\117\109\110\124\104\101\97\100\101\114\32\99\101\108\108\124\104\101\97\100\101\114\32\118\105\101\119\124\118\105\101\119\41\41\124\116\101\120\116\40\32\40\102\105\101\108\100\40\32\99\101\108\108\41\63\124\118\105\101\119\41\41\63\124\116\111\111\108\98\97\114\40\32\105\116\101\109\41\63\124\117\115\101\114\45\100\101\102\97\117\108\116\115\124\118\105\101\119\124\119\105\110\100\111\119\41\115\63\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\97\110\105\109\97\116\101\124\97\112\112\101\110\100\124\99\97\108\108\32\109\101\116\104\111\100\124\99\101\110\116\101\114\124\99\108\111\115\101\32\100\114\97\119\101\114\124\99\108\111\115\101\32\112\97\110\101\108\124\100\105\115\112\108\97\121\124\100\105\115\112\108\97\121\32\97\108\101\114\116\124\100\105\115\112\108\97\121\32\100\105\97\108\111\103\124\100\105\115\112\108\97\121\32\112\97\110\101\108\124\103\111\124\104\105\100\101\124\104\105\103\104\108\105\103\104\116\124\105\110\99\114\101\109\101\110\116\124\105\116\101\109\32\102\111\114\124\108\111\97\100\32\105\109\97\103\101\124\108\111\97\100\32\109\111\118\105\101\124\108\111\97\100\32\110\105\98\124\108\111\97\100\32\112\97\110\101\108\124\108\111\97\100\32\115\111\117\110\100\124\108\111\99\97\108\105\122\101\100\32\115\116\114\105\110\103\124\108\111\99\107\32\102\111\99\117\115\124\108\111\103\124\111\112\101\110\32\100\114\97\119\101\114\124\112\97\116\104\32\102\111\114\124\112\97\117\115\101\124\112\101\114\102\111\114\109\32\97\99\116\105\111\110\124\112\108\97\121\124\114\101\103\105\115\116\101\114\124\114\101\115\117\109\101\124\115\99\114\111\108\108\124\115\101\108\101\99\116\40\32\97\108\108\41\63\124\115\104\111\119\124\115\105\122\101\32\116\111\32\102\105\116\124\115\116\97\114\116\124\115\116\101\112\32\98\97\99\107\124\115\116\101\112\32\102\111\114\119\97\114\100\124\115\116\111\112\124\115\121\110\99\104\114\111\110\105\122\101\124\117\110\108\111\99\107\32\102\111\99\117\115\124\117\112\100\97\116\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\40\40\105\110\32\41\63\98\97\99\107\32\111\102\124\40\105\110\32\41\63\102\114\111\110\116\32\111\102\124\91\48\45\57\93\43\40\115\116\124\110\100\124\114\100\124\116\104\41\124\102\105\114\115\116\124\115\101\99\111\110\100\124\116\104\105\114\100\124\102\111\117\114\116\104\124\102\105\102\116\104\124\115\105\120\116\104\124\115\101\118\101\110\116\104\124\101\105\103\104\116\104\124\110\105\110\116\104\124\116\101\110\116\104\124\97\102\116\101\114\124\98\97\99\107\124\98\101\102\111\114\101\124\98\101\104\105\110\100\124\101\118\101\114\121\124\102\114\111\110\116\124\105\110\100\101\120\124\108\97\115\116\124\109\105\100\100\108\101\124\115\111\109\101\124\116\104\97\116\124\116\104\114\111\117\103\104\124\116\104\114\117\124\119\104\101\114\101\124\119\104\111\115\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\98\40\91\97\45\122\65\45\90\93\92\119\42\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\45\43\93\63\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\69\91\45\43\93\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\45\43\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Asymptote.hs b/src/Text/Highlighter/Lexers/Asymptote.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Asymptote.hs
@@ -0,0 +1,79 @@
+module Text.Highlighter.Lexers.Asymptote (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\115\121\109\112\116\111\116\101"
+    , lAliases = ["\97\115\121", "\97\115\121\109\112\116\111\116\101"]
+    , lExtensions = ["\46\97\115\121"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\97\115\121\109\112\116\111\116\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+function' :: TokenMatcher
+function' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+statements' :: TokenMatcher
+statements' =
+    [ tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\44\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\98\40\99\97\115\101\41\40\46\43\63\41\40\58\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Using lexer), (Arbitrary "\84\101\120\116")])
+    , tok "\40\97\110\100\124\99\111\110\116\114\111\108\115\124\116\101\110\115\105\111\110\124\97\116\108\101\97\115\116\124\99\117\114\108\124\105\102\124\101\108\115\101\124\119\104\105\108\101\124\102\111\114\124\100\111\124\114\101\116\117\114\110\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\115\116\114\117\99\116\124\116\121\112\101\100\101\102\124\110\101\119\124\97\99\99\101\115\115\124\105\109\112\111\114\116\124\117\110\114\97\118\101\108\124\102\114\111\109\124\105\110\99\108\117\100\101\124\113\117\111\116\101\124\115\116\97\116\105\99\124\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\114\101\115\116\114\105\99\116\101\100\124\116\104\105\115\124\101\120\112\108\105\99\105\116\124\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\99\121\99\108\101\124\110\101\119\102\114\97\109\101\124\111\112\101\114\97\116\111\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\66\114\97\105\100\124\70\105\116\82\101\115\117\108\116\124\76\97\98\101\108\124\76\101\103\101\110\100\124\84\114\101\101\78\111\100\101\124\97\98\115\99\105\115\115\97\124\97\114\99\124\97\114\114\111\119\104\101\97\100\124\98\105\110\97\114\121\116\114\101\101\124\98\105\110\97\114\121\116\114\101\101\78\111\100\101\124\98\108\111\99\107\124\98\111\111\108\124\98\111\111\108\51\124\98\111\117\110\100\115\124\98\113\101\124\99\105\114\99\108\101\124\99\111\110\105\99\124\99\111\111\114\100\124\99\111\111\114\100\115\121\115\124\99\112\117\116\105\109\101\124\101\108\108\105\112\115\101\124\102\105\108\101\124\102\105\108\108\116\121\112\101\124\102\114\97\109\101\124\103\114\105\100\51\124\103\117\105\100\101\124\104\111\114\110\101\114\124\104\115\118\124\104\121\112\101\114\98\111\108\97\124\105\110\100\101\120\101\100\84\114\97\110\115\102\111\114\109\124\105\110\116\124\105\110\118\101\114\115\105\111\110\124\107\101\121\124\108\105\103\104\116\124\108\105\110\101\124\108\105\110\101\102\105\116\124\109\97\114\103\105\110\84\124\109\97\114\107\101\114\124\109\97\115\115\124\111\98\106\101\99\116\124\112\97\105\114\124\112\97\114\97\98\111\108\97\124\112\97\116\104\124\112\97\116\104\51\124\112\101\110\124\112\105\99\116\117\114\101\124\112\111\105\110\116\124\112\111\115\105\116\105\111\110\124\112\114\111\106\101\99\116\105\111\110\124\114\101\97\108\124\114\101\118\111\108\117\116\105\111\110\124\115\99\97\108\101\84\124\115\99\105\101\110\116\105\102\105\99\124\115\101\103\109\101\110\116\124\115\105\100\101\124\115\108\105\99\101\124\115\112\108\105\116\102\97\99\101\124\115\116\114\105\110\103\124\115\117\114\102\97\99\101\124\116\101\110\115\105\111\110\83\112\101\99\105\102\105\101\114\124\116\105\99\107\108\111\99\97\116\101\124\116\105\99\107\115\103\114\105\100\84\124\116\105\99\107\118\97\108\117\101\115\124\116\114\97\110\115\102\111\114\109\124\116\114\97\110\115\102\111\114\109\97\116\105\111\110\124\116\114\101\101\124\116\114\105\97\110\103\108\101\124\116\114\105\108\105\110\101\97\114\124\116\114\105\112\108\101\124\118\101\99\116\111\114\124\118\101\114\116\101\120\124\118\111\105\100\41\40\63\61\40\91\32\93\123\49\44\125\91\97\45\122\65\45\90\93\41\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\66\114\97\105\100\124\70\105\116\82\101\115\117\108\116\124\84\114\101\101\78\111\100\101\124\97\98\115\99\105\115\115\97\124\97\114\114\111\119\104\101\97\100\124\98\108\111\99\107\124\98\111\111\108\124\98\111\111\108\51\124\98\111\117\110\100\115\124\99\111\111\114\100\124\102\114\97\109\101\124\103\117\105\100\101\124\104\111\114\110\101\114\124\105\110\116\124\108\105\110\101\102\105\116\124\109\97\114\103\105\110\84\124\112\97\105\114\124\112\101\110\124\112\105\99\116\117\114\101\124\112\111\115\105\116\105\111\110\124\114\101\97\108\124\114\101\118\111\108\117\116\105\111\110\124\115\108\105\99\101\124\115\112\108\105\116\102\97\99\101\124\116\105\99\107\115\103\114\105\100\84\124\116\105\99\107\118\97\108\117\101\115\124\116\114\101\101\124\116\114\105\112\108\101\124\118\101\114\116\101\120\124\118\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\58\40\63\33\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+statement' :: TokenMatcher
+statement' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\123\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo function')
+    , tok "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\59\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo statement')
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\63\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\94\92\92\39\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Atomo.hs b/src/Text/Highlighter/Lexers/Atomo.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Atomo.hs
@@ -0,0 +1,112 @@
+module Text.Highlighter.Lexers.Atomo (lexer) where
+
+import Data.List (intercalate)
+import Text.Printf
+
+import Text.Highlighter.Types
+
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "Atomo"
+    , lAliases = ["atomo"]
+    , lExtensions = [".atomo"]
+    , lMimetypes = ["text/x-atomo"]
+    , lStart = root
+    , lFlags = []
+    }
+
+ascii :: [String]
+ascii =
+    ["NUL","SOH","[SE]TX","EOT","ENQ","ACK",
+     "BEL","BS","HT","LF","VT","FF","CR","S[OI]","DLE",
+     "DC[1-4]","NAK","SYN","ETB","CAN",
+     "EM","SUB","ESC","[FGRU]S","SP","DEL"]
+
+reserved :: [String]
+reserved = ["operator", "macro", "for-macro", "this"]
+
+identifier :: String
+identifier = "[a-zA-Z0-9_:!#%&\\*\\+\\.\\\\/<=>\\?@^\\|~\\-]"
+
+operator :: String
+operator = "[:!#%&\\*\\+\\.\\\\/<=>\\?@^\\|~\\-]"
+
+root :: TokenMatcher
+root =
+    -- Whitespace:
+    [ tok "\\s+" Text
+    , tok "--.*?$" (Comment :. Single)
+    , tokNext "{-" (Comment :. Multiline) (GoTo comment)
+
+    -- Identifiers
+    , tok (printf "\\b(%s)\\b(?!%s)" (intercalate "|" reserved) operator)
+        (Keyword :. Reserved)
+    , tok ("[_a-z]" ++ identifier ++ "*:") (Name :. Function)
+    , tok ("[_a-z]" ++ identifier ++ "*") Name
+    , tok ("[A-Z]" ++ identifier ++ "*") (Keyword :. Type)
+
+    -- Operators
+    , tok ("(?![@$~])" ++ operator ++ "+") Operator
+
+    -- Numbers
+    , tok "\\d+[eE][\\+\\-]?\\d+" (Number :. Float)
+    , tok "\\d+\\.\\d+([eE][\\+\\-]?\\d+)?" (Number :. Float)
+    , tok "0[oO][0-7]+" (Number :. Oct)
+    , tok "0[xX][\\da-fA-F]+" (Number :. Hex)
+    , tok "\\d+" (Number :. Integer)
+
+    -- Characters & Strings
+    , tokNext "\\$" (String :. Char) (GoTo character)
+    , tokNext "\"" String (GoTo string)
+
+    -- Boolean
+    , tok "True|False" (Keyword :. Constant)
+
+    -- Quoting
+    , tok ("'" ++ identifier ++ "+") (String :. Symbol)
+    , tok "'" (String :. Symbol)
+    , tok ("`" ++ identifier ++ "+") (String :. Symbol)
+    , tok "`" (String :. Symbol)
+    , tok ("~" ++ identifier ++ "+") (String :. Interpol)
+    , tok "~" (String :. Interpol)
+
+    -- Particles
+    , tok ("@" ++ identifier ++ "+") (Name :. Decorator)
+    , tok "@" (Name :. Decorator)
+
+    -- Punctuation
+    , tok "[][(),;{}|]" Punctuation
+    ]
+
+comment :: TokenMatcher
+comment =
+    [ tok "[^\\-\\{\\}]+" (Comment :. Multiline)
+    , tokNext "{-" (Comment :. Multiline) Push
+    , tokNext "-}" (Comment :. Multiline) Pop
+    , tok "[-{}]" (Comment :. Multiline)
+    ]
+
+character :: TokenMatcher
+character =
+    [ tokNext "[^\\\\]" (String :. Char) Pop
+    , tokNext "\\\\[^\\s]+" (String :. Escape) Pop
+    ]
+
+string :: TokenMatcher
+string =
+    [ tok "[^\\\\\"]+" String
+    , tokNext "\\\\" (String :. Escape) (GoTo escape)
+    , tokNext "\"" String Pop
+    ]
+
+escape :: TokenMatcher
+escape =
+    [ tokNext "[abfnrtv\"&\\\\]" (String :. Escape) Pop
+    , tokNext "\\^[\\]\\[A-Z@\\^_]" (String :. Escape) Pop
+    , tokNext (intercalate "|" ascii) (String :. Escape) Pop
+    , tokNext "o[0-7]+" (String :. Escape) Pop
+    , tokNext "x[\\da-fA-F]+" (String :. Escape) Pop
+    , tokNext "\\d+" (String :. Escape) Pop
+    , tokNext "\\s+\\\\" (String :. Escape) Pop
+    ]
diff --git a/src/Text/Highlighter/Lexers/BBCode.hs b/src/Text/Highlighter/Lexers/BBCode.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/BBCode.hs
@@ -0,0 +1,30 @@
+module Text.Highlighter.Lexers.BBCode (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\66\67\111\100\101"
+    , lAliases = ["\98\98\99\111\100\101"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\98\98\99\111\100\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\92\119\43\41\40\61\41\40\34\63\91\94\92\115\34\92\93\93\43\34\63\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tok "\40\61\41\40\34\63\91\94\92\115\34\92\93\93\43\34\63\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tokNext "\92\93" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\91\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\91\47\63\92\119\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo tag')
+    , tok "\92\91" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Bash.hs b/src/Text/Highlighter/Lexers/Bash.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Bash.hs
@@ -0,0 +1,79 @@
+module Text.Highlighter.Lexers.Bash (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\97\115\104"
+    , lAliases = ["\98\97\115\104", "\115\104", "\107\115\104"]
+    , lExtensions = ["\46\115\104", "\46\107\115\104", "\46\98\97\115\104", "\46\101\98\117\105\108\100", "\46\101\99\108\97\115\115"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\104", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\104\101\108\108\115\99\114\105\112\116"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+curly' :: TokenMatcher
+curly' =
+    [ tokNext "\125" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tok "\58\45" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\94\125\58\34\92\39\96\36\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , anyOf root'
+    ]
+
+backticks' :: TokenMatcher
+backticks' =
+    [ tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") Pop
+    , anyOf root'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf basic'
+    , tokNext "\92\36\92\40\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo math')
+    , tokNext "\92\36\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paren')
+    , tokNext "\92\36\123\35\63" (Arbitrary "\75\101\121\119\111\114\100") (GoTo curly')
+    , tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") (GoTo backticks')
+    , anyOf data'
+    ]
+
+basic' :: TokenMatcher
+basic' =
+    [ tok "\92\98\40\105\102\124\102\105\124\101\108\115\101\124\119\104\105\108\101\124\100\111\124\100\111\110\101\124\102\111\114\124\116\104\101\110\124\114\101\116\117\114\110\124\102\117\110\99\116\105\111\110\124\99\97\115\101\124\115\101\108\101\99\116\124\99\111\110\116\105\110\117\101\124\117\110\116\105\108\124\101\115\97\99\124\101\108\105\102\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\97\108\105\97\115\124\98\103\124\98\105\110\100\124\98\114\101\97\107\124\98\117\105\108\116\105\110\124\99\97\108\108\101\114\124\99\100\124\99\111\109\109\97\110\100\124\99\111\109\112\103\101\110\124\99\111\109\112\108\101\116\101\124\100\101\99\108\97\114\101\124\100\105\114\115\124\100\105\115\111\119\110\124\101\99\104\111\124\101\110\97\98\108\101\124\101\118\97\108\124\101\120\101\99\124\101\120\105\116\124\101\120\112\111\114\116\124\102\97\108\115\101\124\102\99\124\102\103\124\103\101\116\111\112\116\115\124\104\97\115\104\124\104\101\108\112\124\104\105\115\116\111\114\121\124\106\111\98\115\124\107\105\108\108\124\108\101\116\124\108\111\99\97\108\124\108\111\103\111\117\116\124\112\111\112\100\124\112\114\105\110\116\102\124\112\117\115\104\100\124\112\119\100\124\114\101\97\100\124\114\101\97\100\111\110\108\121\124\115\101\116\124\115\104\105\102\116\124\115\104\111\112\116\124\115\111\117\114\99\101\124\115\117\115\112\101\110\100\124\116\101\115\116\124\116\105\109\101\124\116\105\109\101\115\124\116\114\97\112\124\116\114\117\101\124\116\121\112\101\124\116\121\112\101\115\101\116\124\117\108\105\109\105\116\124\117\109\97\115\107\124\117\110\97\108\105\97\115\124\117\110\115\101\116\124\119\97\105\116\41\92\115\42\92\98\40\63\33\92\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\35\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\92\91\92\119\92\87\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\40\92\98\92\119\43\41\40\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\91\92\91\92\93\123\125\40\41\61\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\60\60\92\115\42\40\92\39\63\41\92\92\63\40\92\119\43\41\91\92\119\92\87\93\43\63\92\50" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\38\38\124\92\124\92\124" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+paren' :: TokenMatcher
+paren' =
+    [ tokNext "\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf root'
+    ]
+
+data' :: TokenMatcher
+data' =
+    [ tok "\40\63\115\41\92\36\63\34\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\40\63\115\41\92\36\63\39\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\39\92\92\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\59" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\91\94\61\92\115\92\110\92\91\92\93\123\125\40\41\36\34\92\39\96\92\92\60\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\100\43\40\63\61\32\124\92\90\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\36\35\63\40\92\119\43\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\60" (Arbitrary "\84\101\120\116")
+    ]
+
+math' :: TokenMatcher
+math' =
+    [ tokNext "\92\41\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tok "\91\45\43\42\47\37\94\124\38\93\124\92\42\92\42\124\92\124\92\124" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , anyOf root'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Batch.hs b/src/Text/Highlighter/Lexers/Batch.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Batch.hs
@@ -0,0 +1,54 @@
+module Text.Highlighter.Lexers.Batch (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\97\116\99\104\102\105\108\101"
+    , lAliases = ["\98\97\116"]
+    , lExtensions = ["\46\98\97\116", "\46\99\109\100"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\100\111\115\45\98\97\116\99\104"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+basic' :: TokenMatcher
+basic' =
+    [ tok "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\96\46\42\63\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    , tok "\45\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\47\92\83\43" (Arbitrary "\78\97\109\101")
+    , tok "\58\92\119\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\92\119\58\92\119\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\91\60\62\124\93\41\40\92\115\42\41\40\92\119\43\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101")])
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\92\115\42\64" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\94\40\92\115\42\41\40\114\101\109\92\115\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116")])
+    , tok "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\37\37\63\91\126\36\58\92\119\93\43\37\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\58\58\46\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\115\101\116\41\40\92\115\43\41\40\92\119\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    , tok "\40\99\97\108\108\41\40\92\115\43\41\40\58\92\119\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")])
+    , tok "\40\103\111\116\111\41\40\92\115\43\41\40\92\119\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")])
+    , tok "\92\98\40\115\101\116\124\99\97\108\108\124\101\99\104\111\124\111\110\124\111\102\102\124\101\110\100\108\111\99\97\108\124\102\111\114\124\100\111\124\103\111\116\111\124\105\102\124\112\97\117\115\101\124\115\101\116\108\111\99\97\108\124\115\104\105\102\116\124\101\114\114\111\114\108\101\118\101\108\124\101\120\105\115\116\124\100\101\102\105\110\101\100\124\99\109\100\101\120\116\118\101\114\115\105\111\110\124\101\114\114\111\114\108\101\118\101\108\124\101\108\115\101\124\99\100\124\109\100\124\100\101\108\124\100\101\108\116\114\101\101\124\99\108\115\124\99\104\111\105\99\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\101\113\117\124\110\101\113\124\108\115\115\124\108\101\113\124\103\116\114\124\103\101\113\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , anyOf basic'
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+echo' :: TokenMatcher
+echo' =
+    [ tok "\92\94\92\94\124\92\94\60\124\92\94\62\124\92\94\92\124" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    , anyOf basic'
+    , tok "\91\94\92\39\34\94\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Befunge.hs b/src/Text/Highlighter/Lexers/Befunge.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Befunge.hs
@@ -0,0 +1,31 @@
+module Text.Highlighter.Lexers.Befunge (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\101\102\117\110\103\101"
+    , lAliases = ["\98\101\102\117\110\103\101"]
+    , lExtensions = ["\46\98\101\102\117\110\103\101"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\98\101\102\117\110\103\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\48\45\57\97\45\102\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\92\43\92\42\47\37\33\96\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\60\62\94\118\63\92\91\92\93\114\120\106\107\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\58\92\92\36\46\44\110\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\124\95\109\119\93" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\123\125\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    , tok "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\39\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\35\59\93" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\112\103\38\126\61\64\105\111\116\115\121\93" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\40\41\65\45\90\93" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Boo.hs b/src/Text/Highlighter/Lexers/Boo.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Boo.hs
@@ -0,0 +1,68 @@
+module Text.Highlighter.Lexers.Boo (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\111\111"
+    , lAliases = ["\98\111\111"]
+    , lExtensions = ["\46\98\111\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\98\111\111"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\94\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+namespace' :: TokenMatcher
+namespace' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\35\124\47\47\41\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tok "\91\93\123\125\58\40\41\44\46\59\91\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\92" (Arbitrary "\84\101\120\116")
+    , tok "\40\105\110\124\105\115\124\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\47\40\92\92\92\92\124\92\92\47\124\91\94\47\92\115\93\41\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\64\47\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\61\126\124\33\61\124\61\61\124\60\60\124\62\62\124\91\45\43\47\42\37\61\60\62\38\94\124\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\97\115\124\97\98\115\116\114\97\99\116\124\99\97\108\108\97\98\108\101\124\99\111\110\115\116\114\117\99\116\111\114\124\100\101\115\116\114\117\99\116\111\114\124\100\111\124\105\109\112\111\114\116\124\101\110\117\109\124\101\118\101\110\116\124\102\105\110\97\108\124\103\101\116\124\105\110\116\101\114\102\97\99\101\124\105\110\116\101\114\110\97\108\124\111\102\124\111\118\101\114\114\105\100\101\124\112\97\114\116\105\97\108\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\114\101\116\117\114\110\124\115\101\116\124\115\116\97\116\105\99\124\115\116\114\117\99\116\124\116\114\97\110\115\105\101\110\116\124\118\105\114\116\117\97\108\124\121\105\101\108\100\124\115\117\112\101\114\124\97\110\100\124\98\114\101\97\107\124\99\97\115\116\124\99\111\110\116\105\110\117\101\124\101\108\105\102\124\101\108\115\101\124\101\110\115\117\114\101\124\101\120\99\101\112\116\124\102\111\114\124\103\105\118\101\110\124\103\111\116\111\124\105\102\124\105\110\124\105\115\124\105\115\97\124\110\111\116\124\111\114\124\111\116\104\101\114\119\105\115\101\124\112\97\115\115\124\114\97\105\115\101\124\114\101\102\124\116\114\121\124\117\110\108\101\115\115\124\119\104\101\110\124\119\104\105\108\101\124\102\114\111\109\124\97\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\100\101\102\40\63\61\92\115\43\92\40\46\42\63\92\41\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\100\101\102\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\110\97\109\101\115\112\97\99\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo namespace')
+    , tok "\40\63\60\33\92\46\41\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\115\101\108\102\124\95\95\101\118\97\108\95\95\124\95\95\115\119\105\116\99\104\95\95\124\97\114\114\97\121\124\97\115\115\101\114\116\124\99\104\101\99\107\101\100\124\101\110\117\109\101\114\97\116\101\124\102\105\108\116\101\114\124\103\101\116\116\101\114\124\108\101\110\124\108\111\99\107\124\109\97\112\124\109\97\116\114\105\120\124\109\97\120\124\109\105\110\124\110\111\114\109\97\108\65\114\114\97\121\73\110\100\101\120\105\110\103\124\112\114\105\110\116\124\112\114\111\112\101\114\116\121\124\114\97\110\103\101\124\114\97\119\65\114\114\97\121\73\110\100\101\120\105\110\103\124\114\101\113\117\105\114\101\100\124\116\121\112\101\111\102\124\117\110\99\104\101\99\107\101\100\124\117\115\105\110\103\124\121\105\101\108\100\65\108\108\124\122\105\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\34\34\34\40\92\92\124\92\34\124\46\42\63\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\34\40\92\92\124\92\34\124\91\94\34\93\42\63\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\124\92\39\124\91\94\39\93\42\63\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\102\70\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\93\91\48\45\57\92\46\93\42\40\109\124\109\115\124\100\124\104\124\115\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\120\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43\76" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114" :. Arbitrary "\76\111\110\103")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Brainfuck.hs b/src/Text/Highlighter/Lexers/Brainfuck.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Brainfuck.hs
@@ -0,0 +1,37 @@
+module Text.Highlighter.Lexers.Brainfuck (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\66\114\97\105\110\102\117\99\107"
+    , lAliases = ["\98\114\97\105\110\102\117\99\107", "\98\102"]
+    , lExtensions = ["\46\98\102", "\46\98"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\98\114\97\105\110\102\117\99\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\92\91" (Arbitrary "\75\101\121\119\111\114\100") (GoTo loop')
+    , tok "\92\93" (Arbitrary "\69\114\114\111\114")
+    , anyOf common'
+    ]
+
+common' :: TokenMatcher
+common' =
+    [ tok "\91\46\44\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    , tok "\91\43\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\60\62\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\94\46\44\43\92\45\60\62\92\91\92\93\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+loop' :: TokenMatcher
+loop' =
+    [ tokNext "\92\91" (Arbitrary "\75\101\121\119\111\114\100") Push
+    , tokNext "\92\93" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf common'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/C.hs b/src/Text/Highlighter/Lexers/C.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/C.hs
@@ -0,0 +1,100 @@
+module Text.Highlighter.Lexers.C (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67"
+    , lAliases = ["\99"]
+    , lExtensions = ["\46\99", "\46\104"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\104\100\114", "\116\101\120\116\47\120\45\99\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+function' :: TokenMatcher
+function' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+statements' :: TokenMatcher
+statements' =
+    [ tokNext "\76\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\76\63\39\40\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\42\47" (Arbitrary "\69\114\114\111\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\44\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\98\40\99\97\115\101\41\40\46\43\63\41\40\58\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Using lexer), (Arbitrary "\84\101\120\116")])
+    , tok "\40\97\117\116\111\124\98\114\101\97\107\124\99\97\115\101\124\99\111\110\115\116\124\99\111\110\116\105\110\117\101\124\100\101\102\97\117\108\116\124\100\111\124\101\108\115\101\124\101\110\117\109\124\101\120\116\101\114\110\124\102\111\114\124\103\111\116\111\124\105\102\124\114\101\103\105\115\116\101\114\124\114\101\115\116\114\105\99\116\101\100\124\114\101\116\117\114\110\124\115\105\122\101\111\102\124\115\116\97\116\105\99\124\115\116\114\117\99\116\124\115\119\105\116\99\104\124\116\121\112\101\100\101\102\124\117\110\105\111\110\124\118\111\108\97\116\105\108\101\124\118\105\114\116\117\97\108\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\105\110\116\124\108\111\110\103\124\102\108\111\97\116\124\115\104\111\114\116\124\100\111\117\98\108\101\124\99\104\97\114\124\117\110\115\105\103\110\101\100\124\115\105\103\110\101\100\124\118\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\95\123\48\44\50\125\105\110\108\105\110\101\124\110\97\107\101\100\124\114\101\115\116\114\105\99\116\124\116\104\114\101\97\100\124\116\121\112\101\110\97\109\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\95\95\40\97\115\109\124\105\110\116\56\124\98\97\115\101\100\124\101\120\99\101\112\116\124\105\110\116\49\54\124\115\116\100\99\97\108\108\124\99\100\101\99\108\124\102\97\115\116\99\97\108\108\124\105\110\116\51\50\124\100\101\99\108\115\112\101\99\124\102\105\110\97\108\108\121\124\105\110\116\54\52\124\116\114\121\124\108\101\97\118\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\78\85\76\76\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tokNext "\94\92\115\42\35\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
+    , tokNext "\94\92\115\42\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo macro')
+    , tok "\94\40\92\115\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\58\40\63\33\58\41\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")])
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+statement' :: TokenMatcher
+statement' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\94\92\115\42\35\101\108\40\63\58\115\101\124\105\102\41\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+macro' :: TokenMatcher
+macro' =
+    [ tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\91\42\93\40\46\124\92\110\41\42\63\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101") Pop
+    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\123\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo function')
+    , tok "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\59\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Using lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo statement')
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/CMake.hs b/src/Text/Highlighter/Lexers/CMake.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/CMake.hs
@@ -0,0 +1,51 @@
+module Text.Highlighter.Lexers.CMake (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\77\97\107\101"
+    , lAliases = ["\99\109\97\107\101"]
+    , lExtensions = ["\46\99\109\97\107\101"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\109\97\107\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\92\98\40\87\73\78\51\50\124\85\78\73\88\124\65\80\80\76\69\124\67\89\71\87\73\78\124\66\79\82\76\65\78\68\124\77\73\78\71\87\124\77\83\86\67\124\77\83\86\67\95\73\68\69\124\77\83\86\67\54\48\124\77\83\86\67\55\48\124\77\83\86\67\55\49\124\77\83\86\67\56\48\124\77\83\86\67\57\48\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+ws' :: TokenMatcher
+ws' =
+    [ tok "\91\32\92\116\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\43\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+args' :: TokenMatcher
+args' =
+    [ tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\40\92\36\123\41\40\46\43\63\41\40\125\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\40\63\115\41\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\92\92\83\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\94\92\41\36\34\35\32\92\116\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , anyOf keywords'
+    , anyOf ws'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\92\98\40\91\65\45\90\97\45\122\95\93\43\41\40\91\32\92\116\93\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo args')
+    , anyOf keywords'
+    , anyOf ws'
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ 
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Clojure.hs b/src/Text/Highlighter/Lexers/Clojure.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Clojure.hs
@@ -0,0 +1,37 @@
+module Text.Highlighter.Lexers.Clojure (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\108\111\106\117\114\101"
+    , lAliases = ["\99\108\111\106\117\114\101", "\99\108\106"]
+    , lExtensions = ["\46\99\108\106"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\108\111\106\117\114\101", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\99\108\111\106\117\114\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\59\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\45\63\92\100\43\92\46\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\45\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\45\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\92\92\40\91\40\41\47\39\92\34\46\39\95\33\195\130\194\167\36\37\38\32\63\59\61\35\43\45\93\123\49\125\124\91\97\45\122\65\45\90\48\45\57\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\35\116\124\35\102\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\39\124\35\124\96\124\44\64\124\44\124\92\46\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\102\110\32\124\100\101\102\32\124\100\101\102\110\32\124\100\101\102\109\97\99\114\111\32\124\100\101\102\109\101\116\104\111\100\32\124\100\101\102\109\117\108\116\105\32\124\100\101\102\110\92\45\32\124\100\101\102\115\116\114\117\99\116\32\124\105\102\32\124\99\111\110\100\32\124\108\101\116\32\124\102\111\114\32\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\63\60\61\39\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\63\60\61\35\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\63\60\61\92\40\41\40\92\46\32\124\92\46\92\46\32\124\92\42\32\124\92\43\32\124\92\45\32\124\92\45\92\62\32\124\92\46\92\46\32\124\92\47\32\124\92\60\32\124\92\60\92\61\32\124\92\61\32\124\92\61\92\61\32\124\92\62\32\124\92\62\92\61\32\124\97\99\99\101\115\115\111\114\32\124\97\103\101\110\116\32\124\97\103\101\110\116\92\45\101\114\114\111\114\115\32\124\97\103\101\116\32\124\97\108\101\110\103\116\104\32\124\97\108\108\92\45\110\115\32\124\97\108\116\101\114\32\124\97\110\100\32\124\97\112\112\101\110\100\92\45\99\104\105\108\100\32\124\97\112\112\108\121\32\124\97\114\114\97\121\92\45\109\97\112\32\124\97\115\101\116\32\124\97\115\101\116\92\45\98\111\111\108\101\97\110\32\124\97\115\101\116\92\45\98\121\116\101\32\124\97\115\101\116\92\45\99\104\97\114\32\124\97\115\101\116\92\45\100\111\117\98\108\101\32\124\97\115\101\116\92\45\102\108\111\97\116\32\124\97\115\101\116\92\45\105\110\116\32\124\97\115\101\116\92\45\108\111\110\103\32\124\97\115\101\116\92\45\115\104\111\114\116\32\124\97\115\115\101\114\116\32\124\97\115\115\111\99\32\124\97\119\97\105\116\32\124\97\119\97\105\116\92\45\102\111\114\32\124\98\101\97\110\32\124\98\105\110\100\105\110\103\32\124\98\105\116\92\45\97\110\100\32\124\98\105\116\92\45\110\111\116\32\124\98\105\116\92\45\111\114\32\124\98\105\116\92\45\115\104\105\102\116\92\45\108\101\102\116\32\124\98\105\116\92\45\115\104\105\102\116\92\45\114\105\103\104\116\32\124\98\105\116\92\45\120\111\114\32\124\98\111\111\108\101\97\110\32\124\98\114\97\110\99\104\92\63\32\124\98\117\116\108\97\115\116\32\124\98\121\116\101\32\124\99\97\115\116\32\124\99\104\97\114\32\124\99\104\105\108\100\114\101\110\32\124\99\108\97\115\115\32\124\99\108\101\97\114\92\45\97\103\101\110\116\92\45\101\114\114\111\114\115\32\124\99\111\109\109\101\110\116\32\124\99\111\109\109\117\116\101\32\124\99\111\109\112\32\124\99\111\109\112\97\114\97\116\111\114\32\124\99\111\109\112\108\101\109\101\110\116\32\124\99\111\110\99\97\116\32\124\99\111\110\106\32\124\99\111\110\115\32\124\99\111\110\115\116\97\110\116\108\121\32\124\99\111\110\115\116\114\117\99\116\92\45\112\114\111\120\121\32\124\99\111\110\116\97\105\110\115\92\63\32\124\99\111\117\110\116\32\124\99\114\101\97\116\101\92\45\110\115\32\124\99\114\101\97\116\101\92\45\115\116\114\117\99\116\32\124\99\121\99\108\101\32\124\100\101\99\32\124\100\101\114\101\102\32\124\100\105\102\102\101\114\101\110\99\101\32\124\100\105\115\106\32\124\100\105\115\115\111\99\32\124\100\105\115\116\105\110\99\116\32\124\100\111\97\108\108\32\124\100\111\99\32\124\100\111\114\117\110\32\124\100\111\115\101\113\32\124\100\111\115\121\110\99\32\124\100\111\116\105\109\101\115\32\124\100\111\116\111\32\124\100\111\117\98\108\101\32\124\100\111\119\110\32\124\100\114\111\112\32\124\100\114\111\112\92\45\119\104\105\108\101\32\124\101\100\105\116\32\124\101\110\100\92\63\32\124\101\110\115\117\114\101\32\124\101\118\97\108\32\124\101\118\101\114\121\92\63\32\124\102\97\108\115\101\92\63\32\124\102\102\105\114\115\116\32\124\102\105\108\101\92\45\115\101\113\32\124\102\105\108\116\101\114\32\124\102\105\110\100\32\124\102\105\110\100\92\45\100\111\99\32\124\102\105\110\100\92\45\110\115\32\124\102\105\110\100\92\45\118\97\114\32\124\102\105\114\115\116\32\124\102\108\111\97\116\32\124\102\108\117\115\104\32\124\102\110\115\101\113\32\124\102\114\101\115\116\32\124\103\101\110\115\121\109\32\124\103\101\116\32\124\103\101\116\92\45\112\114\111\120\121\92\45\99\108\97\115\115\32\124\104\97\115\104\92\45\109\97\112\32\124\104\97\115\104\92\45\115\101\116\32\124\105\100\101\110\116\105\99\97\108\92\63\32\124\105\100\101\110\116\105\116\121\32\124\105\102\92\45\108\101\116\32\124\105\109\112\111\114\116\32\124\105\110\92\45\110\115\32\124\105\110\99\32\124\105\110\100\101\120\32\124\105\110\115\101\114\116\92\45\99\104\105\108\100\32\124\105\110\115\101\114\116\92\45\108\101\102\116\32\124\105\110\115\101\114\116\92\45\114\105\103\104\116\32\124\105\110\115\112\101\99\116\92\45\116\97\98\108\101\32\124\105\110\115\112\101\99\116\92\45\116\114\101\101\32\124\105\110\115\116\97\110\99\101\92\63\32\124\105\110\116\32\124\105\110\116\101\114\108\101\97\118\101\32\124\105\110\116\101\114\115\101\99\116\105\111\110\32\124\105\110\116\111\32\124\105\110\116\111\92\45\97\114\114\97\121\32\124\105\116\101\114\97\116\101\32\124\106\111\105\110\32\124\107\101\121\32\124\107\101\121\115\32\124\107\101\121\119\111\114\100\32\124\107\101\121\119\111\114\100\92\63\32\124\108\97\115\116\32\124\108\97\122\121\92\45\99\97\116\32\124\108\97\122\121\92\45\99\111\110\115\32\124\108\101\102\116\32\124\108\101\102\116\115\32\124\108\105\110\101\92\45\115\101\113\32\124\108\105\115\116\32\124\108\105\115\116\92\42\32\124\108\111\97\100\32\124\108\111\97\100\92\45\102\105\108\101\32\124\108\111\99\107\105\110\103\32\124\108\111\110\103\32\124\108\111\111\112\32\124\109\97\99\114\111\101\120\112\97\110\100\32\124\109\97\99\114\111\101\120\112\97\110\100\92\45\49\32\124\109\97\107\101\92\45\97\114\114\97\121\32\124\109\97\107\101\92\45\110\111\100\101\32\124\109\97\112\32\124\109\97\112\92\45\105\110\118\101\114\116\32\124\109\97\112\92\63\32\124\109\97\112\99\97\116\32\124\109\97\120\32\124\109\97\120\92\45\107\101\121\32\124\109\101\109\102\110\32\124\109\101\114\103\101\32\124\109\101\114\103\101\92\45\119\105\116\104\32\124\109\101\116\97\32\124\109\105\110\32\124\109\105\110\92\45\107\101\121\32\124\110\97\109\101\32\124\110\97\109\101\115\112\97\99\101\32\124\110\101\103\92\63\32\124\110\101\119\32\124\110\101\119\108\105\110\101\32\124\110\101\120\116\32\124\110\105\108\92\63\32\124\110\111\100\101\32\124\110\111\116\32\124\110\111\116\92\45\97\110\121\92\63\32\124\110\111\116\92\45\101\118\101\114\121\92\63\32\124\110\111\116\92\61\32\124\110\115\92\45\105\109\112\111\114\116\115\32\124\110\115\92\45\105\110\116\101\114\110\115\32\124\110\115\92\45\109\97\112\32\124\110\115\92\45\110\97\109\101\32\124\110\115\92\45\112\117\98\108\105\99\115\32\124\110\115\92\45\114\101\102\101\114\115\32\124\110\115\92\45\114\101\115\111\108\118\101\32\124\110\115\92\45\117\110\109\97\112\32\124\110\116\104\32\124\110\116\104\114\101\115\116\32\124\111\114\32\124\112\97\114\115\101\32\124\112\97\114\116\105\97\108\32\124\112\97\116\104\32\124\112\101\101\107\32\124\112\111\112\32\124\112\111\115\92\63\32\124\112\114\32\124\112\114\92\45\115\116\114\32\124\112\114\105\110\116\32\124\112\114\105\110\116\92\45\115\116\114\32\124\112\114\105\110\116\108\110\32\124\112\114\105\110\116\108\110\92\45\115\116\114\32\124\112\114\110\32\124\112\114\110\92\45\115\116\114\32\124\112\114\111\106\101\99\116\32\124\112\114\111\120\121\32\124\112\114\111\120\121\92\45\109\97\112\112\105\110\103\115\32\124\113\117\111\116\32\124\114\97\110\100\32\124\114\97\110\100\92\45\105\110\116\32\124\114\97\110\103\101\32\124\114\101\92\45\102\105\110\100\32\124\114\101\92\45\103\114\111\117\112\115\32\124\114\101\92\45\109\97\116\99\104\101\114\32\124\114\101\92\45\109\97\116\99\104\101\115\32\124\114\101\92\45\112\97\116\116\101\114\110\32\124\114\101\92\45\115\101\113\32\124\114\101\97\100\32\124\114\101\97\100\92\45\108\105\110\101\32\124\114\101\100\117\99\101\32\124\114\101\102\32\124\114\101\102\92\45\115\101\116\32\124\114\101\102\101\114\32\124\114\101\109\32\124\114\101\109\111\118\101\32\124\114\101\109\111\118\101\92\45\109\101\116\104\111\100\32\124\114\101\109\111\118\101\92\45\110\115\32\124\114\101\110\97\109\101\32\124\114\101\110\97\109\101\92\45\107\101\121\115\32\124\114\101\112\101\97\116\32\124\114\101\112\108\97\99\101\32\124\114\101\112\108\105\99\97\116\101\32\124\114\101\115\111\108\118\101\32\124\114\101\115\116\32\124\114\101\115\117\108\116\115\101\116\92\45\115\101\113\32\124\114\101\118\101\114\115\101\32\124\114\102\105\114\115\116\32\124\114\105\103\104\116\32\124\114\105\103\104\116\115\32\124\114\111\111\116\32\124\114\114\101\115\116\32\124\114\115\101\113\32\124\115\101\99\111\110\100\32\124\115\101\108\101\99\116\32\124\115\101\108\101\99\116\92\45\107\101\121\115\32\124\115\101\110\100\32\124\115\101\110\100\92\45\111\102\102\32\124\115\101\113\32\124\115\101\113\92\45\122\105\112\32\124\115\101\113\92\63\32\124\115\101\116\32\124\115\104\111\114\116\32\124\115\108\117\114\112\32\124\115\111\109\101\32\124\115\111\114\116\32\124\115\111\114\116\92\45\98\121\32\124\115\111\114\116\101\100\92\45\109\97\112\32\124\115\111\114\116\101\100\92\45\109\97\112\92\45\98\121\32\124\115\111\114\116\101\100\92\45\115\101\116\32\124\115\112\101\99\105\97\108\92\45\115\121\109\98\111\108\92\63\32\124\115\112\108\105\116\92\45\97\116\32\124\115\112\108\105\116\92\45\119\105\116\104\32\124\115\116\114\32\124\115\116\114\105\110\103\92\63\32\124\115\116\114\117\99\116\32\124\115\116\114\117\99\116\92\45\109\97\112\32\124\115\117\98\115\32\124\115\117\98\118\101\99\32\124\115\121\109\98\111\108\32\124\115\121\109\98\111\108\92\63\32\124\115\121\110\99\32\124\116\97\107\101\32\124\116\97\107\101\92\45\110\116\104\32\124\116\97\107\101\92\45\119\104\105\108\101\32\124\116\101\115\116\32\124\116\105\109\101\32\124\116\111\92\45\97\114\114\97\121\32\124\116\111\92\45\97\114\114\97\121\92\45\50\100\32\124\116\114\101\101\92\45\115\101\113\32\124\116\114\117\101\92\63\32\124\117\110\105\111\110\32\124\117\112\32\124\117\112\100\97\116\101\92\45\112\114\111\120\121\32\124\118\97\108\32\124\118\97\108\115\32\124\118\97\114\92\45\103\101\116\32\124\118\97\114\92\45\115\101\116\32\124\118\97\114\92\63\32\124\118\101\99\116\111\114\32\124\118\101\99\116\111\114\92\45\122\105\112\32\124\118\101\99\116\111\114\92\63\32\124\119\104\101\110\32\124\119\104\101\110\92\45\102\105\114\115\116\32\124\119\104\101\110\92\45\108\101\116\32\124\119\104\101\110\92\45\110\111\116\32\124\119\105\116\104\92\45\108\111\99\97\108\92\45\118\97\114\115\32\124\119\105\116\104\92\45\109\101\116\97\32\124\119\105\116\104\92\45\111\112\101\110\32\124\119\105\116\104\92\45\111\117\116\92\45\115\116\114\32\124\120\109\108\92\45\115\101\113\32\124\120\109\108\92\45\122\105\112\32\124\122\101\114\111\92\63\32\124\122\105\112\109\97\112\32\124\122\105\112\112\101\114\32\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\61\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\92\91\124\92\93\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\92\123\124\92\125\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\92\40\124\92\41\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/CoffeeScript.hs b/src/Text/Highlighter/Lexers/CoffeeScript.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/CoffeeScript.hs
@@ -0,0 +1,53 @@
+module Text.Highlighter.Lexers.CoffeeScript (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\111\102\102\101\101\83\99\114\105\112\116"
+    , lAliases = ["\99\111\102\102\101\101\45\115\99\114\105\112\116", "\99\111\102\102\101\101\115\99\114\105\112\116"]
+    , lExtensions = ["\46\99\111\102\102\101\101"]
+    , lMimetypes = ["\116\101\120\116\47\99\111\102\102\101\101\115\99\114\105\112\116"]
+    , lStart = root'
+    , lFlags = [dotall]
+    }
+
+commentsandwhitespace' :: TokenMatcher
+commentsandwhitespace' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\40\63\61\92\115\124\47\124\60\33\45\45\41" (Arbitrary "\84\101\120\116") (GoTo slashstartsregex')
+    , anyOf commentsandwhitespace'
+    , tokNext "\92\43\92\43\124\45\45\124\126\124\38\38\124\92\98\97\110\100\92\98\124\92\98\111\114\92\98\124\92\98\105\115\92\98\124\92\98\105\115\110\116\92\98\124\92\98\110\111\116\92\98\124\92\63\124\58\124\92\124\92\124\124\92\92\40\63\61\92\110\41\124\40\60\60\124\62\62\62\63\124\61\61\63\124\33\61\63\124\91\45\60\62\43\42\96\37\38\92\124\92\94\47\93\41\61\63" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo slashstartsregex')
+    , tokNext "\91\123\40\92\91\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo slashstartsregex')
+    , tok "\91\125\41\92\93\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\40\102\111\114\124\105\110\124\111\102\124\119\104\105\108\101\124\98\114\101\97\107\124\114\101\116\117\114\110\124\99\111\110\116\105\110\117\101\124\115\119\105\116\99\104\124\119\104\101\110\124\116\104\101\110\124\105\102\124\101\108\115\101\124\116\104\114\111\119\124\116\114\121\124\99\97\116\99\104\124\102\105\110\97\108\108\121\124\110\101\119\124\100\101\108\101\116\101\124\116\121\112\101\111\102\124\105\110\115\116\97\110\99\101\111\102\124\115\117\112\101\114\124\101\120\116\101\110\100\115\124\116\104\105\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo slashstartsregex')
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\121\101\115\124\110\111\124\111\110\124\111\102\102\124\110\117\108\108\124\78\97\78\124\73\110\102\105\110\105\116\121\124\117\110\100\101\102\105\110\101\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\65\114\114\97\121\124\66\111\111\108\101\97\110\124\68\97\116\101\124\69\114\114\111\114\124\70\117\110\99\116\105\111\110\124\77\97\116\104\124\110\101\116\115\99\97\112\101\124\78\117\109\98\101\114\124\79\98\106\101\99\116\124\80\97\99\107\97\103\101\115\124\82\101\103\69\120\112\124\83\116\114\105\110\103\124\115\117\110\124\100\101\99\111\100\101\85\82\73\124\100\101\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\101\110\99\111\100\101\85\82\73\124\101\110\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\69\114\114\111\114\124\101\118\97\108\124\105\115\70\105\110\105\116\101\124\105\115\78\97\78\124\112\97\114\115\101\70\108\111\97\116\124\112\97\114\115\101\73\110\116\124\100\111\99\117\109\101\110\116\124\116\104\105\115\124\119\105\110\100\111\119\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tokNext "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\92\46\58\93\42\58\92\115" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo slashstartsregex')
+    , tok "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\79\116\104\101\114")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+slashstartsregex' :: TokenMatcher
+slashstartsregex' =
+    [ anyOf commentsandwhitespace'
+    , tokNext "\47\40\92\92\46\124\91\94\91\47\92\92\92\110\93\124\92\91\40\92\92\46\124\91\94\92\93\92\92\92\110\93\41\42\93\41\43\47\40\91\103\105\109\93\43\92\98\124\92\66\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\40\63\61\47\41" (Arbitrary "\84\101\120\116") (DoAll [Pop, (GoTo badregex')])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+badregex' :: TokenMatcher
+badregex' =
+    [ tokNext "\10" (Arbitrary "\84\101\120\116") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Coldfusion.hs b/src/Text/Highlighter/Lexers/Coldfusion.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Coldfusion.hs
@@ -0,0 +1,43 @@
+module Text.Highlighter.Lexers.Coldfusion (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\99\102\115\116\97\116\101\109\101\110\116"
+    , lAliases = ["\99\102\115"]
+    , lExtensions = []
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\47\47\46\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\43\92\43\124\45\45" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\45\43\42\47\94\38\61\33\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\60\61\124\62\61\124\60\124\62" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\109\111\100\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\101\113\124\108\116\124\103\116\124\108\116\101\124\103\116\101\124\110\111\116\124\105\115\124\97\110\100\124\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\124\92\124\124\38\38" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo string')
+    , tok "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\40\105\102\124\101\108\115\101\124\108\101\110\124\118\97\114\124\99\97\115\101\124\100\101\102\97\117\108\116\124\98\114\101\97\107\124\115\119\105\116\99\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\91\65\45\90\97\45\122\95\36\93\91\65\45\90\97\45\122\48\45\57\95\46\93\42\41\92\115\42\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\65\45\90\97\45\122\95\36\93\91\65\45\90\97\45\122\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\40\41\92\91\92\93\123\125\59\58\44\46\92\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\35\46\43\63\35" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112")
+    , tok "\91\94\34\35\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\35" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/CommonLisp.hs b/src/Text/Highlighter/Lexers/CommonLisp.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/CommonLisp.hs
@@ -0,0 +1,76 @@
+module Text.Highlighter.Lexers.CommonLisp (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\111\109\109\111\110\32\76\105\115\112"
+    , lAliases = ["\99\111\109\109\111\110\45\108\105\115\112", "\99\108"]
+    , lExtensions = ["\46\99\108", "\46\108\105\115\112", "\46\101\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\111\109\109\111\110\45\108\105\115\112"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+multilineComment' :: TokenMatcher
+multilineComment' =
+    [ tokNext "\35\92\124" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\124\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\94\124\35\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\124\35\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+body' :: TokenMatcher
+body' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\59\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\35\92\124" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComment')
+    , tok "\35\92\100\42\89\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\112\101\99\105\97\108")
+    , tok "\34\40\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\58\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\39\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\39" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\96" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\45\43\93\63\92\100\43\92\46\63\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\45\43\93\63\92\100\43\47\92\100\43\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\45\43\93\63\40\92\100\42\92\46\92\100\43\40\91\100\101\102\108\115\93\91\45\43\93\63\92\100\43\41\63\124\92\100\43\40\92\46\92\100\42\41\63\91\100\101\102\108\115\93\91\45\43\93\63\92\100\43\41\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\35\92\92\46\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\35\92\92\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tokNext "\35\92\40" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo body')
+    , tok "\35\92\100\42\92\42\91\48\49\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114")
+    , tok "\35\58\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\35\91\46\44\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\35\92\39" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\35\91\98\66\93\91\43\45\93\63\91\48\49\93\43\40\47\91\48\49\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\35\91\111\79\93\91\43\45\93\63\91\48\45\55\93\43\40\47\91\48\45\55\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\35\91\120\88\93\91\43\45\93\63\91\48\45\57\97\45\102\65\45\70\93\43\40\47\91\48\45\57\97\45\102\65\45\70\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\35\92\100\43\91\114\82\93\91\43\45\93\63\91\48\45\57\97\45\122\65\45\90\93\43\40\47\91\48\45\57\97\45\122\65\45\90\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tokNext "\40\35\91\99\67\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
+    , tokNext "\40\35\92\100\43\91\97\65\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
+    , tokNext "\40\35\91\115\83\93\41\40\92\40\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo body')
+    , tok "\35\91\112\80\93\63\34\40\92\92\46\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\79\116\104\101\114")
+    , tok "\35\92\100\43\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\35\92\100\43\35" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\35\43\110\105\108\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41\92\115\42\92\40" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo commentedForm')
+    , tok "\35\91\43\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\44\64\124\44\124\92\46\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\116\124\110\105\108\41\40\63\61\91\32\34\40\41\92\39\92\110\44\59\96\93\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\42\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41\92\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
+    , tok "\40\92\124\91\94\124\93\43\92\124\124\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\41\40\63\58\92\92\46\124\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\45\47\60\61\62\63\64\92\91\92\93\94\95\123\125\126\93\124\91\35\46\58\93\41\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo body')
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "" (Arbitrary "\84\101\120\116") (GoTo body')
+    ]
+
+commentedForm' :: TokenMatcher
+commentedForm' =
+    [ tokNext "\92\40" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\92\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\91\94\40\41\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Cpp.hs b/src/Text/Highlighter/Lexers/Cpp.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Cpp.hs
@@ -0,0 +1,78 @@
+module Text.Highlighter.Lexers.Cpp (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\43\43"
+    , lAliases = ["\99\112\112", "\99\43\43"]
+    , lExtensions = ["\46\99\112\112", "\46\104\112\112", "\46\99\43\43", "\46\104\43\43", "\46\99\99", "\46\104\104", "\46\99\120\120", "\46\104\120\120"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\43\43\104\100\114", "\116\101\120\116\47\120\45\99\43\43\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    , tokNext "\92\115\42\40\63\61\62\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+macro' :: TokenMatcher
+macro' =
+    [ tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\91\42\93\40\46\124\92\110\41\42\63\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101") Pop
+    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\92\115\42\35\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
+    , tokNext "\94\92\115\42\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo macro')
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\40\92\92\92\110\41\63\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\76\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\76\63\39\40\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\42\47" (Arbitrary "\69\114\114\111\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\44\46\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\97\115\109\124\97\117\116\111\124\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\111\110\115\116\124\99\111\110\115\116\95\99\97\115\116\124\99\111\110\116\105\110\117\101\124\100\101\102\97\117\108\116\124\100\101\108\101\116\101\124\100\111\124\100\121\110\97\109\105\99\95\99\97\115\116\124\101\108\115\101\124\101\110\117\109\124\101\120\112\108\105\99\105\116\124\101\120\112\111\114\116\124\101\120\116\101\114\110\124\102\111\114\124\102\114\105\101\110\100\124\103\111\116\111\124\105\102\124\109\117\116\97\98\108\101\124\110\97\109\101\115\112\97\99\101\124\110\101\119\124\111\112\101\114\97\116\111\114\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\114\101\103\105\115\116\101\114\124\114\101\105\110\116\101\114\112\114\101\116\95\99\97\115\116\124\114\101\116\117\114\110\124\114\101\115\116\114\105\99\116\124\115\105\122\101\111\102\124\115\116\97\116\105\99\124\115\116\97\116\105\99\95\99\97\115\116\124\115\116\114\117\99\116\124\115\119\105\116\99\104\124\116\101\109\112\108\97\116\101\124\116\104\105\115\124\116\104\114\111\119\124\116\104\114\111\119\115\124\116\114\121\124\116\121\112\101\100\101\102\124\116\121\112\101\105\100\124\116\121\112\101\110\97\109\101\124\117\110\105\111\110\124\117\115\105\110\103\124\118\111\108\97\116\105\108\101\124\118\105\114\116\117\97\108\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\99\108\97\115\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tok "\40\98\111\111\108\124\105\110\116\124\108\111\110\103\124\102\108\111\97\116\124\115\104\111\114\116\124\100\111\117\98\108\101\124\99\104\97\114\124\117\110\115\105\103\110\101\100\124\115\105\103\110\101\100\124\118\111\105\100\124\119\99\104\97\114\95\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\95\123\48\44\50\125\105\110\108\105\110\101\124\110\97\107\101\100\124\116\104\114\101\97\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\95\95\40\97\115\109\124\105\110\116\56\124\98\97\115\101\100\124\101\120\99\101\112\116\124\105\110\116\49\54\124\115\116\100\99\97\108\108\124\99\100\101\99\108\124\102\97\115\116\99\97\108\108\124\105\110\116\51\50\124\100\101\99\108\115\112\101\99\124\102\105\110\97\108\108\121\124\105\110\116\54\52\124\116\114\121\124\108\101\97\118\101\124\119\99\104\97\114\95\116\124\119\54\52\124\118\105\114\116\117\97\108\95\105\110\104\101\114\105\116\97\110\99\101\124\117\117\105\100\111\102\124\117\110\97\108\105\103\110\101\100\124\115\117\112\101\114\124\115\105\110\103\108\101\95\105\110\104\101\114\105\116\97\110\99\101\124\114\97\105\115\101\124\110\111\111\112\124\109\117\108\116\105\112\108\101\95\105\110\104\101\114\105\116\97\110\99\101\124\109\49\50\56\105\124\109\49\50\56\100\124\109\49\50\56\124\109\54\52\124\105\110\116\101\114\102\97\99\101\124\105\100\101\110\116\105\102\105\101\114\124\102\111\114\99\101\105\110\108\105\110\101\124\101\118\101\110\116\124\97\115\115\117\109\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\78\85\76\76\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\58\40\63\33\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Css.hs b/src/Text/Highlighter/Lexers/Css.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Css.hs
@@ -0,0 +1,68 @@
+module Text.Highlighter.Lexers.Css (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\83\83"
+    , lAliases = ["\99\115\115"]
+    , lExtensions = ["\46\99\115\115"]
+    , lMimetypes = ["\116\101\120\116\47\99\115\115"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+content' :: TokenMatcher
+content' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\117\114\108\92\40\46\42\63\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\94\64\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\97\122\105\109\117\116\104\124\98\97\99\107\103\114\111\117\110\100\45\97\116\116\97\99\104\109\101\110\116\124\98\97\99\107\103\114\111\117\110\100\45\99\111\108\111\114\124\98\97\99\107\103\114\111\117\110\100\45\105\109\97\103\101\124\98\97\99\107\103\114\111\117\110\100\45\112\111\115\105\116\105\111\110\124\98\97\99\107\103\114\111\117\110\100\45\114\101\112\101\97\116\124\98\97\99\107\103\114\111\117\110\100\124\98\111\114\100\101\114\45\98\111\116\116\111\109\45\99\111\108\111\114\124\98\111\114\100\101\114\45\98\111\116\116\111\109\45\115\116\121\108\101\124\98\111\114\100\101\114\45\98\111\116\116\111\109\45\119\105\100\116\104\124\98\111\114\100\101\114\45\108\101\102\116\45\99\111\108\111\114\124\98\111\114\100\101\114\45\108\101\102\116\45\115\116\121\108\101\124\98\111\114\100\101\114\45\108\101\102\116\45\119\105\100\116\104\124\98\111\114\100\101\114\45\114\105\103\104\116\124\98\111\114\100\101\114\45\114\105\103\104\116\45\99\111\108\111\114\124\98\111\114\100\101\114\45\114\105\103\104\116\45\115\116\121\108\101\124\98\111\114\100\101\114\45\114\105\103\104\116\45\119\105\100\116\104\124\98\111\114\100\101\114\45\116\111\112\45\99\111\108\111\114\124\98\111\114\100\101\114\45\116\111\112\45\115\116\121\108\101\124\98\111\114\100\101\114\45\116\111\112\45\119\105\100\116\104\124\98\111\114\100\101\114\45\98\111\116\116\111\109\124\98\111\114\100\101\114\45\99\111\108\108\97\112\115\101\124\98\111\114\100\101\114\45\108\101\102\116\124\98\111\114\100\101\114\45\119\105\100\116\104\124\98\111\114\100\101\114\45\99\111\108\111\114\124\98\111\114\100\101\114\45\115\112\97\99\105\110\103\124\98\111\114\100\101\114\45\115\116\121\108\101\124\98\111\114\100\101\114\45\116\111\112\124\98\111\114\100\101\114\124\99\97\112\116\105\111\110\45\115\105\100\101\124\99\108\101\97\114\124\99\108\105\112\124\99\111\108\111\114\124\99\111\110\116\101\110\116\124\99\111\117\110\116\101\114\45\105\110\99\114\101\109\101\110\116\124\99\111\117\110\116\101\114\45\114\101\115\101\116\124\99\117\101\45\97\102\116\101\114\124\99\117\101\45\98\101\102\111\114\101\124\99\117\101\124\99\117\114\115\111\114\124\100\105\114\101\99\116\105\111\110\124\100\105\115\112\108\97\121\124\101\108\101\118\97\116\105\111\110\124\101\109\112\116\121\45\99\101\108\108\115\124\102\108\111\97\116\124\102\111\110\116\45\102\97\109\105\108\121\124\102\111\110\116\45\115\105\122\101\124\102\111\110\116\45\115\105\122\101\45\97\100\106\117\115\116\124\102\111\110\116\45\115\116\114\101\116\99\104\124\102\111\110\116\45\115\116\121\108\101\124\102\111\110\116\45\118\97\114\105\97\110\116\124\102\111\110\116\45\119\101\105\103\104\116\124\102\111\110\116\124\104\101\105\103\104\116\124\108\101\116\116\101\114\45\115\112\97\99\105\110\103\124\108\105\110\101\45\104\101\105\103\104\116\124\108\105\115\116\45\115\116\121\108\101\45\116\121\112\101\124\108\105\115\116\45\115\116\121\108\101\45\105\109\97\103\101\124\108\105\115\116\45\115\116\121\108\101\45\112\111\115\105\116\105\111\110\124\108\105\115\116\45\115\116\121\108\101\124\109\97\114\103\105\110\45\98\111\116\116\111\109\124\109\97\114\103\105\110\45\108\101\102\116\124\109\97\114\103\105\110\45\114\105\103\104\116\124\109\97\114\103\105\110\45\116\111\112\124\109\97\114\103\105\110\124\109\97\114\107\101\114\45\111\102\102\115\101\116\124\109\97\114\107\115\124\109\97\120\45\104\101\105\103\104\116\124\109\97\120\45\119\105\100\116\104\124\109\105\110\45\104\101\105\103\104\116\124\109\105\110\45\119\105\100\116\104\124\111\112\97\99\105\116\121\124\111\114\112\104\97\110\115\124\111\117\116\108\105\110\101\124\111\117\116\108\105\110\101\45\99\111\108\111\114\124\111\117\116\108\105\110\101\45\115\116\121\108\101\124\111\117\116\108\105\110\101\45\119\105\100\116\104\124\111\118\101\114\102\108\111\119\40\63\58\45\120\124\45\121\124\41\124\112\97\100\100\105\110\103\45\98\111\116\116\111\109\124\112\97\100\100\105\110\103\45\108\101\102\116\124\112\97\100\100\105\110\103\45\114\105\103\104\116\124\112\97\100\100\105\110\103\45\116\111\112\124\112\97\100\100\105\110\103\124\112\97\103\101\124\112\97\103\101\45\98\114\101\97\107\45\97\102\116\101\114\124\112\97\103\101\45\98\114\101\97\107\45\98\101\102\111\114\101\124\112\97\103\101\45\98\114\101\97\107\45\105\110\115\105\100\101\124\112\97\117\115\101\45\97\102\116\101\114\124\112\97\117\115\101\45\98\101\102\111\114\101\124\112\97\117\115\101\124\112\105\116\99\104\124\112\105\116\99\104\45\114\97\110\103\101\124\112\108\97\121\45\100\117\114\105\110\103\124\112\111\115\105\116\105\111\110\124\113\117\111\116\101\115\124\114\105\99\104\110\101\115\115\124\114\105\103\104\116\124\115\105\122\101\124\115\112\101\97\107\45\104\101\97\100\101\114\124\115\112\101\97\107\45\110\117\109\101\114\97\108\124\115\112\101\97\107\45\112\117\110\99\116\117\97\116\105\111\110\124\115\112\101\97\107\124\115\112\101\101\99\104\45\114\97\116\101\124\115\116\114\101\115\115\124\116\97\98\108\101\45\108\97\121\111\117\116\124\116\101\120\116\45\97\108\105\103\110\124\116\101\120\116\45\100\101\99\111\114\97\116\105\111\110\124\116\101\120\116\45\105\110\100\101\110\116\124\116\101\120\116\45\115\104\97\100\111\119\124\116\101\120\116\45\116\114\97\110\115\102\111\114\109\124\116\111\112\124\117\110\105\99\111\100\101\45\98\105\100\105\124\118\101\114\116\105\99\97\108\45\97\108\105\103\110\124\118\105\115\105\98\105\108\105\116\121\124\118\111\105\99\101\45\102\97\109\105\108\121\124\118\111\108\117\109\101\124\119\104\105\116\101\45\115\112\97\99\101\124\119\105\100\111\119\115\124\119\105\100\116\104\124\119\111\114\100\45\115\112\97\99\105\110\103\124\122\45\105\110\100\101\120\124\98\111\116\116\111\109\124\108\101\102\116\124\97\98\111\118\101\124\97\98\115\111\108\117\116\101\124\97\108\119\97\121\115\124\97\114\109\101\110\105\97\110\124\97\117\114\97\108\124\97\117\116\111\124\97\118\111\105\100\124\98\97\115\101\108\105\110\101\124\98\101\104\105\110\100\124\98\101\108\111\119\124\98\105\100\105\45\111\118\101\114\114\105\100\101\124\98\108\105\110\107\124\98\108\111\99\107\124\98\111\108\100\124\98\111\108\100\101\114\124\98\111\116\104\124\99\97\112\105\116\97\108\105\122\101\124\99\101\110\116\101\114\45\108\101\102\116\124\99\101\110\116\101\114\45\114\105\103\104\116\124\99\101\110\116\101\114\124\99\105\114\99\108\101\124\99\106\107\45\105\100\101\111\103\114\97\112\104\105\99\124\99\108\111\115\101\45\113\117\111\116\101\124\99\111\108\108\97\112\115\101\124\99\111\110\100\101\110\115\101\100\124\99\111\110\116\105\110\117\111\117\115\124\99\114\111\112\124\99\114\111\115\115\104\97\105\114\124\99\114\111\115\115\124\99\117\114\115\105\118\101\124\100\97\115\104\101\100\124\100\101\99\105\109\97\108\45\108\101\97\100\105\110\103\45\122\101\114\111\124\100\101\99\105\109\97\108\124\100\101\102\97\117\108\116\124\100\105\103\105\116\115\124\100\105\115\99\124\100\111\116\116\101\100\124\100\111\117\98\108\101\124\101\45\114\101\115\105\122\101\124\101\109\98\101\100\124\101\120\116\114\97\45\99\111\110\100\101\110\115\101\100\124\101\120\116\114\97\45\101\120\112\97\110\100\101\100\124\101\120\112\97\110\100\101\100\124\102\97\110\116\97\115\121\124\102\97\114\45\108\101\102\116\124\102\97\114\45\114\105\103\104\116\124\102\97\115\116\101\114\124\102\97\115\116\124\102\105\120\101\100\124\103\101\111\114\103\105\97\110\124\103\114\111\111\118\101\124\104\101\98\114\101\119\124\104\101\108\112\124\104\105\100\100\101\110\124\104\105\100\101\124\104\105\103\104\101\114\124\104\105\103\104\124\104\105\114\97\103\97\110\97\45\105\114\111\104\97\124\104\105\114\97\103\97\110\97\124\105\99\111\110\124\105\110\104\101\114\105\116\124\105\110\108\105\110\101\45\116\97\98\108\101\124\105\110\108\105\110\101\124\105\110\115\101\116\124\105\110\115\105\100\101\124\105\110\118\101\114\116\124\105\116\97\108\105\99\124\106\117\115\116\105\102\121\124\107\97\116\97\107\97\110\97\45\105\114\111\104\97\124\107\97\116\97\107\97\110\97\124\108\97\110\100\115\99\97\112\101\124\108\97\114\103\101\114\124\108\97\114\103\101\124\108\101\102\116\45\115\105\100\101\124\108\101\102\116\119\97\114\100\115\124\108\101\118\101\108\124\108\105\103\104\116\101\114\124\108\105\110\101\45\116\104\114\111\117\103\104\124\108\105\115\116\45\105\116\101\109\124\108\111\117\100\124\108\111\119\101\114\45\97\108\112\104\97\124\108\111\119\101\114\45\103\114\101\101\107\124\108\111\119\101\114\45\114\111\109\97\110\124\108\111\119\101\114\99\97\115\101\124\108\116\114\124\108\111\119\101\114\124\108\111\119\124\109\101\100\105\117\109\124\109\101\115\115\97\103\101\45\98\111\120\124\109\105\100\100\108\101\124\109\105\120\124\109\111\110\111\115\112\97\99\101\124\110\45\114\101\115\105\122\101\124\110\97\114\114\111\119\101\114\124\110\101\45\114\101\115\105\122\101\124\110\111\45\99\108\111\115\101\45\113\117\111\116\101\124\110\111\45\111\112\101\110\45\113\117\111\116\101\124\110\111\45\114\101\112\101\97\116\124\110\111\110\101\124\110\111\114\109\97\108\124\110\111\119\114\97\112\124\110\119\45\114\101\115\105\122\101\124\111\98\108\105\113\117\101\124\111\110\99\101\124\111\112\101\110\45\113\117\111\116\101\124\111\117\116\115\101\116\124\111\117\116\115\105\100\101\124\111\118\101\114\108\105\110\101\124\112\111\105\110\116\101\114\124\112\111\114\116\114\97\105\116\124\112\120\124\114\101\108\97\116\105\118\101\124\114\101\112\101\97\116\45\120\124\114\101\112\101\97\116\45\121\124\114\101\112\101\97\116\124\114\103\98\124\114\105\100\103\101\124\114\105\103\104\116\45\115\105\100\101\124\114\105\103\104\116\119\97\114\100\115\124\115\45\114\101\115\105\122\101\124\115\97\110\115\45\115\101\114\105\102\124\115\99\114\111\108\108\124\115\101\45\114\101\115\105\122\101\124\115\101\109\105\45\99\111\110\100\101\110\115\101\100\124\115\101\109\105\45\101\120\112\97\110\100\101\100\124\115\101\112\97\114\97\116\101\124\115\101\114\105\102\124\115\104\111\119\124\115\105\108\101\110\116\124\115\108\111\119\124\115\108\111\119\101\114\124\115\109\97\108\108\45\99\97\112\115\124\115\109\97\108\108\45\99\97\112\116\105\111\110\124\115\109\97\108\108\101\114\124\115\111\102\116\124\115\111\108\105\100\124\115\112\101\108\108\45\111\117\116\124\115\113\117\97\114\101\124\115\116\97\116\105\99\124\115\116\97\116\117\115\45\98\97\114\124\115\117\112\101\114\124\115\119\45\114\101\115\105\122\101\124\116\97\98\108\101\45\99\97\112\116\105\111\110\124\116\97\98\108\101\45\99\101\108\108\124\116\97\98\108\101\45\99\111\108\117\109\110\124\116\97\98\108\101\45\99\111\108\117\109\110\45\103\114\111\117\112\124\116\97\98\108\101\45\102\111\111\116\101\114\45\103\114\111\117\112\124\116\97\98\108\101\45\104\101\97\100\101\114\45\103\114\111\117\112\124\116\97\98\108\101\45\114\111\119\124\116\97\98\108\101\45\114\111\119\45\103\114\111\117\112\124\116\101\120\116\124\116\101\120\116\45\98\111\116\116\111\109\124\116\101\120\116\45\116\111\112\124\116\104\105\99\107\124\116\104\105\110\124\116\114\97\110\115\112\97\114\101\110\116\124\117\108\116\114\97\45\99\111\110\100\101\110\115\101\100\124\117\108\116\114\97\45\101\120\112\97\110\100\101\100\124\117\110\100\101\114\108\105\110\101\124\117\112\112\101\114\45\97\108\112\104\97\124\117\112\112\101\114\45\108\97\116\105\110\124\117\112\112\101\114\45\114\111\109\97\110\124\117\112\112\101\114\99\97\115\101\124\117\114\108\124\118\105\115\105\98\108\101\124\119\45\114\101\115\105\122\101\124\119\97\105\116\124\119\105\100\101\114\124\120\45\102\97\115\116\124\120\45\104\105\103\104\124\120\45\108\97\114\103\101\124\120\45\108\111\117\100\124\120\45\108\111\119\124\120\45\115\109\97\108\108\124\120\45\115\111\102\116\124\120\120\45\108\97\114\103\101\124\120\120\45\115\109\97\108\108\124\121\101\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\105\110\100\105\103\111\124\103\111\108\100\124\102\105\114\101\98\114\105\99\107\124\105\110\100\105\97\110\114\101\100\124\121\101\108\108\111\119\124\100\97\114\107\111\108\105\118\101\103\114\101\101\110\124\100\97\114\107\115\101\97\103\114\101\101\110\124\109\101\100\105\117\109\118\105\111\108\101\116\114\101\100\124\109\101\100\105\117\109\111\114\99\104\105\100\124\99\104\97\114\116\114\101\117\115\101\124\109\101\100\105\117\109\115\108\97\116\101\98\108\117\101\124\98\108\97\99\107\124\115\112\114\105\110\103\103\114\101\101\110\124\99\114\105\109\115\111\110\124\108\105\103\104\116\115\97\108\109\111\110\124\98\114\111\119\110\124\116\117\114\113\117\111\105\115\101\124\111\108\105\118\101\100\114\97\98\124\99\121\97\110\124\115\105\108\118\101\114\124\115\107\121\98\108\117\101\124\103\114\97\121\124\100\97\114\107\116\117\114\113\117\111\105\115\101\124\103\111\108\100\101\110\114\111\100\124\100\97\114\107\103\114\101\101\110\124\100\97\114\107\118\105\111\108\101\116\124\100\97\114\107\103\114\97\121\124\108\105\103\104\116\112\105\110\107\124\116\101\97\108\124\100\97\114\107\109\97\103\101\110\116\97\124\108\105\103\104\116\103\111\108\100\101\110\114\111\100\121\101\108\108\111\119\124\108\97\118\101\110\100\101\114\124\121\101\108\108\111\119\103\114\101\101\110\124\116\104\105\115\116\108\101\124\118\105\111\108\101\116\124\110\97\118\121\124\111\114\99\104\105\100\124\98\108\117\101\124\103\104\111\115\116\119\104\105\116\101\124\104\111\110\101\121\100\101\119\124\99\111\114\110\102\108\111\119\101\114\98\108\117\101\124\100\97\114\107\98\108\117\101\124\100\97\114\107\107\104\97\107\105\124\109\101\100\105\117\109\112\117\114\112\108\101\124\99\111\114\110\115\105\108\107\124\114\101\100\124\98\105\115\113\117\101\124\115\108\97\116\101\103\114\97\121\124\100\97\114\107\99\121\97\110\124\107\104\97\107\105\124\119\104\101\97\116\124\100\101\101\112\115\107\121\98\108\117\101\124\100\97\114\107\114\101\100\124\115\116\101\101\108\98\108\117\101\124\97\108\105\99\101\98\108\117\101\124\103\97\105\110\115\98\111\114\111\124\109\101\100\105\117\109\116\117\114\113\117\111\105\115\101\124\102\108\111\114\97\108\119\104\105\116\101\124\99\111\114\97\108\124\112\117\114\112\108\101\124\108\105\103\104\116\103\114\101\121\124\108\105\103\104\116\99\121\97\110\124\100\97\114\107\115\97\108\109\111\110\124\98\101\105\103\101\124\97\122\117\114\101\124\108\105\103\104\116\115\116\101\101\108\98\108\117\101\124\111\108\100\108\97\99\101\124\103\114\101\101\110\121\101\108\108\111\119\124\114\111\121\97\108\98\108\117\101\124\108\105\103\104\116\115\101\97\103\114\101\101\110\124\109\105\115\116\121\114\111\115\101\124\115\105\101\110\110\97\124\108\105\103\104\116\99\111\114\97\108\124\111\114\97\110\103\101\114\101\100\124\110\97\118\97\106\111\119\104\105\116\101\124\108\105\109\101\124\112\97\108\101\103\114\101\101\110\124\98\117\114\108\121\119\111\111\100\124\115\101\97\115\104\101\108\108\124\109\101\100\105\117\109\115\112\114\105\110\103\103\114\101\101\110\124\102\117\99\104\115\105\97\124\112\97\112\97\121\97\119\104\105\112\124\98\108\97\110\99\104\101\100\97\108\109\111\110\100\124\112\101\114\117\124\97\113\117\97\109\97\114\105\110\101\124\119\104\105\116\101\124\100\97\114\107\115\108\97\116\101\103\114\97\121\124\105\118\111\114\121\124\100\111\100\103\101\114\98\108\117\101\124\108\101\109\111\110\99\104\105\102\102\111\110\124\99\104\111\99\111\108\97\116\101\124\111\114\97\110\103\101\124\102\111\114\101\115\116\103\114\101\101\110\124\115\108\97\116\101\98\108\117\101\124\111\108\105\118\101\124\109\105\110\116\99\114\101\97\109\124\97\110\116\105\113\117\101\119\104\105\116\101\124\100\97\114\107\111\114\97\110\103\101\124\99\97\100\101\116\98\108\117\101\124\109\111\99\99\97\115\105\110\124\108\105\109\101\103\114\101\101\110\124\115\97\100\100\108\101\98\114\111\119\110\124\100\97\114\107\115\108\97\116\101\98\108\117\101\124\108\105\103\104\116\115\107\121\98\108\117\101\124\100\101\101\112\112\105\110\107\124\112\108\117\109\124\97\113\117\97\124\100\97\114\107\103\111\108\100\101\110\114\111\100\124\109\97\114\111\111\110\124\115\97\110\100\121\98\114\111\119\110\124\109\97\103\101\110\116\97\124\116\97\110\124\114\111\115\121\98\114\111\119\110\124\112\105\110\107\124\108\105\103\104\116\98\108\117\101\124\112\97\108\101\118\105\111\108\101\116\114\101\100\124\109\101\100\105\117\109\115\101\97\103\114\101\101\110\124\100\105\109\103\114\97\121\124\112\111\119\100\101\114\98\108\117\101\124\115\101\97\103\114\101\101\110\124\115\110\111\119\124\109\101\100\105\117\109\98\108\117\101\124\109\105\100\110\105\103\104\116\98\108\117\101\124\112\97\108\101\116\117\114\113\117\111\105\115\101\124\112\97\108\101\103\111\108\100\101\110\114\111\100\124\119\104\105\116\101\115\109\111\107\101\124\100\97\114\107\111\114\99\104\105\100\124\115\97\108\109\111\110\124\108\105\103\104\116\115\108\97\116\101\103\114\97\121\124\108\97\119\110\103\114\101\101\110\124\108\105\103\104\116\103\114\101\101\110\124\116\111\109\97\116\111\124\104\111\116\112\105\110\107\124\108\105\103\104\116\121\101\108\108\111\119\124\108\97\118\101\110\100\101\114\98\108\117\115\104\124\108\105\110\101\110\124\109\101\100\105\117\109\97\113\117\97\109\97\114\105\110\101\124\103\114\101\101\110\124\98\108\117\101\118\105\111\108\101\116\124\112\101\97\99\104\112\117\102\102\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\33\105\109\112\111\114\116\97\110\116" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\92\42\40\63\58\46\124\92\110\41\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\35\91\97\45\122\65\45\90\48\45\57\93\123\49\44\54\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\92\46\45\93\63\91\48\45\57\93\42\91\92\46\93\63\91\48\45\57\93\43\40\101\109\124\112\120\124\92\37\124\112\116\124\112\99\124\105\110\124\109\109\124\99\109\124\101\120\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\45\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\126\92\94\92\42\33\37\38\60\62\92\124\43\61\64\58\44\46\47\63\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\92\91\92\93\40\41\59\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\97\45\122\65\45\90\93\91\97\45\122\65\45\90\48\45\57\93\43" (Arbitrary "\78\97\109\101")
+    ]
+
+basics' :: TokenMatcher
+basics' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\92\42\40\63\58\46\124\92\110\41\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo content')
+    , tok "\92\58\91\97\45\122\65\45\90\48\45\57\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\92\46\91\97\45\122\65\45\90\48\45\57\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tok "\92\35\91\97\45\122\65\45\90\48\45\57\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tokNext "\64\91\97\45\122\65\45\90\48\45\57\95\45\93\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo atrule')
+    , tok "\91\97\45\122\65\45\90\48\45\57\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    , tok "\91\126\92\94\92\42\33\37\38\92\91\92\93\92\40\92\41\60\62\92\124\43\61\64\58\59\44\46\47\63\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf basics'
+    ]
+
+atcontent' :: TokenMatcher
+atcontent' =
+    [ anyOf basics'
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (PopNum 2)
+    ]
+
+atrule' :: TokenMatcher
+atrule' =
+    [ tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo atcontent')
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf basics'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Cython.hs b/src/Text/Highlighter/Lexers/Cython.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Cython.hs
@@ -0,0 +1,167 @@
+module Text.Highlighter.Lexers.Cython (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\67\121\116\104\111\110"
+    , lAliases = ["\99\121\116\104\111\110", "\112\121\120"]
+    , lExtensions = ["\46\112\121\120", "\46\112\120\100", "\46\112\120\105"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\99\121\116\104\111\110", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\99\121\116\104\111\110"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+tsqs' :: TokenMatcher
+tsqs' =
+    [ tokNext "\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+builtins' :: TokenMatcher
+builtins' =
+    [ tok "\40\63\60\33\92\46\41\40\95\95\105\109\112\111\114\116\95\95\124\97\98\115\124\97\108\108\124\97\110\121\124\97\112\112\108\121\124\98\97\115\101\115\116\114\105\110\103\124\98\105\110\124\98\111\111\108\124\98\117\102\102\101\114\124\98\121\116\101\97\114\114\97\121\124\98\121\116\101\115\124\99\97\108\108\97\98\108\101\124\99\104\114\124\99\108\97\115\115\109\101\116\104\111\100\124\99\109\112\124\99\111\101\114\99\101\124\99\111\109\112\105\108\101\124\99\111\109\112\108\101\120\124\100\101\108\97\116\116\114\124\100\105\99\116\124\100\105\114\124\100\105\118\109\111\100\124\101\110\117\109\101\114\97\116\101\124\101\118\97\108\124\101\120\101\99\102\105\108\101\124\101\120\105\116\124\102\105\108\101\124\102\105\108\116\101\114\124\102\108\111\97\116\124\102\114\111\122\101\110\115\101\116\124\103\101\116\97\116\116\114\124\103\108\111\98\97\108\115\124\104\97\115\97\116\116\114\124\104\97\115\104\124\104\101\120\124\105\100\124\105\110\112\117\116\124\105\110\116\124\105\110\116\101\114\110\124\105\115\105\110\115\116\97\110\99\101\124\105\115\115\117\98\99\108\97\115\115\124\105\116\101\114\124\108\101\110\124\108\105\115\116\124\108\111\99\97\108\115\124\108\111\110\103\124\109\97\112\124\109\97\120\124\109\105\110\124\110\101\120\116\124\111\98\106\101\99\116\124\111\99\116\124\111\112\101\110\124\111\114\100\124\112\111\119\124\112\114\111\112\101\114\116\121\124\114\97\110\103\101\124\114\97\119\95\105\110\112\117\116\124\114\101\100\117\99\101\124\114\101\108\111\97\100\124\114\101\112\114\124\114\101\118\101\114\115\101\100\124\114\111\117\110\100\124\115\101\116\124\115\101\116\97\116\116\114\124\115\108\105\99\101\124\115\111\114\116\101\100\124\115\116\97\116\105\99\109\101\116\104\111\100\124\115\116\114\124\115\117\109\124\115\117\112\101\114\124\116\117\112\108\101\124\116\121\112\101\124\117\110\105\99\104\114\124\117\110\105\99\111\100\101\124\118\97\114\115\124\120\114\97\110\103\101\124\122\105\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\33\92\46\41\40\115\101\108\102\124\78\111\110\101\124\69\108\108\105\112\115\105\115\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\70\97\108\115\101\124\84\114\117\101\124\78\85\76\76\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\63\60\33\92\46\41\40\65\114\105\116\104\109\101\116\105\99\69\114\114\111\114\124\65\115\115\101\114\116\105\111\110\69\114\114\111\114\124\65\116\116\114\105\98\117\116\101\69\114\114\111\114\124\66\97\115\101\69\120\99\101\112\116\105\111\110\124\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\69\79\70\69\114\114\111\114\124\69\110\118\105\114\111\110\109\101\110\116\69\114\114\111\114\124\69\120\99\101\112\116\105\111\110\124\70\108\111\97\116\105\110\103\80\111\105\110\116\69\114\114\111\114\124\70\117\116\117\114\101\87\97\114\110\105\110\103\124\71\101\110\101\114\97\116\111\114\69\120\105\116\124\73\79\69\114\114\111\114\124\73\109\112\111\114\116\69\114\114\111\114\124\73\109\112\111\114\116\87\97\114\110\105\110\103\124\73\110\100\101\110\116\97\116\105\111\110\69\114\114\111\114\124\73\110\100\101\120\69\114\114\111\114\124\75\101\121\69\114\114\111\114\124\75\101\121\98\111\97\114\100\73\110\116\101\114\114\117\112\116\124\76\111\111\107\117\112\69\114\114\111\114\124\77\101\109\111\114\121\69\114\114\111\114\124\78\97\109\101\69\114\114\111\114\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\69\114\114\111\114\124\79\83\69\114\114\111\114\124\79\118\101\114\102\108\111\119\69\114\114\111\114\124\79\118\101\114\102\108\111\119\87\97\114\110\105\110\103\124\80\101\110\100\105\110\103\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\82\101\102\101\114\101\110\99\101\69\114\114\111\114\124\82\117\110\116\105\109\101\69\114\114\111\114\124\82\117\110\116\105\109\101\87\97\114\110\105\110\103\124\83\116\97\110\100\97\114\100\69\114\114\111\114\124\83\116\111\112\73\116\101\114\97\116\105\111\110\124\83\121\110\116\97\120\69\114\114\111\114\124\83\121\110\116\97\120\87\97\114\110\105\110\103\124\83\121\115\116\101\109\69\114\114\111\114\124\83\121\115\116\101\109\69\120\105\116\124\84\97\98\69\114\114\111\114\124\84\121\112\101\69\114\114\111\114\124\85\110\98\111\117\110\100\76\111\99\97\108\69\114\114\111\114\124\85\110\105\99\111\100\101\68\101\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\110\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\84\114\97\110\115\108\97\116\101\69\114\114\111\114\124\85\110\105\99\111\100\101\87\97\114\110\105\110\103\124\85\115\101\114\87\97\114\110\105\110\103\124\86\97\108\117\101\69\114\114\111\114\124\87\97\114\110\105\110\103\124\90\101\114\111\68\105\118\105\115\105\111\110\69\114\114\111\114\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    ]
+
+name' :: TokenMatcher
+name' =
+    [ tok "\64\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+tdqs' :: TokenMatcher
+tdqs' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+backtick' :: TokenMatcher
+backtick' =
+    [ tok "\96\46\42\63\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\40\92\100\43\92\46\63\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43\76" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114" :. Arbitrary "\76\111\110\103")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tok "\40\92\115\43\41\40\97\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\40\92\115\42\41\40\44\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\115\115\101\114\116\124\98\114\101\97\107\124\98\121\124\99\111\110\116\105\110\117\101\124\99\116\121\112\101\100\101\102\124\100\101\108\124\101\108\105\102\124\101\108\115\101\124\101\120\99\101\112\116\92\63\63\124\101\120\101\99\124\102\105\110\97\108\108\121\124\102\111\114\124\103\105\108\124\103\108\111\98\97\108\124\105\102\124\105\110\99\108\117\100\101\124\108\97\109\98\100\97\124\110\111\103\105\108\124\112\97\115\115\124\112\114\105\110\116\124\114\97\105\115\101\124\114\101\116\117\114\110\124\116\114\121\124\119\104\105\108\101\124\121\105\101\108\100\124\97\115\124\119\105\116\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\68\69\70\124\73\70\124\69\76\73\70\124\69\76\83\69\41\92\98" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    ]
+
+cdef' :: TokenMatcher
+cdef' =
+    [ tok "\40\112\117\98\108\105\99\124\114\101\97\100\111\110\108\121\124\101\120\116\101\114\110\124\97\112\105\124\105\110\108\105\110\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\115\116\114\117\99\116\124\101\110\117\109\124\117\110\105\111\110\124\99\108\97\115\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\63\61\91\40\58\35\61\93\124\36\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")]) Pop
+    , tok "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\44\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\102\114\111\109\92\98" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tok "\97\115\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\40\63\61\91\34\92\39\93\41" (Arbitrary "\84\101\120\116") Pop
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+nl' :: TokenMatcher
+nl' =
+    [ tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\94\40\92\115\42\41\40\34\34\34\40\63\58\46\124\92\110\41\42\63\34\34\34\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\94\40\92\115\42\41\40\39\39\39\40\63\58\46\124\92\110\41\42\63\39\39\39\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\93\123\125\58\40\41\44\59\91\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\92" (Arbitrary "\84\101\120\116")
+    , tok "\40\105\110\124\105\115\124\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\40\60\41\40\91\97\45\122\65\45\90\48\45\57\46\63\93\43\41\40\62\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\63\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\102\114\111\109\41\40\92\100\43\41\40\60\61\41\40\92\115\43\41\40\60\41\40\92\100\43\41\40\58\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , anyOf keywords'
+    , tokNext "\40\100\101\102\124\112\114\111\112\101\114\116\121\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\112\63\100\101\102\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo cdef')
+    , tokNext "\40\99\108\97\115\115\124\115\116\114\117\99\116\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\102\114\111\109\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo fromimport')
+    , tokNext "\40\99\63\105\109\112\111\114\116\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , anyOf builtins'
+    , anyOf backtick'
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
+    , tokNext "\91\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
+    , tokNext "\91\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
+    , tokNext "\91\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
+    , tokNext "\91\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
+    , anyOf name'
+    , anyOf numbers'
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\37\40\92\40\91\97\45\122\65\45\90\48\45\57\93\43\92\41\41\63\91\45\35\48\32\43\93\42\40\91\48\45\57\93\43\124\91\42\93\41\63\40\92\46\40\91\48\45\57\93\43\124\91\42\93\41\41\63\91\104\108\76\93\63\91\100\105\111\117\120\88\101\69\102\70\103\71\99\114\115\37\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+fromimport' :: TokenMatcher
+fromimport' =
+    [ tokNext "\40\92\115\43\41\40\99\63\105\109\112\111\114\116\41\92\98" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")]) Pop
+    , tok "\91\97\45\122\65\45\90\95\46\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/D.hs b/src/Text/Highlighter/Lexers/D.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/D.hs
@@ -0,0 +1,129 @@
+module Text.Highlighter.Lexers.D (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68"
+    , lAliases = ["\100"]
+    , lExtensions = ["\46\100", "\46\100\105"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\100\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+delimited_parenthesis' :: TokenMatcher
+delimited_parenthesis' =
+    [ tok "\91\94\92\40\92\41\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_inside_parenthesis')
+    , tokNext "\92\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+delimited_curly' :: TokenMatcher
+delimited_curly' =
+    [ tok "\91\94\123\125\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_inside_curly')
+    , tokNext "\125\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+delimited_angle' :: TokenMatcher
+delimited_angle' =
+    [ tok "\91\94\60\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\60" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_inside_angle')
+    , tokNext "\62\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+delimited_inside_parenthesis' :: TokenMatcher
+delimited_inside_parenthesis' =
+    [ tok "\91\94\92\40\92\41\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Push
+    , tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+delimited_inside_curly' :: TokenMatcher
+delimited_inside_curly' =
+    [ tok "\91\94\123\125\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Push
+    , tokNext "\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+delimited_inside_bracket' :: TokenMatcher
+delimited_inside_bracket' =
+    [ tok "\91\94\92\91\92\93\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Push
+    , tokNext "\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+token_string_nest' :: TokenMatcher
+token_string_nest' =
+    [ tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf root'
+    ]
+
+delimited_bracket' :: TokenMatcher
+delimited_bracket' =
+    [ tok "\91\94\92\91\92\93\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_inside_bracket')
+    , tokNext "\92\93\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+token_string' :: TokenMatcher
+token_string' =
+    [ tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo token_string_nest')
+    , tokNext "\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf root'
+    ]
+
+delimited_inside_angle' :: TokenMatcher
+delimited_inside_angle' =
+    [ tok "\91\94\60\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\60" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Push
+    , tokNext "\62" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nested_comment')
+    , tok "\40\97\98\115\116\114\97\99\116\124\97\108\105\97\115\124\97\108\105\103\110\124\97\115\109\124\97\115\115\101\114\116\124\97\117\116\111\124\98\111\100\121\124\98\114\101\97\107\124\99\97\115\101\124\99\97\115\116\124\99\97\116\99\104\124\99\108\97\115\115\124\99\111\110\115\116\124\99\111\110\116\105\110\117\101\124\100\101\98\117\103\124\100\101\102\97\117\108\116\124\100\101\108\101\103\97\116\101\124\100\101\108\101\116\101\124\100\101\112\114\101\99\97\116\101\100\124\100\111\124\101\108\115\101\124\101\110\117\109\124\101\120\112\111\114\116\124\101\120\116\101\114\110\124\102\105\110\97\108\108\121\124\102\105\110\97\108\124\102\111\114\101\97\99\104\95\114\101\118\101\114\115\101\124\102\111\114\101\97\99\104\124\102\111\114\124\102\117\110\99\116\105\111\110\124\103\111\116\111\124\105\102\124\105\109\112\111\114\116\124\105\110\111\117\116\124\105\110\116\101\114\102\97\99\101\124\105\110\118\97\114\105\97\110\116\124\105\110\124\105\115\124\108\97\122\121\124\109\105\120\105\110\124\109\111\100\117\108\101\124\110\101\119\124\110\111\116\104\114\111\119\124\111\117\116\124\111\118\101\114\114\105\100\101\124\112\97\99\107\97\103\101\124\112\114\97\103\109\97\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\112\117\114\101\124\114\101\102\124\114\101\116\117\114\110\124\115\99\111\112\101\124\115\116\97\116\105\99\124\115\116\114\117\99\116\124\115\117\112\101\114\124\115\119\105\116\99\104\124\115\121\110\99\104\114\111\110\105\122\101\100\124\116\101\109\112\108\97\116\101\124\116\104\105\115\124\116\104\114\111\119\124\116\114\121\124\116\121\112\101\100\101\102\124\116\121\112\101\105\100\124\116\121\112\101\111\102\124\117\110\105\111\110\124\117\110\105\116\116\101\115\116\124\118\101\114\115\105\111\110\124\118\111\108\97\116\105\108\101\124\119\104\105\108\101\124\119\105\116\104\124\95\95\116\114\97\105\116\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\98\111\111\108\124\98\121\116\101\124\99\100\111\117\98\108\101\124\99\101\110\116\124\99\102\108\111\97\116\124\99\104\97\114\124\99\114\101\97\108\124\100\99\104\97\114\124\100\111\117\98\108\101\124\102\108\111\97\116\124\105\100\111\117\98\108\101\124\105\102\108\111\97\116\124\105\110\116\124\105\114\101\97\108\124\108\111\110\103\124\114\101\97\108\124\115\104\111\114\116\124\117\98\121\116\101\124\117\99\101\110\116\124\117\105\110\116\124\117\108\111\110\103\124\117\115\104\111\114\116\124\118\111\105\100\124\119\99\104\97\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\102\97\108\115\101\124\116\114\117\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\109\97\99\114\111\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\115\116\114\105\110\103\124\119\115\116\114\105\110\103\124\100\115\116\114\105\110\103\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\48\91\120\88\93\40\91\48\45\57\97\45\102\65\45\70\95\93\42\92\46\91\48\45\57\97\45\102\65\45\70\95\93\43\124\91\48\45\57\97\45\102\65\45\70\95\93\43\41\91\112\80\93\91\43\92\45\93\63\91\48\45\57\95\93\43\91\102\70\76\93\63\91\105\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\95\93\43\40\92\46\91\48\45\57\95\93\43\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\124\92\46\91\48\45\57\95\93\42\124\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\91\102\70\76\93\63\91\105\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\46\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\63\91\102\70\76\93\63\91\105\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\66\98\93\91\48\49\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\91\48\45\55\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\76\85\117\93\124\76\117\124\76\85\124\117\76\124\85\76\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\39\40\92\92\91\39\34\63\92\92\97\98\102\110\114\116\118\93\124\92\92\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\92\92\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\92\92\38\92\119\43\59\124\46\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\114\34\91\94\34\93\42\34\91\99\119\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\96\91\94\96\93\42\96\91\99\119\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\91\99\119\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\40\91\39\92\34\63\92\92\97\98\102\110\114\116\118\93\124\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\124\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\38\92\119\43\59\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\120\34\91\48\45\57\97\45\102\65\45\70\95\92\115\93\42\34\91\99\119\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\113\34\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_bracket')
+    , tokNext "\113\34\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_parenthesis')
+    , tokNext "\113\34\60" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_angle')
+    , tokNext "\113\34\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo delimited_curly')
+    , tok "\113\34\40\91\97\45\122\65\45\90\95\93\92\119\42\41\92\110\46\42\63\92\110\92\49\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\113\34\40\46\41\46\42\63\92\49\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\113\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo token_string')
+    , tok "\40\126\61\124\92\94\61\124\37\61\124\92\42\61\124\61\61\124\33\62\61\124\33\60\61\124\33\60\62\61\124\33\60\62\124\33\60\124\33\62\124\33\61\124\62\62\62\61\124\62\62\62\124\62\62\61\124\62\62\124\62\61\124\60\62\61\124\60\62\124\60\60\61\124\60\60\124\60\61\124\92\43\92\43\124\92\43\61\124\45\45\124\45\61\124\92\124\92\124\124\92\124\61\124\38\38\124\38\61\124\92\46\92\46\92\46\124\92\46\92\46\124\47\61\41\124\91\47\46\38\124\92\45\43\60\62\33\40\41\92\91\92\93\123\125\63\44\59\58\36\61\42\37\94\126\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
+    ]
+
+nested_comment' :: TokenMatcher
+nested_comment' =
+    [ tok "\91\94\43\47\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\43\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\43\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/DarcsPatch.hs b/src/Text/Highlighter/Lexers/DarcsPatch.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/DarcsPatch.hs
@@ -0,0 +1,58 @@
+module Text.Highlighter.Lexers.DarcsPatch (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\97\114\99\115\32\80\97\116\99\104"
+    , lAliases = ["\100\112\97\116\99\104"]
+    , lExtensions = ["\46\100\112\97\116\99\104", "\46\100\97\114\99\115\112\97\116\99\104"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\92\93\93\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\92\93" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    ]
+
+insert' :: TokenMatcher
+insert' =
+    [ anyOf specialText'
+    , tok "\92\91" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")
+    , tok "\91\94\92\110\92\91\93\42" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")
+    ]
+
+delete' :: TokenMatcher
+delete' =
+    [ anyOf specialText'
+    , tok "\92\91" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100")
+    , tok "\91\94\92\110\92\91\93\42" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\60" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\62" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\123" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\125" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\92\91\41\40\40\63\58\84\65\71\32\41\63\41\40\46\42\41\40\92\110\41\40\46\42\41\40\92\42\92\42\41\40\92\100\43\41\40\92\115\63\41\40\92\93\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\68\97\116\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tokNext "\40\92\91\41\40\40\63\58\84\65\71\32\41\63\41\40\46\42\41\40\92\110\41\40\46\42\41\40\92\42\92\42\41\40\92\100\43\41\40\92\115\63\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\68\97\116\101"), (Arbitrary "\84\101\120\116")]) (GoTo comment')
+    , tok "\78\101\119\32\112\97\116\99\104\101\115\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
+    , tok "\67\111\110\116\101\120\116\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
+    , tok "\80\97\116\99\104\32\98\117\110\100\108\101\32\104\97\115\104\58" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
+    , tok "\40\92\115\42\41\40\104\117\110\107\124\97\100\100\102\105\108\101\124\97\100\100\100\105\114\124\114\109\102\105\108\101\124\114\109\100\105\114\124\109\111\118\101\124\114\101\112\108\97\99\101\41\40\46\42\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\92\43" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100") (GoTo insert')
+    , tokNext "\45" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100") (GoTo delete')
+    , tok "\46\42\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
+specialText' :: TokenMatcher
+specialText' =
+    [ tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    , tok "\92\91\95\91\94\95\93\42\95\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/DebianControl.hs b/src/Text/Highlighter/Lexers/DebianControl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/DebianControl.hs
@@ -0,0 +1,64 @@
+module Text.Highlighter.Lexers.DebianControl (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\101\98\105\97\110\32\67\111\110\116\114\111\108\32\102\105\108\101"
+    , lAliases = ["\99\111\110\116\114\111\108"]
+    , lExtensions = ["\99\111\110\116\114\111\108"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+maintainer' :: TokenMatcher
+maintainer' =
+    [ tok "\60\91\94\62\93\43\62" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\83\116\114\111\110\103")
+    , tokNext "\60\91\94\62\93\43\62\36" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\83\116\114\111\110\103") Pop
+    , tok "\44\92\110\63" (Arbitrary "\84\101\120\116")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+depends' :: TokenMatcher
+depends' =
+    [ tok "\58\92\115\42" (Arbitrary "\84\101\120\116")
+    , tok "\40\92\36\41\40\92\123\41\40\92\119\43\92\115\42\58\92\115\42\92\119\43\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")])
+    , tokNext "\92\40" (Arbitrary "\84\101\120\116") (GoTo depend_vers')
+    , tok "\44" (Arbitrary "\84\101\120\116")
+    , tok "\92\124" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\92\115\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\125\92\41\93\92\115\42\36" (Arbitrary "\84\101\120\116") Pop
+    , tok "\91\125\93" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\94\44\93\36" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    , tok "\40\91\92\43\92\46\97\45\122\65\45\90\48\45\57\45\93\91\92\115\92\110\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\92\91\46\42\63\92\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\40\68\101\115\99\114\105\112\116\105\111\110\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo description')
+    , tokNext "\94\40\77\97\105\110\116\97\105\110\101\114\41\40\58\92\115\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo maintainer')
+    , tokNext "\94\40\40\66\117\105\108\100\45\41\63\68\101\112\101\110\100\115\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo depends')
+    , tok "\94\40\40\63\58\80\121\116\104\111\110\45\41\63\86\101\114\115\105\111\110\41\40\58\92\115\42\41\40\91\94\92\115\93\43\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")])
+    , tok "\94\40\40\63\58\73\110\115\116\97\108\108\101\100\45\41\63\83\105\122\101\41\40\58\92\115\42\41\40\91\94\92\115\93\43\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")])
+    , tok "\94\40\77\68\53\83\117\109\124\83\72\65\49\124\83\72\65\50\53\54\41\40\58\92\115\42\41\40\91\94\92\115\93\43\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")])
+    , tok "\94\40\91\97\45\122\65\45\90\92\45\48\45\57\92\46\93\42\63\41\40\58\92\115\42\41\40\46\42\63\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    ]
+
+description' :: TokenMatcher
+description' =
+    [ tok "\40\46\42\41\40\72\111\109\101\112\97\103\101\41\40\58\32\41\40\91\94\92\115\93\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\78\97\109\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")])
+    , tok "\58\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\83\116\114\111\110\103")
+    , tok "\32\46\42\92\110" (Arbitrary "\84\101\120\116")
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+depend_vers' :: TokenMatcher
+depend_vers' =
+    [ tokNext "\92\41\44" (Arbitrary "\84\101\120\116") Pop
+    , tokNext "\92\41\91\94\44\93" (Arbitrary "\84\101\120\116") (PopNum 2)
+    , tok "\40\91\62\60\61\93\43\41\40\92\115\42\41\40\91\94\92\41\93\43\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")])
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Diff.hs b/src/Text/Highlighter/Lexers/Diff.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Diff.hs
@@ -0,0 +1,27 @@
+module Text.Highlighter.Lexers.Diff (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\105\102\102"
+    , lAliases = ["\100\105\102\102", "\117\100\105\102\102"]
+    , lExtensions = ["\46\100\105\102\102", "\46\112\97\116\99\104"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\100\105\102\102", "\116\101\120\116\47\120\45\112\97\116\99\104"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\32\46\42\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\43\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")
+    , tok "\45\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\68\101\108\101\116\101\100")
+    , tok "\33\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\83\116\114\111\110\103")
+    , tok "\64\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\83\117\98\104\101\97\100\105\110\103")
+    , tok "\40\91\73\105\93\110\100\101\120\124\100\105\102\102\41\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
+    , tok "\61\46\42\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103")
+    , tok "\46\42\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Django.hs b/src/Text/Highlighter/Lexers/Django.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Django.hs
@@ -0,0 +1,57 @@
+module Text.Highlighter.Lexers.Django (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\106\97\110\103\111\47\74\105\110\106\97"
+    , lAliases = ["\100\106\97\110\103\111", "\106\105\110\106\97"]
+    , lExtensions = []
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\100\106\97\110\103\111\45\116\101\109\112\108\97\116\105\110\103", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\106\105\110\106\97"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+var' :: TokenMatcher
+var' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\40\45\63\41\40\92\125\92\125\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")]) Pop
+    , anyOf varnames'
+    ]
+
+varnames' :: TokenMatcher
+varnames' =
+    [ tok "\40\92\124\41\40\92\115\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\105\115\41\40\92\115\43\41\40\110\111\116\41\63\40\92\115\43\41\63\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\40\95\124\116\114\117\101\124\102\97\108\115\101\124\110\111\110\101\124\84\114\117\101\124\70\97\108\115\101\124\78\111\110\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\105\110\124\97\115\124\114\101\118\101\114\115\101\100\124\114\101\99\117\114\115\105\118\101\124\110\111\116\124\97\110\100\124\111\114\124\105\115\124\105\102\124\101\108\115\101\124\105\109\112\111\114\116\124\119\105\116\104\40\63\58\40\63\58\111\117\116\41\63\92\115\42\99\111\110\116\101\120\116\41\63\124\115\99\111\112\101\100\124\105\103\110\111\114\101\92\115\43\109\105\115\115\105\110\103\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\108\111\111\112\124\98\108\111\99\107\124\115\117\112\101\114\124\102\111\114\108\111\111\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\46\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\58\63\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\58\63\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\40\91\123\125\40\41\92\91\92\93\43\92\45\42\47\44\58\126\93\124\91\62\60\61\93\61\63\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\48\45\57\93\40\92\46\91\48\45\57\93\42\41\63\40\101\69\91\43\45\93\91\48\45\57\93\41\63\91\102\108\70\76\100\68\93\63\124\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\123\93\43" (Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\123\92\123" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo var')
+    , tok "\92\123\91\42\35\93\46\42\63\91\42\35\93\92\125" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\92\123\37\41\40\45\63\92\115\42\41\40\99\111\109\109\101\110\116\41\40\92\115\42\45\63\41\40\37\92\125\41\40\46\42\63\41\40\92\123\37\41\40\45\63\92\115\42\41\40\101\110\100\99\111\109\109\101\110\116\41\40\92\115\42\45\63\41\40\37\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\67\111\109\109\101\110\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\92\123\37\41\40\45\63\92\115\42\41\40\114\97\119\41\40\92\115\42\45\63\41\40\37\92\125\41\40\46\42\63\41\40\92\123\37\41\40\45\63\92\115\42\41\40\101\110\100\114\97\119\41\40\92\115\42\45\63\41\40\37\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tokNext "\40\92\123\37\41\40\45\63\92\115\42\41\40\102\105\108\116\101\114\41\40\92\115\43\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) (GoTo block')
+    , tokNext "\40\92\123\37\41\40\45\63\92\115\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")]) (GoTo block')
+    , tok "\92\123" (Arbitrary "\79\116\104\101\114")
+    ]
+
+block' :: TokenMatcher
+block' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\40\45\63\41\40\37\92\125\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")]) Pop
+    , anyOf varnames'
+    , tok "\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Dylan.hs b/src/Text/Highlighter/Lexers/Dylan.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Dylan.hs
@@ -0,0 +1,35 @@
+module Text.Highlighter.Lexers.Dylan (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\121\108\97\110"
+    , lAliases = ["\100\121\108\97\110"]
+    , lExtensions = ["\46\100\121\108\97\110"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\100\121\108\97\110"]
+    , lStart = root'
+    , lFlags = [dotall]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\98\40\115\117\98\99\108\97\115\115\124\97\98\115\116\114\97\99\116\124\98\108\111\99\107\124\99\40\111\110\40\99\114\101\116\101\124\115\116\97\110\116\41\124\108\97\115\115\41\124\100\111\109\97\105\110\124\101\120\40\99\40\101\112\116\105\111\110\124\108\117\100\101\41\124\112\111\114\116\41\124\102\40\117\110\99\116\105\111\110\40\124\97\108\41\41\124\103\101\110\101\114\105\99\124\104\97\110\100\108\101\114\124\105\40\110\40\104\101\114\105\116\101\100\124\108\105\110\101\124\115\116\97\110\99\101\124\116\101\114\102\97\99\101\41\124\109\112\111\114\116\41\124\108\105\98\114\97\114\121\124\109\40\97\99\114\111\124\101\116\104\111\100\41\124\111\112\101\110\124\112\114\105\109\97\114\121\124\115\101\97\108\101\100\124\115\105\40\100\101\119\97\121\115\124\110\103\108\101\116\111\110\41\124\115\108\111\116\124\118\40\97\114\105\97\98\108\101\124\105\114\116\117\97\108\41\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\60\92\119\43\62" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\35\63\34\40\63\58\92\92\46\124\91\94\34\93\41\43\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\91\92\119\92\87\93\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\92\39\46\42\63\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\61\62\124\92\98\40\97\40\98\111\118\101\124\102\116\101\114\119\97\114\100\115\41\124\98\40\101\40\103\105\110\124\108\111\119\41\124\121\41\124\99\40\97\115\101\124\108\101\97\110\117\112\124\114\101\97\116\101\41\124\100\101\102\105\110\101\124\101\108\115\101\40\124\105\102\41\124\101\110\100\124\102\40\105\110\97\108\108\121\124\111\114\124\114\111\109\41\124\105\91\102\110\93\124\108\40\101\116\124\111\99\97\108\41\124\111\116\104\101\114\119\105\115\101\124\114\101\110\97\109\101\124\115\40\101\108\101\99\116\124\105\103\110\97\108\41\124\116\40\104\101\110\124\111\41\124\117\40\110\40\108\101\115\115\124\116\105\108\41\124\115\101\41\124\119\104\40\101\110\124\105\108\101\41\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\91\32\92\116\93\41\40\91\33\92\36\37\38\92\42\92\47\58\60\61\62\92\63\126\95\94\97\45\122\65\45\90\48\45\57\46\43\92\45\93\42\58\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    , tok "\40\91\32\92\116\93\42\41\40\92\83\43\91\94\58\93\41\40\91\32\92\116\93\42\41\40\92\40\41\40\91\32\92\116\93\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\45\63\91\48\45\57\46\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\40\41\44\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\36\91\97\45\122\65\45\90\48\45\57\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\91\33\36\37\38\42\47\58\60\62\61\63\126\94\46\43\92\91\92\93\123\125\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\91\97\45\122\65\45\90\48\45\57\45\93\43" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\97\45\122\65\45\90\48\45\57\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Erlang.hs b/src/Text/Highlighter/Lexers/Erlang.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Erlang.hs
@@ -0,0 +1,56 @@
+module Text.Highlighter.Lexers.Erlang (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\69\114\108\97\110\103"
+    , lAliases = ["\101\114\108\97\110\103"]
+    , lExtensions = ["\46\101\114\108", "\46\104\114\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\101\114\108\97\110\103"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\37\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\97\102\116\101\114\124\98\101\103\105\110\124\99\97\115\101\124\99\97\116\99\104\124\99\111\110\100\124\101\110\100\124\102\117\110\124\105\102\124\108\101\116\124\111\102\124\113\117\101\114\121\124\114\101\99\101\105\118\101\124\116\114\121\124\119\104\101\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\98\115\124\97\112\112\101\110\100\95\101\108\101\109\101\110\116\124\97\112\112\108\121\124\97\116\111\109\95\116\111\95\108\105\115\116\124\98\105\110\97\114\121\95\116\111\95\108\105\115\116\124\98\105\116\115\116\114\105\110\103\95\116\111\95\108\105\115\116\124\98\105\110\97\114\121\95\116\111\95\116\101\114\109\124\98\105\116\95\115\105\122\101\124\98\117\109\112\95\114\101\100\117\99\116\105\111\110\115\124\98\121\116\101\95\115\105\122\101\124\99\97\110\99\101\108\95\116\105\109\101\114\124\99\104\101\99\107\95\112\114\111\99\101\115\115\95\99\111\100\101\124\100\101\108\101\116\101\95\109\111\100\117\108\101\124\100\101\109\111\110\105\116\111\114\124\100\105\115\99\111\110\110\101\99\116\95\110\111\100\101\124\100\105\115\112\108\97\121\124\101\108\101\109\101\110\116\124\101\114\97\115\101\124\101\120\105\116\124\102\108\111\97\116\124\102\108\111\97\116\95\116\111\95\108\105\115\116\124\102\117\110\95\105\110\102\111\124\102\117\110\95\116\111\95\108\105\115\116\124\102\117\110\99\116\105\111\110\95\101\120\112\111\114\116\101\100\124\103\97\114\98\97\103\101\95\99\111\108\108\101\99\116\124\103\101\116\124\103\101\116\95\107\101\121\115\124\103\114\111\117\112\95\108\101\97\100\101\114\124\104\97\115\104\124\104\100\124\105\110\116\101\103\101\114\95\116\111\95\108\105\115\116\124\105\111\108\105\115\116\95\116\111\95\98\105\110\97\114\121\124\105\111\108\105\115\116\95\115\105\122\101\124\105\115\95\97\116\111\109\124\105\115\95\98\105\110\97\114\121\124\105\115\95\98\105\116\115\116\114\105\110\103\124\105\115\95\98\111\111\108\101\97\110\124\105\115\95\98\117\105\108\116\105\110\124\105\115\95\102\108\111\97\116\124\105\115\95\102\117\110\99\116\105\111\110\124\105\115\95\105\110\116\101\103\101\114\124\105\115\95\108\105\115\116\124\105\115\95\110\117\109\98\101\114\124\105\115\95\112\105\100\124\105\115\95\112\111\114\116\124\105\115\95\112\114\111\99\101\115\115\95\97\108\105\118\101\124\105\115\95\114\101\99\111\114\100\124\105\115\95\114\101\102\101\114\101\110\99\101\124\105\115\95\116\117\112\108\101\124\108\101\110\103\116\104\124\108\105\110\107\124\108\105\115\116\95\116\111\95\97\116\111\109\124\108\105\115\116\95\116\111\95\98\105\110\97\114\121\124\108\105\115\116\95\116\111\95\98\105\116\115\116\114\105\110\103\124\108\105\115\116\95\116\111\95\101\120\105\115\116\105\110\103\95\97\116\111\109\124\108\105\115\116\95\116\111\95\102\108\111\97\116\124\108\105\115\116\95\116\111\95\105\110\116\101\103\101\114\124\108\105\115\116\95\116\111\95\112\105\100\124\108\105\115\116\95\116\111\95\116\117\112\108\101\124\108\111\97\100\95\109\111\100\117\108\101\124\108\111\99\97\108\116\105\109\101\95\116\111\95\117\110\105\118\101\114\115\97\108\116\105\109\101\124\109\97\107\101\95\116\117\112\108\101\124\109\100\53\124\109\100\53\95\102\105\110\97\108\124\109\100\53\95\117\112\100\97\116\101\124\109\101\109\111\114\121\124\109\111\100\117\108\101\95\108\111\97\100\101\100\124\109\111\110\105\116\111\114\124\109\111\110\105\116\111\114\95\110\111\100\101\124\110\111\100\101\124\110\111\100\101\115\124\111\112\101\110\95\112\111\114\116\124\112\104\97\115\104\124\112\104\97\115\104\50\124\112\105\100\95\116\111\95\108\105\115\116\124\112\111\114\116\95\99\108\111\115\101\124\112\111\114\116\95\99\111\109\109\97\110\100\124\112\111\114\116\95\99\111\110\110\101\99\116\124\112\111\114\116\95\99\111\110\116\114\111\108\124\112\111\114\116\95\99\97\108\108\124\112\111\114\116\95\105\110\102\111\124\112\111\114\116\95\116\111\95\108\105\115\116\124\112\114\111\99\101\115\115\95\100\105\115\112\108\97\121\124\112\114\111\99\101\115\115\95\102\108\97\103\124\112\114\111\99\101\115\115\95\105\110\102\111\124\112\117\114\103\101\95\109\111\100\117\108\101\124\112\117\116\124\114\101\97\100\95\116\105\109\101\114\124\114\101\102\95\116\111\95\108\105\115\116\124\114\101\103\105\115\116\101\114\124\114\101\115\117\109\101\95\112\114\111\99\101\115\115\124\114\111\117\110\100\124\115\101\110\100\124\115\101\110\100\95\97\102\116\101\114\124\115\101\110\100\95\110\111\115\117\115\112\101\110\100\124\115\101\116\95\99\111\111\107\105\101\124\115\101\116\101\108\101\109\101\110\116\124\115\105\122\101\124\115\112\97\119\110\124\115\112\97\119\110\95\108\105\110\107\124\115\112\97\119\110\95\109\111\110\105\116\111\114\124\115\112\97\119\110\95\111\112\116\124\115\112\108\105\116\95\98\105\110\97\114\121\124\115\116\97\114\116\95\116\105\109\101\114\124\115\116\97\116\105\115\116\105\99\115\124\115\117\115\112\101\110\100\95\112\114\111\99\101\115\115\124\115\121\115\116\101\109\95\102\108\97\103\124\115\121\115\116\101\109\95\105\110\102\111\124\115\121\115\116\101\109\95\109\111\110\105\116\111\114\124\115\121\115\116\101\109\95\112\114\111\102\105\108\101\124\116\101\114\109\95\116\111\95\98\105\110\97\114\121\124\116\108\124\116\114\97\99\101\124\116\114\97\99\101\95\100\101\108\105\118\101\114\101\100\124\116\114\97\99\101\95\105\110\102\111\124\116\114\97\99\101\95\112\97\116\116\101\114\110\124\116\114\117\110\99\124\116\117\112\108\101\95\115\105\122\101\124\116\117\112\108\101\95\116\111\95\108\105\115\116\124\117\110\105\118\101\114\115\97\108\116\105\109\101\95\116\111\95\108\111\99\97\108\116\105\109\101\124\117\110\108\105\110\107\124\117\110\114\101\103\105\115\116\101\114\124\119\104\101\114\101\105\115\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\97\110\100\124\97\110\100\97\108\115\111\124\98\97\110\100\124\98\110\111\116\124\98\111\114\124\98\115\108\124\98\115\114\124\98\120\111\114\124\100\105\118\124\110\111\116\124\111\114\124\111\114\101\108\115\101\124\114\101\109\124\120\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tokNext "\94\45" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo directive')
+    , tok "\40\92\43\124\45\124\92\42\124\47\124\60\124\62\124\61\124\61\61\124\47\61\124\61\58\61\124\61\47\61\124\61\60\124\62\61\124\92\43\92\43\124\45\45\124\60\45\124\33\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\60\60" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\62\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\40\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41\40\58\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\94\40\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\43\45\93\63\40\63\58\91\50\45\57\93\124\91\49\50\93\91\48\45\57\93\124\51\91\48\45\54\93\41\35\91\48\45\57\97\45\122\65\45\90\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\43\45\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\43\45\93\63\92\100\43\46\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\93\91\58\95\64\92\34\46\123\125\40\41\124\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\63\58\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41" (Arbitrary "\78\97\109\101")
+    , tok "\92\63\40\63\58\40\63\58\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\124\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\36\40\63\58\40\63\58\92\92\40\63\58\91\98\100\101\102\110\114\115\116\118\92\39\34\92\92\47\93\124\91\48\45\55\93\91\48\45\55\93\63\91\48\45\55\93\63\124\92\94\91\97\45\122\65\45\90\93\41\41\124\92\92\91\32\37\93\124\91\94\92\92\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\35\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\40\58\63\92\46\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\40\63\58\92\92\40\63\58\91\98\100\101\102\110\114\115\116\118\92\39\34\92\92\47\93\124\91\48\45\55\93\91\48\45\55\93\63\91\48\45\55\93\63\124\92\94\91\97\45\122\65\45\90\93\41\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\126\91\48\45\57\46\42\93\42\91\126\35\43\98\66\99\100\101\102\103\105\110\112\80\115\119\87\120\88\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\91\94\34\92\92\126\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\126" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+directive' :: TokenMatcher
+directive' =
+    [ tokNext "\40\100\101\102\105\110\101\41\40\92\115\42\41\40\92\40\41\40\40\63\58\40\63\58\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\124\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")]) Pop
+    , tokNext "\40\114\101\99\111\114\100\41\40\92\115\42\41\40\92\40\41\40\40\63\58\40\63\58\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\124\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41\41\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")]) Pop
+    , tokNext "\40\63\58\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\124\39\91\94\92\110\39\93\42\91\94\92\92\93\39\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Felix.hs b/src/Text/Highlighter/Lexers/Felix.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Felix.hs
@@ -0,0 +1,181 @@
+module Text.Highlighter.Lexers.Felix (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\70\101\108\105\120"
+    , lAliases = ["\102\101\108\105\120", "\102\108\120"]
+    , lExtensions = ["\46\102\108\120", "\46\102\108\120\104"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\102\101\108\105\120"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment2')
+    ]
+
+modulename2' :: TokenMatcher
+modulename2' =
+    [ anyOf whitespace'
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\92\119\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") (PopNum 2)
+    ]
+
+modulename' :: TokenMatcher
+modulename' =
+    [ anyOf whitespace'
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [(GoTo modulename2'), (GoTo tvarlist')])
+    , tokNext "" (Arbitrary "\69\114\114\111\114") (GoTo modulename2')
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116") Push
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , anyOf comment'
+    , tokNext "\35\92\115\42\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo macro')
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+macro' :: TokenMatcher
+macro' =
+    [ anyOf comment'
+    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\60\91\94\62\93\42\63\62\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
+    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\34\91\94\34\93\42\63\34\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
+    , tokNext "\40\105\109\112\111\114\116\124\105\110\99\108\117\100\101\41\40\92\115\43\41\40\39\91\94\39\93\42\63\39\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")]) Pop
+    , tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+operators' :: TokenMatcher
+operators' =
+    [ tok "\40\97\110\100\124\110\111\116\124\105\110\124\105\115\124\105\115\105\110\124\111\114\124\120\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\92\124\92\124\124\38\38\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\36\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+tsqs' :: TokenMatcher
+tsqs' =
+    [ tokNext "\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+comment2' :: TokenMatcher
+comment2' =
+    [ tok "\91\94\92\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\91\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\92\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ anyOf whitespace'
+    , tokNext "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    , tokNext "\40\63\61\92\123\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+tdqs' :: TokenMatcher
+tdqs' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+nl' :: TokenMatcher
+nl' =
+    [ tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ anyOf whitespace'
+    , tokNext "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    , tokNext "\40\63\61\92\40\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\40\97\120\105\111\109\124\99\116\111\114\124\102\117\110\124\103\101\110\124\112\114\111\99\124\114\101\100\117\99\101\124\117\110\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\124\99\99\108\97\115\115\124\99\115\116\114\117\99\116\124\111\98\106\124\115\116\114\117\99\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo classname')
+    , tokNext "\40\105\110\115\116\97\110\99\101\124\109\111\100\117\108\101\124\116\121\112\101\99\108\97\115\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo modulename')
+    , tok "\40\95\124\95\100\101\114\101\102\124\97\108\108\124\97\115\124\97\115\115\101\114\116\124\97\116\116\101\109\112\116\124\99\97\108\108\124\99\97\108\108\98\97\99\107\124\99\97\115\101\124\99\97\115\101\110\111\124\99\99\108\97\115\115\124\99\111\100\101\124\99\111\109\112\111\117\110\100\124\99\116\121\112\101\115\124\100\111\124\100\111\110\101\124\100\111\119\110\116\111\124\101\108\105\102\124\101\108\115\101\124\101\110\100\97\116\116\101\109\112\116\124\101\110\100\99\97\115\101\124\101\110\100\105\102\124\101\110\100\109\97\116\99\104\124\101\110\117\109\124\101\120\99\101\112\116\124\101\120\99\101\112\116\105\111\110\115\124\101\120\112\101\99\116\124\102\105\110\97\108\108\121\124\102\111\114\124\102\111\114\97\108\108\124\102\111\114\103\101\116\124\102\111\114\107\124\102\117\110\99\116\111\114\124\103\111\116\111\124\105\100\101\110\116\124\105\102\124\105\110\99\111\109\112\108\101\116\101\124\105\110\104\101\114\105\116\124\105\110\115\116\97\110\99\101\124\105\110\116\101\114\102\97\99\101\124\106\117\109\112\124\108\97\109\98\100\97\124\108\111\111\112\124\109\97\116\99\104\124\109\111\100\117\108\101\124\110\97\109\101\115\112\97\99\101\124\110\101\119\124\110\111\101\120\112\97\110\100\124\110\111\110\116\101\114\109\124\111\98\106\124\111\102\124\111\112\101\110\124\112\97\114\115\101\124\114\97\105\115\101\124\114\101\103\101\120\112\124\114\101\103\108\101\120\124\114\101\103\109\97\116\99\104\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\116\104\101\124\116\104\101\110\124\116\111\124\116\121\112\101\124\116\121\112\101\99\97\115\101\124\116\121\112\101\100\101\102\124\116\121\112\101\109\97\116\99\104\124\116\121\112\101\111\102\124\117\112\116\111\124\119\104\101\110\124\119\104\105\108\115\116\124\119\105\116\104\124\121\105\101\108\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\95\103\99\95\112\111\105\110\116\101\114\124\95\103\99\95\116\121\112\101\124\98\111\100\121\124\99\111\109\109\101\110\116\124\99\111\110\115\116\124\101\120\112\111\114\116\124\104\101\97\100\101\114\124\105\110\108\105\110\101\124\108\118\97\108\124\109\97\99\114\111\124\110\111\105\110\108\105\110\101\124\110\111\114\101\116\117\114\110\124\112\97\99\107\97\103\101\124\112\114\105\118\97\116\101\124\112\111\100\124\112\114\111\112\101\114\116\121\124\112\117\98\108\105\99\124\112\117\98\108\105\115\104\124\114\101\113\117\105\114\101\115\124\116\111\100\111\124\118\105\114\116\117\97\108\124\117\115\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\40\100\101\102\124\108\101\116\124\114\101\102\124\118\97\108\124\118\97\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\117\110\105\116\124\118\111\105\100\124\97\110\121\124\98\111\111\108\124\98\121\116\101\124\111\102\102\115\101\116\124\97\100\100\114\101\115\115\124\99\97\100\100\114\101\115\115\124\99\118\97\100\100\114\101\115\115\124\118\97\100\100\114\101\115\115\124\116\105\110\121\124\115\104\111\114\116\124\105\110\116\124\108\111\110\103\124\118\108\111\110\103\124\117\116\105\110\121\124\117\115\104\111\114\116\124\118\115\104\111\114\116\124\117\105\110\116\124\117\108\111\110\103\124\117\118\108\111\110\103\124\105\110\116\56\124\105\110\116\49\54\124\105\110\116\51\50\124\105\110\116\54\52\124\117\105\110\116\56\124\117\105\110\116\49\54\124\117\105\110\116\51\50\124\117\105\110\116\54\52\124\102\108\111\97\116\124\100\111\117\98\108\101\124\108\100\111\117\98\108\101\124\99\111\109\112\108\101\120\124\100\99\111\109\112\108\101\120\124\108\99\111\109\112\108\101\120\124\105\109\97\103\105\110\97\114\121\124\100\105\109\97\103\105\110\97\114\121\124\108\105\109\97\103\105\110\97\114\121\124\99\104\97\114\124\119\99\104\97\114\124\117\99\104\97\114\124\99\104\97\114\112\124\99\104\97\114\99\112\124\117\99\104\97\114\112\124\117\99\104\97\114\99\112\124\115\116\114\105\110\103\124\119\115\116\114\105\110\103\124\117\115\116\114\105\110\103\124\99\111\110\116\124\97\114\114\97\121\124\118\97\114\114\97\121\124\108\105\115\116\124\108\118\97\108\117\101\124\111\112\116\124\115\108\105\99\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\102\97\108\115\101\124\116\114\117\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , anyOf operators'
+    , tok "\48\91\120\88\93\40\91\48\45\57\97\45\102\65\45\70\95\93\42\92\46\91\48\45\57\97\45\102\65\45\70\95\93\43\124\91\48\45\57\97\45\102\65\45\70\95\93\43\41\91\112\80\93\91\43\92\45\93\63\91\48\45\57\95\93\43\91\108\76\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\95\93\43\40\92\46\91\48\45\57\95\93\43\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\124\92\46\91\48\45\57\95\93\42\124\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\91\108\76\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\46\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\63\91\108\76\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\66\98\93\91\48\49\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\91\48\45\55\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\95\93\43\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41\40\91\116\84\115\83\105\73\108\76\118\86\93\124\108\108\124\76\76\124\40\91\105\73\117\85\93\41\40\56\124\49\54\124\51\50\124\54\52\41\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
+    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
+    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
+    , tokNext "\40\91\114\82\93\91\99\67\93\63\124\91\99\67\93\91\114\82\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
+    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
+    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
+    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
+    , tokNext "\91\99\67\102\70\113\81\119\87\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
+    , tok "\91\92\91\92\93\123\125\58\40\41\44\59\63\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42\58\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\40\95\115\118\99\124\119\104\105\108\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\114\111\111\116\124\115\101\108\102\124\116\104\105\115\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\37\40\92\40\91\97\45\122\65\45\90\48\45\57\93\43\92\41\41\63\91\45\35\48\32\43\93\42\40\91\48\45\57\93\43\124\91\42\93\41\63\40\92\46\40\91\48\45\57\93\43\124\91\42\93\41\41\63\91\104\108\76\93\63\91\100\105\111\117\120\88\101\69\102\70\103\71\99\114\115\37\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+tvarlist' :: TokenMatcher
+tvarlist' =
+    [ anyOf whitespace'
+    , anyOf operators'
+    , tokNext "\92\91" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\119\105\116\104\124\119\104\101\114\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Fortran.hs b/src/Text/Highlighter/Lexers/Fortran.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Fortran.hs
@@ -0,0 +1,50 @@
+module Text.Highlighter.Lexers.Fortran (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\70\111\114\116\114\97\110"
+    , lAliases = ["\102\111\114\116\114\97\110"]
+    , lExtensions = ["\46\102", "\46\102\57\48"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\102\111\114\116\114\97\110"]
+    , lStart = root'
+    , lFlags = [caseless]
+    }
+
+core' :: TokenMatcher
+core' =
+    [ tok "\92\98\40\65\67\67\69\80\84\124\65\76\76\79\67\65\84\65\66\76\69\124\65\76\76\79\67\65\84\69\124\65\82\82\65\89\124\65\83\83\73\71\78\124\66\65\67\75\83\80\65\67\69\124\66\76\79\67\75\32\68\65\84\65\124\66\89\84\69\124\67\65\76\76\124\67\65\83\69\124\67\76\79\83\69\124\67\79\77\77\79\78\124\67\79\78\84\65\73\78\83\124\67\79\78\84\73\78\85\69\124\67\89\67\76\69\124\68\65\84\65\124\68\69\65\76\76\79\67\65\84\69\124\68\69\67\79\68\69\124\68\73\77\69\78\83\73\79\78\124\68\79\124\69\78\67\79\68\69\124\69\78\68\32\70\73\76\69\124\69\78\68\73\70\124\69\78\68\124\69\78\84\82\89\124\69\81\85\73\86\65\76\69\78\67\69\124\69\88\73\84\124\69\88\84\69\82\78\65\76\124\69\88\84\82\73\78\83\73\67\124\70\79\82\65\76\76\124\70\79\82\77\65\84\124\70\85\78\67\84\73\79\78\124\71\79\84\79\124\73\70\124\73\77\80\76\73\67\73\84\124\73\78\67\76\85\68\69\124\73\78\81\85\73\82\69\124\73\78\84\69\78\84\124\73\78\84\69\82\70\65\67\69\124\73\78\84\82\73\78\83\73\67\124\77\79\68\85\76\69\124\78\65\77\69\76\73\83\84\124\78\85\76\76\73\70\89\124\78\79\78\69\124\79\80\69\78\124\79\80\84\73\79\78\65\76\124\79\80\84\73\79\78\83\124\80\65\82\65\77\69\84\69\82\124\80\65\85\83\69\124\80\79\73\78\84\69\82\124\80\82\73\78\84\124\80\82\73\86\65\84\69\124\80\82\79\71\82\65\77\124\80\85\66\76\73\67\124\80\85\82\69\124\82\69\65\68\124\82\69\67\85\82\83\73\86\69\124\82\69\84\85\82\78\124\82\69\87\73\78\68\124\83\65\86\69\124\83\69\76\69\67\84\124\83\69\81\85\69\78\67\69\124\83\84\79\80\124\83\85\66\82\79\85\84\73\78\69\124\84\65\82\71\69\84\124\84\89\80\69\124\85\83\69\124\86\79\76\65\84\73\76\69\124\87\72\69\82\69\124\87\82\73\84\69\124\87\72\73\76\69\124\84\72\69\78\124\69\76\83\69\124\69\78\68\73\70\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\67\72\65\82\65\67\84\69\82\124\67\79\77\80\76\69\88\124\68\79\85\66\76\69\32\80\82\69\67\73\83\73\79\78\124\68\79\85\66\76\69\32\67\79\77\80\76\69\88\124\73\78\84\69\71\69\82\124\76\79\71\73\67\65\76\124\82\69\65\76\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\92\42\92\42\124\92\42\124\92\43\124\45\124\92\47\124\60\124\62\124\60\61\124\62\61\124\61\61\124\92\47\61\124\61\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\58\58\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\91\40\41\44\58\38\37\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\98\40\65\98\111\114\116\124\65\98\115\124\65\99\99\101\115\115\124\65\67\104\97\114\124\65\67\111\115\124\65\100\106\117\115\116\76\124\65\100\106\117\115\116\82\124\65\73\109\97\103\124\65\73\110\116\124\65\108\97\114\109\124\65\108\108\124\65\108\108\111\99\97\116\101\100\124\65\76\111\103\124\65\77\97\120\124\65\77\105\110\124\65\77\111\100\124\65\110\100\124\65\78\73\110\116\124\65\110\121\124\65\83\105\110\124\65\115\115\111\99\105\97\116\101\100\124\65\84\97\110\124\66\101\115\74\124\66\101\115\74\78\124\66\101\115\89\124\66\101\115\89\78\124\66\105\116\95\83\105\122\101\124\66\84\101\115\116\124\67\65\98\115\124\67\67\111\115\124\67\101\105\108\105\110\103\124\67\69\120\112\124\67\104\97\114\124\67\104\68\105\114\124\67\104\77\111\100\124\67\76\111\103\124\67\109\112\108\120\124\67\111\109\112\108\101\120\124\67\111\110\106\103\124\67\111\115\124\67\111\115\72\124\67\111\117\110\116\124\67\80\85\95\84\105\109\101\124\67\83\104\105\102\116\124\67\83\105\110\124\67\83\113\82\116\124\67\84\105\109\101\124\68\65\98\115\124\68\65\67\111\115\124\68\65\83\105\110\124\68\65\84\97\110\124\68\97\116\101\95\97\110\100\95\84\105\109\101\124\68\98\101\115\74\124\68\98\101\115\74\124\68\98\101\115\74\78\124\68\98\101\115\89\124\68\98\101\115\89\124\68\98\101\115\89\78\124\68\98\108\101\124\68\67\111\115\124\68\67\111\115\72\124\68\68\105\77\124\68\69\114\70\124\68\69\114\70\67\124\68\69\120\112\124\68\105\103\105\116\115\124\68\105\77\124\68\73\110\116\124\68\76\111\103\124\68\76\111\103\124\68\77\97\120\124\68\77\105\110\124\68\77\111\100\124\68\78\73\110\116\124\68\111\116\95\80\114\111\100\117\99\116\124\68\80\114\111\100\124\68\83\105\103\110\124\68\83\105\110\72\124\68\83\105\110\124\68\83\113\82\116\124\68\84\97\110\72\124\68\84\97\110\124\68\84\105\109\101\124\69\79\83\104\105\102\116\124\69\112\115\105\108\111\110\124\69\114\70\124\69\114\70\67\124\69\84\105\109\101\124\69\120\105\116\124\69\120\112\124\69\120\112\111\110\101\110\116\124\70\68\97\116\101\124\70\71\101\116\124\70\71\101\116\67\124\70\108\111\97\116\124\70\108\111\111\114\124\70\108\117\115\104\124\70\78\117\109\124\70\80\117\116\67\124\70\80\117\116\124\70\114\97\99\116\105\111\110\124\70\83\101\101\107\124\70\83\116\97\116\124\70\84\101\108\108\124\71\69\114\114\111\114\124\71\101\116\65\114\103\124\71\101\116\67\87\68\124\71\101\116\69\110\118\124\71\101\116\71\73\100\124\71\101\116\76\111\103\124\71\101\116\80\73\100\124\71\101\116\85\73\100\124\71\77\84\105\109\101\124\72\111\115\116\78\109\124\72\117\103\101\124\73\65\98\115\124\73\65\67\104\97\114\124\73\65\110\100\124\73\65\114\103\67\124\73\66\67\108\114\124\73\66\105\116\115\124\73\66\83\101\116\124\73\67\104\97\114\124\73\68\97\116\101\124\73\68\105\77\124\73\68\73\110\116\124\73\68\78\73\110\116\124\73\69\79\114\124\73\69\114\114\78\111\124\73\70\105\120\124\73\109\97\103\124\73\109\97\103\80\97\114\116\124\73\110\100\101\120\124\73\110\116\124\73\79\114\124\73\82\97\110\100\124\73\115\97\84\116\121\124\73\83\104\102\116\124\73\83\104\102\116\67\124\73\83\105\103\110\124\73\84\105\109\101\124\75\105\108\108\124\75\105\110\100\124\76\66\111\117\110\100\124\76\101\110\124\76\101\110\95\84\114\105\109\124\76\71\101\124\76\71\116\124\76\105\110\107\124\76\76\101\124\76\76\116\124\76\110\66\108\110\107\124\76\111\99\124\76\111\103\124\76\111\103\124\76\111\103\105\99\97\108\124\76\111\110\103\124\76\83\104\105\102\116\124\76\83\116\97\116\124\76\84\105\109\101\124\77\97\116\77\117\108\124\77\97\120\124\77\97\120\69\120\112\111\110\101\110\116\124\77\97\120\76\111\99\124\77\97\120\86\97\108\124\77\67\108\111\99\107\124\77\101\114\103\101\124\77\105\110\124\77\105\110\69\120\112\111\110\101\110\116\124\77\105\110\76\111\99\124\77\105\110\86\97\108\124\77\111\100\124\77\111\100\117\108\111\124\77\118\66\105\116\115\124\78\101\97\114\101\115\116\124\78\73\110\116\124\78\111\116\124\79\114\124\80\97\99\107\124\80\69\114\114\111\114\124\80\114\101\99\105\115\105\111\110\124\80\114\101\115\101\110\116\124\80\114\111\100\117\99\116\124\82\97\100\105\120\124\82\97\110\100\124\82\97\110\100\111\109\95\78\117\109\98\101\114\124\82\97\110\100\111\109\95\83\101\101\100\124\82\97\110\103\101\124\82\101\97\108\124\82\101\97\108\80\97\114\116\124\82\101\110\97\109\101\124\82\101\112\101\97\116\124\82\101\115\104\97\112\101\124\82\82\83\112\97\99\105\110\103\124\82\83\104\105\102\116\124\83\99\97\108\101\124\83\99\97\110\124\83\101\99\111\110\100\124\83\101\108\101\99\116\101\100\95\73\110\116\95\75\105\110\100\124\83\101\108\101\99\116\101\100\95\82\101\97\108\95\75\105\110\100\124\83\101\116\95\69\120\112\111\110\101\110\116\124\83\104\97\112\101\124\83\104\111\114\116\124\83\105\103\110\124\83\105\103\110\97\108\124\83\105\110\72\124\83\105\110\124\83\108\101\101\112\124\83\110\103\108\124\83\112\97\99\105\110\103\124\83\112\114\101\97\100\124\83\113\82\116\124\83\82\97\110\100\124\83\116\97\116\124\83\117\109\124\83\121\109\76\110\107\124\83\121\115\116\101\109\124\83\121\115\116\101\109\95\67\108\111\99\107\124\84\97\110\124\84\97\110\72\124\84\105\109\101\124\84\105\110\121\124\84\114\97\110\115\102\101\114\124\84\114\97\110\115\112\111\115\101\124\84\114\105\109\124\84\116\121\78\97\109\124\85\66\111\117\110\100\124\85\77\97\115\107\124\85\110\108\105\110\107\124\85\110\112\97\99\107\124\86\101\114\105\102\121\124\88\79\114\124\90\65\98\115\124\90\67\111\115\124\90\69\120\112\124\90\76\111\103\124\90\83\105\110\124\90\83\113\82\116\41\92\115\42\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\46\40\116\114\117\101\124\102\97\108\115\101\41\92\46" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\46\40\101\113\124\110\101\124\108\116\124\108\101\124\103\116\124\103\101\124\110\111\116\124\97\110\100\124\111\114\124\101\113\118\124\110\101\113\118\41\92\46" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\33\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , anyOf strings'
+    , anyOf core'
+    , tok "\91\97\45\122\93\91\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , anyOf nums'
+    , tok "\91\92\115\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\40\63\115\41\34\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\40\63\115\41\39\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\39\92\92\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+nums' :: TokenMatcher
+nums' =
+    [ tok "\92\100\43\40\63\33\91\46\69\101\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\43\45\93\63\92\100\42\92\46\92\100\43\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\43\45\93\63\92\100\43\92\46\92\100\42\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/GLShader.hs b/src/Text/Highlighter/Lexers/GLShader.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/GLShader.hs
@@ -0,0 +1,36 @@
+module Text.Highlighter.Lexers.GLShader (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\76\83\76"
+    , lAliases = ["\103\108\115\108"]
+    , lExtensions = ["\46\118\101\114\116", "\46\102\114\97\103", "\46\103\101\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\103\108\115\108\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\35\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\47\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\91\92\119\92\87\93\42\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\92\43\124\45\124\126\124\33\61\63\124\92\42\124\47\124\37\124\60\60\124\62\62\124\60\61\63\124\62\61\63\124\61\61\63\124\38\38\63\124\92\94\124\92\124\92\124\63" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\63\58\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\100\101\102\105\110\101\100\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\59\123\125\40\41\44\92\91\92\93\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\43\45\93\63\92\100\42\92\46\92\100\43\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\43\45\93\63\92\100\43\92\46\92\100\42\40\91\101\69\93\91\45\43\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116\97\108")
+    , tok "\91\49\45\57\93\91\48\45\57\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\98\40\97\116\116\114\105\98\117\116\101\124\99\111\110\115\116\124\117\110\105\102\111\114\109\124\118\97\114\121\105\110\103\124\99\101\110\116\114\111\105\100\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\100\111\124\102\111\114\124\119\104\105\108\101\124\105\102\124\101\108\115\101\124\105\110\124\111\117\116\124\105\110\111\117\116\124\102\108\111\97\116\124\105\110\116\124\118\111\105\100\124\98\111\111\108\124\116\114\117\101\124\102\97\108\115\101\124\105\110\118\97\114\105\97\110\116\124\100\105\115\99\97\114\100\124\114\101\116\117\114\110\124\109\97\116\91\50\51\52\93\124\109\97\116\91\50\51\52\93\120\91\50\51\52\93\124\118\101\99\91\50\51\52\93\124\91\105\98\93\118\101\99\91\50\51\52\93\124\115\97\109\112\108\101\114\91\49\50\51\93\68\124\115\97\109\112\108\101\114\67\117\98\101\124\115\97\109\112\108\101\114\91\49\50\93\68\83\104\97\100\111\119\124\115\116\114\117\99\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\97\115\109\124\99\108\97\115\115\124\117\110\105\111\110\124\101\110\117\109\124\116\121\112\101\100\101\102\124\116\101\109\112\108\97\116\101\124\116\104\105\115\124\112\97\99\107\101\100\124\103\111\116\111\124\115\119\105\116\99\104\124\100\101\102\97\117\108\116\124\105\110\108\105\110\101\124\110\111\105\110\108\105\110\101\124\118\111\108\97\116\105\108\101\124\112\117\98\108\105\99\124\115\116\97\116\105\99\124\101\120\116\101\114\110\124\101\120\116\101\114\110\97\108\124\105\110\116\101\114\102\97\99\101\124\108\111\110\103\124\115\104\111\114\116\124\100\111\117\98\108\101\124\104\97\108\102\124\102\105\120\101\100\124\117\110\115\105\103\110\101\100\124\108\111\119\112\124\109\101\100\105\117\109\112\124\104\105\103\104\112\124\112\114\101\99\105\115\105\111\110\124\105\110\112\117\116\124\111\117\116\112\117\116\124\104\118\101\99\91\50\51\52\93\124\91\100\102\93\118\101\99\91\50\51\52\93\124\115\97\109\112\108\101\114\91\50\51\93\68\82\101\99\116\124\115\97\109\112\108\101\114\50\68\82\101\99\116\83\104\97\100\111\119\124\115\105\122\101\111\102\124\99\97\115\116\124\110\97\109\101\115\112\97\99\101\124\117\115\105\110\103\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\95\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Gas.hs b/src/Text/Highlighter/Lexers/Gas.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Gas.hs
@@ -0,0 +1,63 @@
+module Text.Highlighter.Lexers.Gas (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\65\83"
+    , lAliases = ["\103\97\115"]
+    , lExtensions = ["\46\115", "\46\83"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\103\97\115"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+directiveArgs' :: TokenMatcher
+directiveArgs' =
+    [ tok "\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\34\40\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\64\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tok "\40\63\58\48\91\120\88\93\91\97\45\122\65\45\90\48\45\57\93\43\124\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tokNext "\91\92\114\92\110\93\43" (Arbitrary "\84\101\120\116") Pop
+    , tokNext "\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , anyOf punctuation'
+    , anyOf whitespace'
+    ]
+
+punctuation' :: TokenMatcher
+punctuation' =
+    [ tok "\91\45\42\44\46\40\41\58\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tokNext "\92\46\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101") (GoTo directiveArgs')
+    , tok "\108\111\99\107\124\114\101\112\40\110\63\122\41\63\124\100\97\116\97\92\100\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tokNext "\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") (GoTo instructionArgs')
+    , tok "\91\92\114\92\110\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+instructionArgs' :: TokenMatcher
+instructionArgs' =
+    [ tok "\40\91\97\45\122\48\45\57\93\43\41\40\32\41\40\60\41\40\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41\41\40\62\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\91\97\45\122\48\45\57\93\43\41\40\32\41\40\60\41\40\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41\41\40\91\45\43\93\41\40\40\63\58\48\91\120\88\93\91\97\45\122\65\45\90\48\45\57\93\43\124\92\100\43\41\41\40\62\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\63\58\48\91\120\88\93\91\97\45\122\65\45\90\48\45\57\93\43\124\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\37\40\63\58\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\42\124\92\46\91\97\45\122\65\45\90\36\46\95\48\45\57\64\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\36\40\63\58\48\91\120\88\93\91\97\45\122\65\45\90\48\45\57\93\43\124\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tokNext "\91\92\114\92\110\93\43" (Arbitrary "\84\101\120\116") Pop
+    , tokNext "\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , anyOf punctuation'
+    , anyOf whitespace'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/GenshiText.hs b/src/Text/Highlighter/Lexers/GenshiText.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/GenshiText.hs
@@ -0,0 +1,41 @@
+module Text.Highlighter.Lexers.GenshiText (lexer) where
+import qualified Text.Highlighter.Lexers.Python as Python
+import qualified Text.Highlighter.Lexers.Python as Python
+import qualified Text.Highlighter.Lexers.Python as Python
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110"
+    , lAliases = ["\103\101\110\115\104\105\116\101\120\116"]
+    , lExtensions = []
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\103\101\110\115\104\105\45\116\101\120\116", "\116\101\120\116\47\120\45\103\101\110\115\104\105"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+variable' :: TokenMatcher
+variable' =
+    [ tok "\40\63\60\33\92\36\41\40\92\36\92\123\41\40\46\43\63\41\40\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Python.lexer), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\63\60\33\92\36\41\40\92\36\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\92\46\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\35\92\36\92\115\93\43" (Arbitrary "\79\116\104\101\114")
+    , tok "\94\40\92\115\42\41\40\35\35\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116")])
+    , tokNext "\94\40\92\115\42\41\40\35\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")]) (GoTo directive')
+    , anyOf variable'
+    , tok "\91\35\92\36\92\115\93" (Arbitrary "\79\116\104\101\114")
+    ]
+
+directive' :: TokenMatcher
+directive' =
+    [ tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    , tokNext "\40\63\58\100\101\102\124\102\111\114\124\105\102\41\92\115\43\46\42" (Using Python.lexer) Pop
+    , tokNext "\40\99\104\111\111\115\101\124\119\104\101\110\124\119\105\116\104\41\40\91\94\92\83\92\110\93\43\41\40\46\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Using Python.lexer)]) Pop
+    , tokNext "\40\99\104\111\111\115\101\124\111\116\104\101\114\119\105\115\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tokNext "\40\101\110\100\92\119\42\41\40\91\94\92\83\92\110\93\42\41\40\46\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116")]) Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Gettext.hs b/src/Text/Highlighter/Lexers/Gettext.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Gettext.hs
@@ -0,0 +1,26 @@
+module Text.Highlighter.Lexers.Gettext (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\101\116\116\101\120\116\32\67\97\116\97\108\111\103"
+    , lAliases = ["\112\111\116", "\112\111"]
+    , lExtensions = ["\46\112\111\116", "\46\112\111"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\103\101\116\116\101\120\116", "\116\101\120\116\47\120\45\103\101\116\116\101\120\116", "\116\101\120\116\47\103\101\116\116\101\120\116"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\35\44\92\115\46\42\63\36" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\94\35\58\92\115\46\42\63\36" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\94\40\35\124\35\92\46\92\115\124\35\92\124\92\115\124\35\126\92\115\124\35\92\115\41\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\94\40\34\41\40\91\92\119\45\93\42\58\41\40\46\42\34\41\36" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\78\97\109\101" :. Arbitrary "\80\114\111\112\101\114\116\121"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tok "\94\34\46\42\34\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\94\40\109\115\103\105\100\124\109\115\103\105\100\95\112\108\117\114\97\108\124\109\115\103\115\116\114\41\40\92\115\43\41\40\34\46\42\34\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tok "\94\40\109\115\103\115\116\114\92\91\41\40\92\100\41\40\92\93\41\40\92\115\43\41\40\34\46\42\34\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Gherkin.hs b/src/Text/Highlighter/Lexers/Gherkin.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Gherkin.hs
@@ -0,0 +1,99 @@
+module Text.Highlighter.Lexers.Gherkin (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\104\101\114\107\105\110"
+    , lAliases = ["\67\117\99\117\109\98\101\114", "\99\117\99\117\109\98\101\114", "\71\104\101\114\107\105\110", "\103\104\101\114\107\105\110"]
+    , lExtensions = ["\46\102\101\97\116\117\114\101"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\103\104\101\114\107\105\110"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+double_string' :: TokenMatcher
+double_string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf string'
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ anyOf table_vars'
+    , tok "\40\92\115\124\46\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+py_string' :: TokenMatcher
+py_string' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf string'
+    ]
+
+multiline_descriptions' :: TokenMatcher
+multiline_descriptions' =
+    [ tokNext "\94\40\92\115\42\41\40\54616\51648\47564\124\51312\44148\124\47564\51068\124\44536\47532\44256\124\44536\47084\47732\124\37027\40636\124\37027\20040\124\32780\19988\124\30070\124\24403\124\21069\25552\124\20551\35373\124\20551\22914\124\20294\26159\124\20294\12375\124\20006\19988\124\12418\12375\124\12394\12425\12400\124\12383\12384\12375\124\12375\12363\12375\124\12363\12388\124\1608\32\124\1605\1578\1609\32\124\1604\1603\1606\32\124\1593\1606\1583\1605\1575\32\124\1579\1605\32\124\1576\1601\1585\1590\32\124\1575\1584\1575\1611\32\124\1499\1488\1513\1512\32\124\1493\1490\1501\32\124\1489\1492\1497\1504\1514\1503\32\124\1488\1494\1497\32\124\1488\1494\32\124\1488\1489\1500\32\124\1059\1085\1076\1072\32\124\1058\1086\32\124\1054\1085\1076\1072\32\124\1053\1086\32\124\1051\1077\1082\1080\1085\32\124\1050\1086\1075\1072\1090\1086\32\124\1050\1072\1076\1072\32\124\1050\1072\1076\32\124\1050\32\1090\1086\1084\1091\32\1078\1077\32\124\1048\32\124\1047\1072\1076\1072\1090\1086\32\124\1047\1072\1076\1072\1090\1080\32\124\1047\1072\1076\1072\1090\1077\32\124\1045\1089\1083\1080\32\124\1044\1086\1087\1091\1089\1090\1080\1084\32\124\1044\1072\1076\1077\1085\1086\32\124\1042\1072\32\124\1041\1080\1088\1086\1082\32\124\1040\1084\1084\1086\32\124\1040\1083\1080\32\124\1040\1075\1072\1088\32\124\1040\32\124\536\105\32\124\201\115\32\124\97\110\114\104\101\103\101\100\105\103\32\97\32\124\90\97\116\97\116\105\32\124\90\97\107\322\97\100\97\106\261\99\32\124\90\97\100\97\116\111\32\124\90\97\100\97\116\101\32\124\90\97\100\97\110\111\32\124\90\97\100\97\110\105\32\124\90\97\100\97\110\32\124\89\110\97\32\124\89\97\32\107\110\111\119\32\104\111\119\32\124\89\97\32\103\111\116\116\97\32\124\89\32\124\87\116\101\100\121\32\124\87\104\101\110\32\121\92\39\97\108\108\32\124\87\104\101\110\32\124\87\101\110\110\32\124\87\69\78\32\124\86\224\32\124\86\101\32\124\85\110\100\32\124\85\110\32\124\84\104\236\32\124\84\104\101\110\32\121\92\39\97\108\108\32\124\84\104\101\110\32\124\84\97\112\105\32\124\84\97\107\32\124\84\97\100\97\32\124\84\97\100\32\124\83\229\32\124\83\116\101\108\32\124\83\111\105\116\32\124\83\105\105\115\32\124\83\105\32\124\81\117\97\110\100\111\32\124\81\117\97\110\100\32\124\81\117\97\110\32\124\80\114\121\100\32\124\80\111\107\117\100\32\124\80\111\107\105\97\318\32\124\80\101\114\242\32\124\80\101\114\111\32\124\80\97\107\32\124\79\114\97\122\32\124\79\110\100\97\32\124\79\110\100\32\124\79\108\101\116\101\116\97\97\110\32\124\79\103\32\124\79\99\104\32\124\79\32\122\97\109\97\110\32\124\78\229\114\32\124\78\228\114\32\124\78\105\105\110\32\124\78\104\432\110\103\32\124\78\32\124\77\117\116\116\97\32\124\77\101\110\32\124\77\97\115\32\124\77\97\107\97\32\124\77\97\106\100\32\124\77\97\105\115\32\124\77\97\97\114\32\124\77\97\32\124\76\111\114\115\113\117\101\32\124\76\111\114\115\113\117\92\39\124\75\117\110\32\124\75\117\105\100\32\124\75\117\105\32\124\75\104\105\32\124\75\101\271\32\124\75\101\116\105\107\97\32\124\75\100\121\382\32\124\75\97\105\32\124\75\97\100\97\32\124\75\97\100\32\124\74\101\380\101\108\105\32\124\74\97\32\124\73\114\32\124\73\32\67\65\78\32\72\65\90\32\124\73\32\124\72\97\32\124\71\105\118\101\116\32\124\71\105\118\101\110\32\121\92\39\97\108\108\32\124\71\105\118\101\110\32\124\71\105\116\116\32\124\71\101\103\101\118\101\110\32\124\71\101\103\101\98\101\110\32\115\101\105\32\124\70\97\107\97\116\32\124\69\287\101\114\32\107\105\32\124\69\116\97\110\116\32\100\111\110\110\233\32\124\69\116\32\124\69\110\116\227\111\32\124\69\110\116\111\110\99\101\115\32\124\69\110\116\97\111\32\124\69\110\32\124\69\101\108\100\97\100\101\115\32\124\69\32\124\68\117\111\116\97\32\124\68\111\110\97\116\32\124\68\111\110\97\100\97\32\124\68\105\121\101\108\105\109\32\107\105\32\124\68\101\110\103\97\110\32\124\68\101\32\124\68\97\116\111\32\124\68\97\114\32\124\68\97\110\110\32\124\68\97\110\32\124\68\97\100\111\32\124\68\97\99\259\32\124\68\97\99\97\32\124\68\69\78\32\124\67\226\110\100\32\124\67\117\97\110\100\111\32\124\67\104\111\32\124\67\101\112\116\32\124\67\97\110\100\32\124\66\117\116\32\121\92\39\97\108\108\32\124\66\117\116\32\124\66\105\7871\116\32\124\66\101\116\32\124\66\85\84\32\124\65\116\117\110\99\105\32\124\65\110\100\32\121\92\39\97\108\108\32\124\65\110\100\32\124\65\109\97\32\124\65\108\115\32\124\65\108\111\114\115\32\124\65\108\108\111\114\97\32\124\65\108\105\32\124\65\108\101\115\104\111\114\101\115\32\124\65\108\101\32\124\65\107\107\111\114\32\124\65\98\101\114\32\124\65\78\32\124\65\32\116\97\107\233\32\124\65\32\124\92\42\32\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf comments'
+    , tok "\40\92\115\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    ]
+
+table_vars' :: TokenMatcher
+table_vars' =
+    [ tok "\40\60\91\94\62\93\42\62\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+scenario_sections_on_stack' :: TokenMatcher
+scenario_sections_on_stack' =
+    [ tokNext "\94\40\92\115\42\41\40\49884\45208\47532\50724\32\44060\50836\124\49884\45208\47532\50724\124\48176\44221\124\32972\26223\124\22580\26223\22823\32177\124\22580\26223\124\22330\26223\22823\32434\124\22330\26223\124\21127\26412\22823\32177\124\21127\26412\124\12486\12531\12503\12524\124\12471\12490\12522\12458\12486\12531\12503\12524\12540\12488\124\12471\12490\12522\12458\12486\12531\12503\12524\124\12471\12490\12522\12458\12450\12454\12488\12521\12452\12531\124\12471\12490\12522\12458\124\1587\1610\1606\1575\1585\1610\1608\32\1605\1582\1591\1591\124\1587\1610\1606\1575\1585\1610\1608\124\1575\1604\1582\1604\1601\1610\1577\124\1514\1512\1495\1497\1513\124\1514\1489\1504\1497\1514\32\1514\1512\1495\1497\1513\124\1512\1511\1506\124\1058\1072\1088\1080\1093\124\1057\1094\1077\1085\1072\1088\1080\1086\124\1057\1094\1077\1085\1072\1088\1080\1081\32\1089\1090\1088\1091\1082\1090\1091\1088\1072\1089\1080\124\1057\1094\1077\1085\1072\1088\1080\1081\124\1057\1090\1088\1091\1082\1090\1091\1088\1072\32\1089\1094\1077\1085\1072\1088\1080\1112\1072\124\1057\1090\1088\1091\1082\1090\1091\1088\1072\32\1089\1094\1077\1085\1072\1088\1080\1103\124\1057\1082\1080\1094\1072\124\1056\1072\1084\1082\1072\32\1085\1072\32\1089\1094\1077\1085\1072\1088\1080\1081\124\1055\1088\1080\1084\1077\1088\124\1055\1088\1077\1076\1099\1089\1090\1086\1088\1080\1103\124\1055\1088\1077\1076\1080\1089\1090\1086\1088\1080\1103\124\1055\1086\1079\1072\1076\1080\1085\1072\124\1054\1089\1085\1086\1074\1072\124\1050\1086\1085\1094\1077\1087\1090\124\1050\1086\1085\1090\1077\1082\1089\1090\124\90\97\322\111\380\101\110\105\97\124\84\236\110\104\32\104\117\7889\110\103\124\84\97\117\115\116\97\124\84\97\117\115\116\124\84\97\112\97\117\115\97\105\104\105\111\124\84\97\112\97\117\115\124\83\122\101\110\97\114\105\111\103\114\117\110\100\114\105\115\115\124\83\122\101\110\97\114\105\111\124\83\122\97\98\108\111\110\32\115\99\101\110\97\114\105\117\115\122\97\124\83\116\115\101\110\97\97\114\105\117\109\124\83\116\114\117\107\116\117\114\97\32\115\99\101\110\97\114\105\106\97\124\83\107\105\99\97\124\83\107\101\110\97\114\105\111\32\107\111\110\115\101\112\124\83\107\101\110\97\114\105\111\124\83\105\116\117\257\99\105\106\97\124\83\101\110\97\114\121\111\32\116\97\115\108\97\287\305\124\83\101\110\97\114\121\111\124\83\99\233\110\225\345\124\83\99\233\110\97\114\105\111\124\83\99\104\101\109\97\32\100\101\108\108\111\32\115\99\101\110\97\114\105\111\124\83\99\101\110\257\114\105\106\115\32\112\275\99\32\112\97\114\97\117\103\97\124\83\99\101\110\257\114\105\106\115\124\83\99\101\110\225\114\124\83\99\101\110\97\114\105\117\115\122\124\83\99\101\110\97\114\105\117\108\32\100\101\32\351\97\98\108\111\110\124\83\99\101\110\97\114\105\117\108\32\100\101\32\115\97\98\108\111\110\124\83\99\101\110\97\114\105\117\124\83\99\101\110\97\114\105\111\32\79\117\116\108\105\110\101\124\83\99\101\110\97\114\105\111\32\65\109\108\105\110\101\108\108\111\108\124\83\99\101\110\97\114\105\111\124\83\99\101\110\97\114\105\106\117\115\124\83\99\101\110\97\114\105\106\97\117\115\32\353\97\98\108\111\110\97\115\124\83\99\101\110\97\114\105\106\124\83\99\101\110\97\114\105\101\124\82\101\114\101\102\111\110\115\124\82\97\97\109\115\116\115\101\110\97\97\114\105\117\109\124\80\114\105\109\101\114\124\80\111\122\97\100\237\124\80\111\122\97\100\105\110\97\124\80\111\122\97\100\105\101\124\80\108\97\110\32\100\117\32\115\99\233\110\97\114\105\111\124\80\108\97\110\32\100\117\32\83\99\233\110\97\114\105\111\124\79\115\110\111\118\97\32\115\99\233\110\225\345\101\124\79\115\110\111\118\97\124\78\225\269\114\116\32\83\99\233\110\225\345\101\124\78\225\269\114\116\32\83\99\101\110\225\114\117\124\77\97\116\101\124\77\73\83\72\85\78\32\83\82\83\76\89\124\77\73\83\72\85\78\124\75\7883\99\104\32\98\7843\110\124\75\111\110\116\101\120\116\124\75\111\110\116\101\107\115\116\115\124\75\111\110\116\101\107\115\116\97\115\124\75\111\110\116\101\107\115\116\124\75\111\110\99\101\112\116\124\75\104\117\110\103\32\116\236\110\104\32\104\117\7889\110\103\124\75\104\117\110\103\32\107\7883\99\104\32\98\7843\110\124\72\225\116\116\233\114\124\71\114\117\110\100\108\97\103\101\124\71\101\231\109\105\351\124\70\111\114\103\97\116\243\107\246\110\121\118\32\118\225\122\108\97\116\124\70\111\114\103\97\116\243\107\246\110\121\118\124\69\115\113\117\101\109\97\32\100\111\32\67\101\110\225\114\105\111\124\69\115\113\117\101\109\97\32\100\111\32\67\101\110\97\114\105\111\124\69\115\113\117\101\109\97\32\100\101\108\32\101\115\99\101\110\97\114\105\111\124\69\115\113\117\101\109\97\32\100\101\32\108\92\39\101\115\99\101\110\97\114\105\124\69\115\99\101\110\97\114\105\111\124\69\115\99\101\110\97\114\105\124\68\97\115\97\114\124\67\111\110\116\101\120\116\111\124\67\111\110\116\101\120\116\101\124\67\111\110\116\101\115\116\111\124\67\111\110\100\105\355\105\105\124\67\111\110\100\105\116\105\105\124\67\101\110\225\114\105\111\124\67\101\110\97\114\105\111\124\67\101\102\110\100\105\114\124\66\7889\105\32\99\7843\110\104\124\66\108\111\107\101\115\124\66\97\107\103\114\117\110\110\124\66\97\107\103\114\117\110\100\124\66\97\103\103\114\117\110\100\124\66\97\99\107\103\114\111\117\110\100\124\66\52\124\65\110\116\101\99\101\100\101\110\116\115\124\65\110\116\101\99\101\100\101\110\116\101\115\124\65\108\108\32\121\92\39\97\108\108\124\65\99\104\116\101\114\103\114\111\110\100\124\65\98\115\116\114\97\107\116\32\83\99\101\110\97\114\105\111\124\65\98\115\116\114\97\99\116\32\83\99\101\110\97\114\105\111\41\40\58\41\40\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")]) (GoTo multiline_descriptions_on_stack')
+    ]
+
+scenario_table_header' :: TokenMatcher
+scenario_table_header' =
+    [ tokNext "\92\115\43\92\124\92\115\42\36" (Arbitrary "\84\101\120\116") (PopNum 2)
+    , tokNext "\40\92\115\43\92\124\92\115\42\41\40\35\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116")]) (PopNum 2)
+    , anyOf comments'
+    , tok "\92\115\43\92\124" (Arbitrary "\84\101\120\116")
+    , tok "\91\94\92\124\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+narrative' :: TokenMatcher
+narrative' =
+    [ anyOf scenario_sections_on_stack'
+    , tok "\40\92\115\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , anyOf comments'
+    , tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo py_string')
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo double_string')
+    , anyOf table_vars'
+    , tok "\64\91\94\64\92\115\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\94\40\92\115\42\41\40\54616\51648\47564\124\51312\44148\124\47564\51068\124\44536\47532\44256\124\44536\47084\47732\124\37027\40636\124\37027\20040\124\32780\19988\124\30070\124\24403\124\21069\25552\124\20551\35373\124\20551\22914\124\20294\26159\124\20294\12375\124\20006\19988\124\12418\12375\124\12394\12425\12400\124\12383\12384\12375\124\12375\12363\12375\124\12363\12388\124\1608\32\124\1605\1578\1609\32\124\1604\1603\1606\32\124\1593\1606\1583\1605\1575\32\124\1579\1605\32\124\1576\1601\1585\1590\32\124\1575\1584\1575\1611\32\124\1499\1488\1513\1512\32\124\1493\1490\1501\32\124\1489\1492\1497\1504\1514\1503\32\124\1488\1494\1497\32\124\1488\1494\32\124\1488\1489\1500\32\124\1059\1085\1076\1072\32\124\1058\1086\32\124\1054\1085\1076\1072\32\124\1053\1086\32\124\1051\1077\1082\1080\1085\32\124\1050\1086\1075\1072\1090\1086\32\124\1050\1072\1076\1072\32\124\1050\1072\1076\32\124\1050\32\1090\1086\1084\1091\32\1078\1077\32\124\1048\32\124\1047\1072\1076\1072\1090\1086\32\124\1047\1072\1076\1072\1090\1080\32\124\1047\1072\1076\1072\1090\1077\32\124\1045\1089\1083\1080\32\124\1044\1086\1087\1091\1089\1090\1080\1084\32\124\1044\1072\1076\1077\1085\1086\32\124\1042\1072\32\124\1041\1080\1088\1086\1082\32\124\1040\1084\1084\1086\32\124\1040\1083\1080\32\124\1040\1075\1072\1088\32\124\1040\32\124\536\105\32\124\201\115\32\124\97\110\114\104\101\103\101\100\105\103\32\97\32\124\90\97\116\97\116\105\32\124\90\97\107\322\97\100\97\106\261\99\32\124\90\97\100\97\116\111\32\124\90\97\100\97\116\101\32\124\90\97\100\97\110\111\32\124\90\97\100\97\110\105\32\124\90\97\100\97\110\32\124\89\110\97\32\124\89\97\32\107\110\111\119\32\104\111\119\32\124\89\97\32\103\111\116\116\97\32\124\89\32\124\87\116\101\100\121\32\124\87\104\101\110\32\121\92\39\97\108\108\32\124\87\104\101\110\32\124\87\101\110\110\32\124\87\69\78\32\124\86\224\32\124\86\101\32\124\85\110\100\32\124\85\110\32\124\84\104\236\32\124\84\104\101\110\32\121\92\39\97\108\108\32\124\84\104\101\110\32\124\84\97\112\105\32\124\84\97\107\32\124\84\97\100\97\32\124\84\97\100\32\124\83\229\32\124\83\116\101\108\32\124\83\111\105\116\32\124\83\105\105\115\32\124\83\105\32\124\81\117\97\110\100\111\32\124\81\117\97\110\100\32\124\81\117\97\110\32\124\80\114\121\100\32\124\80\111\107\117\100\32\124\80\111\107\105\97\318\32\124\80\101\114\242\32\124\80\101\114\111\32\124\80\97\107\32\124\79\114\97\122\32\124\79\110\100\97\32\124\79\110\100\32\124\79\108\101\116\101\116\97\97\110\32\124\79\103\32\124\79\99\104\32\124\79\32\122\97\109\97\110\32\124\78\229\114\32\124\78\228\114\32\124\78\105\105\110\32\124\78\104\432\110\103\32\124\78\32\124\77\117\116\116\97\32\124\77\101\110\32\124\77\97\115\32\124\77\97\107\97\32\124\77\97\106\100\32\124\77\97\105\115\32\124\77\97\97\114\32\124\77\97\32\124\76\111\114\115\113\117\101\32\124\76\111\114\115\113\117\92\39\124\75\117\110\32\124\75\117\105\100\32\124\75\117\105\32\124\75\104\105\32\124\75\101\271\32\124\75\101\116\105\107\97\32\124\75\100\121\382\32\124\75\97\105\32\124\75\97\100\97\32\124\75\97\100\32\124\74\101\380\101\108\105\32\124\74\97\32\124\73\114\32\124\73\32\67\65\78\32\72\65\90\32\124\73\32\124\72\97\32\124\71\105\118\101\116\32\124\71\105\118\101\110\32\121\92\39\97\108\108\32\124\71\105\118\101\110\32\124\71\105\116\116\32\124\71\101\103\101\118\101\110\32\124\71\101\103\101\98\101\110\32\115\101\105\32\124\70\97\107\97\116\32\124\69\287\101\114\32\107\105\32\124\69\116\97\110\116\32\100\111\110\110\233\32\124\69\116\32\124\69\110\116\227\111\32\124\69\110\116\111\110\99\101\115\32\124\69\110\116\97\111\32\124\69\110\32\124\69\101\108\100\97\100\101\115\32\124\69\32\124\68\117\111\116\97\32\124\68\111\110\97\116\32\124\68\111\110\97\100\97\32\124\68\105\121\101\108\105\109\32\107\105\32\124\68\101\110\103\97\110\32\124\68\101\32\124\68\97\116\111\32\124\68\97\114\32\124\68\97\110\110\32\124\68\97\110\32\124\68\97\100\111\32\124\68\97\99\259\32\124\68\97\99\97\32\124\68\69\78\32\124\67\226\110\100\32\124\67\117\97\110\100\111\32\124\67\104\111\32\124\67\101\112\116\32\124\67\97\110\100\32\124\66\117\116\32\121\92\39\97\108\108\32\124\66\117\116\32\124\66\105\7871\116\32\124\66\101\116\32\124\66\85\84\32\124\65\116\117\110\99\105\32\124\65\110\100\32\121\92\39\97\108\108\32\124\65\110\100\32\124\65\109\97\32\124\65\108\115\32\124\65\108\111\114\115\32\124\65\108\108\111\114\97\32\124\65\108\105\32\124\65\108\101\115\104\111\114\101\115\32\124\65\108\101\32\124\65\107\107\111\114\32\124\65\98\101\114\32\124\65\78\32\124\65\32\116\97\107\233\32\124\65\32\124\92\42\32\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tokNext "\94\40\44592\45733\124\27231\33021\124\21151\33021\124\12501\12451\12540\12481\12515\124\1582\1575\1589\1610\1577\124\1514\1499\1493\1504\1492\124\1060\1091\1085\1082\1094\1080\1086\1085\1072\1083\1085\1086\1089\1090\124\1060\1091\1085\1082\1094\1080\1086\1085\1072\1083\124\1054\1089\1086\1073\1080\1085\1072\124\1052\1086\1075\1091\1115\1085\1086\1089\1090\124\214\122\101\108\108\105\107\124\87\322\97\347\99\105\119\111\347\263\124\84\237\110\104\32\110\259\110\103\124\83\97\118\121\98\279\124\80\111\382\105\97\100\97\118\107\97\124\80\111\382\97\100\97\118\101\107\124\79\115\111\98\105\110\97\124\79\109\105\110\97\105\115\117\117\115\124\79\109\97\100\117\115\124\79\72\32\72\65\73\124\77\111\103\117\263\110\111\115\116\124\77\111\103\117\99\110\111\115\116\124\74\101\108\108\101\109\122\337\124\70\299\269\97\124\70\117\110\122\105\111\110\97\108\105\116\224\124\70\117\110\107\116\105\111\110\97\108\105\116\228\116\124\70\117\110\107\99\105\111\110\97\108\110\111\115\116\124\70\117\110\107\99\105\111\110\97\108\105\116\257\116\101\124\70\117\110\99\539\105\111\110\97\108\105\116\97\116\101\124\70\117\110\99\116\105\111\110\97\108\105\116\101\105\116\124\70\117\110\99\116\105\111\110\97\108\105\116\97\116\101\124\70\117\110\99\105\111\110\97\108\105\100\97\100\101\124\70\111\110\99\116\105\111\110\110\97\108\105\116\233\124\70\105\116\117\114\124\70\101\97\116\117\114\101\124\69\103\101\110\115\107\97\112\124\69\103\101\110\115\107\97\98\124\67\114\105\107\101\121\124\67\97\114\97\99\116\101\114\237\115\116\105\99\97\124\65\114\119\101\100\100\41\40\58\41\40\46\42\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")]) (GoTo narrative')
+    , tokNext "\94\40\92\115\42\41\40\49884\45208\47532\50724\32\44060\50836\124\49884\45208\47532\50724\124\48176\44221\124\32972\26223\124\22580\26223\22823\32177\124\22580\26223\124\22330\26223\22823\32434\124\22330\26223\124\21127\26412\22823\32177\124\21127\26412\124\12486\12531\12503\12524\124\12471\12490\12522\12458\12486\12531\12503\12524\12540\12488\124\12471\12490\12522\12458\12486\12531\12503\12524\124\12471\12490\12522\12458\12450\12454\12488\12521\12452\12531\124\12471\12490\12522\12458\124\1587\1610\1606\1575\1585\1610\1608\32\1605\1582\1591\1591\124\1587\1610\1606\1575\1585\1610\1608\124\1575\1604\1582\1604\1601\1610\1577\124\1514\1512\1495\1497\1513\124\1514\1489\1504\1497\1514\32\1514\1512\1495\1497\1513\124\1512\1511\1506\124\1058\1072\1088\1080\1093\124\1057\1094\1077\1085\1072\1088\1080\1086\124\1057\1094\1077\1085\1072\1088\1080\1081\32\1089\1090\1088\1091\1082\1090\1091\1088\1072\1089\1080\124\1057\1094\1077\1085\1072\1088\1080\1081\124\1057\1090\1088\1091\1082\1090\1091\1088\1072\32\1089\1094\1077\1085\1072\1088\1080\1112\1072\124\1057\1090\1088\1091\1082\1090\1091\1088\1072\32\1089\1094\1077\1085\1072\1088\1080\1103\124\1057\1082\1080\1094\1072\124\1056\1072\1084\1082\1072\32\1085\1072\32\1089\1094\1077\1085\1072\1088\1080\1081\124\1055\1088\1080\1084\1077\1088\124\1055\1088\1077\1076\1099\1089\1090\1086\1088\1080\1103\124\1055\1088\1077\1076\1080\1089\1090\1086\1088\1080\1103\124\1055\1086\1079\1072\1076\1080\1085\1072\124\1054\1089\1085\1086\1074\1072\124\1050\1086\1085\1094\1077\1087\1090\124\1050\1086\1085\1090\1077\1082\1089\1090\124\90\97\322\111\380\101\110\105\97\124\84\236\110\104\32\104\117\7889\110\103\124\84\97\117\115\116\97\124\84\97\117\115\116\124\84\97\112\97\117\115\97\105\104\105\111\124\84\97\112\97\117\115\124\83\122\101\110\97\114\105\111\103\114\117\110\100\114\105\115\115\124\83\122\101\110\97\114\105\111\124\83\122\97\98\108\111\110\32\115\99\101\110\97\114\105\117\115\122\97\124\83\116\115\101\110\97\97\114\105\117\109\124\83\116\114\117\107\116\117\114\97\32\115\99\101\110\97\114\105\106\97\124\83\107\105\99\97\124\83\107\101\110\97\114\105\111\32\107\111\110\115\101\112\124\83\107\101\110\97\114\105\111\124\83\105\116\117\257\99\105\106\97\124\83\101\110\97\114\121\111\32\116\97\115\108\97\287\305\124\83\101\110\97\114\121\111\124\83\99\233\110\225\345\124\83\99\233\110\97\114\105\111\124\83\99\104\101\109\97\32\100\101\108\108\111\32\115\99\101\110\97\114\105\111\124\83\99\101\110\257\114\105\106\115\32\112\275\99\32\112\97\114\97\117\103\97\124\83\99\101\110\257\114\105\106\115\124\83\99\101\110\225\114\124\83\99\101\110\97\114\105\117\115\122\124\83\99\101\110\97\114\105\117\108\32\100\101\32\351\97\98\108\111\110\124\83\99\101\110\97\114\105\117\108\32\100\101\32\115\97\98\108\111\110\124\83\99\101\110\97\114\105\117\124\83\99\101\110\97\114\105\111\32\79\117\116\108\105\110\101\124\83\99\101\110\97\114\105\111\32\65\109\108\105\110\101\108\108\111\108\124\83\99\101\110\97\114\105\111\124\83\99\101\110\97\114\105\106\117\115\124\83\99\101\110\97\114\105\106\97\117\115\32\353\97\98\108\111\110\97\115\124\83\99\101\110\97\114\105\106\124\83\99\101\110\97\114\105\101\124\82\101\114\101\102\111\110\115\124\82\97\97\109\115\116\115\101\110\97\97\114\105\117\109\124\80\114\105\109\101\114\124\80\111\122\97\100\237\124\80\111\122\97\100\105\110\97\124\80\111\122\97\100\105\101\124\80\108\97\110\32\100\117\32\115\99\233\110\97\114\105\111\124\80\108\97\110\32\100\117\32\83\99\233\110\97\114\105\111\124\79\115\110\111\118\97\32\115\99\233\110\225\345\101\124\79\115\110\111\118\97\124\78\225\269\114\116\32\83\99\233\110\225\345\101\124\78\225\269\114\116\32\83\99\101\110\225\114\117\124\77\97\116\101\124\77\73\83\72\85\78\32\83\82\83\76\89\124\77\73\83\72\85\78\124\75\7883\99\104\32\98\7843\110\124\75\111\110\116\101\120\116\124\75\111\110\116\101\107\115\116\115\124\75\111\110\116\101\107\115\116\97\115\124\75\111\110\116\101\107\115\116\124\75\111\110\99\101\112\116\124\75\104\117\110\103\32\116\236\110\104\32\104\117\7889\110\103\124\75\104\117\110\103\32\107\7883\99\104\32\98\7843\110\124\72\225\116\116\233\114\124\71\114\117\110\100\108\97\103\101\124\71\101\231\109\105\351\124\70\111\114\103\97\116\243\107\246\110\121\118\32\118\225\122\108\97\116\124\70\111\114\103\97\116\243\107\246\110\121\118\124\69\115\113\117\101\109\97\32\100\111\32\67\101\110\225\114\105\111\124\69\115\113\117\101\109\97\32\100\111\32\67\101\110\97\114\105\111\124\69\115\113\117\101\109\97\32\100\101\108\32\101\115\99\101\110\97\114\105\111\124\69\115\113\117\101\109\97\32\100\101\32\108\92\39\101\115\99\101\110\97\114\105\124\69\115\99\101\110\97\114\105\111\124\69\115\99\101\110\97\114\105\124\68\97\115\97\114\124\67\111\110\116\101\120\116\111\124\67\111\110\116\101\120\116\101\124\67\111\110\116\101\115\116\111\124\67\111\110\100\105\355\105\105\124\67\111\110\100\105\116\105\105\124\67\101\110\225\114\105\111\124\67\101\110\97\114\105\111\124\67\101\102\110\100\105\114\124\66\7889\105\32\99\7843\110\104\124\66\108\111\107\101\115\124\66\97\107\103\114\117\110\110\124\66\97\107\103\114\117\110\100\124\66\97\103\103\114\117\110\100\124\66\97\99\107\103\114\111\117\110\100\124\66\52\124\65\110\116\101\99\101\100\101\110\116\115\124\65\110\116\101\99\101\100\101\110\116\101\115\124\65\108\108\32\121\92\39\97\108\108\124\65\99\104\116\101\114\103\114\111\110\100\124\65\98\115\116\114\97\107\116\32\83\99\101\110\97\114\105\111\124\65\98\115\116\114\97\99\116\32\83\99\101\110\97\114\105\111\41\40\58\41\40\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")]) (GoTo multiline_descriptions')
+    , tokNext "\94\40\92\115\42\41\40\50696\124\20363\23376\124\20363\124\12469\12531\12503\12523\124\1575\1605\1579\1604\1577\124\1491\1493\1490\1502\1488\1493\1514\124\1057\1094\1077\1085\1072\1088\1080\1112\1080\124\1055\1088\1080\1084\1077\1088\1080\124\1052\1080\1089\1086\1083\1083\1072\1088\124\1047\1085\1072\1095\1077\1085\1080\1103\124\214\114\110\101\107\108\101\114\124\86\111\111\114\98\101\101\108\100\101\110\124\86\97\114\105\97\110\116\97\105\124\84\97\112\97\117\107\115\101\116\124\83\99\101\110\97\114\105\111\115\124\83\99\101\110\97\114\105\106\105\124\83\99\101\110\97\114\105\106\97\105\124\80\345\237\107\108\97\100\121\124\80\233\108\100\225\107\124\80\114\237\107\108\97\100\121\124\80\114\122\121\107\322\97\100\121\124\80\114\105\109\106\101\114\105\124\80\114\105\109\101\114\105\124\80\105\101\109\275\114\105\124\80\97\118\121\122\100\382\105\97\105\124\80\97\114\97\117\103\115\124\74\117\104\116\117\109\105\100\124\69\120\101\109\112\108\111\115\124\69\120\101\109\112\108\101\115\124\69\120\101\109\112\108\101\108\101\124\69\120\101\109\112\101\108\124\69\120\97\109\112\108\101\115\124\69\115\101\109\112\105\124\69\110\103\104\114\101\105\102\102\116\105\97\117\124\69\107\115\101\109\112\108\101\114\124\69\106\101\109\112\108\111\115\124\69\88\65\77\80\76\90\124\68\7919\32\108\105\7879\117\124\67\111\110\116\111\104\124\67\111\98\98\101\114\124\66\101\105\115\112\105\101\108\101\41\40\58\41\40\46\42\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")]) (GoTo scenario_table_description')
+    , tok "\40\92\115\124\46\41" (Arbitrary "\84\101\120\116")
+    ]
+
+multiline_descriptions_on_stack' :: TokenMatcher
+multiline_descriptions_on_stack' =
+    [ tokNext "\94\40\92\115\42\41\40\54616\51648\47564\124\51312\44148\124\47564\51068\124\44536\47532\44256\124\44536\47084\47732\124\37027\40636\124\37027\20040\124\32780\19988\124\30070\124\24403\124\21069\25552\124\20551\35373\124\20551\22914\124\20294\26159\124\20294\12375\124\20006\19988\124\12418\12375\124\12394\12425\12400\124\12383\12384\12375\124\12375\12363\12375\124\12363\12388\124\1608\32\124\1605\1578\1609\32\124\1604\1603\1606\32\124\1593\1606\1583\1605\1575\32\124\1579\1605\32\124\1576\1601\1585\1590\32\124\1575\1584\1575\1611\32\124\1499\1488\1513\1512\32\124\1493\1490\1501\32\124\1489\1492\1497\1504\1514\1503\32\124\1488\1494\1497\32\124\1488\1494\32\124\1488\1489\1500\32\124\1059\1085\1076\1072\32\124\1058\1086\32\124\1054\1085\1076\1072\32\124\1053\1086\32\124\1051\1077\1082\1080\1085\32\124\1050\1086\1075\1072\1090\1086\32\124\1050\1072\1076\1072\32\124\1050\1072\1076\32\124\1050\32\1090\1086\1084\1091\32\1078\1077\32\124\1048\32\124\1047\1072\1076\1072\1090\1086\32\124\1047\1072\1076\1072\1090\1080\32\124\1047\1072\1076\1072\1090\1077\32\124\1045\1089\1083\1080\32\124\1044\1086\1087\1091\1089\1090\1080\1084\32\124\1044\1072\1076\1077\1085\1086\32\124\1042\1072\32\124\1041\1080\1088\1086\1082\32\124\1040\1084\1084\1086\32\124\1040\1083\1080\32\124\1040\1075\1072\1088\32\124\1040\32\124\536\105\32\124\201\115\32\124\97\110\114\104\101\103\101\100\105\103\32\97\32\124\90\97\116\97\116\105\32\124\90\97\107\322\97\100\97\106\261\99\32\124\90\97\100\97\116\111\32\124\90\97\100\97\116\101\32\124\90\97\100\97\110\111\32\124\90\97\100\97\110\105\32\124\90\97\100\97\110\32\124\89\110\97\32\124\89\97\32\107\110\111\119\32\104\111\119\32\124\89\97\32\103\111\116\116\97\32\124\89\32\124\87\116\101\100\121\32\124\87\104\101\110\32\121\92\39\97\108\108\32\124\87\104\101\110\32\124\87\101\110\110\32\124\87\69\78\32\124\86\224\32\124\86\101\32\124\85\110\100\32\124\85\110\32\124\84\104\236\32\124\84\104\101\110\32\121\92\39\97\108\108\32\124\84\104\101\110\32\124\84\97\112\105\32\124\84\97\107\32\124\84\97\100\97\32\124\84\97\100\32\124\83\229\32\124\83\116\101\108\32\124\83\111\105\116\32\124\83\105\105\115\32\124\83\105\32\124\81\117\97\110\100\111\32\124\81\117\97\110\100\32\124\81\117\97\110\32\124\80\114\121\100\32\124\80\111\107\117\100\32\124\80\111\107\105\97\318\32\124\80\101\114\242\32\124\80\101\114\111\32\124\80\97\107\32\124\79\114\97\122\32\124\79\110\100\97\32\124\79\110\100\32\124\79\108\101\116\101\116\97\97\110\32\124\79\103\32\124\79\99\104\32\124\79\32\122\97\109\97\110\32\124\78\229\114\32\124\78\228\114\32\124\78\105\105\110\32\124\78\104\432\110\103\32\124\78\32\124\77\117\116\116\97\32\124\77\101\110\32\124\77\97\115\32\124\77\97\107\97\32\124\77\97\106\100\32\124\77\97\105\115\32\124\77\97\97\114\32\124\77\97\32\124\76\111\114\115\113\117\101\32\124\76\111\114\115\113\117\92\39\124\75\117\110\32\124\75\117\105\100\32\124\75\117\105\32\124\75\104\105\32\124\75\101\271\32\124\75\101\116\105\107\97\32\124\75\100\121\382\32\124\75\97\105\32\124\75\97\100\97\32\124\75\97\100\32\124\74\101\380\101\108\105\32\124\74\97\32\124\73\114\32\124\73\32\67\65\78\32\72\65\90\32\124\73\32\124\72\97\32\124\71\105\118\101\116\32\124\71\105\118\101\110\32\121\92\39\97\108\108\32\124\71\105\118\101\110\32\124\71\105\116\116\32\124\71\101\103\101\118\101\110\32\124\71\101\103\101\98\101\110\32\115\101\105\32\124\70\97\107\97\116\32\124\69\287\101\114\32\107\105\32\124\69\116\97\110\116\32\100\111\110\110\233\32\124\69\116\32\124\69\110\116\227\111\32\124\69\110\116\111\110\99\101\115\32\124\69\110\116\97\111\32\124\69\110\32\124\69\101\108\100\97\100\101\115\32\124\69\32\124\68\117\111\116\97\32\124\68\111\110\97\116\32\124\68\111\110\97\100\97\32\124\68\105\121\101\108\105\109\32\107\105\32\124\68\101\110\103\97\110\32\124\68\101\32\124\68\97\116\111\32\124\68\97\114\32\124\68\97\110\110\32\124\68\97\110\32\124\68\97\100\111\32\124\68\97\99\259\32\124\68\97\99\97\32\124\68\69\78\32\124\67\226\110\100\32\124\67\117\97\110\100\111\32\124\67\104\111\32\124\67\101\112\116\32\124\67\97\110\100\32\124\66\117\116\32\121\92\39\97\108\108\32\124\66\117\116\32\124\66\105\7871\116\32\124\66\101\116\32\124\66\85\84\32\124\65\116\117\110\99\105\32\124\65\110\100\32\121\92\39\97\108\108\32\124\65\110\100\32\124\65\109\97\32\124\65\108\115\32\124\65\108\111\114\115\32\124\65\108\108\111\114\97\32\124\65\108\105\32\124\65\108\101\115\104\111\114\101\115\32\124\65\108\101\32\124\65\107\107\111\114\32\124\65\98\101\114\32\124\65\78\32\124\65\32\116\97\107\233\32\124\65\32\124\92\42\32\41" (Arbitrary "\75\101\121\119\111\114\100") (PopNum 2)
+    , anyOf comments'
+    , tok "\40\92\115\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    ]
+
+scenario_table_description' :: TokenMatcher
+scenario_table_description' =
+    [ tokNext "\92\115\43\92\124" (Arbitrary "\84\101\120\116") (GoTo scenario_table_header')
+    , anyOf comments'
+    , tok "\40\92\115\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Gnuplot.hs b/src/Text/Highlighter/Lexers/Gnuplot.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Gnuplot.hs
@@ -0,0 +1,144 @@
+module Text.Highlighter.Lexers.Gnuplot (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\110\117\112\108\111\116"
+    , lAliases = ["\103\110\117\112\108\111\116"]
+    , lExtensions = ["\46\112\108\111\116", "\46\112\108\116"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\103\110\117\112\108\111\116"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\92\92\92\110\93" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\92\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\92" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    ]
+
+plot' :: TokenMatcher
+plot' =
+    [ tok "\97\120\101\115\92\98\124\97\120\101\92\98\124\97\120\92\98\124\97\120\105\115\92\98\124\97\120\105\92\98\124\98\105\110\97\114\121\92\98\124\98\105\110\97\114\92\98\124\98\105\110\97\92\98\124\98\105\110\92\98\124\101\118\101\114\121\92\98\124\101\118\101\114\92\98\124\101\118\101\92\98\124\101\118\92\98\124\105\110\100\101\120\92\98\124\105\110\100\101\92\98\124\105\110\100\92\98\124\105\110\92\98\124\105\92\98\124\109\97\116\114\105\120\92\98\124\109\97\116\114\105\92\98\124\109\97\116\114\92\98\124\109\97\116\92\98\124\115\109\111\111\116\104\92\98\124\115\109\111\111\116\92\98\124\115\109\111\111\92\98\124\115\109\111\92\98\124\115\109\92\98\124\115\92\98\124\116\104\114\117\92\98\124\116\105\116\108\101\92\98\124\116\105\116\108\92\98\124\116\105\116\92\98\124\116\105\92\98\124\116\92\98\124\110\111\116\105\116\108\101\92\98\124\110\111\116\105\116\108\92\98\124\110\111\116\105\116\92\98\124\110\111\116\105\92\98\124\110\111\116\92\98\124\117\115\105\110\103\92\98\124\117\115\105\110\92\98\124\117\115\105\92\98\124\117\115\92\98\124\117\92\98\124\119\105\116\104\92\98\124\119\105\116\92\98\124\119\105\92\98\124\119\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf genericargs'
+    ]
+
+pause' :: TokenMatcher
+pause' =
+    [ tok "\40\109\111\117\115\101\124\97\110\121\124\98\117\116\116\111\110\49\124\98\117\116\116\111\110\50\124\98\117\116\116\111\110\51\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\107\101\121\112\114\101\115\115\92\98\124\107\101\121\112\114\101\115\92\98\124\107\101\121\112\114\101\92\98\124\107\101\121\112\114\92\98\124\107\101\121\112\92\98\124\107\101\121\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf genericargs'
+    ]
+
+dqstring' :: TokenMatcher
+dqstring' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+if' :: TokenMatcher
+if' =
+    [ tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf genericargs'
+    ]
+
+quit' :: TokenMatcher
+quit' =
+    [ tok "\103\110\117\112\108\111\116\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , anyOf noargs'
+    ]
+
+sqstring' :: TokenMatcher
+sqstring' =
+    [ tok "\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\91\94\92\92\39\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\91\32\92\116\92\118\92\102\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
+fit' :: TokenMatcher
+fit' =
+    [ tok "\118\105\97\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf plot'
+    ]
+
+bind' :: TokenMatcher
+bind' =
+    [ tokNext "\33" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tok "\97\108\108\119\105\110\100\111\119\115\92\98\124\97\108\108\119\105\110\100\111\119\92\98\124\97\108\108\119\105\110\100\111\92\98\124\97\108\108\119\105\110\100\92\98\124\97\108\108\119\105\110\92\98\124\97\108\108\119\105\92\98\124\97\108\108\119\92\98\124\97\108\108\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf genericargs'
+    ]
+
+optionarg' :: TokenMatcher
+optionarg' =
+    [ anyOf whitespace'
+    , tokNext "\97\108\108\92\98\124\97\108\92\98\124\97\92\98\124\97\110\103\108\101\115\92\98\124\97\110\103\108\101\92\98\124\97\110\103\108\92\98\124\97\110\103\92\98\124\97\110\92\98\124\97\114\114\111\119\92\98\124\97\114\114\111\92\98\124\97\114\114\92\98\124\97\114\92\98\124\97\117\116\111\115\99\97\108\101\92\98\124\97\117\116\111\115\99\97\108\92\98\124\97\117\116\111\115\99\97\92\98\124\97\117\116\111\115\99\92\98\124\97\117\116\111\115\92\98\124\97\117\116\111\92\98\124\97\117\116\92\98\124\97\117\92\98\124\98\97\114\115\92\98\124\98\97\114\92\98\124\98\97\92\98\124\98\92\98\124\98\111\114\100\101\114\92\98\124\98\111\114\100\101\92\98\124\98\111\114\100\92\98\124\98\111\114\92\98\124\98\111\120\119\105\100\116\104\92\98\124\98\111\120\119\105\100\116\92\98\124\98\111\120\119\105\100\92\98\124\98\111\120\119\105\92\98\124\98\111\120\119\92\98\124\98\111\120\92\98\124\99\108\97\98\101\108\92\98\124\99\108\97\98\101\92\98\124\99\108\97\98\92\98\124\99\108\97\92\98\124\99\108\92\98\124\99\108\105\112\92\98\124\99\108\105\92\98\124\99\108\92\98\124\99\92\98\124\99\110\116\114\112\97\114\97\109\92\98\124\99\110\116\114\112\97\114\97\92\98\124\99\110\116\114\112\97\114\92\98\124\99\110\116\114\112\97\92\98\124\99\110\116\114\112\92\98\124\99\110\116\114\92\98\124\99\110\116\92\98\124\99\110\92\98\124\99\111\110\116\111\117\114\92\98\124\99\111\110\116\111\117\92\98\124\99\111\110\116\111\92\98\124\99\111\110\116\92\98\124\99\111\110\92\98\124\99\111\92\98\124\100\97\116\97\92\98\124\100\97\116\92\98\124\100\97\92\98\124\100\97\116\97\102\105\108\101\92\98\124\100\97\116\97\102\105\108\92\98\124\100\97\116\97\102\105\92\98\124\100\97\116\97\102\92\98\124\100\97\116\97\92\98\124\100\103\114\105\100\51\100\92\98\124\100\103\114\105\100\51\92\98\124\100\103\114\105\100\92\98\124\100\103\114\105\92\98\124\100\103\114\92\98\124\100\103\92\98\124\100\117\109\109\121\92\98\124\100\117\109\109\92\98\124\100\117\109\92\98\124\100\117\92\98\124\101\110\99\111\100\105\110\103\92\98\124\101\110\99\111\100\105\110\92\98\124\101\110\99\111\100\105\92\98\124\101\110\99\111\100\92\98\124\101\110\99\111\92\98\124\101\110\99\92\98\124\100\101\99\105\109\97\108\115\105\103\110\92\98\124\100\101\99\105\109\97\108\115\105\103\92\98\124\100\101\99\105\109\97\108\115\105\92\98\124\100\101\99\105\109\97\108\115\92\98\124\100\101\99\105\109\97\108\92\98\124\100\101\99\105\109\97\92\98\124\100\101\99\105\109\92\98\124\100\101\99\105\92\98\124\100\101\99\92\98\124\102\105\116\92\98\124\102\111\110\116\112\97\116\104\92\98\124\102\111\110\116\112\97\116\92\98\124\102\111\110\116\112\97\92\98\124\102\111\110\116\112\92\98\124\102\111\110\116\92\98\124\102\111\114\109\97\116\92\98\124\102\111\114\109\97\92\98\124\102\111\114\109\92\98\124\102\111\114\92\98\124\102\111\92\98\124\102\117\110\99\116\105\111\110\92\98\124\102\117\110\99\116\105\111\92\98\124\102\117\110\99\116\105\92\98\124\102\117\110\99\116\92\98\124\102\117\110\99\92\98\124\102\117\110\92\98\124\102\117\92\98\124\102\117\110\99\116\105\111\110\115\92\98\124\102\117\110\99\116\105\111\110\92\98\124\102\117\110\99\116\105\111\92\98\124\102\117\110\99\116\105\92\98\124\102\117\110\99\116\92\98\124\102\117\110\99\92\98\124\102\117\110\92\98\124\102\117\92\98\124\103\114\105\100\92\98\124\103\114\105\92\98\124\103\114\92\98\124\103\92\98\124\104\105\100\100\101\110\51\100\92\98\124\104\105\100\100\101\110\51\92\98\124\104\105\100\100\101\110\92\98\124\104\105\100\100\101\92\98\124\104\105\100\100\92\98\124\104\105\100\92\98\124\104\105\115\116\111\114\121\115\105\122\101\92\98\124\104\105\115\116\111\114\121\115\105\122\92\98\124\104\105\115\116\111\114\121\115\105\92\98\124\104\105\115\116\111\114\121\115\92\98\124\104\105\115\116\111\114\121\92\98\124\104\105\115\116\111\114\92\98\124\104\105\115\116\111\92\98\124\104\105\115\116\92\98\124\104\105\115\92\98\124\105\115\111\115\97\109\112\108\101\115\92\98\124\105\115\111\115\97\109\112\108\101\92\98\124\105\115\111\115\97\109\112\108\92\98\124\105\115\111\115\97\109\112\92\98\124\105\115\111\115\97\109\92\98\124\105\115\111\115\97\92\98\124\105\115\111\115\92\98\124\105\115\111\92\98\124\105\115\92\98\124\107\101\121\92\98\124\107\101\92\98\124\107\92\98\124\107\101\121\116\105\116\108\101\92\98\124\107\101\121\116\105\116\108\92\98\124\107\101\121\116\105\116\92\98\124\107\101\121\116\105\92\98\124\107\101\121\116\92\98\124\108\97\98\101\108\92\98\124\108\97\98\101\92\98\124\108\97\98\92\98\124\108\97\92\98\124\108\105\110\101\115\116\121\108\101\92\98\124\108\105\110\101\115\116\121\108\92\98\124\108\105\110\101\115\116\121\92\98\124\108\105\110\101\115\116\92\98\124\108\105\110\101\115\92\98\124\108\105\110\101\92\98\124\108\105\110\92\98\124\108\105\92\98\124\108\115\92\98\124\108\111\97\100\112\97\116\104\92\98\124\108\111\97\100\112\97\116\92\98\124\108\111\97\100\112\97\92\98\124\108\111\97\100\112\92\98\124\108\111\97\100\92\98\124\108\111\97\92\98\124\108\111\99\97\108\101\92\98\124\108\111\99\97\108\92\98\124\108\111\99\97\92\98\124\108\111\99\92\98\124\108\111\103\115\99\97\108\101\92\98\124\108\111\103\115\99\97\108\92\98\124\108\111\103\115\99\97\92\98\124\108\111\103\115\99\92\98\124\108\111\103\115\92\98\124\108\111\103\92\98\124\109\97\99\114\111\115\92\98\124\109\97\99\114\111\92\98\124\109\97\99\114\92\98\124\109\97\99\92\98\124\109\97\112\112\105\110\103\92\98\124\109\97\112\112\105\110\92\98\124\109\97\112\112\105\92\98\124\109\97\112\112\92\98\124\109\97\112\92\98\124\109\97\112\112\105\110\103\51\100\92\98\124\109\97\112\112\105\110\103\51\92\98\124\109\97\112\112\105\110\103\92\98\124\109\97\112\112\105\110\92\98\124\109\97\112\112\105\92\98\124\109\97\112\112\92\98\124\109\97\112\92\98\124\109\97\114\103\105\110\92\98\124\109\97\114\103\105\92\98\124\109\97\114\103\92\98\124\109\97\114\92\98\124\108\109\97\114\103\105\110\92\98\124\108\109\97\114\103\105\92\98\124\108\109\97\114\103\92\98\124\108\109\97\114\92\98\124\114\109\97\114\103\105\110\92\98\124\114\109\97\114\103\105\92\98\124\114\109\97\114\103\92\98\124\114\109\97\114\92\98\124\116\109\97\114\103\105\110\92\98\124\116\109\97\114\103\105\92\98\124\116\109\97\114\103\92\98\124\116\109\97\114\92\98\124\98\109\97\114\103\105\110\92\98\124\98\109\97\114\103\105\92\98\124\98\109\97\114\103\92\98\124\98\109\97\114\92\98\124\109\111\117\115\101\92\98\124\109\111\117\115\92\98\124\109\111\117\92\98\124\109\111\92\98\124\109\117\108\116\105\112\108\111\116\92\98\124\109\117\108\116\105\112\108\111\92\98\124\109\117\108\116\105\112\108\92\98\124\109\117\108\116\105\112\92\98\124\109\117\108\116\105\92\98\124\109\120\116\105\99\115\92\98\124\109\120\116\105\99\92\98\124\109\120\116\105\92\98\124\109\120\116\92\98\124\110\111\109\120\116\105\99\115\92\98\124\110\111\109\120\116\105\99\92\98\124\110\111\109\120\116\105\92\98\124\110\111\109\120\116\92\98\124\109\120\50\116\105\99\115\92\98\124\109\120\50\116\105\99\92\98\124\109\120\50\116\105\92\98\124\109\120\50\116\92\98\124\110\111\109\120\50\116\105\99\115\92\98\124\110\111\109\120\50\116\105\99\92\98\124\110\111\109\120\50\116\105\92\98\124\110\111\109\120\50\116\92\98\124\109\121\116\105\99\115\92\98\124\109\121\116\105\99\92\98\124\109\121\116\105\92\98\124\109\121\116\92\98\124\110\111\109\121\116\105\99\115\92\98\124\110\111\109\121\116\105\99\92\98\124\110\111\109\121\116\105\92\98\124\110\111\109\121\116\92\98\124\109\121\50\116\105\99\115\92\98\124\109\121\50\116\105\99\92\98\124\109\121\50\116\105\92\98\124\109\121\50\116\92\98\124\110\111\109\121\50\116\105\99\115\92\98\124\110\111\109\121\50\116\105\99\92\98\124\110\111\109\121\50\116\105\92\98\124\110\111\109\121\50\116\92\98\124\109\122\116\105\99\115\92\98\124\109\122\116\105\99\92\98\124\109\122\116\105\92\98\124\109\122\116\92\98\124\110\111\109\122\116\105\99\115\92\98\124\110\111\109\122\116\105\99\92\98\124\110\111\109\122\116\105\92\98\124\110\111\109\122\116\92\98\124\109\99\98\116\105\99\115\92\98\124\109\99\98\116\105\99\92\98\124\109\99\98\116\105\92\98\124\109\99\98\116\92\98\124\110\111\109\99\98\116\105\99\115\92\98\124\110\111\109\99\98\116\105\99\92\98\124\110\111\109\99\98\116\105\92\98\124\110\111\109\99\98\116\92\98\124\111\102\102\115\101\116\115\92\98\124\111\102\102\115\101\116\92\98\124\111\102\102\115\101\92\98\124\111\102\102\115\92\98\124\111\102\102\92\98\124\111\102\92\98\124\111\114\105\103\105\110\92\98\124\111\114\105\103\105\92\98\124\111\114\105\103\92\98\124\111\114\105\92\98\124\111\114\92\98\124\111\117\116\112\117\116\92\98\124\111\117\116\112\117\92\98\124\111\117\116\112\92\98\124\111\117\116\92\98\124\111\117\92\98\124\111\92\98\124\112\97\114\97\109\101\116\114\105\99\92\98\124\112\97\114\97\109\101\116\114\105\92\98\124\112\97\114\97\109\101\116\114\92\98\124\112\97\114\97\109\101\116\92\98\124\112\97\114\97\109\101\92\98\124\112\97\114\97\109\92\98\124\112\97\114\97\92\98\124\112\97\114\92\98\124\112\97\92\98\124\112\109\51\100\92\98\124\112\109\51\92\98\124\112\109\92\98\124\112\97\108\101\116\116\101\92\98\124\112\97\108\101\116\116\92\98\124\112\97\108\101\116\92\98\124\112\97\108\101\92\98\124\112\97\108\92\98\124\99\111\108\111\114\98\111\120\92\98\124\99\111\108\111\114\98\111\92\98\124\99\111\108\111\114\98\92\98\124\112\108\111\116\92\98\124\112\108\111\92\98\124\112\108\92\98\124\112\92\98\124\112\111\105\110\116\115\105\122\101\92\98\124\112\111\105\110\116\115\105\122\92\98\124\112\111\105\110\116\115\105\92\98\124\112\111\105\110\116\115\92\98\124\112\111\105\110\116\92\98\124\112\111\105\110\92\98\124\112\111\105\92\98\124\112\111\108\97\114\92\98\124\112\111\108\97\92\98\124\112\111\108\92\98\124\112\114\105\110\116\92\98\124\112\114\105\110\92\98\124\112\114\105\92\98\124\112\114\92\98\124\111\98\106\101\99\116\92\98\124\111\98\106\101\99\92\98\124\111\98\106\101\92\98\124\111\98\106\92\98\124\115\97\109\112\108\101\115\92\98\124\115\97\109\112\108\101\92\98\124\115\97\109\112\108\92\98\124\115\97\109\112\92\98\124\115\97\109\92\98\124\115\97\92\98\124\115\105\122\101\92\98\124\115\105\122\92\98\124\115\105\92\98\124\115\116\121\108\101\92\98\124\115\116\121\108\92\98\124\115\116\121\92\98\124\115\116\92\98\124\115\117\114\102\97\99\101\92\98\124\115\117\114\102\97\99\92\98\124\115\117\114\102\97\92\98\124\115\117\114\102\92\98\124\115\117\114\92\98\124\115\117\92\98\124\116\97\98\108\101\92\98\124\116\101\114\109\105\110\97\108\92\98\124\116\101\114\109\105\110\97\92\98\124\116\101\114\109\105\110\92\98\124\116\101\114\109\105\92\98\124\116\101\114\109\92\98\124\116\101\114\92\98\124\116\101\92\98\124\116\92\98\124\116\101\114\109\111\112\116\105\111\110\115\92\98\124\116\101\114\109\111\112\116\105\111\110\92\98\124\116\101\114\109\111\112\116\105\111\92\98\124\116\101\114\109\111\112\116\105\92\98\124\116\101\114\109\111\112\116\92\98\124\116\101\114\109\111\112\92\98\124\116\101\114\109\111\92\98\124\116\105\99\115\92\98\124\116\105\99\92\98\124\116\105\92\98\124\116\105\99\115\99\97\108\101\92\98\124\116\105\99\115\99\97\108\92\98\124\116\105\99\115\99\97\92\98\124\116\105\99\115\99\92\98\124\116\105\99\115\108\101\118\101\108\92\98\124\116\105\99\115\108\101\118\101\92\98\124\116\105\99\115\108\101\118\92\98\124\116\105\99\115\108\101\92\98\124\116\105\99\115\108\92\98\124\116\105\109\101\102\109\116\92\98\124\116\105\109\101\102\109\92\98\124\116\105\109\101\102\92\98\124\116\105\109\101\115\116\97\109\112\92\98\124\116\105\109\101\115\116\97\109\92\98\124\116\105\109\101\115\116\97\92\98\124\116\105\109\101\115\116\92\98\124\116\105\109\101\115\92\98\124\116\105\109\101\92\98\124\116\105\109\92\98\124\116\105\116\108\101\92\98\124\116\105\116\108\92\98\124\116\105\116\92\98\124\118\97\114\105\97\98\108\101\115\92\98\124\118\97\114\105\97\98\108\101\92\98\124\118\97\114\105\97\98\108\92\98\124\118\97\114\105\97\98\92\98\124\118\97\114\105\97\92\98\124\118\97\114\105\92\98\124\118\97\114\92\98\124\118\97\92\98\124\118\92\98\124\118\101\114\115\105\111\110\92\98\124\118\101\114\115\105\111\92\98\124\118\101\114\115\105\92\98\124\118\101\114\115\92\98\124\118\101\114\92\98\124\118\101\92\98\124\118\105\101\119\92\98\124\118\105\101\92\98\124\118\105\92\98\124\120\121\112\108\97\110\101\92\98\124\120\121\112\108\97\110\92\98\124\120\121\112\108\97\92\98\124\120\121\112\108\92\98\124\120\121\112\92\98\124\120\100\97\116\97\92\98\124\120\100\97\116\92\98\124\120\100\97\92\98\124\120\50\100\97\116\97\92\98\124\120\50\100\97\116\92\98\124\120\50\100\97\92\98\124\121\100\97\116\97\92\98\124\121\100\97\116\92\98\124\121\100\97\92\98\124\121\50\100\97\116\97\92\98\124\121\50\100\97\116\92\98\124\121\50\100\97\92\98\124\122\100\97\116\97\92\98\124\122\100\97\116\92\98\124\122\100\97\92\98\124\99\98\100\97\116\97\92\98\124\99\98\100\97\116\92\98\124\99\98\100\97\92\98\124\120\108\97\98\101\108\92\98\124\120\108\97\98\101\92\98\124\120\108\97\98\92\98\124\120\108\97\92\98\124\120\108\92\98\124\120\50\108\97\98\101\108\92\98\124\120\50\108\97\98\101\92\98\124\120\50\108\97\98\92\98\124\120\50\108\97\92\98\124\120\50\108\92\98\124\121\108\97\98\101\108\92\98\124\121\108\97\98\101\92\98\124\121\108\97\98\92\98\124\121\108\97\92\98\124\121\108\92\98\124\121\50\108\97\98\101\108\92\98\124\121\50\108\97\98\101\92\98\124\121\50\108\97\98\92\98\124\121\50\108\97\92\98\124\121\50\108\92\98\124\122\108\97\98\101\108\92\98\124\122\108\97\98\101\92\98\124\122\108\97\98\92\98\124\122\108\97\92\98\124\122\108\92\98\124\99\98\108\97\98\101\108\92\98\124\99\98\108\97\98\101\92\98\124\99\98\108\97\98\92\98\124\99\98\108\97\92\98\124\99\98\108\92\98\124\120\116\105\99\115\92\98\124\120\116\105\99\92\98\124\120\116\105\92\98\124\110\111\120\116\105\99\115\92\98\124\110\111\120\116\105\99\92\98\124\110\111\120\116\105\92\98\124\120\50\116\105\99\115\92\98\124\120\50\116\105\99\92\98\124\120\50\116\105\92\98\124\110\111\120\50\116\105\99\115\92\98\124\110\111\120\50\116\105\99\92\98\124\110\111\120\50\116\105\92\98\124\121\116\105\99\115\92\98\124\121\116\105\99\92\98\124\121\116\105\92\98\124\110\111\121\116\105\99\115\92\98\124\110\111\121\116\105\99\92\98\124\110\111\121\116\105\92\98\124\121\50\116\105\99\115\92\98\124\121\50\116\105\99\92\98\124\121\50\116\105\92\98\124\110\111\121\50\116\105\99\115\92\98\124\110\111\121\50\116\105\99\92\98\124\110\111\121\50\116\105\92\98\124\122\116\105\99\115\92\98\124\122\116\105\99\92\98\124\122\116\105\92\98\124\110\111\122\116\105\99\115\92\98\124\110\111\122\116\105\99\92\98\124\110\111\122\116\105\92\98\124\99\98\116\105\99\115\92\98\124\99\98\116\105\99\92\98\124\99\98\116\105\92\98\124\110\111\99\98\116\105\99\115\92\98\124\110\111\99\98\116\105\99\92\98\124\110\111\99\98\116\105\92\98\124\120\100\116\105\99\115\92\98\124\120\100\116\105\99\92\98\124\120\100\116\105\92\98\124\110\111\120\100\116\105\99\115\92\98\124\110\111\120\100\116\105\99\92\98\124\110\111\120\100\116\105\92\98\124\120\50\100\116\105\99\115\92\98\124\120\50\100\116\105\99\92\98\124\120\50\100\116\105\92\98\124\110\111\120\50\100\116\105\99\115\92\98\124\110\111\120\50\100\116\105\99\92\98\124\110\111\120\50\100\116\105\92\98\124\121\100\116\105\99\115\92\98\124\121\100\116\105\99\92\98\124\121\100\116\105\92\98\124\110\111\121\100\116\105\99\115\92\98\124\110\111\121\100\116\105\99\92\98\124\110\111\121\100\116\105\92\98\124\121\50\100\116\105\99\115\92\98\124\121\50\100\116\105\99\92\98\124\121\50\100\116\105\92\98\124\110\111\121\50\100\116\105\99\115\92\98\124\110\111\121\50\100\116\105\99\92\98\124\110\111\121\50\100\116\105\92\98\124\122\100\116\105\99\115\92\98\124\122\100\116\105\99\92\98\124\122\100\116\105\92\98\124\110\111\122\100\116\105\99\115\92\98\124\110\111\122\100\116\105\99\92\98\124\110\111\122\100\116\105\92\98\124\99\98\100\116\105\99\115\92\98\124\99\98\100\116\105\99\92\98\124\99\98\100\116\105\92\98\124\110\111\99\98\100\116\105\99\115\92\98\124\110\111\99\98\100\116\105\99\92\98\124\110\111\99\98\100\116\105\92\98\124\120\109\116\105\99\115\92\98\124\120\109\116\105\99\92\98\124\120\109\116\105\92\98\124\110\111\120\109\116\105\99\115\92\98\124\110\111\120\109\116\105\99\92\98\124\110\111\120\109\116\105\92\98\124\120\50\109\116\105\99\115\92\98\124\120\50\109\116\105\99\92\98\124\120\50\109\116\105\92\98\124\110\111\120\50\109\116\105\99\115\92\98\124\110\111\120\50\109\116\105\99\92\98\124\110\111\120\50\109\116\105\92\98\124\121\109\116\105\99\115\92\98\124\121\109\116\105\99\92\98\124\121\109\116\105\92\98\124\110\111\121\109\116\105\99\115\92\98\124\110\111\121\109\116\105\99\92\98\124\110\111\121\109\116\105\92\98\124\121\50\109\116\105\99\115\92\98\124\121\50\109\116\105\99\92\98\124\121\50\109\116\105\92\98\124\110\111\121\50\109\116\105\99\115\92\98\124\110\111\121\50\109\116\105\99\92\98\124\110\111\121\50\109\116\105\92\98\124\122\109\116\105\99\115\92\98\124\122\109\116\105\99\92\98\124\122\109\116\105\92\98\124\110\111\122\109\116\105\99\115\92\98\124\110\111\122\109\116\105\99\92\98\124\110\111\122\109\116\105\92\98\124\99\98\109\116\105\99\115\92\98\124\99\98\109\116\105\99\92\98\124\99\98\109\116\105\92\98\124\110\111\99\98\109\116\105\99\115\92\98\124\110\111\99\98\109\116\105\99\92\98\124\110\111\99\98\109\116\105\92\98\124\120\114\97\110\103\101\92\98\124\120\114\97\110\103\92\98\124\120\114\97\110\92\98\124\120\114\97\92\98\124\120\114\92\98\124\120\50\114\97\110\103\101\92\98\124\120\50\114\97\110\103\92\98\124\120\50\114\97\110\92\98\124\120\50\114\97\92\98\124\120\50\114\92\98\124\121\114\97\110\103\101\92\98\124\121\114\97\110\103\92\98\124\121\114\97\110\92\98\124\121\114\97\92\98\124\121\114\92\98\124\121\50\114\97\110\103\101\92\98\124\121\50\114\97\110\103\92\98\124\121\50\114\97\110\92\98\124\121\50\114\97\92\98\124\121\50\114\92\98\124\122\114\97\110\103\101\92\98\124\122\114\97\110\103\92\98\124\122\114\97\110\92\98\124\122\114\97\92\98\124\122\114\92\98\124\99\98\114\97\110\103\101\92\98\124\99\98\114\97\110\103\92\98\124\99\98\114\97\110\92\98\124\99\98\114\97\92\98\124\99\98\114\92\98\124\114\114\97\110\103\101\92\98\124\114\114\97\110\103\92\98\124\114\114\97\110\92\98\124\114\114\97\92\98\124\114\114\92\98\124\116\114\97\110\103\101\92\98\124\116\114\97\110\103\92\98\124\116\114\97\110\92\98\124\116\114\97\92\98\124\116\114\92\98\124\117\114\97\110\103\101\92\98\124\117\114\97\110\103\92\98\124\117\114\97\110\92\98\124\117\114\97\92\98\124\117\114\92\98\124\118\114\97\110\103\101\92\98\124\118\114\97\110\103\92\98\124\118\114\97\110\92\98\124\118\114\97\92\98\124\118\114\92\98\124\120\122\101\114\111\97\120\105\115\92\98\124\120\122\101\114\111\97\120\105\92\98\124\120\122\101\114\111\97\120\92\98\124\120\122\101\114\111\97\92\98\124\120\50\122\101\114\111\97\120\105\115\92\98\124\120\50\122\101\114\111\97\120\105\92\98\124\120\50\122\101\114\111\97\120\92\98\124\120\50\122\101\114\111\97\92\98\124\121\122\101\114\111\97\120\105\115\92\98\124\121\122\101\114\111\97\120\105\92\98\124\121\122\101\114\111\97\120\92\98\124\121\122\101\114\111\97\92\98\124\121\50\122\101\114\111\97\120\105\115\92\98\124\121\50\122\101\114\111\97\120\105\92\98\124\121\50\122\101\114\111\97\120\92\98\124\121\50\122\101\114\111\97\92\98\124\122\122\101\114\111\97\120\105\115\92\98\124\122\122\101\114\111\97\120\105\92\98\124\122\122\101\114\111\97\120\92\98\124\122\122\101\114\111\97\92\98\124\122\101\114\111\97\120\105\115\92\98\124\122\101\114\111\97\120\105\92\98\124\122\101\114\111\97\120\92\98\124\122\101\114\111\97\92\98\124\122\101\114\111\92\98\124\122\101\114\92\98\124\122\101\92\98\124\122\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") Pop
+    ]
+
+genericargs' :: TokenMatcher
+genericargs' =
+    [ anyOf noargs'
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqstring')
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqstring')
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\45\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\44\46\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\123\125\40\41\92\91\92\93\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\101\113\124\110\101\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\64\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
+noargs' :: TokenMatcher
+noargs' =
+    [ anyOf whitespace'
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+save' :: TokenMatcher
+save' =
+    [ tok "\102\117\110\99\116\105\111\110\115\92\98\124\102\117\110\99\116\105\111\110\92\98\124\102\117\110\99\116\105\111\92\98\124\102\117\110\99\116\105\92\98\124\102\117\110\99\116\92\98\124\102\117\110\99\92\98\124\102\117\110\92\98\124\102\117\92\98\124\102\92\98\124\115\101\116\92\98\124\115\101\92\98\124\115\92\98\124\116\101\114\109\105\110\97\108\92\98\124\116\101\114\109\105\110\97\92\98\124\116\101\114\109\105\110\92\98\124\116\101\114\109\105\92\98\124\116\101\114\109\92\98\124\116\101\114\92\98\124\116\101\92\98\124\116\92\98\124\118\97\114\105\97\98\108\101\115\92\98\124\118\97\114\105\97\98\108\101\92\98\124\118\97\114\105\97\98\108\92\98\124\118\97\114\105\97\98\92\98\124\118\97\114\105\97\92\98\124\118\97\114\105\92\98\124\118\97\114\92\98\124\118\97\92\98\124\118\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf genericargs'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\98\105\110\100\92\98\124\98\105\110\92\98\124\98\105\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo bind')
+    , tokNext "\101\120\105\116\92\98\124\101\120\105\92\98\124\101\120\92\98\124\113\117\105\116\92\98\124\113\117\105\92\98\124\113\117\92\98\124\113\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo quit')
+    , tokNext "\102\105\116\92\98\124\102\105\92\98\124\102\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo fit')
+    , tokNext "\40\105\102\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo if')
+    , tok "\101\108\115\101\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\112\97\117\115\101\92\98\124\112\97\117\115\92\98\124\112\97\117\92\98\124\112\97\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo pause')
+    , tokNext "\112\108\111\116\92\98\124\112\108\111\92\98\124\112\108\92\98\124\112\92\98\124\114\101\112\108\111\116\92\98\124\114\101\112\108\111\92\98\124\114\101\112\108\92\98\124\114\101\112\92\98\124\115\112\108\111\116\92\98\124\115\112\108\111\92\98\124\115\112\108\92\98\124\115\112\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo plot')
+    , tokNext "\115\97\118\101\92\98\124\115\97\118\92\98\124\115\97\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo save')
+    , tokNext "\115\101\116\92\98\124\115\101\92\98" (Arbitrary "\75\101\121\119\111\114\100") (DoAll [(GoTo genericargs'), (GoTo optionarg')])
+    , tokNext "\115\104\111\119\92\98\124\115\104\111\92\98\124\115\104\92\98\124\117\110\115\101\116\92\98\124\117\110\115\101\92\98\124\117\110\115\92\98" (Arbitrary "\75\101\121\119\111\114\100") (DoAll [(GoTo noargs'), (GoTo optionarg')])
+    , tokNext "\108\111\119\101\114\92\98\124\108\111\119\101\92\98\124\108\111\119\92\98\124\114\97\105\115\101\92\98\124\114\97\105\115\92\98\124\114\97\105\92\98\124\114\97\92\98\124\99\97\108\108\92\98\124\99\97\108\92\98\124\99\97\92\98\124\99\100\92\98\124\99\108\101\97\114\92\98\124\99\108\101\97\92\98\124\99\108\101\92\98\124\99\108\92\98\124\104\101\108\112\92\98\124\104\101\108\92\98\124\104\101\92\98\124\104\92\98\124\92\63\92\98\124\104\105\115\116\111\114\121\92\98\124\104\105\115\116\111\114\92\98\124\104\105\115\116\111\92\98\124\104\105\115\116\92\98\124\104\105\115\92\98\124\104\105\92\98\124\108\111\97\100\92\98\124\108\111\97\92\98\124\108\111\92\98\124\108\92\98\124\112\114\105\110\116\92\98\124\112\114\105\110\92\98\124\112\114\105\92\98\124\112\114\92\98\124\112\119\100\92\98\124\114\101\114\101\97\100\92\98\124\114\101\114\101\97\92\98\124\114\101\114\101\92\98\124\114\101\114\92\98\124\114\101\92\98\124\114\101\115\101\116\92\98\124\114\101\115\101\92\98\124\114\101\115\92\98\124\115\99\114\101\101\110\100\117\109\112\92\98\124\115\99\114\101\101\110\100\117\109\92\98\124\115\99\114\101\101\110\100\117\92\98\124\115\99\114\101\101\110\100\92\98\124\115\99\114\101\101\110\92\98\124\115\99\114\101\101\92\98\124\115\99\114\101\92\98\124\115\99\114\92\98\124\115\104\101\108\108\92\98\124\115\104\101\108\92\98\124\115\104\101\92\98\124\115\121\115\116\101\109\92\98\124\115\121\115\116\101\92\98\124\115\121\115\116\92\98\124\115\121\115\92\98\124\115\121\92\98\124\117\112\100\97\116\101\92\98\124\117\112\100\97\116\92\98\124\117\112\100\97\92\98\124\117\112\100\92\98\124\117\112\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo genericargs')
+    , tokNext "\112\119\100\92\98\124\114\101\114\101\97\100\92\98\124\114\101\114\101\97\92\98\124\114\101\114\101\92\98\124\114\101\114\92\98\124\114\101\92\98\124\114\101\115\101\116\92\98\124\114\101\115\101\92\98\124\114\101\115\92\98\124\115\99\114\101\101\110\100\117\109\112\92\98\124\115\99\114\101\101\110\100\117\109\92\98\124\115\99\114\101\101\110\100\117\92\98\124\115\99\114\101\101\110\100\92\98\124\115\99\114\101\101\110\92\98\124\115\99\114\101\101\92\98\124\115\99\114\101\92\98\124\115\99\114\92\98\124\115\104\101\108\108\92\98\124\115\104\101\108\92\98\124\115\104\101\92\98\124\116\101\115\116\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo noargs')
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) (GoTo genericargs')
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\92\40\46\42\63\92\41\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) (GoTo genericargs')
+    , tok "\64\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\59" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Go.hs b/src/Text/Highlighter/Lexers/Go.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Go.hs
@@ -0,0 +1,36 @@
+module Text.Highlighter.Lexers.Go (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\111"
+    , lAliases = ["\103\111"]
+    , lExtensions = ["\46\103\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\103\111\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\40\98\114\101\97\107\124\100\101\102\97\117\108\116\124\102\117\110\99\124\105\110\116\101\114\102\97\99\101\124\115\101\108\101\99\116\124\99\97\115\101\124\100\101\102\101\114\124\103\111\124\109\97\112\124\115\116\114\117\99\116\124\99\104\97\110\124\101\108\115\101\124\103\111\116\111\124\112\97\99\107\97\103\101\124\115\119\105\116\99\104\124\99\111\110\115\116\124\102\97\108\108\116\104\114\111\117\103\104\124\105\102\124\114\97\110\103\101\124\116\121\112\101\124\99\111\110\116\105\110\117\101\124\102\111\114\124\105\109\112\111\114\116\124\114\101\116\117\114\110\124\118\97\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\117\105\110\116\56\124\117\105\110\116\49\54\124\117\105\110\116\51\50\124\117\105\110\116\54\52\124\105\110\116\56\124\105\110\116\49\54\124\105\110\116\51\50\124\105\110\116\54\52\124\102\108\111\97\116\51\50\124\102\108\111\97\116\54\52\124\98\121\116\101\124\117\105\110\116\124\105\110\116\124\102\108\111\97\116\124\117\105\110\116\112\116\114\124\115\116\114\105\110\103\124\99\108\111\115\101\124\99\108\111\115\101\100\124\108\101\110\124\99\97\112\124\110\101\119\124\109\97\107\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\100\43\40\92\46\92\100\43\91\101\69\93\91\43\92\45\93\63\92\100\43\124\92\46\92\100\42\124\91\101\69\93\91\43\92\45\93\63\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\46\92\100\43\40\91\101\69\93\91\43\92\45\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\40\48\124\91\49\45\57\93\91\48\45\57\93\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\39\40\92\92\91\39\34\92\92\97\98\102\110\114\116\118\93\124\92\92\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\92\92\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\91\94\92\92\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\96\91\94\96\93\42\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\40\60\60\61\124\62\62\61\124\60\60\124\62\62\124\60\61\124\62\61\124\38\92\94\61\124\38\92\94\124\92\43\61\124\45\61\124\92\42\61\124\47\61\124\37\61\124\38\61\124\92\124\61\124\38\38\124\92\124\92\124\124\60\45\124\92\43\92\43\124\45\45\124\61\61\124\33\61\124\58\61\124\92\46\92\46\92\46\41\124\91\43\92\45\42\47\37\38\124\94\60\62\61\33\40\41\92\91\92\93\123\125\46\44\59\58\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Groff.hs b/src/Text/Highlighter/Lexers/Groff.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Groff.hs
@@ -0,0 +1,49 @@
+module Text.Highlighter.Lexers.Groff (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\114\111\102\102"
+    , lAliases = ["\103\114\111\102\102", "\110\114\111\102\102", "\109\97\110"]
+    , lExtensions = ["\46\91\49\50\51\52\53\54\55\93", "\46\109\97\110"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\116\114\111\102\102", "\116\101\120\116\47\116\114\111\102\102"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+request' :: TokenMatcher
+request' =
+    [ tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    , anyOf escapes'
+    , tok "\34\91\94\92\110\34\93\43\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\83\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+escapes' :: TokenMatcher
+escapes' =
+    [ tok "\92\92\34\91\94\92\110\93\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\92\91\102\110\93\92\119" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\92\92\40\46\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\92\46\92\91\46\42\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\92\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tokNext "\92\92\92\110" (Arbitrary "\84\101\120\116") (GoTo request')
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\40\63\105\41\40\92\46\41\40\92\119\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")]) (GoTo request')
+    , tokNext "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo request')
+    , tokNext "\91\94\92\92\92\110\93\42" (Arbitrary "\84\101\120\116") (GoTo textline')
+    ]
+
+textline' :: TokenMatcher
+textline' =
+    [ anyOf escapes'
+    , tok "\91\94\92\92\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Haskell.hs b/src/Text/Highlighter/Lexers/Haskell.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Haskell.hs
@@ -0,0 +1,107 @@
+module Text.Highlighter.Lexers.Haskell (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\72\97\115\107\101\108\108"
+    , lAliases = ["\104\97\115\107\101\108\108", "\104\115"]
+    , lExtensions = ["\46\104\115"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\104\97\115\107\101\108\108"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\45\123\125\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\123\45" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\45\125" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\45\123\125\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+funclist' :: TokenMatcher
+funclist' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\91\95\97\45\122\93\91\92\119\92\39\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\45\45\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\123\45" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\58\33\35\36\37\38\42\43\46\92\92\47\60\61\62\63\64\94\124\126\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [(GoTo funclist'), (GoTo funclist')])
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (PopNum 2)
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\91\94\92\92\34\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") (GoTo escape')
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\113\117\97\108\105\102\105\101\100\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42\41\40\92\115\43\41\40\97\115\41\40\92\115\43\41\40\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101")]) Pop
+    , tokNext "\40\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42\41\40\92\115\43\41\40\104\105\100\105\110\103\41\40\92\115\43\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo funclist')
+    , tokNext "\40\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42\41\40\92\115\43\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo funclist')
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\46\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+escape' :: TokenMatcher
+escape' =
+    [ tokNext "\91\97\98\102\110\114\116\118\34\92\39\38\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\92\94\91\93\91\65\45\90\64\92\94\95\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\78\85\76\124\83\79\72\124\91\83\69\93\84\88\124\69\79\84\124\69\78\81\124\65\67\75\124\66\69\76\124\66\83\124\72\84\124\76\70\124\86\84\124\70\70\124\67\82\124\83\91\79\73\93\124\68\76\69\124\68\67\91\49\45\52\93\124\78\65\75\124\83\89\78\124\69\84\66\124\67\65\78\124\69\77\124\83\85\66\124\69\83\67\124\91\70\71\82\85\93\83\124\83\80\124\68\69\76" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\111\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\120\91\92\100\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\92\115\43\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\45\45\40\63\33\91\33\35\36\37\38\42\43\46\47\60\61\62\63\64\92\94\124\95\126\93\41\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\123\45" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tokNext "\92\98\105\109\112\111\114\116\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") (GoTo import')
+    , tokNext "\92\98\109\111\100\117\108\101\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100") (GoTo module')
+    , tok "\92\98\101\114\114\111\114\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    , tok "\92\98\40\99\97\115\101\124\99\108\97\115\115\124\100\97\116\97\124\100\101\102\97\117\108\116\124\100\101\114\105\118\105\110\103\124\100\111\124\101\108\115\101\124\105\102\124\105\110\124\105\110\102\105\120\91\108\114\93\63\124\105\110\115\116\97\110\99\101\124\108\101\116\124\110\101\119\116\121\112\101\124\111\102\124\116\104\101\110\124\116\121\112\101\124\119\104\101\114\101\124\95\41\40\63\33\92\39\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\94\91\95\97\45\122\93\91\92\119\92\39\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\95\97\45\122\93\91\92\119\92\39\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\65\45\90\93\91\92\119\92\39\93\42" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\92\92\40\63\33\91\58\33\35\36\37\38\42\43\46\92\92\47\60\61\62\63\64\94\124\126\45\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\40\60\45\124\58\58\124\45\62\124\61\62\124\61\41\40\63\33\91\58\33\35\36\37\38\42\43\46\92\92\47\60\61\62\63\64\94\124\126\45\93\43\41" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\58\91\58\33\35\36\37\38\42\43\46\92\92\47\60\61\62\63\64\94\124\126\45\93\42" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\91\58\33\35\36\37\38\42\43\46\92\92\47\60\61\62\63\64\94\124\126\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\100\43\91\101\69\93\91\43\45\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43\92\46\92\100\43\40\91\101\69\93\91\43\45\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\111\79\93\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\92\100\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114") (GoTo character')
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\92\91\92\93" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\92\40\92\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\93\91\40\41\44\59\96\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+module' :: TokenMatcher
+module' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\40\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42\41\40\92\115\43\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo funclist')
+    , tokNext "\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+character' :: TokenMatcher
+character' =
+    [ tok "\91\94\92\92\39\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tokNext "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") (GoTo escape')
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Haxe.hs b/src/Text/Highlighter/Lexers/Haxe.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Haxe.hs
@@ -0,0 +1,255 @@
+module Text.Highlighter.Lexers.Haxe (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\104\97\88\101"
+    , lAliases = ["\104\120", "\104\97\88\101"]
+    , lExtensions = ["\46\104\120"]
+    , lMimetypes = ["\116\101\120\116\47\104\97\120\101"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+anonfundef' :: TokenMatcher
+anonfundef' =
+    [ tokNext "\92\98\102\117\110\99\116\105\111\110\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo fundecl')
+    ]
+
+instancefundef' :: TokenMatcher
+instancefundef' =
+    [ tok "\40\63\58\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\111\118\101\114\114\105\100\101\124\115\116\97\116\105\99\124\105\110\108\105\110\101\124\101\120\116\101\114\110\124\100\121\110\97\109\105\99\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tokNext "\92\98\40\102\117\110\99\116\105\111\110\41\40\92\115\43\41\40\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) (GoTo fundecl')
+    ]
+
+typedecl' :: TokenMatcher
+typedecl' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\40\63\58\91\97\45\122\48\45\57\95\92\46\93\41\42\91\65\45\90\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tokNext "\60" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo generictypedecl')
+    , tokNext "\40\63\61\91\123\125\40\41\61\44\97\45\122\93\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+typedefbody' :: TokenMatcher
+typedefbody' =
+    [ anyOf whitespace'
+    , anyOf instancevardef'
+    , anyOf instancefundef'
+    , tokNext "\62" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo typedecl')
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+classdefbody' :: TokenMatcher
+classdefbody' =
+    [ anyOf whitespace'
+    , anyOf instancevardef'
+    , anyOf instancefundef'
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf codeblock'
+    ]
+
+fundecl' :: TokenMatcher
+fundecl' =
+    [ anyOf whitespace'
+    , anyOf typelabel'
+    , anyOf generictypedecl'
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo funargdecl')
+    , tokNext "\40\63\61\91\97\45\122\65\45\90\48\45\57\95\93\41" (Arbitrary "\84\101\120\116") Pop
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [Pop, (GoTo codeblock')])
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+interfacedef' :: TokenMatcher
+interfacedef' =
+    [ tokNext "\105\110\116\101\114\102\97\99\101" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (DoAll [(GoTo interfacedefprebody'), (GoTo typedecl')])
+    ]
+
+codekeywords' :: TokenMatcher
+codekeywords' =
+    [ tok "\92\98\40\105\102\124\101\108\115\101\124\119\104\105\108\101\124\100\111\124\102\111\114\124\105\110\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\114\101\116\117\114\110\124\115\119\105\116\99\104\124\99\97\115\101\124\116\114\121\124\99\97\116\99\104\124\116\104\114\111\119\124\110\117\108\108\124\116\114\97\99\101\124\110\101\119\124\116\104\105\115\124\115\117\112\101\114\124\117\110\116\121\112\101\100\124\99\97\115\116\124\99\97\108\108\98\97\99\107\124\104\101\114\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    ]
+
+enumdefbody' :: TokenMatcher
+enumdefbody' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\73\110\115\116\97\110\99\101")
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo funargdecl')
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+typedefprebody' :: TokenMatcher
+typedefprebody' =
+    [ anyOf whitespace'
+    , tokNext "\40\61\41\40\92\115\42\41\40\123\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (DoAll [Pop, (GoTo typedefbody')])
+    ]
+
+classdef' :: TokenMatcher
+classdef' =
+    [ tokNext "\99\108\97\115\115" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (DoAll [(GoTo classdefprebody'), (GoTo typedecl')])
+    ]
+
+generictypedecl' :: TokenMatcher
+generictypedecl' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\40\63\58\91\97\45\122\48\45\57\95\92\46\93\41\42\91\65\45\90\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tokNext "\60" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\62" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+instancevardecl' :: TokenMatcher
+instancevardecl' =
+    [ anyOf vardecl'
+    , anyOf propertydef'
+    ]
+
+classdefprebody' :: TokenMatcher
+classdefprebody' =
+    [ anyOf whitespace'
+    , tokNext "\40\101\120\116\101\110\100\115\124\105\109\112\108\101\109\101\110\116\115\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo typedecl')
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [Pop, (GoTo classdefbody')])
+    ]
+
+vardef' :: TokenMatcher
+vardef' =
+    [ tokNext "\92\98\40\118\97\114\41\40\92\115\43\41\40\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")]) (GoTo vardecl')
+    ]
+
+propertydef' :: TokenMatcher
+propertydef' =
+    [ tok "\40\92\40\41\40\40\63\58\100\101\102\97\117\108\116\124\110\117\108\108\124\110\101\118\101\114\41\41\40\44\41\40\40\63\58\100\101\102\97\117\108\116\124\110\117\108\108\124\110\101\118\101\114\41\41\40\92\41\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    ]
+
+codeblock' :: TokenMatcher
+codeblock' =
+    [ anyOf whitespace'
+    , anyOf new'
+    , anyOf case'
+    , anyOf anonfundef'
+    , anyOf literals'
+    , anyOf vardef'
+    , anyOf codekeywords'
+    , tok "\91\40\41\59\44\92\91\92\93\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\63\58\61\124\92\43\61\124\45\61\124\92\42\61\124\47\61\124\37\61\124\38\61\124\92\124\61\124\92\94\61\124\60\60\61\124\62\62\61\124\62\62\62\61\124\92\124\92\124\124\38\38\124\92\46\92\46\92\46\124\61\61\124\33\61\124\62\124\60\124\62\61\124\60\61\124\92\124\124\38\124\92\94\124\60\60\124\62\62\124\62\62\62\124\92\43\124\92\45\124\92\42\124\47\124\37\124\33\124\92\43\92\43\124\92\45\92\45\124\126\124\92\46\124\92\63\124\92\58\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101")
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    ]
+
+case' :: TokenMatcher
+case' =
+    [ tokNext "\92\98\40\99\97\115\101\41\40\92\115\43\41\40\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo funargdecl')
+    ]
+
+enumdefprebody' :: TokenMatcher
+enumdefprebody' =
+    [ anyOf whitespace'
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [Pop, (GoTo enumdefbody')])
+    ]
+
+typedef' :: TokenMatcher
+typedef' =
+    [ tokNext "\116\121\112\101\100\101\102" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (DoAll [(GoTo typedefprebody'), (GoTo typedecl')])
+    ]
+
+instancevardef' :: TokenMatcher
+instancevardef' =
+    [ tok "\40\63\58\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\111\118\101\114\114\105\100\101\124\115\116\97\116\105\99\124\105\110\108\105\110\101\124\101\120\116\101\114\110\124\100\121\110\97\109\105\99\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tokNext "\92\98\40\118\97\114\41\40\92\115\43\41\40\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\73\110\115\116\97\110\99\101")]) (GoTo instancevardecl')
+    ]
+
+literals' :: TokenMatcher
+literals' =
+    [ tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\126\47\40\91\94\92\110\93\41\42\63\47\91\103\105\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\92\98\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ anyOf comments'
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+interfacedefprebody' :: TokenMatcher
+interfacedefprebody' =
+    [ anyOf whitespace'
+    , tokNext "\40\101\120\116\101\110\100\115\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo typedecl')
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (DoAll [Pop, (GoTo classdefbody')])
+    ]
+
+type' :: TokenMatcher
+type' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\40\63\58\91\97\45\122\48\45\57\95\92\46\93\41\42\91\65\45\90\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tokNext "\60" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo generictypedecl')
+    , tok "\45\62" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tokNext "\40\63\61\91\123\125\40\41\44\59\61\93\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+vardecl' :: TokenMatcher
+vardecl' =
+    [ anyOf whitespace'
+    , anyOf typelabel'
+    , tokNext "\61" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\35\91\94\92\110\93\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    ]
+
+enumdef' :: TokenMatcher
+enumdef' =
+    [ tokNext "\101\110\117\109" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (DoAll [(GoTo enumdefprebody'), (GoTo typedecl')])
+    ]
+
+imports' :: TokenMatcher
+imports' =
+    [ tok "\40\112\97\99\107\97\103\101\124\105\109\112\111\114\116\124\117\115\105\110\103\41\40\92\115\43\41\40\91\94\59\93\43\41\40\59\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    ]
+
+new' :: TokenMatcher
+new' =
+    [ tokNext "\92\98\110\101\119\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo typedecl')
+    ]
+
+typelabel' :: TokenMatcher
+typelabel' =
+    [ tokNext "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo type')
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , tok "\40\63\58\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\111\118\101\114\114\105\100\101\124\115\116\97\116\105\99\124\105\110\108\105\110\101\124\101\120\116\101\114\110\124\100\121\110\97\109\105\99\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , anyOf enumdef'
+    , anyOf typedef'
+    , anyOf classdef'
+    , anyOf imports'
+    ]
+
+funargdecl' :: TokenMatcher
+funargdecl' =
+    [ anyOf whitespace'
+    , tok "\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , anyOf typelabel'
+    , anyOf literals'
+    , tok "\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\63" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Html.hs b/src/Text/Highlighter/Lexers/Html.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Html.hs
@@ -0,0 +1,64 @@
+module Text.Highlighter.Lexers.Html (lexer) where
+import qualified Text.Highlighter.Lexers.Css as Css
+import qualified Text.Highlighter.Lexers.Javascript as Javascript
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\74\97\118\97\115\99\114\105\112\116"
+    , lAliases = ["\104\116\109\108"]
+    , lExtensions = ["\46\104\116\109\108", "\46\104\116\109", "\46\120\104\116\109\108", "\46\120\115\108\116"]
+    , lMimetypes = ["\116\101\120\116\47\104\116\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\104\116\109\108\43\120\109\108"]
+    , lStart = root'
+    , lFlags = [caseless, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\45\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\45\45\62" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\45" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+styleContent' :: TokenMatcher
+styleContent' =
+    [ tokNext "\60\92\115\42\47\92\115\42\115\116\121\108\101\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    , tok "\46\43\63\40\63\61\60\92\115\42\47\92\115\42\115\116\121\108\101\92\115\42\62\41" (Using Css.lexer)
+    ]
+
+attr' :: TokenMatcher
+attr' =
+    [ tokNext "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\91\94\92\115\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+scriptContent' :: TokenMatcher
+scriptContent' =
+    [ tokNext "\60\92\115\42\47\92\115\42\115\99\114\105\112\116\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    , tok "\46\43\63\40\63\61\60\92\115\42\47\92\115\42\115\99\114\105\112\116\92\115\42\62\41" (Using Javascript.lexer)
+    ]
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\58\45\93\43\92\115\42\61" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101") (GoTo attr')
+    , tok "\91\97\45\122\65\45\90\48\45\57\95\58\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tokNext "\47\63\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\60\38\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\38\92\83\42\63\59" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    , tok "\92\60\92\33\92\91\67\68\65\84\65\92\91\46\42\63\92\93\92\93\92\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\60\92\63\46\42\63\92\63\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\60\33\91\94\62\93\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\92\115\42\115\99\114\105\112\116\92\115\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (DoAll [(GoTo scriptContent'), (GoTo tag')])
+    , tokNext "\60\92\115\42\115\116\121\108\101\92\115\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (DoAll [(GoTo styleContent'), (GoTo tag')])
+    , tokNext "\60\92\115\42\91\97\45\122\65\45\90\48\45\57\58\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (GoTo tag')
+    , tok "\60\92\115\42\47\92\115\42\91\97\45\122\65\45\90\48\45\57\58\93\43\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Ini.hs b/src/Text/Highlighter/Lexers/Ini.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Ini.hs
@@ -0,0 +1,23 @@
+module Text.Highlighter.Lexers.Ini (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\73\78\73"
+    , lAliases = ["\105\110\105", "\99\102\103"]
+    , lExtensions = ["\46\105\110\105", "\46\99\102\103", "\46\112\114\111\112\101\114\116\105\101\115"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\105\110\105"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\91\59\35\93\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\91\46\42\63\92\93\36" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\46\42\63\41\40\91\32\92\116\93\42\41\40\61\41\40\91\32\92\116\93\42\41\40\46\42\63\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Io.hs b/src/Text/Highlighter/Lexers/Io.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Io.hs
@@ -0,0 +1,41 @@
+module Text.Highlighter.Lexers.Io (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\73\111"
+    , lAliases = ["\105\111"]
+    , lExtensions = ["\46\105\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\105\111\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+nestedcomment' :: TokenMatcher
+nestedcomment' =
+    [ tok "\91\94\43\47\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\43\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\43\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\35\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nestedcomment')
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\58\58\61\124\58\61\124\61\124\92\40\124\92\41\124\59\124\44\124\92\42\124\45\124\92\43\124\62\124\60\124\64\124\33\124\47\124\92\124\124\92\94\124\92\46\124\37\124\38\124\92\91\124\92\93\124\92\123\124\92\125" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\99\108\111\110\101\124\100\111\124\100\111\70\105\108\101\124\100\111\83\116\114\105\110\103\124\109\101\116\104\111\100\124\102\111\114\124\105\102\124\101\108\115\101\124\101\108\115\101\105\102\124\116\104\101\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\110\105\108\124\102\97\108\115\101\124\116\114\117\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\79\98\106\101\99\116\124\108\105\115\116\124\76\105\115\116\124\77\97\112\124\97\114\103\115\124\83\101\113\117\101\110\99\101\124\67\111\114\111\117\116\105\110\101\124\70\105\108\101\41\8" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\40\92\100\43\92\46\63\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/IrcLogs.hs b/src/Text/Highlighter/Lexers/IrcLogs.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/IrcLogs.hs
@@ -0,0 +1,31 @@
+module Text.Highlighter.Lexers.IrcLogs (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\73\82\67\32\108\111\103\115"
+    , lAliases = ["\105\114\99"]
+    , lExtensions = ["\46\119\101\101\99\104\97\116\108\111\103"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\105\114\99\108\111\103"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+msg' :: TokenMatcher
+msg' =
+    [ tok "\91\94\92\115\93\43\58\40\63\33\47\47\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tokNext "\46\42\92\110" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\92\42\92\42\92\42\92\42\40\46\42\41\92\42\92\42\92\42\92\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\94\10\32\32\32\32\32\32\32\32\40\10\32\32\32\32\32\32\32\32\32\32\35\32\105\114\115\115\105\32\47\32\120\99\104\97\116\32\97\110\100\32\111\116\104\101\114\115\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\91\124\92\40\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\79\112\101\110\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\40\63\58\92\100\123\49\44\52\125\32\91\45\47\93\63\41\43\32\35\32\68\97\116\101\32\97\115\32\45\32\111\114\32\47\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\91\84\32\93\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\47\116\105\109\101\32\115\101\112\97\114\97\116\111\114\58\32\84\32\111\114\32\115\112\97\99\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\100\63\92\100\32\91\58\46\93\63\41\43\32\32\32\32\32\32\35\32\84\105\109\101\32\97\115\32\58\47\46\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\49\32\111\114\32\50\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\93\124\92\41\41\63\92\115\43\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\67\108\111\115\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\119\101\101\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\100\123\52\125\92\115\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\120\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\41\63\10\32\32\32\32\40\92\115\42\60\91\94\62\93\42\62\92\115\42\41\36" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")])
+    , tokNext "\94\10\32\32\32\32\32\32\32\32\40\10\32\32\32\32\32\32\32\32\32\32\35\32\105\114\115\115\105\32\47\32\120\99\104\97\116\32\97\110\100\32\111\116\104\101\114\115\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\91\124\92\40\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\79\112\101\110\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\40\63\58\92\100\123\49\44\52\125\32\91\45\47\93\63\41\43\32\35\32\68\97\116\101\32\97\115\32\45\32\111\114\32\47\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\91\84\32\93\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\47\116\105\109\101\32\115\101\112\97\114\97\116\111\114\58\32\84\32\111\114\32\115\112\97\99\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\100\63\92\100\32\91\58\46\93\63\41\43\32\32\32\32\32\32\35\32\84\105\109\101\32\97\115\32\58\47\46\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\49\32\111\114\32\50\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\93\124\92\41\41\63\92\115\43\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\67\108\111\115\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\119\101\101\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\100\123\52\125\92\115\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\120\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\41\63\10\32\32\32\32\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\92\115\42\60\46\42\63\62\92\115\42\41\32\32\32\32\32\32\32\32\32\32\35\32\78\105\99\107\32" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")]) (GoTo msg')
+    , tok "\94\10\32\32\32\32\32\32\32\32\40\10\32\32\32\32\32\32\32\32\32\32\35\32\105\114\115\115\105\32\47\32\120\99\104\97\116\32\97\110\100\32\111\116\104\101\114\115\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\91\124\92\40\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\79\112\101\110\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\40\63\58\92\100\123\49\44\52\125\32\91\45\47\93\63\41\43\32\35\32\68\97\116\101\32\97\115\32\45\32\111\114\32\47\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\91\84\32\93\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\47\116\105\109\101\32\115\101\112\97\114\97\116\111\114\58\32\84\32\111\114\32\115\112\97\99\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\100\63\92\100\32\91\58\46\93\63\41\43\32\32\32\32\32\32\35\32\84\105\109\101\32\97\115\32\58\47\46\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\49\32\111\114\32\50\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\93\124\92\41\41\63\92\115\43\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\67\108\111\115\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\119\101\101\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\100\123\52\125\92\115\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\120\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\41\63\10\32\32\32\32\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\92\115\42\91\42\93\92\115\43\41\32\32\32\32\32\32\32\32\32\32\32\32\35\32\83\116\97\114\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\91\94\92\115\93\43\92\115\43\46\42\63\92\110\41\32\32\32\32\32\32\32\35\32\78\105\99\107\32\43\32\114\101\115\116\32\111\102\32\109\101\115\115\97\103\101\32" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\73\110\115\101\114\116\101\100")])
+    , tok "\94\10\32\32\32\32\32\32\32\32\40\10\32\32\32\32\32\32\32\32\32\32\35\32\105\114\115\115\105\32\47\32\120\99\104\97\116\32\97\110\100\32\111\116\104\101\114\115\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\91\124\92\40\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\79\112\101\110\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\40\63\58\92\100\123\49\44\52\125\32\91\45\47\93\63\41\43\32\35\32\68\97\116\101\32\97\115\32\45\32\111\114\32\47\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\91\84\32\93\41\63\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\47\116\105\109\101\32\115\101\112\97\114\97\116\111\114\58\32\84\32\111\114\32\115\112\97\99\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\100\63\92\100\32\91\58\46\93\63\41\43\32\32\32\32\32\32\35\32\84\105\109\101\32\97\115\32\58\47\46\45\115\101\112\97\114\97\116\101\100\32\103\114\111\117\112\115\32\111\102\32\49\32\111\114\32\50\32\100\105\103\105\116\115\10\32\32\32\32\32\32\32\32\32\32\32\32\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\32\92\93\124\92\41\41\63\92\115\43\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\67\108\111\115\105\110\103\32\98\114\97\99\107\101\116\32\111\114\32\112\97\114\101\110\32\102\111\114\32\116\104\101\32\116\105\109\101\115\116\97\109\112\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\119\101\101\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\100\123\52\125\92\115\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\124\10\32\32\32\32\32\32\32\32\32\32\35\32\120\99\104\97\116\10\32\32\32\32\32\32\32\32\32\32\92\119\123\51\125\92\115\92\100\123\50\125\92\115\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\68\97\116\101\10\32\32\32\32\32\32\32\32\32\32\92\100\123\50\125\58\92\100\123\50\125\58\92\100\123\50\125\92\115\43\32\32\32\32\32\32\32\32\32\35\32\84\105\109\101\32\43\32\87\104\105\116\101\115\112\97\99\101\10\32\32\32\32\32\32\32\32\41\63\10\32\32\32\32\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\92\115\42\40\63\58\92\42\123\51\125\124\60\63\45\91\33\64\61\80\93\63\45\62\63\41\92\115\42\41\32\32\35\32\83\116\97\114\40\115\41\32\111\114\32\115\121\109\98\111\108\115\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\91\94\92\115\93\43\92\115\43\41\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\78\105\99\107\32\43\32\83\112\97\99\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\46\42\63\92\110\41\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\82\101\115\116\32\111\102\32\109\101\115\115\97\103\101\32" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\67\111\109\109\101\110\116")])
+    , tok "\94\46\42\63\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Java.hs b/src/Text/Highlighter/Lexers/Java.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Java.hs
@@ -0,0 +1,51 @@
+module Text.Highlighter.Lexers.Java (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\74\97\118\97"
+    , lAliases = ["\106\97\118\97"]
+    , lExtensions = ["\46\106\97\118\97"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\106\97\118\97"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+import' :: TokenMatcher
+import' =
+    [ tokNext "\91\97\45\122\65\45\90\48\45\57\95\46\93\43\92\42\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\40\92\115\42\40\63\58\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\92\46\92\91\92\93\93\42\92\115\43\41\43\63\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\64\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\92\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\40\97\115\115\101\114\116\124\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\111\110\116\105\110\117\101\124\100\101\102\97\117\108\116\124\100\111\124\101\108\115\101\124\102\105\110\97\108\108\121\124\102\111\114\124\105\102\124\103\111\116\111\124\105\110\115\116\97\110\99\101\111\102\124\110\101\119\124\114\101\116\117\114\110\124\115\119\105\116\99\104\124\116\104\105\115\124\116\104\114\111\119\124\116\114\121\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\98\115\116\114\97\99\116\124\99\111\110\115\116\124\101\110\117\109\124\101\120\116\101\110\100\115\124\102\105\110\97\108\124\105\109\112\108\101\109\101\110\116\115\124\110\97\116\105\118\101\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\115\116\97\116\105\99\124\115\116\114\105\99\116\102\112\124\115\117\112\101\114\124\115\121\110\99\104\114\111\110\105\122\101\100\124\116\104\114\111\119\115\124\116\114\97\110\115\105\101\110\116\124\118\111\108\97\116\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\98\111\111\108\101\97\110\124\98\121\116\101\124\99\104\97\114\124\100\111\117\98\108\101\124\102\108\111\97\116\124\105\110\116\124\108\111\110\103\124\115\104\111\114\116\124\118\111\105\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\112\97\99\107\97\103\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")])
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tokNext "\40\99\108\97\115\115\124\105\110\116\101\114\102\97\99\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116")]) (GoTo class')
+    , tokNext "\40\105\109\112\111\114\116\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\92\92\46\39\124\39\91\94\92\92\93\39\124\39\92\92\117\91\48\45\57\97\45\102\93\123\52\125\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\92\46\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\91\97\45\122\65\45\90\95\92\36\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\126\92\94\92\42\33\37\38\92\91\92\93\92\40\92\41\92\123\92\125\60\62\92\124\43\61\58\59\44\46\47\63\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43\76\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
+class' :: TokenMatcher
+class' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Javascript.hs b/src/Text/Highlighter/Lexers/Javascript.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Javascript.hs
@@ -0,0 +1,56 @@
+module Text.Highlighter.Lexers.Javascript (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\74\97\118\97\83\99\114\105\112\116"
+    , lAliases = ["\106\115", "\106\97\118\97\115\99\114\105\112\116"]
+    , lExtensions = ["\46\106\115"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\106\97\118\97\115\99\114\105\112\116", "\116\101\120\116\47\120\45\106\97\118\97\115\99\114\105\112\116", "\116\101\120\116\47\106\97\118\97\115\99\114\105\112\116"]
+    , lStart = root'
+    , lFlags = [dotall]
+    }
+
+commentsandwhitespace' :: TokenMatcher
+commentsandwhitespace' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\40\63\61\92\115\124\47\124\60\33\45\45\41" (Arbitrary "\84\101\120\116") (GoTo slashstartsregex')
+    , anyOf commentsandwhitespace'
+    , tokNext "\92\43\92\43\124\45\45\124\126\124\38\38\124\92\63\124\58\124\92\124\92\124\124\92\92\40\63\61\92\110\41\124\40\60\60\124\62\62\62\63\124\61\61\63\124\33\61\63\124\91\45\60\62\43\42\37\38\92\124\92\94\47\93\41\61\63" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo slashstartsregex')
+    , tokNext "\91\123\40\92\91\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo slashstartsregex')
+    , tok "\91\125\41\92\93\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\40\102\111\114\124\105\110\124\119\104\105\108\101\124\100\111\124\98\114\101\97\107\124\114\101\116\117\114\110\124\99\111\110\116\105\110\117\101\124\115\119\105\116\99\104\124\99\97\115\101\124\100\101\102\97\117\108\116\124\105\102\124\101\108\115\101\124\116\104\114\111\119\124\116\114\121\124\99\97\116\99\104\124\102\105\110\97\108\108\121\124\110\101\119\124\100\101\108\101\116\101\124\116\121\112\101\111\102\124\105\110\115\116\97\110\99\101\111\102\124\118\111\105\100\124\116\104\105\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo slashstartsregex')
+    , tokNext "\40\118\97\114\124\119\105\116\104\124\102\117\110\99\116\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo slashstartsregex')
+    , tok "\40\97\98\115\116\114\97\99\116\124\98\111\111\108\101\97\110\124\98\121\116\101\124\99\104\97\114\124\99\108\97\115\115\124\99\111\110\115\116\124\100\101\98\117\103\103\101\114\124\100\111\117\98\108\101\124\101\110\117\109\124\101\120\112\111\114\116\124\101\120\116\101\110\100\115\124\102\105\110\97\108\124\102\108\111\97\116\124\103\111\116\111\124\105\109\112\108\101\109\101\110\116\115\124\105\109\112\111\114\116\124\105\110\116\124\105\110\116\101\114\102\97\99\101\124\108\111\110\103\124\110\97\116\105\118\101\124\112\97\99\107\97\103\101\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\115\104\111\114\116\124\115\116\97\116\105\99\124\115\117\112\101\114\124\115\121\110\99\104\114\111\110\105\122\101\100\124\116\104\114\111\119\115\124\116\114\97\110\115\105\101\110\116\124\118\111\108\97\116\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\78\97\78\124\73\110\102\105\110\105\116\121\124\117\110\100\101\102\105\110\101\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\65\114\114\97\121\124\66\111\111\108\101\97\110\124\68\97\116\101\124\69\114\114\111\114\124\70\117\110\99\116\105\111\110\124\77\97\116\104\124\110\101\116\115\99\97\112\101\124\78\117\109\98\101\114\124\79\98\106\101\99\116\124\80\97\99\107\97\103\101\115\124\82\101\103\69\120\112\124\83\116\114\105\110\103\124\115\117\110\124\100\101\99\111\100\101\85\82\73\124\100\101\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\101\110\99\111\100\101\85\82\73\124\101\110\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\69\114\114\111\114\124\101\118\97\108\124\105\115\70\105\110\105\116\101\124\105\115\78\97\78\124\112\97\114\115\101\70\108\111\97\116\124\112\97\114\115\101\73\110\116\124\100\111\99\117\109\101\110\116\124\116\104\105\115\124\119\105\110\100\111\119\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\79\116\104\101\114")
+    , tok "\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\91\101\69\93\91\48\45\57\93\43\41\63\91\102\100\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+slashstartsregex' :: TokenMatcher
+slashstartsregex' =
+    [ anyOf commentsandwhitespace'
+    , tokNext "\47\40\92\92\46\124\91\94\91\47\92\92\92\110\93\124\92\91\40\92\92\46\124\91\94\92\93\92\92\92\110\93\41\42\93\41\43\47\40\91\103\105\109\93\43\92\98\124\92\66\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\40\63\61\47\41" (Arbitrary "\84\101\120\116") (DoAll [Pop, (GoTo badregex')])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+badregex' :: TokenMatcher
+badregex' =
+    [ tokNext "\10" (Arbitrary "\84\101\120\116") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/LighttpdConf.hs b/src/Text/Highlighter/Lexers/LighttpdConf.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/LighttpdConf.hs
@@ -0,0 +1,29 @@
+module Text.Highlighter.Lexers.LighttpdConf (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\76\105\103\104\116\116\112\100\32\99\111\110\102\105\103\117\114\97\116\105\111\110\32\102\105\108\101"
+    , lAliases = ["\108\105\103\104\116\121", "\108\105\103\104\116\116\112\100"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\108\105\103\104\116\116\112\100\45\99\111\110\102"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\35\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\83\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\97\45\122\65\45\90\46\95\45\93\43" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\100\43\92\46\92\100\43\92\46\92\100\43\92\46\92\100\43\40\63\58\47\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\61\62\124\61\126\124\92\43\61\124\61\61\124\61\124\92\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\36\91\65\45\90\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\40\41\123\125\92\91\92\93\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\34\40\91\94\34\92\92\93\42\40\63\58\92\92\46\91\94\34\92\92\93\42\41\42\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Llvm.hs b/src/Text/Highlighter/Lexers/Llvm.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Llvm.hs
@@ -0,0 +1,45 @@
+module Text.Highlighter.Lexers.Llvm (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\76\76\86\77"
+    , lAliases = ["\108\108\118\109"]
+    , lExtensions = ["\46\108\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\108\108\118\109"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tok "\94\92\115\42\40\91\45\97\45\122\65\45\90\36\46\95\93\91\45\97\45\122\65\45\90\36\46\95\48\45\57\93\42\124\34\91\94\34\93\42\63\34\41\92\115\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , anyOf keyword'
+    , tok "\37\40\91\45\97\45\122\65\45\90\36\46\95\93\91\45\97\45\122\65\45\90\36\46\95\48\45\57\93\42\124\34\91\94\34\93\42\63\34\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\64\40\91\45\97\45\122\65\45\90\36\46\95\93\91\45\97\45\122\65\45\90\36\46\95\48\45\57\93\42\124\34\91\94\34\93\42\63\34\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
+    , tok "\37\92\100\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\65\110\111\110\121\109\111\117\115")
+    , tok "\64\92\100\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
+    , tok "\33\40\91\45\97\45\122\65\45\90\36\46\95\93\91\45\97\45\122\65\45\90\36\46\95\48\45\57\93\42\124\34\91\94\34\93\42\63\34\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\33\92\100\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\65\110\111\110\121\109\111\117\115")
+    , tok "\99\63\34\91\94\34\93\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\48\91\120\88\93\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\45\63\92\100\43\40\63\58\91\46\93\92\100\43\41\63\40\63\58\91\101\69\93\91\45\43\93\63\92\100\43\40\63\58\91\46\93\92\100\43\41\63\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\61\60\62\123\125\92\91\92\93\40\41\42\46\44\33\93\124\120\92\98" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\40\92\110\124\92\115\41\43" (Arbitrary "\84\101\120\116")
+    , tok "\59\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+keyword' :: TokenMatcher
+keyword' =
+    [ tok "\40\98\101\103\105\110\124\101\110\100\124\116\114\117\101\124\102\97\108\115\101\124\100\101\99\108\97\114\101\124\100\101\102\105\110\101\124\103\108\111\98\97\108\124\99\111\110\115\116\97\110\116\124\112\114\105\118\97\116\101\124\108\105\110\107\101\114\95\112\114\105\118\97\116\101\124\105\110\116\101\114\110\97\108\124\97\118\97\105\108\97\98\108\101\95\101\120\116\101\114\110\97\108\108\121\124\108\105\110\107\111\110\99\101\124\108\105\110\107\111\110\99\101\95\111\100\114\124\119\101\97\107\124\119\101\97\107\95\111\100\114\124\97\112\112\101\110\100\105\110\103\124\100\108\108\105\109\112\111\114\116\124\100\108\108\101\120\112\111\114\116\124\99\111\109\109\111\110\124\100\101\102\97\117\108\116\124\104\105\100\100\101\110\124\112\114\111\116\101\99\116\101\100\124\101\120\116\101\114\110\95\119\101\97\107\124\101\120\116\101\114\110\97\108\124\116\104\114\101\97\100\95\108\111\99\97\108\124\122\101\114\111\105\110\105\116\105\97\108\105\122\101\114\124\117\110\100\101\102\124\110\117\108\108\124\116\111\124\116\97\105\108\124\116\97\114\103\101\116\124\116\114\105\112\108\101\124\100\101\112\108\105\98\115\124\100\97\116\97\108\97\121\111\117\116\124\118\111\108\97\116\105\108\101\124\110\117\119\124\110\115\119\124\101\120\97\99\116\124\105\110\98\111\117\110\100\115\124\97\108\105\103\110\124\97\100\100\114\115\112\97\99\101\124\115\101\99\116\105\111\110\124\97\108\105\97\115\124\109\111\100\117\108\101\124\97\115\109\124\115\105\100\101\101\102\102\101\99\116\124\103\99\124\100\98\103\124\99\99\99\124\102\97\115\116\99\99\124\99\111\108\100\99\99\124\120\56\54\95\115\116\100\99\97\108\108\99\99\124\120\56\54\95\102\97\115\116\99\97\108\108\99\99\124\97\114\109\95\97\112\99\115\99\99\124\97\114\109\95\97\97\112\99\115\99\99\124\97\114\109\95\97\97\112\99\115\95\118\102\112\99\99\124\99\99\124\99\124\115\105\103\110\101\120\116\124\122\101\114\111\101\120\116\124\105\110\114\101\103\124\115\114\101\116\124\110\111\117\110\119\105\110\100\124\110\111\114\101\116\117\114\110\124\110\111\97\108\105\97\115\124\110\111\99\97\112\116\117\114\101\124\98\121\118\97\108\124\110\101\115\116\124\114\101\97\100\110\111\110\101\124\114\101\97\100\111\110\108\121\124\105\110\108\105\110\101\104\105\110\116\124\110\111\105\110\108\105\110\101\124\97\108\119\97\121\115\105\110\108\105\110\101\124\111\112\116\115\105\122\101\124\115\115\112\124\115\115\112\114\101\113\124\110\111\114\101\100\122\111\110\101\124\110\111\105\109\112\108\105\99\105\116\102\108\111\97\116\124\110\97\107\101\100\124\116\121\112\101\124\111\112\97\113\117\101\124\101\113\124\110\101\124\115\108\116\124\115\103\116\124\115\108\101\124\115\103\101\124\117\108\116\124\117\103\116\124\117\108\101\124\117\103\101\124\111\101\113\124\111\110\101\124\111\108\116\124\111\103\116\124\111\108\101\124\111\103\101\124\111\114\100\124\117\110\111\124\117\101\113\124\117\110\101\124\120\124\97\100\100\124\102\97\100\100\124\115\117\98\124\102\115\117\98\124\109\117\108\124\102\109\117\108\124\117\100\105\118\124\115\100\105\118\124\102\100\105\118\124\117\114\101\109\124\115\114\101\109\124\102\114\101\109\124\115\104\108\124\108\115\104\114\124\97\115\104\114\124\97\110\100\124\111\114\124\120\111\114\124\105\99\109\112\124\102\99\109\112\124\112\104\105\124\99\97\108\108\124\116\114\117\110\99\124\122\101\120\116\124\115\101\120\116\124\102\112\116\114\117\110\99\124\102\112\101\120\116\124\117\105\116\111\102\112\124\115\105\116\111\102\112\124\102\112\116\111\117\105\102\112\116\111\115\105\124\105\110\116\116\111\112\116\114\124\112\116\114\116\111\105\110\116\124\98\105\116\99\97\115\116\124\115\101\108\101\99\116\124\118\97\95\97\114\103\124\114\101\116\124\98\114\124\115\119\105\116\99\104\124\105\110\118\111\107\101\124\117\110\119\105\110\100\124\117\110\114\101\97\99\104\97\98\108\101\124\109\97\108\108\111\99\124\97\108\108\111\99\97\124\102\114\101\101\124\108\111\97\100\124\115\116\111\114\101\124\103\101\116\101\108\101\109\101\110\116\112\116\114\124\101\120\116\114\97\99\116\101\108\101\109\101\110\116\124\105\110\115\101\114\116\101\108\101\109\101\110\116\124\115\104\117\102\102\108\101\118\101\99\116\111\114\124\103\101\116\114\101\115\117\108\116\124\101\120\116\114\97\99\116\118\97\108\117\101\124\105\110\115\101\114\116\118\97\108\117\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\118\111\105\100\124\102\108\111\97\116\124\100\111\117\98\108\101\124\120\56\54\95\102\112\56\48\124\102\112\49\50\56\124\112\112\99\95\102\112\49\50\56\124\108\97\98\101\108\124\109\101\116\97\100\97\116\97" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\105\91\49\45\57\93\92\100\42" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Logtalk.hs b/src/Text/Highlighter/Lexers/Logtalk.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Logtalk.hs
@@ -0,0 +1,141 @@
+module Text.Highlighter.Lexers.Logtalk (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\76\111\103\116\97\108\107"
+    , lAliases = ["\108\111\103\116\97\108\107"]
+    , lExtensions = ["\46\108\103\116"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\108\111\103\116\97\108\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+quoted_atom' :: TokenMatcher
+quoted_atom' =
+    [ tok "\91\39\93\91\39\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\91\39\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\40\120\91\97\45\102\65\45\70\48\45\57\93\43\124\91\48\45\55\93\43\41\92\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\39\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\92\115\42\58\45\92\115" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo directive')
+    , tok "\37\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\92\42\40\46\124\92\110\41\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\48\39\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\98\91\48\49\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\111\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\100\43\92\46\63\92\100\42\40\40\101\124\69\41\40\92\43\124\45\41\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\40\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\97\102\116\101\114\124\98\101\102\111\114\101\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\112\97\114\97\109\101\116\101\114\124\116\104\105\115\124\115\101\40\108\102\124\110\100\101\114\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\116\95\112\114\101\100\105\99\97\116\101\124\112\114\101\100\105\99\97\116\101\95\112\114\111\112\101\114\116\121\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\101\120\112\97\110\100\95\40\103\111\97\108\124\116\101\114\109\41\124\40\103\111\97\108\124\116\101\114\109\41\95\101\120\112\97\110\115\105\111\110\124\112\104\114\97\115\101\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\98\111\108\105\115\104\124\99\40\114\101\97\116\101\124\117\114\114\101\110\116\41\41\95\40\111\98\106\101\99\116\124\112\114\111\116\111\99\111\108\124\99\97\116\101\103\111\114\121\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\111\98\106\101\99\116\124\112\114\111\116\111\99\111\108\124\99\97\116\101\103\111\114\121\41\95\112\114\111\112\101\114\116\121\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\99\111\109\112\108\101\109\101\110\116\115\95\111\98\106\101\99\116\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\101\120\116\101\110\100\115\95\40\111\98\106\101\99\116\124\112\114\111\116\111\99\111\108\124\99\97\116\101\103\111\114\121\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\105\109\112\40\108\101\109\101\110\116\115\95\112\114\111\116\111\99\111\108\124\111\114\116\115\95\99\97\116\101\103\111\114\121\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\105\110\115\116\97\110\116\105\97\116\124\115\112\101\99\105\97\108\105\122\41\101\115\95\99\108\97\115\115\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\116\95\101\118\101\110\116\124\40\97\98\111\108\105\115\104\124\100\101\102\105\110\101\41\95\101\118\101\110\116\115\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\116\124\115\101\116\41\95\108\111\103\116\97\108\107\95\102\108\97\103\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\108\111\103\116\97\108\107\95\40\99\111\109\112\105\108\101\124\108\40\105\98\114\97\114\121\95\112\97\116\104\124\111\97\100\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\108\97\117\115\101\124\114\101\116\114\97\99\116\40\97\108\108\41\63\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\97\40\98\111\108\105\115\104\124\115\115\101\114\116\40\97\124\122\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\97\40\108\108\124\116\99\104\41\124\116\104\114\111\119\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\102\97\105\108\124\116\114\117\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\40\98\97\103\124\115\101\116\41\111\102\124\102\40\105\110\100\124\111\114\41\97\108\108\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\116\104\114\101\97\100\101\100\40\95\40\99\97\108\108\124\111\110\99\101\124\105\103\110\111\114\101\124\101\120\105\116\124\112\101\101\107\124\119\97\105\116\124\110\111\116\105\102\121\41\41\63\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\117\110\105\102\121\95\119\105\116\104\95\111\99\99\117\114\115\95\99\104\101\99\107\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\102\117\110\99\116\111\114\124\97\114\103\124\99\111\112\121\95\116\101\114\109\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\114\101\109\124\109\111\100\124\97\98\115\124\115\105\103\110\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\102\108\111\97\116\40\95\40\105\110\116\101\103\101\114\124\102\114\97\99\116\105\111\110\97\108\41\95\112\97\114\116\41\63\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\102\108\111\111\114\124\116\114\117\110\99\97\116\101\124\114\111\117\110\100\124\99\101\105\108\105\110\103\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\111\115\124\97\116\97\110\124\101\120\112\124\108\111\103\124\115\40\105\110\124\113\114\116\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\118\97\114\124\97\116\111\109\40\105\99\41\63\124\105\110\116\101\103\101\114\124\102\108\111\97\116\124\99\111\109\112\111\117\110\100\124\110\40\111\110\118\97\114\124\117\109\98\101\114\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\124\115\101\41\116\95\40\105\110\124\111\117\116\41\112\117\116\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\111\112\101\110\124\99\108\111\115\101\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\102\108\117\115\104\95\111\117\116\112\117\116\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\116\95\101\110\100\95\111\102\95\115\116\114\101\97\109\124\102\108\117\115\104\95\111\117\116\112\117\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\115\116\114\101\97\109\95\112\114\111\112\101\114\116\121\124\97\116\95\101\110\100\95\111\102\95\115\116\114\101\97\109\124\115\101\116\95\115\116\114\101\97\109\95\112\111\115\105\116\105\111\110\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\110\108\124\40\103\101\116\124\112\101\101\107\124\112\117\116\41\95\40\98\121\116\101\124\99\40\104\97\114\124\111\100\101\41\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\110\108\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\114\101\97\100\40\95\116\101\114\109\41\63\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\119\114\105\116\101\40\113\124\95\40\99\97\110\111\110\105\99\97\108\124\116\101\114\109\41\41\63\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\116\95\41\63\111\112\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\117\114\114\101\110\116\95\41\63\99\104\97\114\95\99\111\110\118\101\114\115\105\111\110\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\97\116\111\109\95\40\108\101\110\103\116\104\124\99\40\104\97\114\115\124\111\40\110\99\97\116\124\100\101\115\41\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\99\104\97\114\95\99\111\100\101\124\115\117\98\95\97\116\111\109\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\110\117\109\98\101\114\95\99\40\104\97\114\124\111\100\101\41\115\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\115\101\124\99\117\114\114\101\110\41\116\95\112\114\111\108\111\103\95\102\108\97\103\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\104\97\108\116\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\104\97\108\116\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\58\58\124\58\124\92\94\92\94\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\123\125\93" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\111\110\99\101\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\114\101\112\101\97\116\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\62\62\124\60\60\124\47\92\92\124\92\92\92\92\124\92\92\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\105\115\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\61\58\61\124\61\92\92\61\124\60\124\61\60\124\62\61\124\62\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\61\92\46\92\46" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\61\124\92\92\61\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\61\61\124\92\92\61\61\124\64\61\60\124\64\60\124\64\62\61\124\64\62\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\47\47\124\91\45\43\42\47\93\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\40\109\111\100\124\114\101\109\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\92\42\92\42\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\45\45\62" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\91\33\59\93\124\45\62\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\92\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\63\64\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\40\41\92\91\92\93\44\46\124\93" (Arbitrary "\84\101\120\116")
+    , tok "\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\39\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo quoted_atom')
+    ]
+
+directive' :: TokenMatcher
+directive' =
+    [ tokNext "\40\101\108\41\63\105\102\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\101\40\108\115\101\124\110\100\105\102\41\41\91\46\93" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\99\97\116\101\103\111\114\121\124\111\98\106\101\99\116\124\112\114\111\116\111\99\111\108\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo entityrelations')
+    , tokNext "\40\101\110\100\95\40\99\97\116\101\103\111\114\121\124\111\98\106\101\99\116\124\112\114\111\116\111\99\111\108\41\41\91\46\93" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\112\117\98\108\105\99\124\112\114\111\116\101\99\116\101\100\124\112\114\105\118\97\116\101\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\101\40\110\40\99\111\100\105\110\103\124\115\117\114\101\95\108\111\97\100\101\100\41\124\120\112\111\114\116\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\105\110\40\102\111\124\105\116\105\97\108\105\122\97\116\105\111\110\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\100\121\110\97\109\105\99\124\115\121\110\99\104\114\111\110\105\122\101\100\124\116\104\114\101\97\100\101\100\41\91\46\93" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\97\108\105\97\115\124\100\40\121\110\97\109\105\99\124\105\115\99\111\110\116\105\103\117\111\117\115\41\124\109\40\101\116\97\95\112\114\101\100\105\99\97\116\101\124\111\100\101\124\117\108\116\105\102\105\108\101\41\124\115\40\101\116\95\40\108\111\103\116\97\108\107\124\112\114\111\108\111\103\41\95\102\108\97\103\124\121\110\99\104\114\111\110\105\122\101\100\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\111\112\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\40\99\97\108\108\115\124\114\101\101\120\112\111\114\116\124\117\115\101\40\115\124\95\109\111\100\117\108\101\41\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo root')
+    , tokNext "\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\63\61\91\40\93\41" (Arbitrary "\84\101\120\116") (GoTo root')
+    , tokNext "\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\91\46\93" (Arbitrary "\84\101\120\116") (GoTo root')
+    ]
+
+entityrelations' :: TokenMatcher
+entityrelations' =
+    [ tok "\40\101\120\116\101\110\100\115\124\105\40\110\115\116\97\110\116\105\97\116\101\115\124\109\112\40\108\101\109\101\110\116\115\124\111\114\116\115\41\41\124\115\112\101\99\105\97\108\105\122\101\115\41\40\63\61\91\40\93\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\48\39\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\98\91\48\49\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\111\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\100\43\92\46\63\92\100\42\40\40\101\124\69\41\40\92\43\124\45\41\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\40\91\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\39\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo quoted_atom')
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\40\91\41\93\92\46\41" (Arbitrary "\84\101\120\116") (GoTo root')
+    , tok "\40\58\58\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\44\46\124\93" (Arbitrary "\84\101\120\116")
+    , tok "\37\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\92\42\40\46\124\92\110\41\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Lua.hs b/src/Text/Highlighter/Lexers/Lua.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Lua.hs
@@ -0,0 +1,79 @@
+module Text.Highlighter.Lexers.Lua (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\76\117\97"
+    , lAliases = ["\108\117\97"]
+    , lExtensions = ["\46\108\117\97"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\108\117\97", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\108\117\97"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\97\98\102\110\114\116\118\92\92\34\39\93\124\92\100\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+base' :: TokenMatcher
+base' =
+    [ tok "\40\63\115\41\45\45\92\91\40\61\42\41\92\91\46\42\63\92\93\92\49\92\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\45\45\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\40\63\105\41\40\92\100\42\92\46\92\100\43\124\92\100\43\92\46\92\100\42\41\40\101\91\43\45\93\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\63\105\41\92\100\43\101\91\43\45\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\63\105\41\48\120\91\48\45\57\97\45\102\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\91\94\92\83\92\110\93" (Arbitrary "\84\101\120\116")
+    , tok "\40\63\115\41\92\91\40\61\42\41\92\91\46\42\63\92\93\92\49\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\92\91\92\93\92\123\92\125\92\40\92\41\92\46\44\58\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\61\61\124\126\61\124\60\61\124\62\61\124\92\46\92\46\124\92\46\92\46\92\46\124\91\61\43\92\45\42\47\37\94\60\62\35\93\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\40\98\114\101\97\107\124\100\111\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\100\124\102\111\114\124\105\102\124\105\110\124\114\101\112\101\97\116\124\114\101\116\117\114\110\124\116\104\101\110\124\117\110\116\105\108\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\108\111\99\97\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\105\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tokNext "\40\102\117\110\99\116\105\111\110\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tok "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\40\92\46\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42\41\63" (Arbitrary "\78\97\109\101")
+    , tok "\40\63\115\41\92\91\40\61\42\41\92\91\40\46\42\63\41\92\93\92\49\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101") (Combined [stringescape', sqs'])
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (Combined [stringescape', dqs'])
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf string'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf string'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\35\33\40\46\42\63\41\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo base')
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    , tokNext "\92\40" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/MOOCode.hs b/src/Text/Highlighter/Lexers/MOOCode.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/MOOCode.hs
@@ -0,0 +1,31 @@
+module Text.Highlighter.Lexers.MOOCode (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\79\79\67\111\100\101"
+    , lAliases = ["\109\111\111\99\111\100\101"]
+    , lExtensions = ["\46\109\111\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\109\111\111\99\111\100\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\40\69\95\80\69\82\77\124\69\95\68\73\86\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    , tok "\40\40\35\91\45\48\45\57\93\43\41\124\40\92\36\91\97\45\122\95\65\45\90\48\45\57\93\43\41\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    , tok "\92\98\40\105\102\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\100\105\102\124\102\111\114\124\101\110\100\102\111\114\124\102\111\114\107\124\101\110\100\102\111\114\107\124\119\104\105\108\101\124\101\110\100\119\104\105\108\101\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\114\101\116\117\114\110\124\116\114\121\124\101\120\99\101\112\116\124\101\110\100\116\114\121\124\102\105\110\97\108\108\121\124\105\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\114\97\110\100\111\109\124\108\101\110\103\116\104\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\112\108\97\121\101\114\124\99\97\108\108\101\114\124\116\104\105\115\124\97\114\103\115\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\73\110\115\116\97\110\99\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\40\91\33\59\61\44\123\125\38\92\124\58\92\46\92\91\92\93\64\92\40\92\41\92\60\92\62\92\63\93\43\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\91\97\45\122\95\65\45\90\48\45\57\93\43\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\40\91\97\45\122\65\45\90\95\48\45\57\93\43\41" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Mako.hs b/src/Text/Highlighter/Lexers/Mako.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Mako.hs
@@ -0,0 +1,53 @@
+module Text.Highlighter.Lexers.Mako (lexer) where
+import qualified Text.Highlighter.Lexers.Python as Python
+import qualified Text.Highlighter.Lexers.Python as Python
+import qualified Text.Highlighter.Lexers.Python as Python
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110"
+    , lAliases = ["\109\97\107\111"]
+    , lExtensions = ["\46\109\97\111"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\109\97\107\111"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+ondeftags' :: TokenMatcher
+ondeftags' =
+    [ tok "\60\37" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\60\37\41\40\105\110\99\108\117\100\101\124\105\110\104\101\114\105\116\124\110\97\109\101\115\112\97\99\101\124\112\97\103\101\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf tag'
+    ]
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\40\40\63\58\92\119\43\41\92\115\42\61\41\92\115\42\40\34\46\42\63\34\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tokNext "\47\63\92\115\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\92\115\42\41\40\37\41\40\92\115\42\101\110\100\40\63\58\92\119\43\41\41\40\92\110\124\92\90\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\79\116\104\101\114")])
+    , tok "\40\92\115\42\41\40\37\41\40\91\94\92\110\93\42\41\40\92\110\124\92\90\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Python.lexer), (Arbitrary "\79\116\104\101\114")])
+    , tok "\40\92\115\42\41\40\35\35\91\94\92\110\93\42\41\40\92\110\124\92\90\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\79\116\104\101\114")])
+    , tok "\40\63\115\41\60\37\100\111\99\62\46\42\63\60\47\37\100\111\99\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\40\60\37\41\40\91\92\119\92\46\92\58\93\43\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")]) (GoTo tag')
+    , tok "\40\60\47\37\41\40\91\92\119\92\46\92\58\93\43\41\40\62\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tokNext "\60\37\40\63\61\40\91\92\119\92\46\92\58\93\43\41\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo ondeftags')
+    , tok "\40\60\37\40\63\58\33\63\41\41\40\46\42\63\41\40\37\62\41\40\63\115\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Python.lexer), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\92\36\92\123\41\40\46\42\63\41\40\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Python.lexer), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\63\115\120\41\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\46\43\63\41\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\97\110\121\116\104\105\110\103\44\32\102\111\108\108\111\119\101\100\32\98\121\58\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\58\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\60\61\92\110\41\40\63\61\37\124\92\35\92\35\41\32\124\32\35\32\97\110\32\101\118\97\108\32\111\114\32\99\111\109\109\101\110\116\32\108\105\110\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\61\92\35\92\42\41\32\124\32\32\32\32\32\32\32\32\32\32\35\32\109\117\108\116\105\108\105\110\101\32\99\111\109\109\101\110\116\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\61\60\47\63\37\41\32\124\32\32\32\32\32\32\32\32\32\32\35\32\97\32\112\121\116\104\111\110\32\98\108\111\99\107\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\99\97\108\108\32\115\116\97\114\116\32\111\114\32\101\110\100\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\61\92\36\92\123\41\32\124\32\32\32\32\32\32\32\32\32\32\35\32\97\32\115\117\98\115\116\105\116\117\116\105\111\110\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\63\60\61\92\110\41\40\63\61\92\115\42\37\41\32\124\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\45\32\100\111\110\39\116\32\99\111\110\115\117\109\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\40\92\92\92\110\41\32\124\32\32\32\32\32\32\32\32\32\32\32\32\35\32\97\110\32\101\115\99\97\112\101\100\32\110\101\119\108\105\110\101\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\92\90\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\35\32\101\110\100\32\111\102\32\115\116\114\105\110\103\10\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\32\41\10\32\32\32\32\32\32\32\32\32\32\32\32" (ByGroups [(Arbitrary "\79\116\104\101\114"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+attr' :: TokenMatcher
+attr' =
+    [ tokNext "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\91\94\92\115\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Matlab.hs b/src/Text/Highlighter/Lexers/Matlab.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Matlab.hs
@@ -0,0 +1,42 @@
+module Text.Highlighter.Lexers.Matlab (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\97\116\108\97\98"
+    , lAliases = ["\109\97\116\108\97\98", "\111\99\116\97\118\101"]
+    , lExtensions = ["\46\109"]
+    , lMimetypes = ["\116\101\120\116\47\109\97\116\108\97\98"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+deffunc' :: TokenMatcher
+deffunc' =
+    [ tokNext "\40\92\115\42\41\40\63\58\40\46\43\41\40\92\115\42\41\40\61\41\40\92\115\42\41\41\63\40\46\43\41\40\92\40\41\40\46\42\41\40\92\41\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")]) Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\33\46\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\37\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\94\92\115\42\102\117\110\99\116\105\111\110" (Arbitrary "\75\101\121\119\111\114\100") (GoTo deffunc')
+    , tok "\40\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\108\97\115\115\100\101\102\124\99\111\110\116\105\110\117\101\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\100\124\102\111\114\124\102\117\110\99\116\105\111\110\124\103\108\111\98\97\108\124\105\102\124\111\116\104\101\114\119\105\115\101\124\112\97\114\102\111\114\124\112\101\114\115\105\115\116\101\110\116\124\114\101\116\117\114\110\124\115\119\105\116\99\104\124\116\114\121\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\115\105\110\124\115\105\110\100\124\115\105\110\104\124\97\115\105\110\124\97\115\105\110\100\124\97\115\105\110\104\124\99\111\115\124\99\111\115\100\124\99\111\115\104\124\97\99\111\115\124\97\99\111\115\100\124\97\99\111\115\104\124\116\97\110\124\116\97\110\100\124\116\97\110\104\124\97\116\97\110\124\97\116\97\110\100\124\97\116\97\110\50\124\97\116\97\110\104\124\115\101\99\124\115\101\99\100\124\115\101\99\104\124\97\115\101\99\124\97\115\101\99\100\124\97\115\101\99\104\124\99\115\99\124\99\115\99\100\124\99\115\99\104\124\97\99\115\99\124\97\99\115\99\100\124\97\99\115\99\104\124\99\111\116\124\99\111\116\100\124\99\111\116\104\124\97\99\111\116\124\97\99\111\116\100\124\97\99\111\116\104\124\104\121\112\111\116\124\101\120\112\124\101\120\112\109\49\124\108\111\103\124\108\111\103\49\112\124\108\111\103\49\48\124\108\111\103\50\124\112\111\119\50\124\114\101\97\108\112\111\119\124\114\101\97\108\108\111\103\124\114\101\97\108\115\113\114\116\124\115\113\114\116\124\110\116\104\114\111\111\116\124\110\101\120\116\112\111\119\50\124\97\98\115\124\97\110\103\108\101\124\99\111\109\112\108\101\120\124\99\111\110\106\124\105\109\97\103\124\114\101\97\108\124\117\110\119\114\97\112\124\105\115\114\101\97\108\124\99\112\108\120\112\97\105\114\124\102\105\120\124\102\108\111\111\114\124\99\101\105\108\124\114\111\117\110\100\124\109\111\100\124\114\101\109\124\115\105\103\110\124\97\105\114\121\124\98\101\115\115\101\108\106\124\98\101\115\115\101\108\121\124\98\101\115\115\101\108\104\124\98\101\115\115\101\108\105\124\98\101\115\115\101\108\107\124\98\101\116\97\124\98\101\116\97\105\110\99\124\98\101\116\97\108\110\124\101\108\108\105\112\106\124\101\108\108\105\112\107\101\124\101\114\102\124\101\114\102\99\124\101\114\102\99\120\124\101\114\102\105\110\118\124\101\120\112\105\110\116\124\103\97\109\109\97\124\103\97\109\109\97\105\110\99\124\103\97\109\109\97\108\110\124\112\115\105\124\108\101\103\101\110\100\114\101\124\99\114\111\115\115\124\100\111\116\124\102\97\99\116\111\114\124\105\115\112\114\105\109\101\124\112\114\105\109\101\115\124\103\99\100\124\108\99\109\124\114\97\116\124\114\97\116\115\124\112\101\114\109\115\124\110\99\104\111\111\115\101\107\124\102\97\99\116\111\114\105\97\108\124\99\97\114\116\50\115\112\104\124\99\97\114\116\50\112\111\108\124\112\111\108\50\99\97\114\116\124\115\112\104\50\99\97\114\116\124\104\115\118\50\114\103\98\124\114\103\98\50\104\115\118\124\122\101\114\111\115\124\111\110\101\115\124\101\121\101\124\114\101\112\109\97\116\124\114\97\110\100\124\114\97\110\100\110\124\108\105\110\115\112\97\99\101\124\108\111\103\115\112\97\99\101\124\102\114\101\113\115\112\97\99\101\124\109\101\115\104\103\114\105\100\124\97\99\99\117\109\97\114\114\97\121\124\115\105\122\101\124\108\101\110\103\116\104\124\110\100\105\109\115\124\110\117\109\101\108\124\100\105\115\112\124\105\115\101\109\112\116\121\124\105\115\101\113\117\97\108\124\105\115\101\113\117\97\108\119\105\116\104\101\113\117\97\108\110\97\110\115\124\99\97\116\124\114\101\115\104\97\112\101\124\100\105\97\103\124\98\108\107\100\105\97\103\124\116\114\105\108\124\116\114\105\117\124\102\108\105\112\108\114\124\102\108\105\112\117\100\124\102\108\105\112\100\105\109\124\114\111\116\57\48\124\102\105\110\100\124\101\110\100\124\115\117\98\50\105\110\100\124\105\110\100\50\115\117\98\124\98\115\120\102\117\110\124\110\100\103\114\105\100\124\112\101\114\109\117\116\101\124\105\112\101\114\109\117\116\101\124\115\104\105\102\116\100\105\109\124\99\105\114\99\115\104\105\102\116\124\115\113\117\101\101\122\101\124\105\115\115\99\97\108\97\114\124\105\115\118\101\99\116\111\114\124\97\110\115\124\101\112\115\124\114\101\97\108\109\97\120\124\114\101\97\108\109\105\110\124\112\105\124\105\124\105\110\102\124\110\97\110\124\105\115\110\97\110\124\105\115\105\110\102\124\105\115\102\105\110\105\116\101\124\106\124\119\104\121\124\99\111\109\112\97\110\124\103\97\108\108\101\114\121\124\104\97\100\97\109\97\114\100\124\104\97\110\107\101\108\124\104\105\108\98\124\105\110\118\104\105\108\98\124\109\97\103\105\99\124\112\97\115\99\97\108\124\114\111\115\115\101\114\124\116\111\101\112\108\105\116\122\124\118\97\110\100\101\114\124\119\105\108\107\105\110\115\111\110\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\45\124\61\61\124\126\61\124\60\124\62\124\60\61\124\62\61\124\38\38\124\38\124\126\124\92\124\92\124\63" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\46\92\42\124\92\42\124\92\43\124\92\46\92\94\124\92\46\92\92\124\92\46\92\47\124\92\47\124\92\92" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\91\124\92\93\124\92\40\124\92\41\124\92\123\124\92\125\124\58\124\64\124\92\46\124\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\61\124\58\124\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\63\60\61\91\92\119\92\41\92\93\93\41\92\39" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\40\63\60\33\91\92\119\92\41\92\93\93\41\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/MiniD.hs b/src/Text/Highlighter/Lexers/MiniD.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/MiniD.hs
@@ -0,0 +1,45 @@
+module Text.Highlighter.Lexers.MiniD (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\105\110\105\68"
+    , lAliases = ["\109\105\110\105\100"]
+    , lExtensions = ["\46\109\100"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\109\105\110\105\100\115\114\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+nestedcomment' :: TokenMatcher
+nestedcomment' =
+    [ tok "\91\94\43\47\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\43\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\43\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\46\42\63\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nestedcomment')
+    , tok "\40\97\115\124\97\115\115\101\114\116\124\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\108\97\115\115\124\99\111\110\116\105\110\117\101\124\99\111\114\111\117\116\105\110\101\124\100\101\102\97\117\108\116\124\100\111\124\101\108\115\101\124\102\105\110\97\108\108\121\124\102\111\114\124\102\111\114\101\97\99\104\124\102\117\110\99\116\105\111\110\124\103\108\111\98\97\108\124\110\97\109\101\115\112\97\99\101\124\105\102\124\105\109\112\111\114\116\124\105\110\124\105\115\124\108\111\99\97\108\124\109\111\100\117\108\101\124\114\101\116\117\114\110\124\115\117\112\101\114\124\115\119\105\116\99\104\124\116\104\105\115\124\116\104\114\111\119\124\116\114\121\124\118\97\114\97\114\103\124\119\104\105\108\101\124\119\105\116\104\124\121\105\101\108\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\102\97\108\115\101\124\116\114\117\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\91\48\45\57\93\91\48\45\57\95\93\42\41\63\92\46\91\48\45\57\95\93\43\40\91\101\69\93\91\43\92\45\93\63\91\48\45\57\95\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\66\98\93\91\48\49\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\48\91\67\99\93\91\48\45\55\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\40\48\124\91\49\45\57\93\91\48\45\57\95\93\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\39\40\92\92\91\39\34\63\92\92\97\98\102\110\114\116\118\93\124\92\92\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125\124\92\92\91\48\45\57\93\123\49\44\51\125\124\92\92\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\92\92\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\46\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\64\34\40\34\34\124\46\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\96\40\96\96\124\46\41\42\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\40\126\61\124\92\94\61\124\37\61\124\92\42\61\124\61\61\124\33\61\124\62\62\62\61\124\62\62\62\124\62\62\61\124\62\62\124\62\61\124\60\61\62\124\92\63\61\124\45\92\62\124\60\60\61\124\60\60\124\60\61\124\92\43\92\43\124\92\43\61\124\45\45\124\45\61\124\92\124\92\124\124\92\124\61\124\38\38\124\38\61\124\92\46\92\46\124\47\61\41\124\91\45\47\46\38\36\64\124\92\43\60\62\33\40\41\92\91\92\93\123\125\63\44\59\58\61\42\37\94\126\35\92\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\95\93\92\119\42" (Arbitrary "\78\97\109\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Modelica.hs b/src/Text/Highlighter/Lexers/Modelica.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Modelica.hs
@@ -0,0 +1,83 @@
+module Text.Highlighter.Lexers.Modelica (lexer) where
+import qualified Text.Highlighter.Lexers.Html as Html
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\72\116\109\108"
+    , lAliases = ["\109\111\100\101\108\105\99\97"]
+    , lExtensions = ["\46\109\111"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\109\111\100\101\108\105\99\97"]
+    , lStart = root'
+    , lFlags = [caseless, dotall]
+    }
+
+functions' :: TokenMatcher
+functions' =
+    [ tok "\40\97\98\115\124\97\99\111\115\124\97\99\111\115\104\124\97\115\105\110\124\97\115\105\110\104\124\97\116\97\110\124\97\116\97\110\50\124\97\116\97\110\51\124\99\101\105\108\124\99\111\115\124\99\111\115\104\124\99\114\111\115\115\124\100\105\118\124\101\120\112\124\102\108\111\111\114\124\108\111\103\124\108\111\103\49\48\124\109\111\100\124\114\101\109\124\115\105\103\110\124\115\105\110\124\115\105\110\104\124\115\105\122\101\124\115\113\114\116\124\116\97\110\124\116\97\110\104\124\122\101\114\111\115\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    ]
+
+classes' :: TokenMatcher
+classes' =
+    [ tok "\40\98\108\111\99\107\124\99\108\97\115\115\124\99\111\110\110\101\99\116\111\114\124\102\117\110\99\116\105\111\110\124\109\111\100\101\108\124\112\97\99\107\97\103\101\124\114\101\99\111\114\100\124\116\121\112\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    ]
+
+statements' :: TokenMatcher
+statements' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\124\92\100\46\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\123\125\44\46\59\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\78\85\76\76\124\82\101\97\108\124\73\110\116\101\103\101\114\124\66\111\111\108\101\97\110\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\91\97\45\122\65\45\90\95\93\91\92\119\93\42\124\39\91\97\45\122\65\45\90\95\92\43\92\45\92\42\92\47\92\94\93\91\92\119\93\42\39\41\40\92\46\40\91\97\45\122\65\45\90\95\93\91\92\119\93\42\124\39\91\97\45\122\65\45\90\95\92\43\92\45\92\42\92\47\92\94\93\91\92\119\93\42\39\41\41\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tok "\40\39\91\92\119\92\43\92\45\92\42\92\47\92\94\93\43\39\124\92\119\43\41" (Arbitrary "\78\97\109\101")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+htmlContent' :: TokenMatcher
+htmlContent' =
+    [ tokNext "\60\92\115\42\47\92\115\42\104\116\109\108\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    , tok "\46\43\63\40\63\61\60\92\115\42\47\92\115\42\104\116\109\108\92\115\42\62\41" (Using Html.lexer)
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\108\103\111\114\105\116\104\109\124\97\110\110\111\116\97\116\105\111\110\124\98\114\101\97\107\124\99\111\110\110\101\99\116\124\99\111\110\115\116\97\110\116\124\99\111\110\115\116\114\97\105\110\101\100\98\121\124\100\105\115\99\114\101\116\101\124\101\97\99\104\124\101\108\115\101\124\101\108\115\101\105\102\124\101\108\115\101\119\104\101\110\124\101\110\99\97\112\115\117\108\97\116\101\100\124\101\110\117\109\101\114\97\116\105\111\110\124\101\110\100\124\101\113\117\97\116\105\111\110\124\101\120\105\116\124\101\120\112\97\110\100\97\98\108\101\124\101\120\116\101\110\100\115\124\101\120\116\101\114\110\97\108\124\102\97\108\115\101\124\102\105\110\97\108\124\102\108\111\119\124\102\111\114\124\105\102\124\105\109\112\111\114\116\124\105\110\124\105\110\110\101\114\124\105\110\112\117\116\124\108\111\111\112\124\110\111\110\100\105\115\99\114\101\116\101\124\111\117\116\101\114\124\111\117\116\112\117\116\124\112\97\114\97\109\101\116\101\114\124\112\97\114\116\105\97\108\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\114\101\100\101\99\108\97\114\101\124\114\101\112\108\97\99\101\97\98\108\101\124\115\116\114\101\97\109\124\116\105\109\101\124\116\104\101\110\124\116\114\117\101\124\119\104\101\110\124\119\104\105\108\101\124\119\105\116\104\105\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+operators' :: TokenMatcher
+operators' =
+    [ tok "\40\97\110\100\124\97\115\115\101\114\116\124\99\97\114\100\105\110\97\108\105\116\121\124\99\104\97\110\103\101\124\100\101\108\97\121\124\100\101\114\124\101\100\103\101\124\105\110\105\116\105\97\108\124\110\111\69\118\101\110\116\124\110\111\116\124\111\114\124\112\114\101\124\114\101\105\110\105\116\124\114\101\116\117\114\110\124\115\97\109\112\108\101\124\115\109\111\111\116\104\124\116\101\114\109\105\110\97\108\124\116\101\114\109\105\110\97\116\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , anyOf keywords'
+    , anyOf functions'
+    , anyOf operators'
+    , anyOf classes'
+    , tokNext "\40\34\60\104\116\109\108\62\124\60\104\116\109\108\62\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (GoTo htmlContent')
+    , anyOf statements'
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Modula2.hs b/src/Text/Highlighter/Lexers/Modula2.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Modula2.hs
@@ -0,0 +1,84 @@
+module Text.Highlighter.Lexers.Modula2 (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\111\100\117\108\97\45\50"
+    , lAliases = ["\109\111\100\117\108\97\50", "\109\50"]
+    , lExtensions = ["\46\100\101\102", "\46\109\111\100"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\109\111\100\117\108\97\50"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+punctuation' :: TokenMatcher
+punctuation' =
+    [ tok "\91\92\40\92\41\92\91\92\93\123\125\44\46\58\59\124\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+pragmas' :: TokenMatcher
+pragmas' =
+    [ tok "\92\40\92\42\92\36\40\46\42\63\41\92\42\92\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\60\92\42\40\46\42\63\41\92\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
+numliterals' :: TokenMatcher
+numliterals' =
+    [ tok "\91\48\49\93\43\66" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\66\105\110\97\114\121")
+    , tok "\91\48\45\55\93\43\66" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\91\48\45\55\93\43\67" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\91\48\45\57\65\45\70\93\43\67" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\65\45\70\93\43\72" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43\92\46\91\48\45\57\93\43\69\91\43\45\93\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\93\43\92\46\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+operators' :: TokenMatcher
+operators' =
+    [ tok "\91\42\47\43\61\35\126\38\60\62\92\94\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\58\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\64" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\46\92\46" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\96" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\58\58" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+identifiers' :: TokenMatcher
+identifiers' =
+    [ tok "\40\91\97\45\122\65\45\90\95\92\36\93\91\97\45\122\65\45\90\48\45\57\95\92\36\93\42\41" (Arbitrary "\78\97\109\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , anyOf comments'
+    , anyOf pragmas'
+    , anyOf identifiers'
+    , anyOf numliterals'
+    , anyOf strings'
+    , anyOf operators'
+    , anyOf punctuation'
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\40\46\42\63\41\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\92\40\92\42\40\91\94\92\36\93\46\42\63\41\92\42\92\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/MoinWiki.hs b/src/Text/Highlighter/Lexers/MoinWiki.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/MoinWiki.hs
@@ -0,0 +1,40 @@
+module Text.Highlighter.Lexers.MoinWiki (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\111\105\110\77\111\105\110\47\84\114\97\99\32\87\105\107\105\32\109\97\114\107\117\112"
+    , lAliases = ["\116\114\97\99\45\119\105\107\105", "\109\111\105\110"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\116\114\97\99\45\119\105\107\105"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\33\41\40\92\83\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\61\43\41\40\91\94\61\93\43\41\40\61\43\41\40\92\115\42\35\46\43\41\63\36" (ByGroups [(Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103"), (Using lexer), (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\72\101\97\100\105\110\103"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tokNext "\40\123\123\123\41\40\92\110\35\33\46\43\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")]) (GoTo codeblock')
+    , tok "\40\92\39\92\39\92\39\63\124\92\124\92\124\124\96\124\95\95\124\126\126\124\92\94\124\44\44\124\58\58\41" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\94\40\32\43\41\40\91\46\42\45\93\41\40\32\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\32\43\41\40\91\97\45\122\105\118\120\93\123\49\44\53\125\92\46\41\40\32\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\92\91\92\91\92\119\43\46\42\63\92\93\92\93" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\92\91\91\94\92\115\92\93\93\43\41\40\92\115\43\91\94\92\93\93\43\63\41\63\40\92\93\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\94\45\45\45\45\43\36" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\94\92\110\92\39\92\91\123\33\95\126\94\44\124\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+codeblock' :: TokenMatcher
+codeblock' =
+    [ tokNext "\125\125\125" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") Pop
+    , tokNext "\123\123\123" (Arbitrary "\84\101\120\116") Push
+    , tok "\91\94\123\125\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\46" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/MuPAD.hs b/src/Text/Highlighter/Lexers/MuPAD.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/MuPAD.hs
@@ -0,0 +1,43 @@
+module Text.Highlighter.Lexers.MuPAD (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\117\80\65\68"
+    , lAliases = ["\109\117\112\97\100"]
+    , lExtensions = ["\46\109\117"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\47\47\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tok "\34\40\63\58\91\94\34\92\92\93\124\92\92\46\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\40\124\92\41\124\92\91\124\92\93\124\92\123\124\92\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\63\120\41\92\98\40\63\58\10\32\32\32\32\32\32\32\32\32\32\32\32\110\101\120\116\124\98\114\101\97\107\124\101\110\100\124\10\32\32\32\32\32\32\32\32\32\32\32\32\97\120\105\111\109\124\101\110\100\95\97\120\105\111\109\124\99\97\116\101\103\111\114\121\124\101\110\100\95\99\97\116\101\103\111\114\121\124\100\111\109\97\105\110\124\101\110\100\95\100\111\109\97\105\110\124\105\110\104\101\114\105\116\115\124\10\32\32\32\32\32\32\32\32\32\32\32\32\105\102\124\37\105\102\124\116\104\101\110\124\101\108\105\102\124\101\108\115\101\124\101\110\100\95\105\102\124\10\32\32\32\32\32\32\32\32\32\32\32\32\99\97\115\101\124\111\102\124\100\111\124\111\116\104\101\114\119\105\115\101\124\101\110\100\95\99\97\115\101\124\10\32\32\32\32\32\32\32\32\32\32\32\32\119\104\105\108\101\124\101\110\100\95\119\104\105\108\101\124\10\32\32\32\32\32\32\32\32\32\32\32\32\114\101\112\101\97\116\124\117\110\116\105\108\124\101\110\100\95\114\101\112\101\97\116\124\10\32\32\32\32\32\32\32\32\32\32\32\32\102\111\114\124\102\114\111\109\124\116\111\124\100\111\119\110\116\111\124\115\116\101\112\124\101\110\100\95\102\111\114\124\10\32\32\32\32\32\32\32\32\32\32\32\32\112\114\111\99\124\108\111\99\97\108\124\111\112\116\105\111\110\124\115\97\118\101\124\98\101\103\105\110\124\101\110\100\95\112\114\111\99\124\10\32\32\32\32\32\32\32\32\32\32\32\32\100\101\108\101\116\101\124\102\114\97\109\101\10\32\32\32\32\32\32\32\32\32\32\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\63\120\41\92\98\40\63\58\10\32\32\32\32\32\32\32\32\32\32\32\32\68\79\77\95\65\82\82\65\89\124\68\79\77\95\66\79\79\76\124\68\79\77\95\67\79\77\80\76\69\88\124\68\79\77\95\68\79\77\65\73\78\124\68\79\77\95\69\88\69\67\124\68\79\77\95\69\88\80\82\124\10\32\32\32\32\32\32\32\32\32\32\32\32\68\79\77\95\70\65\73\76\124\68\79\77\95\70\76\79\65\84\124\68\79\77\95\70\82\65\77\69\124\68\79\77\95\70\85\78\67\95\69\78\86\124\68\79\77\95\72\70\65\82\82\65\89\124\68\79\77\95\73\68\69\78\84\124\10\32\32\32\32\32\32\32\32\32\32\32\32\68\79\77\95\73\78\84\124\68\79\77\95\73\78\84\69\82\86\65\76\124\68\79\77\95\76\73\83\84\124\68\79\77\95\78\73\76\124\68\79\77\95\78\85\76\76\124\68\79\77\95\80\79\76\89\124\68\79\77\95\80\82\79\67\124\10\32\32\32\32\32\32\32\32\32\32\32\32\68\79\77\95\80\82\79\67\95\69\78\86\124\68\79\77\95\82\65\84\124\68\79\77\95\83\69\84\124\68\79\77\95\83\84\82\73\78\71\124\68\79\77\95\84\65\66\76\69\124\68\79\77\95\86\65\82\10\32\32\32\32\32\32\32\32\32\32\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tok "\40\63\120\41\92\98\40\63\58\10\32\32\32\32\32\32\32\32\32\32\32\32\80\73\124\69\85\76\69\82\124\69\124\67\65\84\65\76\65\78\124\10\32\32\32\32\32\32\32\32\32\32\32\32\78\73\76\124\70\65\73\76\124\117\110\100\101\102\105\110\101\100\124\105\110\102\105\110\105\116\121\124\10\32\32\32\32\32\32\32\32\32\32\32\32\84\82\85\69\124\70\65\76\83\69\124\85\78\75\78\79\87\78\10\32\32\32\32\32\32\32\32\32\32\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\98\40\63\58\100\111\109\124\112\114\111\99\110\97\109\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\92\46\124\44\124\58\124\59\124\61\124\92\43\124\45\124\92\42\124\47\124\92\94\124\64\124\62\124\60\124\92\36\124\92\124\124\33\124\92\39\124\37\124\126\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\63\120\41\92\98\40\63\58\10\32\32\32\32\32\32\32\32\32\32\32\32\97\110\100\124\111\114\124\110\111\116\124\120\111\114\124\10\32\32\32\32\32\32\32\32\32\32\32\32\97\115\115\117\109\105\110\103\124\10\32\32\32\32\32\32\32\32\32\32\32\32\100\105\118\124\109\111\100\124\10\32\32\32\32\32\32\32\32\32\32\32\32\117\110\105\111\110\124\109\105\110\117\115\124\105\110\116\101\114\115\101\99\116\124\105\110\124\115\117\98\115\101\116\10\32\32\32\32\32\32\32\32\32\32\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\92\98\40\63\58\73\124\82\68\78\95\73\78\70\124\82\68\95\78\73\78\70\124\82\68\95\78\65\78\41\92\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\40\63\120\41\10\32\32\32\32\32\32\32\32\32\32\40\40\63\58\91\97\45\122\65\45\90\95\35\93\91\97\45\122\65\45\90\95\35\48\45\57\93\42\124\96\91\94\96\93\42\96\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\58\58\91\97\45\122\65\45\90\95\35\93\91\97\45\122\65\45\90\95\35\48\45\57\93\42\124\96\91\94\96\93\42\96\41\42\41\92\115\42\40\91\40\93\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\63\120\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\91\97\45\122\65\45\90\95\35\93\91\97\45\122\65\45\90\95\35\48\45\57\93\42\124\96\91\94\96\93\42\96\41\10\32\32\32\32\32\32\32\32\32\32\40\63\58\58\58\91\97\45\122\65\45\90\95\35\93\91\97\45\122\65\45\90\95\35\48\45\57\93\42\124\96\91\94\96\93\42\96\41\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\48\45\57\93\43\40\63\58\92\46\91\48\45\57\93\42\41\63\40\63\58\101\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\46\91\48\45\57\93\43\40\63\58\101\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Mxml.hs b/src/Text/Highlighter/Lexers/Mxml.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Mxml.hs
@@ -0,0 +1,49 @@
+module Text.Highlighter.Lexers.Mxml (lexer) where
+import qualified Text.Highlighter.Lexers.ActionScript3 as ActionScript3
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\65\99\116\105\111\110\83\99\114\105\112\116\51"
+    , lAliases = ["\109\120\109\108"]
+    , lExtensions = ["\46\109\120\109\108"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\45\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\45\45\62" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\45" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\46\58\45\93\43\92\115\42\61" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101") (GoTo attr')
+    , tokNext "\47\63\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\60\38\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\38\92\83\42\63\59" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    , tok "\40\92\60\92\33\92\91\67\68\65\84\65\92\91\41\40\46\42\63\41\40\92\93\92\93\92\62\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Using ActionScript3.lexer), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tokNext "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\60\92\63\46\42\63\92\63\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\60\33\91\94\62\93\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (GoTo tag')
+    , tok "\60\92\115\42\47\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    ]
+
+attr' :: TokenMatcher
+attr' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\91\94\92\115\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/MySql.hs b/src/Text/Highlighter/Lexers/MySql.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/MySql.hs
@@ -0,0 +1,44 @@
+module Text.Highlighter.Lexers.MySql (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\77\121\83\81\76"
+    , lAliases = ["\109\121\115\113\108"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\109\121\115\113\108"]
+    , lStart = root'
+    , lFlags = [caseless]
+    }
+
+multilineComments' :: TokenMatcher
+multilineComments' =
+    [ tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComments')
+    , tokNext "\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\94\47\92\42\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\35\124\45\45\92\115\43\41\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComments')
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\48\45\57\93\42\92\46\91\48\45\57\93\43\40\101\91\43\45\93\91\48\45\57\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\39\40\39\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\34\40\34\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\96\40\96\96\124\91\94\96\93\41\42\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\91\43\42\47\60\62\61\126\33\64\35\37\94\38\124\96\63\94\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\40\116\105\110\121\105\110\116\124\115\109\97\108\108\105\110\116\124\109\101\100\105\117\109\105\110\116\124\105\110\116\124\105\110\116\101\103\101\114\124\98\105\103\105\110\116\124\100\97\116\101\124\100\97\116\101\116\105\109\101\124\116\105\109\101\124\98\105\116\124\98\111\111\108\124\116\105\110\121\116\101\120\116\124\109\101\100\105\117\109\116\101\120\116\124\108\111\110\103\116\101\120\116\124\116\101\120\116\124\116\105\110\121\98\108\111\98\124\109\101\100\105\117\109\98\108\111\98\124\108\111\110\103\98\108\111\98\124\98\108\111\98\124\102\108\111\97\116\124\100\111\117\98\108\101\124\100\111\117\98\108\101\92\115\43\112\114\101\99\105\115\105\111\110\124\114\101\97\108\124\110\117\109\101\114\105\99\124\100\101\99\124\100\101\99\105\109\97\108\124\116\105\109\101\115\116\97\109\112\124\121\101\97\114\124\99\104\97\114\124\118\97\114\99\104\97\114\124\118\97\114\98\105\110\97\114\121\124\118\97\114\99\104\97\114\97\99\116\101\114\124\101\110\117\109\124\115\101\116\41\40\92\98\92\115\42\41\40\92\40\41\63" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\92\98\40\97\100\100\124\97\108\108\124\97\108\116\101\114\124\97\110\97\108\121\122\101\124\97\110\100\124\97\115\124\97\115\99\124\97\115\101\110\115\105\116\105\118\101\124\98\101\102\111\114\101\124\98\101\116\119\101\101\110\124\98\105\103\105\110\116\124\98\105\110\97\114\121\124\98\108\111\98\124\98\111\116\104\124\98\121\124\99\97\108\108\124\99\97\115\99\97\100\101\124\99\97\115\101\124\99\104\97\110\103\101\124\99\104\97\114\124\99\104\97\114\97\99\116\101\114\124\99\104\101\99\107\124\99\111\108\108\97\116\101\124\99\111\108\117\109\110\124\99\111\110\100\105\116\105\111\110\124\99\111\110\115\116\114\97\105\110\116\124\99\111\110\116\105\110\117\101\124\99\111\110\118\101\114\116\124\99\114\101\97\116\101\124\99\114\111\115\115\124\99\117\114\114\101\110\116\95\100\97\116\101\124\99\117\114\114\101\110\116\95\116\105\109\101\124\99\117\114\114\101\110\116\95\116\105\109\101\115\116\97\109\112\124\99\117\114\114\101\110\116\95\117\115\101\114\124\99\117\114\115\111\114\124\100\97\116\97\98\97\115\101\124\100\97\116\97\98\97\115\101\115\124\100\97\121\95\104\111\117\114\124\100\97\121\95\109\105\99\114\111\115\101\99\111\110\100\124\100\97\121\95\109\105\110\117\116\101\124\100\97\121\95\115\101\99\111\110\100\124\100\101\99\124\100\101\99\105\109\97\108\124\100\101\99\108\97\114\101\124\100\101\102\97\117\108\116\124\100\101\108\97\121\101\100\124\100\101\108\101\116\101\124\100\101\115\99\124\100\101\115\99\114\105\98\101\124\100\101\116\101\114\109\105\110\105\115\116\105\99\124\100\105\115\116\105\110\99\116\124\100\105\115\116\105\110\99\116\114\111\119\124\100\105\118\124\100\111\117\98\108\101\124\100\114\111\112\124\100\117\97\108\124\101\97\99\104\124\101\108\115\101\124\101\108\115\101\105\102\124\101\110\99\108\111\115\101\100\124\101\115\99\97\112\101\100\124\101\120\105\115\116\115\124\101\120\105\116\124\101\120\112\108\97\105\110\124\102\101\116\99\104\124\102\108\111\97\116\124\102\108\111\97\116\52\124\102\108\111\97\116\56\124\102\111\114\124\102\111\114\99\101\124\102\111\114\101\105\103\110\124\102\114\111\109\124\102\117\108\108\116\101\120\116\124\103\114\97\110\116\124\103\114\111\117\112\124\104\97\118\105\110\103\124\104\105\103\104\95\112\114\105\111\114\105\116\121\124\104\111\117\114\95\109\105\99\114\111\115\101\99\111\110\100\124\104\111\117\114\95\109\105\110\117\116\101\124\104\111\117\114\95\115\101\99\111\110\100\124\105\102\124\105\103\110\111\114\101\124\105\110\124\105\110\100\101\120\124\105\110\102\105\108\101\124\105\110\110\101\114\124\105\110\111\117\116\124\105\110\115\101\110\115\105\116\105\118\101\124\105\110\115\101\114\116\124\105\110\116\124\105\110\116\49\124\105\110\116\50\124\105\110\116\51\124\105\110\116\52\124\105\110\116\56\124\105\110\116\101\103\101\114\124\105\110\116\101\114\118\97\108\124\105\110\116\111\124\105\115\124\105\116\101\114\97\116\101\124\106\111\105\110\124\107\101\121\124\107\101\121\115\124\107\105\108\108\124\108\101\97\100\105\110\103\124\108\101\97\118\101\124\108\101\102\116\124\108\105\107\101\124\108\105\109\105\116\124\108\105\110\101\115\124\108\111\97\100\124\108\111\99\97\108\116\105\109\101\124\108\111\99\97\108\116\105\109\101\115\116\97\109\112\124\108\111\99\107\124\108\111\110\103\124\108\111\111\112\124\108\111\119\95\112\114\105\111\114\105\116\121\124\109\97\116\99\104\124\109\105\110\117\116\101\95\109\105\99\114\111\115\101\99\111\110\100\124\109\105\110\117\116\101\95\115\101\99\111\110\100\124\109\111\100\124\109\111\100\105\102\105\101\115\124\110\97\116\117\114\97\108\124\110\111\95\119\114\105\116\101\95\116\111\95\98\105\110\108\111\103\124\110\111\116\124\110\117\109\101\114\105\99\124\111\110\124\111\112\116\105\109\105\122\101\124\111\112\116\105\111\110\124\111\112\116\105\111\110\97\108\108\121\124\111\114\124\111\114\100\101\114\124\111\117\116\124\111\117\116\101\114\124\111\117\116\102\105\108\101\124\112\114\101\99\105\115\105\111\110\124\112\114\105\109\97\114\121\124\112\114\111\99\101\100\117\114\101\124\112\117\114\103\101\124\114\97\105\100\48\124\114\101\97\100\124\114\101\97\100\115\124\114\101\97\108\124\114\101\102\101\114\101\110\99\101\115\124\114\101\103\101\120\112\124\114\101\108\101\97\115\101\124\114\101\110\97\109\101\124\114\101\112\101\97\116\124\114\101\112\108\97\99\101\124\114\101\113\117\105\114\101\124\114\101\115\116\114\105\99\116\124\114\101\116\117\114\110\124\114\101\118\111\107\101\124\114\105\103\104\116\124\114\108\105\107\101\124\115\99\104\101\109\97\124\115\99\104\101\109\97\115\124\115\101\99\111\110\100\95\109\105\99\114\111\115\101\99\111\110\100\124\115\101\108\101\99\116\124\115\101\110\115\105\116\105\118\101\124\115\101\112\97\114\97\116\111\114\124\115\101\116\124\115\104\111\119\124\115\109\97\108\108\105\110\116\124\115\111\110\97\109\101\124\115\112\97\116\105\97\108\124\115\112\101\99\105\102\105\99\124\115\113\108\124\115\113\108\95\98\105\103\95\114\101\115\117\108\116\124\115\113\108\95\99\97\108\99\95\102\111\117\110\100\95\114\111\119\115\124\115\113\108\95\115\109\97\108\108\95\114\101\115\117\108\116\124\115\113\108\101\120\99\101\112\116\105\111\110\124\115\113\108\115\116\97\116\101\124\115\113\108\119\97\114\110\105\110\103\124\115\115\108\124\115\116\97\114\116\105\110\103\124\115\116\114\97\105\103\104\116\95\106\111\105\110\124\116\97\98\108\101\124\116\101\114\109\105\110\97\116\101\100\124\116\104\101\110\124\116\111\124\116\114\97\105\108\105\110\103\124\116\114\105\103\103\101\114\124\117\110\100\111\124\117\110\105\111\110\124\117\110\105\113\117\101\124\117\110\108\111\99\107\124\117\110\115\105\103\110\101\100\124\117\112\100\97\116\101\124\117\115\97\103\101\124\117\115\101\124\117\115\105\110\103\124\117\116\99\95\100\97\116\101\124\117\116\99\95\116\105\109\101\124\117\116\99\95\116\105\109\101\115\116\97\109\112\124\118\97\108\117\101\115\124\118\97\114\121\105\110\103\124\119\104\101\110\124\119\104\101\114\101\124\119\104\105\108\101\124\119\105\116\104\124\119\114\105\116\101\124\120\53\48\57\124\120\111\114\124\121\101\97\114\95\109\111\110\116\104\124\122\101\114\111\102\105\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\97\117\116\111\95\105\110\99\114\101\109\101\110\116\124\101\110\103\105\110\101\124\99\104\97\114\115\101\116\124\116\97\98\108\101\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\64\91\65\45\90\97\45\122\48\45\57\93\42\91\46\95\93\42\91\65\45\90\97\45\122\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\59\58\40\41\92\91\92\93\44\92\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Nasm.hs b/src/Text/Highlighter/Lexers/Nasm.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Nasm.hs
@@ -0,0 +1,65 @@
+module Text.Highlighter.Lexers.Nasm (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\78\65\83\77"
+    , lAliases = ["\110\97\115\109"]
+    , lExtensions = ["\46\97\115\109", "\46\65\83\77"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\110\97\115\109"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+preproc' :: TokenMatcher
+preproc' =
+    [ tok "\91\94\59\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\59\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101") Pop
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+punctuation' :: TokenMatcher
+punctuation' =
+    [ tok "\91\44\40\41\58\92\91\92\93\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\38\124\94\60\62\43\42\47\37\126\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\36\93\43" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\115\101\103\124\119\114\116\124\115\116\114\105\99\116" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\98\121\116\101\124\91\100\113\93\63\119\111\114\100" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\94\92\115\42\37" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo preproc')
+    , tok "\91\97\45\122\65\45\90\36\46\95\63\93\91\97\45\122\65\45\90\48\45\57\36\46\95\63\35\64\126\93\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tokNext "\40\91\97\45\122\65\45\90\36\46\95\63\93\91\97\45\122\65\45\90\48\45\57\36\46\95\63\35\64\126\93\42\41\40\92\115\43\41\40\101\113\117\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")]) (GoTo instructionArgs')
+    , tokNext "\66\73\84\83\124\85\83\69\49\54\124\85\83\69\51\50\124\83\69\67\84\73\79\78\124\83\69\71\77\69\78\84\124\65\66\83\79\76\85\84\69\124\69\88\84\69\82\78\124\71\76\79\66\65\76\124\79\82\71\124\65\76\73\71\78\124\83\84\82\85\67\124\69\78\68\83\84\82\85\67\124\67\79\77\77\79\78\124\67\80\85\124\71\82\79\85\80\124\85\80\80\69\82\67\65\83\69\124\73\77\80\79\82\84\124\69\88\80\79\82\84\124\76\73\66\82\65\82\89\124\77\79\68\85\76\69" (Arbitrary "\75\101\121\119\111\114\100") (GoTo instructionArgs')
+    , tokNext "\40\63\58\114\101\115\124\100\41\91\98\119\100\113\116\93\124\116\105\109\101\115" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo instructionArgs')
+    , tokNext "\91\97\45\122\65\45\90\36\46\95\63\93\91\97\45\122\65\45\90\48\45\57\36\46\95\63\35\64\126\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") (GoTo instructionArgs')
+    , tok "\91\92\114\92\110\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\91\32\92\116\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\59\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+instructionArgs' :: TokenMatcher
+instructionArgs' =
+    [ tok "\34\40\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\40\63\58\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43\124\36\48\91\48\45\57\97\45\102\65\45\70\93\42\124\91\48\45\57\93\43\91\48\45\57\97\45\102\65\45\70\93\42\104\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\55\93\43\113" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\91\48\49\93\43\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\48\45\57\93\43\92\46\101\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , anyOf punctuation'
+    , tok "\91\97\45\100\93\91\108\104\93\124\101\63\91\97\45\100\93\120\124\101\63\91\115\98\93\112\124\101\63\91\115\100\93\105\124\91\99\45\103\115\93\115\124\115\116\91\48\45\55\93\124\109\109\91\48\45\55\93\124\99\114\91\48\45\52\93\124\100\114\91\48\45\51\54\55\93\124\116\114\91\51\45\55\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\36\46\95\63\93\91\97\45\122\65\45\90\48\45\57\36\46\95\63\35\64\126\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tokNext "\91\92\114\92\110\93\43" (Arbitrary "\84\101\120\116") Pop
+    , anyOf whitespace'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Newspeak.hs b/src/Text/Highlighter/Lexers/Newspeak.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Newspeak.hs
@@ -0,0 +1,60 @@
+module Text.Highlighter.Lexers.Newspeak (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\78\101\119\115\112\101\97\107"
+    , lAliases = ["\110\101\119\115\112\101\97\107"]
+    , lExtensions = ["\46\110\115\50"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\110\101\119\115\112\101\97\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+literals' :: TokenMatcher
+literals' =
+    [ tok "\92\36\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\91\94\39\93\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\35\39\91\94\39\93\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\35\92\119\43\58\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\35\40\92\43\124\92\47\124\126\124\92\42\124\60\124\62\124\61\124\64\124\37\124\92\124\124\38\124\92\63\124\33\124\44\124\45\41\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\98\40\78\101\119\115\113\117\101\97\107\50\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\39\91\94\39\93\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\98\40\99\108\97\115\115\41\40\92\115\43\41\40\91\97\45\122\65\45\90\48\45\57\95\93\43\41\40\92\115\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")])
+    , tok "\92\98\40\109\105\120\105\110\124\115\101\108\102\124\115\117\112\101\114\124\112\114\105\118\97\116\101\124\112\117\98\108\105\99\124\112\114\111\116\101\99\116\101\100\124\110\105\108\124\116\114\117\101\124\102\97\108\115\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\91\97\45\122\65\45\90\48\45\57\95\93\43\92\58\41\40\92\115\42\41\40\91\97\45\122\65\45\90\95\93\92\119\43\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    , tok "\40\91\97\45\122\65\45\90\48\45\57\95\93\43\41\40\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\60\91\97\45\122\65\45\90\48\45\57\95\93\43\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\112\101\99\105\97\108")
+    , anyOf expressionstat'
+    , anyOf whitespace'
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\34\91\94\34\93\42\34" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+expressionstat' :: TokenMatcher
+expressionstat' =
+    [ tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\58\92\119\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\92\119\43\41\40\58\58\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\92\119\43\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\92\119\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\40\124\92\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\91\124\92\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\123\124\92\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\92\94\124\92\43\124\92\47\124\126\124\92\42\124\60\124\62\124\61\124\64\124\37\124\92\124\124\38\124\92\63\124\33\124\44\124\45\124\58\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\46\124\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , anyOf whitespace'
+    , anyOf literals'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/NginxConf.hs b/src/Text/Highlighter/Lexers/NginxConf.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/NginxConf.hs
@@ -0,0 +1,52 @@
+module Text.Highlighter.Lexers.NginxConf (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\78\103\105\110\120\32\99\111\110\102\105\103\117\114\97\116\105\111\110\32\102\105\108\101"
+    , lAliases = ["\110\103\105\110\120"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\110\103\105\110\120\45\99\111\110\102"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+base' :: TokenMatcher
+base' =
+    [ tok "\35\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\111\110\124\111\102\102" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\36\91\94\92\115\59\35\40\41\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\91\97\45\122\48\45\57\46\45\93\43\41\40\58\41\40\91\48\45\57\93\43\41" (ByGroups [(Arbitrary "\78\97\109\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")])
+    , tok "\91\97\45\122\45\93\43\47\91\97\45\122\45\43\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\48\45\57\93\43\91\107\109\93\63\92\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\40\126\41\40\92\115\42\41\40\91\94\92\115\123\93\43\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")])
+    , tok "\91\58\61\126\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\94\92\115\59\35\123\125\36\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\47\91\94\92\115\59\35\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\91\36\59\93" (Arbitrary "\84\101\120\116")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\105\110\99\108\117\100\101\41\40\92\115\43\41\40\91\94\92\115\59\93\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101")])
+    , tokNext "\91\94\92\115\59\35\93\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo stmt')
+    , anyOf base'
+    ]
+
+stmt' :: TokenMatcher
+stmt' =
+    [ tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo block')
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , anyOf base'
+    ]
+
+block' :: TokenMatcher
+block' =
+    [ tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (PopNum 2)
+    , tokNext "\91\94\92\115\59\35\93\43" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101") (GoTo stmt')
+    , anyOf base'
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/NumPy.hs b/src/Text/Highlighter/Lexers/NumPy.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/NumPy.hs
@@ -0,0 +1,149 @@
+module Text.Highlighter.Lexers.NumPy (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\78\117\109\80\121"
+    , lAliases = ["\110\117\109\112\121"]
+    , lExtensions = []
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+tsqs' :: TokenMatcher
+tsqs' =
+    [ tokNext "\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+builtins' :: TokenMatcher
+builtins' =
+    [ tok "\40\63\60\33\92\46\41\40\95\95\105\109\112\111\114\116\95\95\124\97\98\115\124\97\108\108\124\97\110\121\124\97\112\112\108\121\124\98\97\115\101\115\116\114\105\110\103\124\98\105\110\124\98\111\111\108\124\98\117\102\102\101\114\124\98\121\116\101\97\114\114\97\121\124\98\121\116\101\115\124\99\97\108\108\97\98\108\101\124\99\104\114\124\99\108\97\115\115\109\101\116\104\111\100\124\99\109\112\124\99\111\101\114\99\101\124\99\111\109\112\105\108\101\124\99\111\109\112\108\101\120\124\100\101\108\97\116\116\114\124\100\105\99\116\124\100\105\114\124\100\105\118\109\111\100\124\101\110\117\109\101\114\97\116\101\124\101\118\97\108\124\101\120\101\99\102\105\108\101\124\101\120\105\116\124\102\105\108\101\124\102\105\108\116\101\114\124\102\108\111\97\116\124\102\114\111\122\101\110\115\101\116\124\103\101\116\97\116\116\114\124\103\108\111\98\97\108\115\124\104\97\115\97\116\116\114\124\104\97\115\104\124\104\101\120\124\105\100\124\105\110\112\117\116\124\105\110\116\124\105\110\116\101\114\110\124\105\115\105\110\115\116\97\110\99\101\124\105\115\115\117\98\99\108\97\115\115\124\105\116\101\114\124\108\101\110\124\108\105\115\116\124\108\111\99\97\108\115\124\108\111\110\103\124\109\97\112\124\109\97\120\124\109\105\110\124\110\101\120\116\124\111\98\106\101\99\116\124\111\99\116\124\111\112\101\110\124\111\114\100\124\112\111\119\124\112\114\111\112\101\114\116\121\124\114\97\110\103\101\124\114\97\119\95\105\110\112\117\116\124\114\101\100\117\99\101\124\114\101\108\111\97\100\124\114\101\112\114\124\114\101\118\101\114\115\101\100\124\114\111\117\110\100\124\115\101\116\124\115\101\116\97\116\116\114\124\115\108\105\99\101\124\115\111\114\116\101\100\124\115\116\97\116\105\99\109\101\116\104\111\100\124\115\116\114\124\115\117\109\124\115\117\112\101\114\124\116\117\112\108\101\124\116\121\112\101\124\117\110\105\99\104\114\124\117\110\105\99\111\100\101\124\118\97\114\115\124\120\114\97\110\103\101\124\122\105\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\33\92\46\41\40\115\101\108\102\124\78\111\110\101\124\69\108\108\105\112\115\105\115\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\70\97\108\115\101\124\84\114\117\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\63\60\33\92\46\41\40\65\114\105\116\104\109\101\116\105\99\69\114\114\111\114\124\65\115\115\101\114\116\105\111\110\69\114\114\111\114\124\65\116\116\114\105\98\117\116\101\69\114\114\111\114\124\66\97\115\101\69\120\99\101\112\116\105\111\110\124\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\69\79\70\69\114\114\111\114\124\69\110\118\105\114\111\110\109\101\110\116\69\114\114\111\114\124\69\120\99\101\112\116\105\111\110\124\70\108\111\97\116\105\110\103\80\111\105\110\116\69\114\114\111\114\124\70\117\116\117\114\101\87\97\114\110\105\110\103\124\71\101\110\101\114\97\116\111\114\69\120\105\116\124\73\79\69\114\114\111\114\124\73\109\112\111\114\116\69\114\114\111\114\124\73\109\112\111\114\116\87\97\114\110\105\110\103\124\73\110\100\101\110\116\97\116\105\111\110\69\114\114\111\114\124\73\110\100\101\120\69\114\114\111\114\124\75\101\121\69\114\114\111\114\124\75\101\121\98\111\97\114\100\73\110\116\101\114\114\117\112\116\124\76\111\111\107\117\112\69\114\114\111\114\124\77\101\109\111\114\121\69\114\114\111\114\124\78\97\109\101\69\114\114\111\114\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\69\114\114\111\114\124\79\83\69\114\114\111\114\124\79\118\101\114\102\108\111\119\69\114\114\111\114\124\79\118\101\114\102\108\111\119\87\97\114\110\105\110\103\124\80\101\110\100\105\110\103\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\82\101\102\101\114\101\110\99\101\69\114\114\111\114\124\82\117\110\116\105\109\101\69\114\114\111\114\124\82\117\110\116\105\109\101\87\97\114\110\105\110\103\124\83\116\97\110\100\97\114\100\69\114\114\111\114\124\83\116\111\112\73\116\101\114\97\116\105\111\110\124\83\121\110\116\97\120\69\114\114\111\114\124\83\121\110\116\97\120\87\97\114\110\105\110\103\124\83\121\115\116\101\109\69\114\114\111\114\124\83\121\115\116\101\109\69\120\105\116\124\84\97\98\69\114\114\111\114\124\84\121\112\101\69\114\114\111\114\124\85\110\98\111\117\110\100\76\111\99\97\108\69\114\114\111\114\124\85\110\105\99\111\100\101\68\101\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\110\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\84\114\97\110\115\108\97\116\101\69\114\114\111\114\124\85\110\105\99\111\100\101\87\97\114\110\105\110\103\124\85\115\101\114\87\97\114\110\105\110\103\124\86\97\108\117\101\69\114\114\111\114\124\86\77\83\69\114\114\111\114\124\87\97\114\110\105\110\103\124\87\105\110\100\111\119\115\69\114\114\111\114\124\90\101\114\111\68\105\118\105\115\105\111\110\69\114\114\111\114\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    ]
+
+name' :: TokenMatcher
+name' =
+    [ tok "\64\91\97\45\122\65\45\90\48\45\57\95\46\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+tdqs' :: TokenMatcher
+tdqs' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+backtick' :: TokenMatcher
+backtick' =
+    [ tok "\96\46\42\63\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43\76" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114" :. Arbitrary "\76\111\110\103")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\115\115\101\114\116\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\100\101\108\124\101\108\105\102\124\101\108\115\101\124\101\120\99\101\112\116\124\101\120\101\99\124\102\105\110\97\108\108\121\124\102\111\114\124\103\108\111\98\97\108\124\105\102\124\108\97\109\98\100\97\124\112\97\115\115\124\112\114\105\110\116\124\114\97\105\115\101\124\114\101\116\117\114\110\124\116\114\121\124\119\104\105\108\101\124\121\105\101\108\100\124\97\115\124\119\105\116\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tok "\40\40\63\58\92\115\124\92\92\92\115\41\43\41\40\97\115\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\40\92\115\42\41\40\44\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+nl' :: TokenMatcher
+nl' =
+    [ tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\94\40\92\115\42\41\40\34\34\34\40\63\58\46\124\92\110\41\42\63\34\34\34\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\94\40\92\115\42\41\40\39\39\39\40\63\58\46\124\92\110\41\42\63\39\39\39\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\93\123\125\58\40\41\44\59\91\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\92" (Arbitrary "\84\101\120\116")
+    , tok "\40\105\110\124\105\115\124\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , anyOf keywords'
+    , tokNext "\40\100\101\102\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\102\114\111\109\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo fromimport')
+    , tokNext "\40\105\109\112\111\114\116\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , anyOf builtins'
+    , anyOf backtick'
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
+    , tokNext "\91\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
+    , tokNext "\91\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
+    , tokNext "\91\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
+    , tokNext "\91\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
+    , anyOf name'
+    , anyOf numbers'
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\37\40\92\40\91\97\45\122\65\45\90\48\45\57\95\93\43\92\41\41\63\91\45\35\48\32\43\93\42\40\91\48\45\57\93\43\124\91\42\93\41\63\40\92\46\40\91\48\45\57\93\43\124\91\42\93\41\41\63\91\104\108\76\93\63\91\100\105\111\117\120\88\101\69\102\70\103\71\99\114\115\37\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+fromimport' :: TokenMatcher
+fromimport' =
+    [ tokNext "\40\40\63\58\92\115\124\92\92\92\115\41\43\41\40\105\109\112\111\114\116\41\92\98" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101")]) Pop
+    , tok "\91\97\45\122\65\45\90\95\46\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Objdump.hs b/src/Text/Highlighter/Lexers/Objdump.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Objdump.hs
@@ -0,0 +1,30 @@
+module Text.Highlighter.Lexers.Objdump (lexer) where
+import qualified Text.Highlighter.Lexers.Gas as Gas
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\71\97\115"
+    , lAliases = ["\111\98\106\100\117\109\112"]
+    , lExtensions = ["\46\111\98\106\100\117\109\112"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\111\98\106\100\117\109\112"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\46\42\63\41\40\58\41\40\32\43\102\105\108\101\32\102\111\114\109\97\116\32\41\40\46\42\63\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tok "\40\68\105\115\97\115\115\101\109\98\108\121\32\111\102\32\115\101\99\116\105\111\110\32\41\40\46\42\63\41\40\58\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\91\48\45\57\65\45\90\97\45\122\93\43\41\40\32\41\40\60\41\40\46\42\63\41\40\91\45\43\93\41\40\48\91\120\88\93\91\65\45\90\97\45\122\48\45\57\93\43\41\40\62\58\41\36" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\91\48\45\57\65\45\90\97\45\122\93\43\41\40\32\41\40\60\41\40\46\42\63\41\40\62\58\41\36" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\32\42\41\40\91\48\45\57\65\45\90\97\45\122\93\43\58\41\40\92\116\41\40\40\63\58\91\48\45\57\65\45\90\97\45\122\93\91\48\45\57\65\45\90\97\45\122\93\32\41\43\41\40\32\42\9\41\40\91\97\45\122\65\45\90\93\46\42\63\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Using Gas.lexer)])
+    , tok "\40\32\42\41\40\91\48\45\57\65\45\90\97\45\122\93\43\58\41\40\92\116\41\40\40\63\58\91\48\45\57\65\45\90\97\45\122\93\91\48\45\57\65\45\90\97\45\122\93\32\41\43\41\40\32\42\41\40\46\42\63\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")])
+    , tok "\40\32\42\41\40\91\48\45\57\65\45\90\97\45\122\93\43\58\41\40\92\116\41\40\40\63\58\91\48\45\57\65\45\90\97\45\122\93\91\48\45\57\65\45\90\97\45\122\93\32\41\43\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")])
+    , tok "\9\92\46\92\46\92\46\36" (Arbitrary "\84\101\120\116")
+    , tok "\40\9\9\9\41\40\91\48\45\57\65\45\90\97\45\122\93\43\58\41\40\32\41\40\91\94\9\93\43\41\40\9\41\40\46\42\63\41\40\91\45\43\93\41\40\48\120\91\48\45\57\65\45\90\97\45\122\93\43\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\80\114\111\112\101\114\116\121"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")])
+    , tok "\40\9\9\9\41\40\91\48\45\57\65\45\90\97\45\122\93\43\58\41\40\32\41\40\91\94\9\93\43\41\40\9\41\40\46\42\63\41\36" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\80\114\111\112\101\114\116\121"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")])
+    , tok "\91\94\10\93\43\10" (Arbitrary "\79\116\104\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ObjectiveC.hs b/src/Text/Highlighter/Lexers/ObjectiveC.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ObjectiveC.hs
@@ -0,0 +1,113 @@
+module Text.Highlighter.Lexers.ObjectiveC (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\79\98\106\101\99\116\105\118\101\45\67"
+    , lAliases = ["\111\98\106\101\99\116\105\118\101\45\99", "\111\98\106\101\99\116\105\118\101\99", "\111\98\106\45\99", "\111\98\106\99"]
+    , lExtensions = ["\46\109"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\111\98\106\101\99\116\105\118\101\45\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\58\92\115\42\41\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")]) Pop
+    , tokNext "\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\41\40\92\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\92\41\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")]) Pop
+    , tokNext "\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+function' :: TokenMatcher
+function' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+statement' :: TokenMatcher
+statement' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+statements' :: TokenMatcher
+statements' =
+    [ tokNext "\40\76\124\64\41\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\40\76\124\64\41\63\39\40\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\40\41\92\91\92\93\44\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\97\117\116\111\124\98\114\101\97\107\124\99\97\115\101\124\99\111\110\115\116\124\99\111\110\116\105\110\117\101\124\100\101\102\97\117\108\116\124\100\111\124\101\108\115\101\124\101\110\117\109\124\101\120\116\101\114\110\124\102\111\114\124\103\111\116\111\124\105\102\124\114\101\103\105\115\116\101\114\124\114\101\115\116\114\105\99\116\101\100\124\114\101\116\117\114\110\124\115\105\122\101\111\102\124\115\116\97\116\105\99\124\115\116\114\117\99\116\124\115\119\105\116\99\104\124\116\121\112\101\100\101\102\124\117\110\105\111\110\124\118\111\108\97\116\105\108\101\124\118\105\114\116\117\97\108\124\119\104\105\108\101\124\105\110\124\64\115\101\108\101\99\116\111\114\124\64\112\114\105\118\97\116\101\124\64\112\114\111\116\101\99\116\101\100\124\64\112\117\98\108\105\99\124\64\101\110\99\111\100\101\124\64\115\121\110\99\104\114\111\110\105\122\101\100\124\64\116\114\121\124\64\116\104\114\111\119\124\64\99\97\116\99\104\124\64\102\105\110\97\108\108\121\124\64\101\110\100\124\64\112\114\111\112\101\114\116\121\124\64\115\121\110\116\104\101\115\105\122\101\124\64\100\121\110\97\109\105\99\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\105\110\116\124\108\111\110\103\124\102\108\111\97\116\124\115\104\111\114\116\124\100\111\117\98\108\101\124\99\104\97\114\124\117\110\115\105\103\110\101\100\124\115\105\103\110\101\100\124\118\111\105\100\124\105\100\124\66\79\79\76\124\73\66\79\117\116\108\101\116\124\73\66\65\99\116\105\111\110\124\83\69\76\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\95\123\48\44\50\125\105\110\108\105\110\101\124\110\97\107\101\100\124\114\101\115\116\114\105\99\116\124\116\104\114\101\97\100\124\116\121\112\101\110\97\109\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\95\95\40\97\115\109\124\105\110\116\56\124\98\97\115\101\100\124\101\120\99\101\112\116\124\105\110\116\49\54\124\115\116\100\99\97\108\108\124\99\100\101\99\108\124\102\97\115\116\99\97\108\108\124\105\110\116\51\50\124\100\101\99\108\115\112\101\99\124\102\105\110\97\108\108\121\124\105\110\116\54\52\124\116\114\121\124\108\101\97\118\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    , tok "\40\84\82\85\69\124\70\65\76\83\69\124\110\105\108\124\78\85\76\76\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\58\40\63\33\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108")
+    , tok "\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tokNext "\94\40\92\115\42\41\40\35\105\102\92\115\43\48\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")]) (GoTo if0')
+    , tokNext "\94\40\92\115\42\41\40\35\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")]) (GoTo macro')
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+forward_classname' :: TokenMatcher
+forward_classname' =
+    [ tokNext "\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\44\92\115\42\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) (GoTo forward_classname')
+    , tokNext "\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\59\63\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) Pop
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+macro' :: TokenMatcher
+macro' =
+    [ tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\91\42\93\40\46\124\92\110\41\42\63\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101") Pop
+    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\123\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")]) (GoTo function')
+    , tok "\40\40\63\58\91\97\45\122\65\45\90\48\45\57\95\42\92\115\93\41\43\63\40\63\58\92\115\124\91\42\93\41\41\40\91\97\45\122\65\45\90\36\95\93\91\97\45\122\65\45\90\48\45\57\36\95\93\42\41\40\92\115\42\92\40\91\94\59\93\42\63\92\41\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\43\41\40\59\41" (ByGroups [(Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\40\64\105\110\116\101\114\102\97\99\101\124\64\105\109\112\108\101\109\101\110\116\97\116\105\111\110\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\64\99\108\97\115\115\124\64\112\114\111\116\111\99\111\108\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo forward_classname')
+    , tok "\40\92\115\42\41\40\64\101\110\100\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo statement')
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/ObjectiveJ.hs b/src/Text/Highlighter/Lexers/ObjectiveJ.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/ObjectiveJ.hs
@@ -0,0 +1,149 @@
+module Text.Highlighter.Lexers.ObjectiveJ (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\79\98\106\101\99\116\105\118\101\45\74"
+    , lAliases = ["\111\98\106\101\99\116\105\118\101\45\106", "\111\98\106\101\99\116\105\118\101\106", "\111\98\106\45\106", "\111\98\106\106"]
+    , lExtensions = ["\46\106"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\111\98\106\101\99\116\105\118\101\45\106"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+statements' :: TokenMatcher
+statements' =
+    [ tokNext "\40\76\124\64\41\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\40\76\124\64\41\63\39\40\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tokNext "\94\40\63\61\92\115\124\47\124\60\33\45\45\41" (Arbitrary "\84\101\120\116") (GoTo slashstartsregex')
+    , tokNext "\92\43\92\43\124\45\45\124\126\124\38\38\124\92\63\124\58\124\92\124\92\124\124\92\92\40\63\61\92\110\41\124\40\60\60\124\62\62\62\63\124\61\61\63\124\33\61\63\124\91\45\60\62\43\42\37\38\92\124\92\94\47\93\41\61\63" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo slashstartsregex')
+    , tokNext "\91\123\40\92\91\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo slashstartsregex')
+    , tok "\91\125\41\92\93\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\40\102\111\114\124\105\110\124\119\104\105\108\101\124\100\111\124\98\114\101\97\107\124\114\101\116\117\114\110\124\99\111\110\116\105\110\117\101\124\115\119\105\116\99\104\124\99\97\115\101\124\100\101\102\97\117\108\116\124\105\102\124\101\108\115\101\124\116\104\114\111\119\124\116\114\121\124\99\97\116\99\104\124\102\105\110\97\108\108\121\124\110\101\119\124\100\101\108\101\116\101\124\116\121\112\101\111\102\124\105\110\115\116\97\110\99\101\111\102\124\118\111\105\100\124\112\114\111\116\111\116\121\112\101\124\95\95\112\114\111\116\111\95\95\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo slashstartsregex')
+    , tokNext "\40\118\97\114\124\119\105\116\104\124\102\117\110\99\116\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110") (GoTo slashstartsregex')
+    , tok "\40\64\115\101\108\101\99\116\111\114\124\64\112\114\105\118\97\116\101\124\64\112\114\111\116\101\99\116\101\100\124\64\112\117\98\108\105\99\124\64\101\110\99\111\100\101\124\64\115\121\110\99\104\114\111\110\105\122\101\100\124\64\116\114\121\124\64\116\104\114\111\119\124\64\99\97\116\99\104\124\64\102\105\110\97\108\108\121\124\64\101\110\100\124\64\112\114\111\112\101\114\116\121\124\64\115\121\110\116\104\101\115\105\122\101\124\64\100\121\110\97\109\105\99\124\64\102\111\114\124\64\97\99\99\101\115\115\111\114\115\124\110\101\119\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\105\110\116\124\108\111\110\103\124\102\108\111\97\116\124\115\104\111\114\116\124\100\111\117\98\108\101\124\99\104\97\114\124\117\110\115\105\103\110\101\100\124\115\105\103\110\101\100\124\118\111\105\100\124\105\100\124\66\79\79\76\124\98\111\111\108\124\98\111\111\108\101\97\110\124\73\66\79\117\116\108\101\116\124\73\66\65\99\116\105\111\110\124\83\69\76\124\64\111\117\116\108\101\116\124\64\97\99\116\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\115\101\108\102\124\115\117\112\101\114\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\84\82\85\69\124\89\69\83\124\70\65\76\83\69\124\78\79\124\78\105\108\124\110\105\108\124\78\85\76\76\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\124\78\97\78\124\73\110\102\105\110\105\116\121\124\117\110\100\101\102\105\110\101\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\65\66\83\124\65\83\73\78\124\65\67\79\83\124\65\84\65\78\124\65\84\65\78\50\124\83\73\78\124\67\79\83\124\84\65\78\124\69\88\80\124\80\79\87\124\67\69\73\76\124\70\76\79\79\82\124\82\79\85\78\68\124\77\73\78\124\77\65\88\124\82\65\78\68\124\83\81\82\84\124\69\124\76\78\50\124\76\78\49\48\124\76\79\71\50\69\124\76\79\71\49\48\69\124\80\73\124\80\73\50\124\80\73\95\50\124\83\81\82\84\49\95\50\124\83\81\82\84\50\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\65\114\114\97\121\124\66\111\111\108\101\97\110\124\68\97\116\101\124\69\114\114\111\114\124\70\117\110\99\116\105\111\110\124\77\97\116\104\124\110\101\116\115\99\97\112\101\124\78\117\109\98\101\114\124\79\98\106\101\99\116\124\80\97\99\107\97\103\101\115\124\82\101\103\69\120\112\124\83\116\114\105\110\103\124\115\117\110\124\100\101\99\111\100\101\85\82\73\124\100\101\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\101\110\99\111\100\101\85\82\73\124\101\110\99\111\100\101\85\82\73\67\111\109\112\111\110\101\110\116\124\69\114\114\111\114\124\101\118\97\108\124\105\115\70\105\110\105\116\101\124\105\115\78\97\78\124\112\97\114\115\101\70\108\111\97\116\124\112\97\114\115\101\73\110\116\124\100\111\99\117\109\101\110\116\124\116\104\105\115\124\119\105\110\100\111\119\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\63\61\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Using lexer)])
+    , tok "\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+function_signature' :: TokenMatcher
+function_signature' =
+    [ anyOf whitespace'
+    , tokNext "\40\92\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\92\41\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\58\41" (ByGroups [(Using lexer), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) (GoTo function_parameters')
+    , tokNext "\40\92\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\92\41\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (ByGroups [(Using lexer), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) Pop
+    , tokNext "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\58\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) (GoTo function_parameters')
+    , tokNext "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")]) Pop
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\58\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\63" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")]) Pop
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\92\40\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\41\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Using lexer), (Arbitrary "\78\97\109\101" :. Arbitrary "\76\97\98\101\108"), (Arbitrary "\84\101\120\116")]) Pop
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+forward_classname' :: TokenMatcher
+forward_classname' =
+    [ tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\44\92\115\42\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) Push
+    , tokNext "\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\59\63\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) Pop
+    ]
+
+badregex' :: TokenMatcher
+badregex' =
+    [ tokNext "\10" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+function_parameters' :: TokenMatcher
+function_parameters' =
+    [ anyOf whitespace'
+    , tok "\40\92\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\94\92\41\93\43\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\92\41\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\43\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (ByGroups [(Using lexer), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Using lexer), (Arbitrary "\84\101\120\116")])
+    , tok "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\40\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\40\44\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\46\46\46\41" (Using lexer)
+    , tok "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\43\41" (Arbitrary "\84\101\120\116")
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\40\64\105\109\112\111\114\116\41\40\92\115\43\41\40\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")])
+    , tok "\40\64\105\109\112\111\114\116\41\40\92\115\43\41\40\60\40\92\92\92\92\124\92\92\62\124\91\94\62\93\41\42\62\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")])
+    , tok "\40\35\40\63\58\105\110\99\108\117\100\101\124\105\109\112\111\114\116\41\41\40\92\115\43\41\40\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")])
+    , tok "\40\35\40\63\58\105\110\99\108\117\100\101\124\105\109\112\111\114\116\41\41\40\92\115\43\41\40\60\40\92\92\92\92\124\92\92\62\124\91\94\62\93\41\42\62\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")])
+    , tokNext "\35\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo macro')
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tok "\94\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\91\92\43\45\93\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\41\40\91\92\40\97\45\122\65\45\90\95\93\46\42\63\91\94\92\40\93\41\40\40\63\58\92\115\124\47\47\46\42\63\92\110\124\47\91\42\93\46\42\63\91\42\93\47\41\42\123\41" (ByGroups [(Using lexer), (Using lexer), (Using lexer)])
+    , tokNext "\40\64\105\110\116\101\114\102\97\99\101\124\64\105\109\112\108\101\109\101\110\116\97\116\105\111\110\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\64\99\108\97\115\115\124\64\112\114\111\116\111\99\111\108\41\40\92\115\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo forward_classname')
+    , tok "\40\92\115\42\41\40\64\101\110\100\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , anyOf statements'
+    , tok "\91\123\92\40\92\41\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+slashstartsregex' :: TokenMatcher
+slashstartsregex' =
+    [ anyOf whitespace'
+    , tokNext "\47\40\92\92\46\124\91\94\91\47\92\92\92\110\93\124\92\91\40\92\92\46\124\91\94\92\93\92\92\92\110\93\41\42\93\41\43\47\40\91\103\105\109\93\43\92\98\124\92\66\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\40\63\61\47\41" (Arbitrary "\84\101\120\116") (DoAll [Pop, (GoTo badregex')])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+macro' :: TokenMatcher
+macro' =
+    [ tok "\91\94\47\92\110\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\47\91\42\93\40\46\124\92\110\41\42\63\91\42\93\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101") Pop
+    , tok "\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\40\63\60\61\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+expression' :: TokenMatcher
+expression' =
+    [ tok "\40\91\36\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tokNext "\40\92\41\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Ocaml.hs b/src/Text/Highlighter/Lexers/Ocaml.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Ocaml.hs
@@ -0,0 +1,72 @@
+module Text.Highlighter.Lexers.Ocaml (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\79\67\97\109\108"
+    , lAliases = ["\111\99\97\109\108"]
+    , lExtensions = ["\46\109\108", "\46\109\108\105", "\46\109\108\108", "\46\109\108\121"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\111\99\97\109\108"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\40\42\41\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\92\40\92\42" (Arbitrary "\67\111\109\109\101\110\116") Push
+    , tokNext "\92\42\92\41" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\91\40\42\41\93" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\102\97\108\115\101\124\116\114\117\101\124\92\40\92\41\124\92\91\92\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tokNext "\92\98\40\91\65\45\90\93\91\65\45\90\97\45\122\48\45\57\95\92\39\93\42\41\40\63\61\92\115\42\92\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") (GoTo dotted')
+    , tok "\92\98\40\91\65\45\90\93\91\65\45\90\97\45\122\48\45\57\95\92\39\93\42\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tokNext "\92\40\92\42" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\92\98\40\97\115\124\97\115\115\101\114\116\124\98\101\103\105\110\124\99\108\97\115\115\124\99\111\110\115\116\114\97\105\110\116\124\100\111\124\100\111\110\101\124\100\111\119\110\116\111\124\101\108\115\101\124\101\110\100\124\101\120\99\101\112\116\105\111\110\124\101\120\116\101\114\110\97\108\124\102\97\108\115\101\124\102\111\114\124\102\117\110\124\102\117\110\99\116\105\111\110\124\102\117\110\99\116\111\114\124\105\102\124\105\110\124\105\110\99\108\117\100\101\124\105\110\104\101\114\105\116\124\105\110\105\116\105\97\108\105\122\101\114\124\108\97\122\121\124\108\101\116\124\109\97\116\99\104\124\109\101\116\104\111\100\124\109\111\100\117\108\101\124\109\117\116\97\98\108\101\124\110\101\119\124\111\98\106\101\99\116\124\111\102\124\111\112\101\110\124\112\114\105\118\97\116\101\124\114\97\105\115\101\124\114\101\99\124\115\105\103\124\115\116\114\117\99\116\124\116\104\101\110\124\116\111\124\116\114\117\101\124\116\114\121\124\116\121\112\101\124\118\97\108\124\118\105\114\116\117\97\108\124\119\104\101\110\124\119\104\105\108\101\124\119\105\116\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\33\61\124\35\124\38\124\38\38\124\92\40\124\92\41\124\92\42\124\92\43\124\44\124\45\124\45\92\46\124\45\62\124\92\46\124\92\46\92\46\124\58\124\58\58\124\58\61\124\58\62\124\59\124\59\59\124\60\124\60\45\124\61\124\62\124\62\93\124\62\125\124\92\63\124\92\63\92\63\124\92\91\124\92\91\60\124\92\91\62\124\92\91\92\124\124\93\124\95\124\96\124\123\124\123\60\124\92\124\124\92\124\93\124\125\124\126\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\91\61\60\62\64\94\124\38\43\92\42\47\36\37\45\93\124\91\33\63\126\93\41\63\91\33\36\37\38\42\43\92\46\47\58\60\61\62\63\64\94\124\126\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\40\97\110\100\124\97\115\114\124\108\97\110\100\124\108\111\114\124\108\115\108\124\108\120\111\114\124\109\111\100\124\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\92\98\40\117\110\105\116\124\105\110\116\124\102\108\111\97\116\124\98\111\111\108\124\115\116\114\105\110\103\124\99\104\97\114\124\108\105\115\116\124\97\114\114\97\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\91\94\92\87\92\100\93\91\92\119\39\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\92\100\91\92\100\95\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\48\91\120\88\93\91\92\100\97\45\102\65\45\70\93\91\92\100\97\45\102\65\45\70\95\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\111\79\93\91\48\45\55\93\91\48\45\55\95\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\98\66\93\91\48\49\93\91\48\49\95\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\66\105\110\97\114\121")
+    , tok "\45\63\92\100\91\92\100\95\93\42\40\46\91\92\100\95\93\42\41\63\40\91\101\69\93\91\43\92\45\93\63\92\100\91\92\100\95\93\42\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\39\40\63\58\40\92\92\91\92\92\92\34\39\110\116\98\114\32\93\41\124\40\92\92\91\48\45\57\93\123\51\125\41\124\40\92\92\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125\41\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\39\46\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\39" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo string')
+    , tok "\91\126\63\93\91\97\45\122\93\91\92\119\92\39\93\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\91\94\92\92\34\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , anyOf escapeSequence'
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") Pop
+    ]
+
+escapeSequence' :: TokenMatcher
+escapeSequence' =
+    [ tok "\92\92\91\92\34\92\39\110\116\98\114\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\92\91\48\45\57\93\123\51\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\92\120\91\48\45\57\97\45\102\65\45\70\93\123\50\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+dotted' :: TokenMatcher
+dotted' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\65\45\90\93\91\65\45\90\97\45\122\48\45\57\95\92\39\93\42\40\63\61\92\115\42\92\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tokNext "\91\65\45\90\93\91\65\45\90\97\45\122\48\45\57\95\92\39\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    , tokNext "\91\97\45\122\93\91\97\45\122\48\45\57\95\92\39\93\42" (Arbitrary "\78\97\109\101") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Ooc.hs b/src/Text/Highlighter/Lexers/Ooc.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Ooc.hs
@@ -0,0 +1,52 @@
+module Text.Highlighter.Lexers.Ooc (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\79\111\99"
+    , lAliases = ["\111\111\99"]
+    , lExtensions = ["\46\111\111\99"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\111\111\99"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+include' :: TokenMatcher
+include' =
+    [ tok "\91\92\119\47\93\43" (Arbitrary "\78\97\109\101")
+    , tok "\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\32\92\116\93" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\59\92\110\93" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\98\40\99\108\97\115\115\124\105\110\116\101\114\102\97\99\101\124\105\109\112\108\101\109\101\110\116\124\97\98\115\116\114\97\99\116\124\101\120\116\101\110\100\115\124\102\114\111\109\124\116\104\105\115\124\115\117\112\101\114\124\110\101\119\124\99\111\110\115\116\124\102\105\110\97\108\124\115\116\97\116\105\99\124\105\109\112\111\114\116\124\117\115\101\124\101\120\116\101\114\110\124\105\110\108\105\110\101\124\112\114\111\116\111\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\102\97\108\108\116\104\114\111\117\103\104\124\111\112\101\114\97\116\111\114\124\105\102\124\101\108\115\101\124\102\111\114\124\119\104\105\108\101\124\100\111\124\115\119\105\116\99\104\124\99\97\115\101\124\97\115\124\105\110\124\118\101\114\115\105\111\110\124\114\101\116\117\114\110\124\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\105\110\99\108\117\100\101\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo include')
+    , tok "\40\99\111\118\101\114\41\40\91\32\92\116\93\43\41\40\102\114\111\109\41\40\91\32\92\116\93\43\41\40\91\97\45\122\65\45\90\48\45\57\95\93\43\91\42\64\93\63\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")])
+    , tok "\40\102\117\110\99\41\40\40\63\58\91\32\92\116\93\124\92\92\92\110\41\43\41\40\126\91\97\45\122\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\92\98\102\117\110\99\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\47\47\46\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\63\115\41\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\40\61\61\63\124\92\43\61\63\124\45\91\61\62\93\63\124\92\42\61\63\124\47\61\63\124\58\61\124\33\61\63\124\37\61\63\124\92\63\124\62\123\49\44\51\125\61\63\124\60\123\49\44\51\125\61\63\124\92\46\92\46\124\38\38\63\124\92\124\92\124\63\124\92\94\61\63\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\92\46\41\40\91\32\92\116\93\42\41\40\91\97\45\122\93\92\119\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")])
+    , tok "\91\65\45\90\93\91\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\91\65\45\90\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\91\64\42\93\124\92\91\91\32\92\116\93\42\92\93\41\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tok "\40\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\63\58\126\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\63\41\40\40\63\58\91\32\92\116\93\124\92\92\92\110\41\42\41\40\63\61\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\91\97\45\122\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\58\40\41\123\125\92\91\92\93\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\99\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116\97\108")
+    , tok "\48\98\91\48\49\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\66\105\110\97\114\121")
+    , tok "\91\48\45\57\95\93\92\46\91\48\45\57\95\93\42\40\63\33\92\46\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\95\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\68\101\99\105\109\97\108")
+    , tok "\34\40\63\58\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\63\58\92\92\46\124\92\92\91\48\45\57\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\64" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\91\32\92\116\92\110\93" (Arbitrary "\84\101\120\116")
+    , tok "\91\32\92\116\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Perl.hs b/src/Text/Highlighter/Lexers/Perl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Perl.hs
@@ -0,0 +1,155 @@
+module Text.Highlighter.Lexers.Perl (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\101\114\108"
+    , lAliases = ["\112\101\114\108", "\112\108"]
+    , lExtensions = ["\46\112\108", "\46\112\109"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\101\114\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\112\101\114\108"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+modulename' :: TokenMatcher
+modulename' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\92\119\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+format' :: TokenMatcher
+format' =
+    [ tokNext "\92\46\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108") Pop
+    , tok "\91\94\92\110\93\42\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    ]
+
+rbString' :: TokenMatcher
+rbString' =
+    [ tok "\92\92\91\92\40\92\41\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo rbString')
+    , tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") Pop
+    , tok "\91\94\92\40\92\41\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    ]
+
+balancedRegex' :: TokenMatcher
+balancedRegex' =
+    [ tokNext "\47\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\33\40\92\92\92\92\124\92\92\33\124\91\94\33\93\41\42\33\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\92\92\40\92\92\92\92\124\91\94\92\92\93\41\42\92\92\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\123\40\92\92\92\92\124\92\92\125\124\91\94\125\93\41\42\125\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\60\40\92\92\92\92\124\92\92\62\124\91\94\62\93\41\42\62\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\92\91\40\92\92\92\92\124\92\92\92\93\124\91\94\92\93\93\41\42\92\93\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\92\40\40\92\92\92\92\124\92\92\92\41\124\91\94\92\41\93\41\42\92\41\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\64\40\92\92\92\92\124\92\92\92\64\124\91\94\92\64\93\41\42\64\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\37\40\92\92\92\92\124\92\92\92\37\124\91\94\92\37\93\41\42\37\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    , tokNext "\92\36\40\92\92\92\92\124\92\92\92\36\124\91\94\92\36\93\41\42\92\36\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") Pop
+    ]
+
+name' :: TokenMatcher
+name' =
+    [ tok "\91\97\45\122\65\45\90\48\45\57\95\93\43\58\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\58\93\43" (Arbitrary "\78\97\109\101") Pop
+    , tokNext "\91\65\45\90\95\93\43\40\63\61\91\94\97\45\122\65\45\90\48\45\57\95\93\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116") Pop
+    , tokNext "\40\63\61\91\94\97\45\122\65\45\90\48\45\57\95\93\41" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+varname' :: TokenMatcher
+varname' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\92\41\124\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\91\97\45\122\65\45\90\48\45\57\95\93\43\58\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\58\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") Pop
+    ]
+
+endPart' :: TokenMatcher
+endPart' =
+    [ tokNext "\46\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    ]
+
+sbString' :: TokenMatcher
+sbString' =
+    [ tok "\92\92\91\92\91\92\93\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo sbString')
+    , tokNext "\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") Pop
+    , tok "\91\94\92\91\92\93\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tok "\91\97\45\122\65\45\90\95\93\91\92\119\95\93\42\91\92\33\92\63\93\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\92\40\91\36\64\37\93\42\92\41\41\40\92\115\42\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\46\42\63\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\94\61\91\97\45\122\65\45\90\48\45\57\93\43\92\115\43\46\42\63\92\110\61\99\117\116" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\40\99\97\115\101\124\99\111\110\116\105\110\117\101\124\100\111\124\101\108\115\101\124\101\108\115\105\102\124\102\111\114\124\102\111\114\101\97\99\104\124\105\102\124\108\97\115\116\124\109\121\124\110\101\120\116\124\111\117\114\124\114\101\100\111\124\114\101\115\101\116\124\116\104\101\110\124\117\110\108\101\115\115\124\117\110\116\105\108\124\119\104\105\108\101\124\117\115\101\124\112\114\105\110\116\124\110\101\119\124\66\69\71\73\78\124\69\78\68\124\114\101\116\117\114\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\102\111\114\109\97\116\41\40\92\115\43\41\40\91\97\45\122\65\45\90\48\45\57\95\93\43\41\40\92\115\42\41\40\61\41\40\92\115\42\92\110\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116")]) (GoTo format')
+    , tok "\40\101\113\124\108\116\124\103\116\124\108\101\124\103\101\124\110\101\124\110\111\116\124\97\110\100\124\111\114\124\99\109\112\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\115\47\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\115\33\40\92\92\92\92\124\92\92\33\124\91\94\33\93\41\42\33\40\92\92\92\92\124\92\92\33\124\91\94\33\93\41\42\33\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\115\92\92\40\92\92\92\92\124\91\94\92\92\93\41\42\92\92\40\92\92\92\92\124\91\94\92\92\93\41\42\92\92\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\115\64\40\92\92\92\92\124\92\92\64\124\91\94\64\93\41\42\64\40\92\92\92\92\124\92\92\64\124\91\94\64\93\41\42\64\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\115\37\40\92\92\92\92\124\92\92\37\124\91\94\37\93\41\42\37\40\92\92\92\92\124\92\92\37\124\91\94\37\93\41\42\37\91\101\103\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tokNext "\115\123\40\92\92\92\92\124\92\92\125\124\91\94\125\93\41\42\125\92\115\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") (GoTo balancedRegex')
+    , tokNext "\115\60\40\92\92\92\92\124\92\92\62\124\91\94\62\93\41\42\62\92\115\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") (GoTo balancedRegex')
+    , tokNext "\115\92\91\40\92\92\92\92\124\92\92\92\93\124\91\94\92\93\93\41\42\92\93\92\115\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") (GoTo balancedRegex')
+    , tokNext "\115\92\40\40\92\92\92\92\124\92\92\92\41\124\91\94\92\41\93\41\42\92\41\92\115\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") (GoTo balancedRegex')
+    , tok "\109\63\47\40\92\92\92\92\124\92\92\47\124\91\94\47\92\110\93\41\42\47\91\103\99\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tokNext "\109\40\63\61\91\47\33\92\92\123\60\92\91\92\40\64\37\92\36\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120") (GoTo balancedRegex')
+    , tok "\40\40\63\60\61\61\126\41\124\40\63\60\61\92\40\41\41\92\115\42\47\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\91\103\99\105\109\111\115\120\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\40\97\98\115\124\97\99\99\101\112\116\124\97\108\97\114\109\124\97\116\97\110\50\124\98\105\110\100\124\98\105\110\109\111\100\101\124\98\108\101\115\115\124\99\97\108\108\101\114\124\99\104\100\105\114\124\99\104\109\111\100\124\99\104\111\109\112\124\99\104\111\112\124\99\104\111\119\110\124\99\104\114\124\99\104\114\111\111\116\124\99\108\111\115\101\124\99\108\111\115\101\100\105\114\124\99\111\110\110\101\99\116\124\99\111\110\116\105\110\117\101\124\99\111\115\124\99\114\121\112\116\124\100\98\109\99\108\111\115\101\124\100\98\109\111\112\101\110\124\100\101\102\105\110\101\100\124\100\101\108\101\116\101\124\100\105\101\124\100\117\109\112\124\101\97\99\104\124\101\110\100\103\114\101\110\116\124\101\110\100\104\111\115\116\101\110\116\124\101\110\100\110\101\116\101\110\116\124\101\110\100\112\114\111\116\111\101\110\116\124\101\110\100\112\119\101\110\116\124\101\110\100\115\101\114\118\101\110\116\124\101\111\102\124\101\118\97\108\124\101\120\101\99\124\101\120\105\115\116\115\124\101\120\105\116\124\101\120\112\124\102\99\110\116\108\124\102\105\108\101\110\111\124\102\108\111\99\107\124\102\111\114\107\124\102\111\114\109\97\116\124\102\111\114\109\108\105\110\101\124\103\101\116\99\124\103\101\116\103\114\101\110\116\124\103\101\116\103\114\103\105\100\124\103\101\116\103\114\110\97\109\124\103\101\116\104\111\115\116\98\121\97\100\100\114\124\103\101\116\104\111\115\116\98\121\110\97\109\101\124\103\101\116\104\111\115\116\101\110\116\124\103\101\116\108\111\103\105\110\124\103\101\116\110\101\116\98\121\97\100\100\114\124\103\101\116\110\101\116\98\121\110\97\109\101\124\103\101\116\110\101\116\101\110\116\124\103\101\116\112\101\101\114\110\97\109\101\124\103\101\116\112\103\114\112\124\103\101\116\112\112\105\100\124\103\101\116\112\114\105\111\114\105\116\121\124\103\101\116\112\114\111\116\111\98\121\110\97\109\101\124\103\101\116\112\114\111\116\111\98\121\110\117\109\98\101\114\124\103\101\116\112\114\111\116\111\101\110\116\124\103\101\116\112\119\101\110\116\124\103\101\116\112\119\110\97\109\124\103\101\116\112\119\117\105\100\124\103\101\116\115\101\114\118\98\121\110\97\109\101\124\103\101\116\115\101\114\118\98\121\112\111\114\116\124\103\101\116\115\101\114\118\101\110\116\124\103\101\116\115\111\99\107\110\97\109\101\124\103\101\116\115\111\99\107\111\112\116\124\103\108\111\98\124\103\109\116\105\109\101\124\103\111\116\111\124\103\114\101\112\124\104\101\120\124\105\109\112\111\114\116\124\105\110\100\101\120\124\105\110\116\124\105\111\99\116\108\124\106\111\105\110\124\107\101\121\115\124\107\105\108\108\124\108\97\115\116\124\108\99\124\108\99\102\105\114\115\116\124\108\101\110\103\116\104\124\108\105\110\107\124\108\105\115\116\101\110\124\108\111\99\97\108\124\108\111\99\97\108\116\105\109\101\124\108\111\103\124\108\115\116\97\116\124\109\97\112\124\109\107\100\105\114\124\109\115\103\99\116\108\124\109\115\103\103\101\116\124\109\115\103\114\99\118\124\109\115\103\115\110\100\124\109\121\124\110\101\120\116\124\110\111\124\111\99\116\124\111\112\101\110\124\111\112\101\110\100\105\114\124\111\114\100\124\111\117\114\124\112\97\99\107\124\112\97\99\107\97\103\101\124\112\105\112\101\124\112\111\112\124\112\111\115\124\112\114\105\110\116\102\124\112\114\111\116\111\116\121\112\101\124\112\117\115\104\124\113\117\111\116\101\109\101\116\97\124\114\97\110\100\124\114\101\97\100\124\114\101\97\100\100\105\114\124\114\101\97\100\108\105\110\101\124\114\101\97\100\108\105\110\107\124\114\101\97\100\112\105\112\101\124\114\101\99\118\124\114\101\100\111\124\114\101\102\124\114\101\110\97\109\101\124\114\101\113\117\105\114\101\124\114\101\118\101\114\115\101\124\114\101\119\105\110\100\100\105\114\124\114\105\110\100\101\120\124\114\109\100\105\114\124\115\99\97\108\97\114\124\115\101\101\107\124\115\101\101\107\100\105\114\124\115\101\108\101\99\116\124\115\101\109\99\116\108\124\115\101\109\103\101\116\124\115\101\109\111\112\124\115\101\110\100\124\115\101\116\103\114\101\110\116\124\115\101\116\104\111\115\116\101\110\116\124\115\101\116\110\101\116\101\110\116\124\115\101\116\112\103\114\112\124\115\101\116\112\114\105\111\114\105\116\121\124\115\101\116\112\114\111\116\111\101\110\116\124\115\101\116\112\119\101\110\116\124\115\101\116\115\101\114\118\101\110\116\124\115\101\116\115\111\99\107\111\112\116\124\115\104\105\102\116\124\115\104\109\99\116\108\124\115\104\109\103\101\116\124\115\104\109\114\101\97\100\124\115\104\109\119\114\105\116\101\124\115\104\117\116\100\111\119\110\124\115\105\110\124\115\108\101\101\112\124\115\111\99\107\101\116\124\115\111\99\107\101\116\112\97\105\114\124\115\111\114\116\124\115\112\108\105\99\101\124\115\112\108\105\116\124\115\112\114\105\110\116\102\124\115\113\114\116\124\115\114\97\110\100\124\115\116\97\116\124\115\116\117\100\121\124\115\117\98\115\116\114\124\115\121\109\108\105\110\107\124\115\121\115\99\97\108\108\124\115\121\115\111\112\101\110\124\115\121\115\114\101\97\100\124\115\121\115\115\101\101\107\124\115\121\115\116\101\109\124\115\121\115\119\114\105\116\101\124\116\101\108\108\124\116\101\108\108\100\105\114\124\116\105\101\124\116\105\101\100\124\116\105\109\101\124\116\105\109\101\115\124\116\114\124\116\114\117\110\99\97\116\101\124\117\99\124\117\99\102\105\114\115\116\124\117\109\97\115\107\124\117\110\100\101\102\124\117\110\108\105\110\107\124\117\110\112\97\99\107\124\117\110\115\104\105\102\116\124\117\110\116\105\101\124\117\116\105\109\101\124\118\97\108\117\101\115\124\118\101\99\124\119\97\105\116\124\119\97\105\116\112\105\100\124\119\97\110\116\97\114\114\97\121\124\119\97\114\110\124\119\114\105\116\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\40\95\95\40\68\65\84\65\124\68\73\69\124\87\65\82\78\41\95\95\41\124\40\83\84\68\40\73\78\124\79\85\84\124\69\82\82\41\41\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\60\60\40\91\92\39\34\93\63\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\92\49\59\63\92\110\46\42\63\92\110\92\50\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\95\95\69\78\68\95\95" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo endPart')
+    , tok "\92\36\92\94\91\65\68\69\70\72\73\76\77\79\80\83\84\87\88\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
+    , tok "\92\36\91\92\92\92\34\92\91\92\93\39\38\96\43\42\46\44\59\61\37\126\63\64\36\33\60\62\40\94\124\47\45\93\40\63\33\92\119\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101" :. Arbitrary "\71\108\111\98\97\108")
+    , tokNext "\91\36\64\37\35\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo varname')
+    , tok "\48\95\63\91\48\45\55\93\43\40\95\91\48\45\55\93\43\41\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\120\91\48\45\57\65\45\70\97\45\102\93\43\40\95\91\48\45\57\65\45\70\97\45\102\93\43\41\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\98\91\48\49\93\43\40\95\91\48\49\93\43\41\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\66\105\110")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\96\40\92\92\92\92\124\92\92\96\124\91\94\96\93\41\42\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    , tok "\60\40\91\94\92\115\62\93\43\41\62" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120\112")
+    , tokNext "\40\113\124\113\113\124\113\119\124\113\114\124\113\120\41\92\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo cbString')
+    , tokNext "\40\113\124\113\113\124\113\119\124\113\114\124\113\120\41\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo rbString')
+    , tokNext "\40\113\124\113\113\124\113\119\124\113\114\124\113\120\41\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo sbString')
+    , tokNext "\40\113\124\113\113\124\113\119\124\113\114\124\113\120\41\92\60" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo ltString')
+    , tok "\40\113\124\113\113\124\113\119\124\113\114\124\113\120\41\40\91\94\97\45\122\65\45\90\48\45\57\93\41\40\46\124\92\110\41\42\63\92\50" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tokNext "\112\97\99\107\97\103\101\92\115\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo modulename')
+    , tokNext "\115\117\98\92\115\43" (Arbitrary "\75\101\121\119\111\114\100") (GoTo funcname')
+    , tok "\40\92\91\92\93\124\92\42\92\42\124\58\58\124\60\60\124\62\62\124\62\61\124\60\61\124\60\61\62\124\61\123\51\125\124\33\61\124\61\126\124\33\126\124\38\38\63\124\92\124\92\124\124\92\46\123\49\44\51\125\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\45\43\47\42\37\61\60\62\38\94\124\33\92\92\126\93\61\63" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\92\40\92\41\92\91\92\93\58\59\44\60\62\47\92\63\92\123\92\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\40\63\61\92\119\41" (Arbitrary "\78\97\109\101") (GoTo name')
+    ]
+
+cbString' :: TokenMatcher
+cbString' =
+    [ tok "\92\92\91\92\123\92\125\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\123" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo cbString')
+    , tokNext "\92\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") Pop
+    , tok "\91\94\92\123\92\125\92\92\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    ]
+
+ltString' :: TokenMatcher
+ltString' =
+    [ tok "\92\92\91\92\60\92\62\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tokNext "\92\60" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo ltString')
+    , tokNext "\92\62" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") Pop
+    , tok "\91\94\92\60\92\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Php.hs b/src/Text/Highlighter/Lexers/Php.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Php.hs
@@ -0,0 +1,72 @@
+module Text.Highlighter.Lexers.Php (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\72\80"
+    , lAliases = ["\112\104\112", "\112\104\112\51", "\112\104\112\52", "\112\104\112\53"]
+    , lExtensions = ["\46\112\104\112", "\46\112\104\112\91\51\52\53\93"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\104\112"]
+    , lStart = root'
+    , lFlags = [caseless, multiline, dotall]
+    }
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\92\92\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+php' :: TokenMatcher
+php' =
+    [ tokNext "\92\63\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\60\60\60\40\92\39\63\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\92\49\92\110\46\42\63\92\110\92\50\92\59\63\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\92\42\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\47\92\42\92\42\46\42\63\92\42\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")
+    , tok "\47\92\42\46\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\40\45\62\124\58\58\41\40\92\115\42\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")])
+    , tok "\91\126\33\37\94\38\42\43\61\124\58\46\60\62\47\63\64\45\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\92\91\92\93\123\125\40\41\59\44\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\40\99\108\97\115\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tok "\40\102\117\110\99\116\105\111\110\41\40\92\115\42\41\40\63\61\92\40\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\40\102\117\110\99\116\105\111\110\41\40\92\115\43\41\40\38\63\41\40\92\115\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")]) (GoTo functionname')
+    , tok "\40\99\111\110\115\116\41\40\92\115\43\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")])
+    , tok "\40\97\110\100\124\69\95\80\65\82\83\69\124\111\108\100\95\102\117\110\99\116\105\111\110\124\69\95\69\82\82\79\82\124\111\114\124\97\115\124\69\95\87\65\82\78\73\78\71\124\112\97\114\101\110\116\124\101\118\97\108\124\80\72\80\95\79\83\124\98\114\101\97\107\124\101\120\105\116\124\99\97\115\101\124\101\120\116\101\110\100\115\124\80\72\80\95\86\69\82\83\73\79\78\124\99\102\117\110\99\116\105\111\110\124\70\65\76\83\69\124\112\114\105\110\116\124\102\111\114\124\114\101\113\117\105\114\101\124\99\111\110\116\105\110\117\101\124\102\111\114\101\97\99\104\124\114\101\113\117\105\114\101\95\111\110\99\101\124\100\101\99\108\97\114\101\124\114\101\116\117\114\110\124\100\101\102\97\117\108\116\124\115\116\97\116\105\99\124\100\111\124\115\119\105\116\99\104\124\100\105\101\124\115\116\100\67\108\97\115\115\124\101\99\104\111\124\101\108\115\101\124\84\82\85\69\124\101\108\115\101\105\102\124\118\97\114\124\101\109\112\116\121\124\105\102\124\120\111\114\124\101\110\100\100\101\99\108\97\114\101\124\105\110\99\108\117\100\101\124\118\105\114\116\117\97\108\124\101\110\100\102\111\114\124\105\110\99\108\117\100\101\95\111\110\99\101\124\119\104\105\108\101\124\101\110\100\102\111\114\101\97\99\104\124\103\108\111\98\97\108\124\95\95\70\73\76\69\95\95\124\101\110\100\105\102\124\108\105\115\116\124\95\95\76\73\78\69\95\95\124\101\110\100\115\119\105\116\99\104\124\110\101\119\124\95\95\115\108\101\101\112\124\101\110\100\119\104\105\108\101\124\110\111\116\124\97\114\114\97\121\124\95\95\119\97\107\101\117\112\124\69\95\65\76\76\124\78\85\76\76\124\102\105\110\97\108\124\112\104\112\95\117\115\101\114\95\102\105\108\116\101\114\124\105\110\116\101\114\102\97\99\101\124\105\109\112\108\101\109\101\110\116\115\124\112\117\98\108\105\99\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\97\98\115\116\114\97\99\116\124\99\108\111\110\101\124\116\114\121\124\99\97\116\99\104\124\116\104\114\111\119\124\116\104\105\115\124\117\115\101\124\110\97\109\101\115\112\97\99\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\8" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\36\92\123\92\36\43\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\92\125" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\36\43\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\92\92\97\45\122\65\45\90\95\93\91\92\92\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\79\116\104\101\114")
+    , tok "\91\48\45\57\93\40\92\46\91\48\45\57\93\42\41\63\40\101\69\91\43\45\93\91\48\45\57\93\41\63\91\102\108\70\76\100\68\93\63\124\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\39\40\91\94\39\92\92\93\42\40\63\58\92\92\46\91\94\39\92\92\93\42\41\42\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\96\40\91\94\96\92\92\93\42\40\63\58\92\92\46\91\94\96\92\92\93\42\41\42\41\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo string')
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\60\92\63\40\112\104\112\41\63" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo php')
+    , tok "\91\94\60\93\43" (Arbitrary "\79\116\104\101\114")
+    , tok "\60" (Arbitrary "\79\116\104\101\114")
+    ]
+
+functionname' :: TokenMatcher
+functionname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") Pop
+    , tok "\91\94\123\36\34\92\92\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\92\92\40\91\110\114\116\92\34\36\93\124\91\48\45\55\93\123\49\44\51\125\124\120\91\48\45\57\65\45\70\97\45\102\93\123\49\44\50\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\92\36\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\92\91\92\83\43\92\93\124\45\62\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\40\92\123\92\36\92\123\41\40\46\42\63\41\40\92\125\92\125\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108"), (Using lexer), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")])
+    , tok "\40\92\123\41\40\92\36\46\42\63\41\40\92\125\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108"), (Using lexer), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")])
+    , tok "\40\92\36\92\123\41\40\92\83\43\41\40\92\125\41" (ByGroups [(Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")])
+    , tok "\91\36\123\92\92\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Povray.hs b/src/Text/Highlighter/Lexers/Povray.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Povray.hs
@@ -0,0 +1,33 @@
+module Text.Highlighter.Lexers.Povray (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\79\86\82\97\121"
+    , lAliases = ["\112\111\118"]
+    , lExtensions = ["\46\112\111\118", "\46\105\110\99"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\111\118\114\97\121"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\47\92\42\91\92\119\92\87\93\42\63\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\47\47\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\40\63\115\41\34\40\63\58\92\92\46\124\91\94\34\92\92\93\41\43\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\35\40\100\101\98\117\103\124\100\101\102\97\117\108\116\124\101\108\115\101\124\101\110\100\124\101\114\114\111\114\124\102\99\108\111\115\101\124\102\111\112\101\110\124\105\102\124\105\102\100\101\102\124\105\102\110\100\101\102\124\105\110\99\108\117\100\101\124\114\97\110\103\101\124\114\101\97\100\124\114\101\110\100\101\114\124\115\116\97\116\105\115\116\105\99\115\124\115\119\105\116\99\104\124\117\110\100\101\102\124\118\101\114\115\105\111\110\124\119\97\114\110\105\110\103\124\119\104\105\108\101\124\119\114\105\116\101\124\100\101\102\105\110\101\124\109\97\99\114\111\124\108\111\99\97\108\124\100\101\99\108\97\114\101\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\92\98\40\97\97\95\108\101\118\101\108\124\97\97\95\116\104\114\101\115\104\111\108\100\124\97\98\115\124\97\99\111\115\124\97\99\111\115\104\124\97\100\97\112\116\105\118\101\124\97\100\99\95\98\97\105\108\111\117\116\124\97\103\97\116\101\124\97\103\97\116\101\95\116\117\114\98\124\97\108\108\124\97\108\112\104\97\124\97\109\98\105\101\110\116\124\97\109\98\105\101\110\116\95\108\105\103\104\116\124\97\110\103\108\101\124\97\112\101\114\116\117\114\101\124\97\114\99\95\97\110\103\108\101\124\97\114\101\97\95\108\105\103\104\116\124\97\115\99\124\97\115\105\110\124\97\115\105\110\104\124\97\115\115\117\109\101\100\95\103\97\109\109\97\124\97\116\97\110\124\97\116\97\110\50\124\97\116\97\110\104\124\97\116\109\111\115\112\104\101\114\101\124\97\116\109\111\115\112\104\101\114\105\99\95\97\116\116\101\110\117\97\116\105\111\110\124\97\116\116\101\110\117\97\116\105\110\103\124\97\118\101\114\97\103\101\124\98\97\99\107\103\114\111\117\110\100\124\98\108\97\99\107\95\104\111\108\101\124\98\108\117\101\124\98\108\117\114\95\115\97\109\112\108\101\115\124\98\111\117\110\100\101\100\95\98\121\124\98\111\120\95\109\97\112\112\105\110\103\124\98\111\122\111\124\98\114\101\97\107\124\98\114\105\99\107\124\98\114\105\99\107\95\115\105\122\101\124\98\114\105\103\104\116\110\101\115\115\124\98\114\105\108\108\105\97\110\99\101\124\98\117\109\112\115\124\98\117\109\112\121\49\124\98\117\109\112\121\50\124\98\117\109\112\121\51\124\98\117\109\112\95\109\97\112\124\98\117\109\112\95\115\105\122\101\124\99\97\115\101\124\99\97\117\115\116\105\99\115\124\99\101\105\108\124\99\104\101\99\107\101\114\124\99\104\114\124\99\108\105\112\112\101\100\95\98\121\124\99\108\111\99\107\124\99\111\108\111\114\124\99\111\108\111\114\95\109\97\112\124\99\111\108\111\117\114\124\99\111\108\111\117\114\95\109\97\112\124\99\111\109\112\111\110\101\110\116\124\99\111\109\112\111\115\105\116\101\124\99\111\110\99\97\116\124\99\111\110\102\105\100\101\110\99\101\124\99\111\110\105\99\95\115\119\101\101\112\124\99\111\110\115\116\97\110\116\124\99\111\110\116\114\111\108\48\124\99\111\110\116\114\111\108\49\124\99\111\115\124\99\111\115\104\124\99\111\117\110\116\124\99\114\97\99\107\108\101\124\99\114\97\110\100\124\99\117\98\101\124\99\117\98\105\99\95\115\112\108\105\110\101\124\99\121\108\105\110\100\114\105\99\97\108\95\109\97\112\112\105\110\103\124\100\101\98\117\103\124\100\101\99\108\97\114\101\124\100\101\102\97\117\108\116\124\100\101\103\114\101\101\115\124\100\101\110\116\115\124\100\105\102\102\117\115\101\124\100\105\114\101\99\116\105\111\110\124\100\105\115\116\97\110\99\101\124\100\105\115\116\97\110\99\101\95\109\97\120\105\109\117\109\124\100\105\118\124\100\117\115\116\124\100\117\115\116\95\116\121\112\101\124\101\99\99\101\110\116\114\105\99\105\116\121\124\101\108\115\101\124\101\109\105\116\116\105\110\103\124\101\110\100\124\101\114\114\111\114\124\101\114\114\111\114\95\98\111\117\110\100\124\101\120\112\124\101\120\112\111\110\101\110\116\124\102\97\100\101\95\100\105\115\116\97\110\99\101\124\102\97\100\101\95\112\111\119\101\114\124\102\97\108\108\111\102\102\124\102\97\108\108\111\102\102\95\97\110\103\108\101\124\102\97\108\115\101\124\102\105\108\101\95\101\120\105\115\116\115\124\102\105\108\116\101\114\124\102\105\110\105\115\104\124\102\105\115\104\101\121\101\124\102\108\97\116\110\101\115\115\124\102\108\105\112\124\102\108\111\111\114\124\102\111\99\97\108\95\112\111\105\110\116\124\102\111\103\124\102\111\103\95\97\108\116\124\102\111\103\95\111\102\102\115\101\116\124\102\111\103\95\116\121\112\101\124\102\114\101\113\117\101\110\99\121\124\103\105\102\124\103\108\111\98\97\108\95\115\101\116\116\105\110\103\115\124\103\108\111\119\105\110\103\124\103\114\97\100\105\101\110\116\124\103\114\97\110\105\116\101\124\103\114\97\121\95\116\104\114\101\115\104\111\108\100\124\103\114\101\101\110\124\104\97\108\111\124\104\101\120\97\103\111\110\124\104\102\95\103\114\97\121\95\49\54\124\104\105\101\114\97\114\99\104\121\124\104\111\108\108\111\119\124\104\121\112\101\114\99\111\109\112\108\101\120\124\105\102\124\105\102\100\101\102\124\105\102\102\124\105\109\97\103\101\95\109\97\112\124\105\110\99\105\100\101\110\99\101\124\105\110\99\108\117\100\101\124\105\110\116\124\105\110\116\101\114\112\111\108\97\116\101\124\105\110\118\101\114\115\101\124\105\111\114\124\105\114\105\100\124\105\114\105\100\95\119\97\118\101\108\101\110\103\116\104\124\106\105\116\116\101\114\124\108\97\109\98\100\97\124\108\101\111\112\97\114\100\124\108\105\110\101\97\114\124\108\105\110\101\97\114\95\115\112\108\105\110\101\124\108\105\110\101\97\114\95\115\119\101\101\112\124\108\111\99\97\116\105\111\110\124\108\111\103\124\108\111\111\107\115\95\108\105\107\101\124\108\111\111\107\95\97\116\124\108\111\119\95\101\114\114\111\114\95\102\97\99\116\111\114\124\109\97\110\100\101\108\124\109\97\112\95\116\121\112\101\124\109\97\114\98\108\101\124\109\97\116\101\114\105\97\108\95\109\97\112\124\109\97\116\114\105\120\124\109\97\120\124\109\97\120\95\105\110\116\101\114\115\101\99\116\105\111\110\115\124\109\97\120\95\105\116\101\114\97\116\105\111\110\124\109\97\120\95\116\114\97\99\101\95\108\101\118\101\108\124\109\97\120\95\118\97\108\117\101\124\109\101\116\97\108\108\105\99\124\109\105\110\124\109\105\110\105\109\117\109\95\114\101\117\115\101\124\109\111\100\124\109\111\114\116\97\114\124\110\101\97\114\101\115\116\95\99\111\117\110\116\124\110\111\124\110\111\114\109\97\108\124\110\111\114\109\97\108\95\109\97\112\124\110\111\95\115\104\97\100\111\119\124\110\117\109\98\101\114\95\111\102\95\119\97\118\101\115\124\111\99\116\97\118\101\115\124\111\102\102\124\111\102\102\115\101\116\124\111\109\101\103\97\124\111\109\110\105\109\97\120\124\111\110\124\111\110\99\101\124\111\110\105\111\110\124\111\112\101\110\124\111\114\116\104\111\103\114\97\112\104\105\99\124\112\97\110\111\114\97\109\105\99\124\112\97\116\116\101\114\110\49\124\112\97\116\116\101\114\110\50\124\112\97\116\116\101\114\110\51\124\112\101\114\115\112\101\99\116\105\118\101\124\112\103\109\124\112\104\97\115\101\124\112\104\111\110\103\124\112\104\111\110\103\95\115\105\122\101\124\112\105\124\112\105\103\109\101\110\116\124\112\105\103\109\101\110\116\95\109\97\112\124\112\108\97\110\97\114\95\109\97\112\112\105\110\103\124\112\110\103\124\112\111\105\110\116\95\97\116\124\112\111\116\124\112\111\119\124\112\112\109\124\112\114\101\99\105\115\105\111\110\124\112\119\114\124\113\117\97\100\114\97\116\105\99\95\115\112\108\105\110\101\124\113\117\97\116\101\114\110\105\111\110\124\113\117\105\99\107\95\99\111\108\111\114\124\113\117\105\99\107\95\99\111\108\111\117\114\124\113\117\105\108\116\101\100\124\114\97\100\105\97\108\124\114\97\100\105\97\110\115\124\114\97\100\105\111\115\105\116\121\124\114\97\100\105\117\115\124\114\97\105\110\98\111\119\124\114\97\109\112\95\119\97\118\101\124\114\97\110\100\124\114\97\110\103\101\124\114\101\99\105\112\114\111\99\97\108\124\114\101\99\117\114\115\105\111\110\95\108\105\109\105\116\124\114\101\100\124\114\101\102\108\101\99\116\105\111\110\124\114\101\102\114\97\99\116\105\111\110\124\114\101\110\100\101\114\124\114\101\112\101\97\116\124\114\103\98\124\114\103\98\102\124\114\103\98\102\116\124\114\103\98\116\124\114\105\103\104\116\124\114\105\112\112\108\101\115\124\114\111\116\97\116\101\124\114\111\117\103\104\110\101\115\115\124\115\97\109\112\108\101\115\124\115\99\97\108\101\124\115\99\97\108\108\111\112\95\119\97\118\101\124\115\99\97\116\116\101\114\105\110\103\124\115\101\101\100\124\115\104\97\100\111\119\108\101\115\115\124\115\105\110\124\115\105\110\101\95\119\97\118\101\124\115\105\110\104\124\115\107\121\124\115\107\121\95\115\112\104\101\114\101\124\115\108\105\99\101\124\115\108\111\112\101\95\109\97\112\124\115\109\111\111\116\104\124\115\112\101\99\117\108\97\114\124\115\112\104\101\114\105\99\97\108\95\109\97\112\112\105\110\103\124\115\112\105\114\97\108\124\115\112\105\114\97\108\49\124\115\112\105\114\97\108\50\124\115\112\111\116\108\105\103\104\116\124\115\112\111\116\116\101\100\124\115\113\114\124\115\113\114\116\124\115\116\97\116\105\115\116\105\99\115\124\115\116\114\124\115\116\114\99\109\112\124\115\116\114\101\110\103\116\104\124\115\116\114\108\101\110\124\115\116\114\108\119\114\124\115\116\114\117\112\114\124\115\116\117\114\109\124\115\117\98\115\116\114\124\115\119\105\116\99\104\124\115\121\115\124\116\124\116\97\110\124\116\97\110\104\124\116\101\115\116\95\99\97\109\101\114\97\95\49\124\116\101\115\116\95\99\97\109\101\114\97\95\50\124\116\101\115\116\95\99\97\109\101\114\97\95\51\124\116\101\115\116\95\99\97\109\101\114\97\95\52\124\116\101\120\116\117\114\101\124\116\101\120\116\117\114\101\95\109\97\112\124\116\103\97\124\116\104\105\99\107\110\101\115\115\124\116\104\114\101\115\104\111\108\100\124\116\105\103\104\116\110\101\115\115\124\116\105\108\101\50\124\116\105\108\101\115\124\116\114\97\99\107\124\116\114\97\110\115\102\111\114\109\124\116\114\97\110\115\108\97\116\101\124\116\114\97\110\115\109\105\116\124\116\114\105\97\110\103\108\101\95\119\97\118\101\124\116\114\117\101\124\116\116\102\124\116\117\114\98\117\108\101\110\99\101\124\116\117\114\98\95\100\101\112\116\104\124\116\121\112\101\124\117\108\116\114\97\95\119\105\100\101\95\97\110\103\108\101\124\117\112\124\117\115\101\95\99\111\108\111\114\124\117\115\101\95\99\111\108\111\117\114\124\117\115\101\95\105\110\100\101\120\124\117\95\115\116\101\112\115\124\118\97\108\124\118\97\114\105\97\110\99\101\124\118\97\120\105\115\95\114\111\116\97\116\101\124\118\99\114\111\115\115\124\118\100\111\116\124\118\101\114\115\105\111\110\124\118\108\101\110\103\116\104\124\118\110\111\114\109\97\108\105\122\101\124\118\111\108\117\109\101\95\111\98\106\101\99\116\124\118\111\108\117\109\101\95\114\101\110\100\101\114\101\100\124\118\111\108\95\119\105\116\104\95\108\105\103\104\116\124\118\114\111\116\97\116\101\124\118\95\115\116\101\112\115\124\119\97\114\110\105\110\103\124\119\97\114\112\124\119\97\116\101\114\95\108\101\118\101\108\124\119\97\118\101\115\124\119\104\105\108\101\124\119\105\100\116\104\124\119\111\111\100\124\119\114\105\110\107\108\101\115\124\121\101\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\98\105\99\117\98\105\99\95\112\97\116\99\104\124\98\108\111\98\124\98\111\120\124\99\97\109\101\114\97\124\99\111\110\101\124\99\117\98\105\99\124\99\121\108\105\110\100\101\114\124\100\105\102\102\101\114\101\110\99\101\124\100\105\115\99\124\104\101\105\103\104\116\95\102\105\101\108\100\124\105\110\116\101\114\115\101\99\116\105\111\110\124\106\117\108\105\97\95\102\114\97\99\116\97\108\124\108\97\116\104\101\124\108\105\103\104\116\95\115\111\117\114\99\101\124\109\101\114\103\101\124\109\101\115\104\124\111\98\106\101\99\116\124\112\108\97\110\101\124\112\111\108\121\124\112\111\108\121\103\111\110\124\112\114\105\115\109\124\113\117\97\100\114\105\99\124\113\117\97\114\116\105\99\124\115\109\111\111\116\104\95\116\114\105\97\110\103\108\101\124\115\111\114\124\115\112\104\101\114\101\124\115\117\112\101\114\101\108\108\105\112\115\111\105\100\124\116\101\120\116\124\116\111\114\117\115\124\116\114\105\97\110\103\108\101\124\117\110\105\111\110" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\92\91\92\93\40\41\123\125\60\62\59\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\45\43\42\47\61\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\98\40\120\124\121\124\122\124\117\124\118\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\95\48\45\57\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\48\45\57\93\43\92\46\91\48\45\57\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\46\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Prolog.hs b/src/Text/Highlighter/Lexers/Prolog.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Prolog.hs
@@ -0,0 +1,45 @@
+module Text.Highlighter.Lexers.Prolog (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\114\111\108\111\103"
+    , lAliases = ["\112\114\111\108\111\103"]
+    , lExtensions = ["\46\112\114\111\108\111\103", "\46\112\114\111", "\46\112\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\114\111\108\111\103"]
+    , lStart = root'
+    , lFlags = [utf8]
+    }
+
+nestedComment' :: TokenMatcher
+nestedComment' =
+    [ tokNext "\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tok "\91\94\42\47\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\35\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo nestedComment')
+    , tok "\37\46\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\92\91\92\93\40\41\123\125\124\46\44\59\33\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\58\45\124\45\45\62" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\34\40\63\58\92\92\120\91\48\45\57\97\45\102\65\45\70\93\43\92\92\124\92\92\117\91\48\45\57\97\45\102\65\45\70\93\123\52\125\124\92\85\91\48\45\57\97\45\102\65\45\70\93\123\56\125\124\92\92\91\48\45\55\93\43\92\92\124\92\92\91\92\119\92\87\93\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\63\58\39\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
+    , tok "\40\105\115\124\60\124\62\124\61\60\124\62\61\124\61\61\124\61\58\61\124\61\124\47\124\47\47\124\92\42\124\92\43\124\45\41\40\63\61\92\115\124\91\97\45\122\65\45\90\48\45\57\92\91\93\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\109\111\100\124\100\105\118\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\95" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\91\97\45\122\93\43\41\40\58\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42\41\40\92\115\42\41\40\58\45\124\45\45\62\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\40\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42\41\40\92\115\42\41\40\92\40\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\91\97\45\122\192\45\8191\12352\45\55295\57344\45\65519\93\91\97\45\122\65\45\90\48\45\57\95\36\192\45\8191\12352\45\55295\57344\45\65519\93\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
+    , tok "\91\35\38\42\43\92\45\46\47\58\60\61\62\63\64\92\92\94\126\161\45\191\8208\45\12351\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\65\116\111\109")
+    , tok "\91\65\45\90\95\93\91\65\45\90\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\115\43\124\91\8192\45\8207\65520\45\65534\65519\93" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Python.hs b/src/Text/Highlighter/Lexers/Python.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Python.hs
@@ -0,0 +1,149 @@
+module Text.Highlighter.Lexers.Python (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110"
+    , lAliases = ["\112\121\116\104\111\110", "\112\121"]
+    , lExtensions = ["\46\112\121", "\46\112\121\119", "\46\115\99", "\83\67\111\110\115\116\114\117\99\116", "\83\67\111\110\115\99\114\105\112\116", "\46\116\97\99"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\121\116\104\111\110", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\112\121\116\104\111\110"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+tsqs' :: TokenMatcher
+tsqs' =
+    [ tokNext "\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+builtins' :: TokenMatcher
+builtins' =
+    [ tok "\40\63\60\33\92\46\41\40\95\95\105\109\112\111\114\116\95\95\124\97\98\115\124\97\108\108\124\97\110\121\124\97\112\112\108\121\124\98\97\115\101\115\116\114\105\110\103\124\98\105\110\124\98\111\111\108\124\98\117\102\102\101\114\124\98\121\116\101\97\114\114\97\121\124\98\121\116\101\115\124\99\97\108\108\97\98\108\101\124\99\104\114\124\99\108\97\115\115\109\101\116\104\111\100\124\99\109\112\124\99\111\101\114\99\101\124\99\111\109\112\105\108\101\124\99\111\109\112\108\101\120\124\100\101\108\97\116\116\114\124\100\105\99\116\124\100\105\114\124\100\105\118\109\111\100\124\101\110\117\109\101\114\97\116\101\124\101\118\97\108\124\101\120\101\99\102\105\108\101\124\101\120\105\116\124\102\105\108\101\124\102\105\108\116\101\114\124\102\108\111\97\116\124\102\114\111\122\101\110\115\101\116\124\103\101\116\97\116\116\114\124\103\108\111\98\97\108\115\124\104\97\115\97\116\116\114\124\104\97\115\104\124\104\101\120\124\105\100\124\105\110\112\117\116\124\105\110\116\124\105\110\116\101\114\110\124\105\115\105\110\115\116\97\110\99\101\124\105\115\115\117\98\99\108\97\115\115\124\105\116\101\114\124\108\101\110\124\108\105\115\116\124\108\111\99\97\108\115\124\108\111\110\103\124\109\97\112\124\109\97\120\124\109\105\110\124\110\101\120\116\124\111\98\106\101\99\116\124\111\99\116\124\111\112\101\110\124\111\114\100\124\112\111\119\124\112\114\111\112\101\114\116\121\124\114\97\110\103\101\124\114\97\119\95\105\110\112\117\116\124\114\101\100\117\99\101\124\114\101\108\111\97\100\124\114\101\112\114\124\114\101\118\101\114\115\101\100\124\114\111\117\110\100\124\115\101\116\124\115\101\116\97\116\116\114\124\115\108\105\99\101\124\115\111\114\116\101\100\124\115\116\97\116\105\99\109\101\116\104\111\100\124\115\116\114\124\115\117\109\124\115\117\112\101\114\124\116\117\112\108\101\124\116\121\112\101\124\117\110\105\99\104\114\124\117\110\105\99\111\100\101\124\118\97\114\115\124\120\114\97\110\103\101\124\122\105\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\33\92\46\41\40\115\101\108\102\124\78\111\110\101\124\69\108\108\105\112\115\105\115\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\70\97\108\115\101\124\84\114\117\101\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\63\60\33\92\46\41\40\65\114\105\116\104\109\101\116\105\99\69\114\114\111\114\124\65\115\115\101\114\116\105\111\110\69\114\114\111\114\124\65\116\116\114\105\98\117\116\101\69\114\114\111\114\124\66\97\115\101\69\120\99\101\112\116\105\111\110\124\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\69\79\70\69\114\114\111\114\124\69\110\118\105\114\111\110\109\101\110\116\69\114\114\111\114\124\69\120\99\101\112\116\105\111\110\124\70\108\111\97\116\105\110\103\80\111\105\110\116\69\114\114\111\114\124\70\117\116\117\114\101\87\97\114\110\105\110\103\124\71\101\110\101\114\97\116\111\114\69\120\105\116\124\73\79\69\114\114\111\114\124\73\109\112\111\114\116\69\114\114\111\114\124\73\109\112\111\114\116\87\97\114\110\105\110\103\124\73\110\100\101\110\116\97\116\105\111\110\69\114\114\111\114\124\73\110\100\101\120\69\114\114\111\114\124\75\101\121\69\114\114\111\114\124\75\101\121\98\111\97\114\100\73\110\116\101\114\114\117\112\116\124\76\111\111\107\117\112\69\114\114\111\114\124\77\101\109\111\114\121\69\114\114\111\114\124\78\97\109\101\69\114\114\111\114\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\69\114\114\111\114\124\79\83\69\114\114\111\114\124\79\118\101\114\102\108\111\119\69\114\114\111\114\124\79\118\101\114\102\108\111\119\87\97\114\110\105\110\103\124\80\101\110\100\105\110\103\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\82\101\102\101\114\101\110\99\101\69\114\114\111\114\124\82\117\110\116\105\109\101\69\114\114\111\114\124\82\117\110\116\105\109\101\87\97\114\110\105\110\103\124\83\116\97\110\100\97\114\100\69\114\114\111\114\124\83\116\111\112\73\116\101\114\97\116\105\111\110\124\83\121\110\116\97\120\69\114\114\111\114\124\83\121\110\116\97\120\87\97\114\110\105\110\103\124\83\121\115\116\101\109\69\114\114\111\114\124\83\121\115\116\101\109\69\120\105\116\124\84\97\98\69\114\114\111\114\124\84\121\112\101\69\114\114\111\114\124\85\110\98\111\117\110\100\76\111\99\97\108\69\114\114\111\114\124\85\110\105\99\111\100\101\68\101\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\110\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\84\114\97\110\115\108\97\116\101\69\114\114\111\114\124\85\110\105\99\111\100\101\87\97\114\110\105\110\103\124\85\115\101\114\87\97\114\110\105\110\103\124\86\97\108\117\101\69\114\114\111\114\124\86\77\83\69\114\114\111\114\124\87\97\114\110\105\110\103\124\87\105\110\100\111\119\115\69\114\114\111\114\124\90\101\114\111\68\105\118\105\115\105\111\110\69\114\114\111\114\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    ]
+
+name' :: TokenMatcher
+name' =
+    [ tok "\64\91\97\45\122\65\45\90\48\45\57\95\46\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+tdqs' :: TokenMatcher
+tdqs' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+backtick' :: TokenMatcher
+backtick' =
+    [ tok "\96\46\42\63\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\120\88\93\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43\76" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114" :. Arbitrary "\76\111\110\103")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\115\115\101\114\116\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\100\101\108\124\101\108\105\102\124\101\108\115\101\124\101\120\99\101\112\116\124\101\120\101\99\124\102\105\110\97\108\108\121\124\102\111\114\124\103\108\111\98\97\108\124\105\102\124\108\97\109\98\100\97\124\112\97\115\115\124\112\114\105\110\116\124\114\97\105\115\101\124\114\101\116\117\114\110\124\116\114\121\124\119\104\105\108\101\124\121\105\101\108\100\124\97\115\124\119\105\116\104\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tok "\40\40\63\58\92\115\124\92\92\92\115\41\43\41\40\97\115\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")])
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\40\92\115\42\41\40\44\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+nl' :: TokenMatcher
+nl' =
+    [ tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\94\40\92\115\42\41\40\34\34\34\40\63\58\46\124\92\110\41\42\63\34\34\34\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\94\40\92\115\42\41\40\39\39\39\40\63\58\46\124\92\110\41\42\63\39\39\39\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\93\123\125\58\40\41\44\59\91\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\92" (Arbitrary "\84\101\120\116")
+    , tok "\40\105\110\124\105\115\124\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , anyOf keywords'
+    , tokNext "\40\100\101\102\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\102\114\111\109\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo fromimport')
+    , tokNext "\40\105\109\112\111\114\116\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , anyOf builtins'
+    , anyOf backtick'
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
+    , tokNext "\91\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
+    , tokNext "\91\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
+    , tokNext "\91\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
+    , tokNext "\91\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
+    , anyOf name'
+    , anyOf numbers'
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\37\40\92\40\91\97\45\122\65\45\90\48\45\57\95\93\43\92\41\41\63\91\45\35\48\32\43\93\42\40\91\48\45\57\93\43\124\91\42\93\41\63\40\92\46\40\91\48\45\57\93\43\124\91\42\93\41\41\63\91\104\108\76\93\63\91\100\105\111\117\120\88\101\69\102\70\103\71\99\114\115\37\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\73\110\116\101\114\112\111\108")
+    , tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+fromimport' :: TokenMatcher
+fromimport' =
+    [ tokNext "\40\40\63\58\92\115\124\92\92\92\115\41\43\41\40\105\109\112\111\114\116\41\92\98" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101")]) Pop
+    , tok "\91\97\45\122\65\45\90\95\46\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Python3.hs b/src/Text/Highlighter/Lexers/Python3.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Python3.hs
@@ -0,0 +1,149 @@
+module Text.Highlighter.Lexers.Python3 (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110\32\51"
+    , lAliases = ["\112\121\116\104\111\110\51", "\112\121\51"]
+    , lExtensions = []
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\121\116\104\111\110\51", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\112\121\116\104\111\110\51"]
+    , lStart = root'
+    , lFlags = [multiline, utf8]
+    }
+
+tsqs' :: TokenMatcher
+tsqs' =
+    [ tokNext "\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+sqs' :: TokenMatcher
+sqs' =
+    [ tokNext "\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\39\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+backtick' :: TokenMatcher
+backtick' =
+    [ 
+    ]
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\65\45\90\95\97\45\122\170\181\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1488\45\1514\1520\45\1522\1569\45\1594\1600\1601\45\1610\1646\45\1647\1649\45\1747\1749\1765\45\1766\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1901\1920\45\1957\1969\2308\45\2361\2365\2384\2392\45\2401\2429\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2493\2510\2524\45\2525\2527\45\2529\2544\45\2545\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2649\45\2652\2654\2674\45\2676\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2749\2768\2784\45\2785\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2877\2908\45\2909\2911\45\2913\2929\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3168\45\3169\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3261\3294\3296\45\3297\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3424\45\3425\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3585\45\3632\3634\3648\45\3653\3654\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3762\3773\3776\45\3780\3782\3804\45\3805\3840\3904\45\3911\3913\45\3946\3976\45\3979\4096\45\4129\4131\45\4135\4137\45\4138\4176\45\4181\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5920\45\5937\5952\45\5969\5984\45\5996\5998\45\6000\6016\45\6067\6103\6108\6176\45\6210\6211\6212\45\6263\6272\45\6312\6400\45\6428\6480\45\6509\6512\45\6516\6528\45\6569\6593\45\6599\6656\45\6678\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8305\8319\8336\45\8340\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65137\65139\65143\65145\65147\65149\65151\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65392\65393\45\65437\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\91\48\45\57\65\45\90\95\97\45\122\170\181\183\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\768\45\879\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1155\45\1158\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1425\45\1465\1467\45\1469\1471\1473\45\1474\1476\45\1477\1479\1488\45\1514\1520\45\1522\1552\45\1557\1569\45\1594\1600\1601\45\1610\1611\45\1630\1632\45\1641\1646\45\1647\1648\1649\45\1747\1749\1750\45\1756\1759\45\1764\1765\45\1766\1767\45\1768\1770\45\1773\1774\45\1775\1776\45\1785\1786\45\1788\1791\1808\1809\1810\45\1839\1840\45\1866\1869\45\1901\1920\45\1957\1958\45\1968\1969\2305\45\2306\2307\2308\45\2361\2364\2365\2366\45\2368\2369\45\2376\2377\45\2380\2381\2384\2385\45\2388\2392\45\2401\2402\45\2403\2406\45\2415\2429\2433\2434\45\2435\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2492\2493\2494\45\2496\2497\45\2500\2503\45\2504\2507\45\2508\2509\2510\2519\2524\45\2525\2527\45\2529\2530\45\2531\2534\45\2543\2544\45\2545\2561\45\2562\2563\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2620\2622\45\2624\2625\45\2626\2631\45\2632\2635\45\2637\2649\45\2652\2654\2662\45\2671\2672\45\2673\2674\45\2676\2689\45\2690\2691\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2748\2749\2750\45\2752\2753\45\2757\2759\45\2760\2761\2763\45\2764\2765\2768\2784\45\2785\2786\45\2787\2790\45\2799\2817\2818\45\2819\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2876\2877\2878\2879\2880\2881\45\2883\2887\45\2888\2891\45\2892\2893\2902\2903\2908\45\2909\2911\45\2913\2918\45\2927\2929\2946\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3006\45\3007\3008\3009\45\3010\3014\45\3016\3018\45\3020\3021\3031\3046\45\3055\3073\45\3075\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3134\45\3136\3137\45\3140\3142\45\3144\3146\45\3149\3157\45\3158\3168\45\3169\3174\45\3183\3202\45\3203\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3260\3261\3262\3263\3264\45\3268\3270\3271\45\3272\3274\45\3275\3276\45\3277\3285\45\3286\3294\3296\45\3297\3302\45\3311\3330\45\3331\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3390\45\3392\3393\45\3395\3398\45\3400\3402\45\3404\3405\3415\3424\45\3425\3430\45\3439\3458\45\3459\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3530\3535\45\3537\3538\45\3540\3542\3544\45\3551\3570\45\3571\3585\45\3632\3633\3634\45\3635\3636\45\3642\3648\45\3653\3654\3655\45\3662\3664\45\3673\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3761\3762\45\3763\3764\45\3769\3771\45\3772\3773\3776\45\3780\3782\3784\45\3789\3792\45\3801\3804\45\3805\3840\3864\45\3865\3872\45\3881\3893\3895\3897\3902\45\3903\3904\45\3911\3913\45\3946\3953\45\3966\3967\3968\45\3972\3974\45\3975\3976\45\3979\3984\45\3991\3993\45\4028\4038\4096\45\4129\4131\45\4135\4137\45\4138\4140\4141\45\4144\4145\4146\4150\45\4151\4152\4153\4160\45\4169\4176\45\4181\4182\45\4183\4184\45\4185\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4959\4969\45\4977\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5906\45\5908\5920\45\5937\5938\45\5940\5952\45\5969\5970\45\5971\5984\45\5996\5998\45\6000\6002\45\6003\6016\45\6067\6070\6071\45\6077\6078\45\6085\6086\6087\45\6088\6089\45\6099\6103\6108\6109\6112\45\6121\6155\45\6157\6160\45\6169\6176\45\6210\6211\6212\45\6263\6272\45\6312\6313\6400\45\6428\6432\45\6434\6435\45\6438\6439\45\6440\6441\45\6443\6448\45\6449\6450\6451\45\6456\6457\45\6459\6470\45\6479\6480\45\6509\6512\45\6516\6528\45\6569\6576\45\6592\6593\45\6599\6600\45\6601\6608\45\6617\6656\45\6678\6679\45\6680\6681\45\6683\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7616\45\7619\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8255\45\8256\8276\8305\8319\8336\45\8340\8400\45\8412\8417\8421\45\8427\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12330\45\12335\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12441\45\12442\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43010\43011\45\43013\43014\43015\45\43018\43019\43020\45\43042\43043\45\43044\43045\45\43046\43047\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64286\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65024\45\65039\65056\45\65059\65075\45\65076\65101\45\65103\65137\65139\65143\65145\65147\65149\65151\45\65276\65296\45\65305\65313\45\65338\65343\65345\45\65370\65382\45\65391\65392\65393\45\65437\65438\45\65439\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+stringescape' :: TokenMatcher
+stringescape' =
+    [ tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\92\110\124\78\123\46\42\63\125\124\117\91\97\45\102\65\45\70\48\45\57\93\123\52\125\124\85\91\97\45\102\65\45\70\48\45\57\93\123\56\125\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\91\111\79\93\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\48\91\98\66\93\91\48\49\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\66\105\110")
+    , tok "\48\91\120\88\93\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\115\115\101\114\116\124\98\114\101\97\107\124\99\111\110\116\105\110\117\101\124\100\101\108\124\101\108\105\102\124\101\108\115\101\124\101\120\99\101\112\116\124\102\105\110\97\108\108\121\124\102\111\114\124\103\108\111\98\97\108\124\105\102\124\108\97\109\98\100\97\124\112\97\115\115\124\114\97\105\115\101\124\114\101\116\117\114\110\124\116\114\121\124\119\104\105\108\101\124\121\105\101\108\100\124\97\115\124\119\105\116\104\124\84\114\117\101\124\70\97\108\115\101\124\78\111\110\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+nl' :: TokenMatcher
+nl' =
+    [ tok "\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+builtins' :: TokenMatcher
+builtins' =
+    [ tok "\40\63\60\33\92\46\41\40\95\95\105\109\112\111\114\116\95\95\124\97\98\115\124\97\108\108\124\97\110\121\124\98\105\110\124\98\111\111\108\124\98\121\116\101\97\114\114\97\121\124\98\121\116\101\115\124\99\104\114\124\99\108\97\115\115\109\101\116\104\111\100\124\99\109\112\124\99\111\109\112\105\108\101\124\99\111\109\112\108\101\120\124\100\101\108\97\116\116\114\124\100\105\99\116\124\100\105\114\124\100\105\118\109\111\100\124\101\110\117\109\101\114\97\116\101\124\101\118\97\108\124\102\105\108\116\101\114\124\102\108\111\97\116\124\102\111\114\109\97\116\124\102\114\111\122\101\110\115\101\116\124\103\101\116\97\116\116\114\124\103\108\111\98\97\108\115\124\104\97\115\97\116\116\114\124\104\97\115\104\124\104\101\120\124\105\100\124\105\110\112\117\116\124\105\110\116\124\105\115\105\110\115\116\97\110\99\101\124\105\115\115\117\98\99\108\97\115\115\124\105\116\101\114\124\108\101\110\124\108\105\115\116\124\108\111\99\97\108\115\124\109\97\112\124\109\97\120\124\109\101\109\111\114\121\118\105\101\119\124\109\105\110\124\110\101\120\116\124\111\98\106\101\99\116\124\111\99\116\124\111\112\101\110\124\111\114\100\124\112\111\119\124\112\114\105\110\116\124\112\114\111\112\101\114\116\121\124\114\97\110\103\101\124\114\101\112\114\124\114\101\118\101\114\115\101\100\124\114\111\117\110\100\124\115\101\116\124\115\101\116\97\116\116\114\124\115\108\105\99\101\124\115\111\114\116\101\100\124\115\116\97\116\105\99\109\101\116\104\111\100\124\115\116\114\124\115\117\109\124\115\117\112\101\114\124\116\117\112\108\101\124\116\121\112\101\124\118\97\114\115\124\122\105\112\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\33\92\46\41\40\115\101\108\102\124\69\108\108\105\112\115\105\115\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111")
+    , tok "\40\63\60\33\92\46\41\40\65\114\105\116\104\109\101\116\105\99\69\114\114\111\114\124\65\115\115\101\114\116\105\111\110\69\114\114\111\114\124\65\116\116\114\105\98\117\116\101\69\114\114\111\114\124\66\97\115\101\69\120\99\101\112\116\105\111\110\124\66\117\102\102\101\114\69\114\114\111\114\124\66\121\116\101\115\87\97\114\110\105\110\103\124\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\69\79\70\69\114\114\111\114\124\69\110\118\105\114\111\110\109\101\110\116\69\114\114\111\114\124\69\120\99\101\112\116\105\111\110\124\70\108\111\97\116\105\110\103\80\111\105\110\116\69\114\114\111\114\124\70\117\116\117\114\101\87\97\114\110\105\110\103\124\71\101\110\101\114\97\116\111\114\69\120\105\116\124\73\79\69\114\114\111\114\124\73\109\112\111\114\116\69\114\114\111\114\124\73\109\112\111\114\116\87\97\114\110\105\110\103\124\73\110\100\101\110\116\97\116\105\111\110\69\114\114\111\114\124\73\110\100\101\120\69\114\114\111\114\124\75\101\121\69\114\114\111\114\124\75\101\121\98\111\97\114\100\73\110\116\101\114\114\117\112\116\124\76\111\111\107\117\112\69\114\114\111\114\124\77\101\109\111\114\121\69\114\114\111\114\124\78\97\109\101\69\114\114\111\114\124\78\111\116\73\109\112\108\101\109\101\110\116\101\100\69\114\114\111\114\124\79\83\69\114\114\111\114\124\79\118\101\114\102\108\111\119\69\114\114\111\114\124\80\101\110\100\105\110\103\68\101\112\114\101\99\97\116\105\111\110\87\97\114\110\105\110\103\124\82\101\102\101\114\101\110\99\101\69\114\114\111\114\124\82\117\110\116\105\109\101\69\114\114\111\114\124\82\117\110\116\105\109\101\87\97\114\110\105\110\103\124\83\116\111\112\73\116\101\114\97\116\105\111\110\124\83\121\110\116\97\120\69\114\114\111\114\124\83\121\110\116\97\120\87\97\114\110\105\110\103\124\83\121\115\116\101\109\69\114\114\111\114\124\83\121\115\116\101\109\69\120\105\116\124\84\97\98\69\114\114\111\114\124\84\121\112\101\69\114\114\111\114\124\85\110\98\111\117\110\100\76\111\99\97\108\69\114\114\111\114\124\85\110\105\99\111\100\101\68\101\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\110\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\69\114\114\111\114\124\85\110\105\99\111\100\101\84\114\97\110\115\108\97\116\101\69\114\114\111\114\124\85\110\105\99\111\100\101\87\97\114\110\105\110\103\124\85\115\101\114\87\97\114\110\105\110\103\124\86\97\108\117\101\69\114\114\111\114\124\86\77\83\69\114\114\111\114\124\87\97\114\110\105\110\103\124\87\105\110\100\111\119\115\69\114\114\111\114\124\90\101\114\111\68\105\118\105\115\105\111\110\69\114\114\111\114\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\120\99\101\112\116\105\111\110")
+    ]
+
+name' :: TokenMatcher
+name' =
+    [ tok "\64\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\91\65\45\90\95\97\45\122\170\181\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1488\45\1514\1520\45\1522\1569\45\1594\1600\1601\45\1610\1646\45\1647\1649\45\1747\1749\1765\45\1766\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1901\1920\45\1957\1969\2308\45\2361\2365\2384\2392\45\2401\2429\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2493\2510\2524\45\2525\2527\45\2529\2544\45\2545\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2649\45\2652\2654\2674\45\2676\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2749\2768\2784\45\2785\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2877\2908\45\2909\2911\45\2913\2929\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3168\45\3169\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3261\3294\3296\45\3297\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3424\45\3425\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3585\45\3632\3634\3648\45\3653\3654\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3762\3773\3776\45\3780\3782\3804\45\3805\3840\3904\45\3911\3913\45\3946\3976\45\3979\4096\45\4129\4131\45\4135\4137\45\4138\4176\45\4181\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5920\45\5937\5952\45\5969\5984\45\5996\5998\45\6000\6016\45\6067\6103\6108\6176\45\6210\6211\6212\45\6263\6272\45\6312\6400\45\6428\6480\45\6509\6512\45\6516\6528\45\6569\6593\45\6599\6656\45\6678\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8305\8319\8336\45\8340\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65137\65139\65143\65145\65147\65149\65151\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65392\65393\45\65437\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\91\48\45\57\65\45\90\95\97\45\122\170\181\183\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\768\45\879\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1155\45\1158\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1425\45\1465\1467\45\1469\1471\1473\45\1474\1476\45\1477\1479\1488\45\1514\1520\45\1522\1552\45\1557\1569\45\1594\1600\1601\45\1610\1611\45\1630\1632\45\1641\1646\45\1647\1648\1649\45\1747\1749\1750\45\1756\1759\45\1764\1765\45\1766\1767\45\1768\1770\45\1773\1774\45\1775\1776\45\1785\1786\45\1788\1791\1808\1809\1810\45\1839\1840\45\1866\1869\45\1901\1920\45\1957\1958\45\1968\1969\2305\45\2306\2307\2308\45\2361\2364\2365\2366\45\2368\2369\45\2376\2377\45\2380\2381\2384\2385\45\2388\2392\45\2401\2402\45\2403\2406\45\2415\2429\2433\2434\45\2435\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2492\2493\2494\45\2496\2497\45\2500\2503\45\2504\2507\45\2508\2509\2510\2519\2524\45\2525\2527\45\2529\2530\45\2531\2534\45\2543\2544\45\2545\2561\45\2562\2563\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2620\2622\45\2624\2625\45\2626\2631\45\2632\2635\45\2637\2649\45\2652\2654\2662\45\2671\2672\45\2673\2674\45\2676\2689\45\2690\2691\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2748\2749\2750\45\2752\2753\45\2757\2759\45\2760\2761\2763\45\2764\2765\2768\2784\45\2785\2786\45\2787\2790\45\2799\2817\2818\45\2819\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2876\2877\2878\2879\2880\2881\45\2883\2887\45\2888\2891\45\2892\2893\2902\2903\2908\45\2909\2911\45\2913\2918\45\2927\2929\2946\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3006\45\3007\3008\3009\45\3010\3014\45\3016\3018\45\3020\3021\3031\3046\45\3055\3073\45\3075\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3134\45\3136\3137\45\3140\3142\45\3144\3146\45\3149\3157\45\3158\3168\45\3169\3174\45\3183\3202\45\3203\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3260\3261\3262\3263\3264\45\3268\3270\3271\45\3272\3274\45\3275\3276\45\3277\3285\45\3286\3294\3296\45\3297\3302\45\3311\3330\45\3331\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3390\45\3392\3393\45\3395\3398\45\3400\3402\45\3404\3405\3415\3424\45\3425\3430\45\3439\3458\45\3459\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3530\3535\45\3537\3538\45\3540\3542\3544\45\3551\3570\45\3571\3585\45\3632\3633\3634\45\3635\3636\45\3642\3648\45\3653\3654\3655\45\3662\3664\45\3673\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3761\3762\45\3763\3764\45\3769\3771\45\3772\3773\3776\45\3780\3782\3784\45\3789\3792\45\3801\3804\45\3805\3840\3864\45\3865\3872\45\3881\3893\3895\3897\3902\45\3903\3904\45\3911\3913\45\3946\3953\45\3966\3967\3968\45\3972\3974\45\3975\3976\45\3979\3984\45\3991\3993\45\4028\4038\4096\45\4129\4131\45\4135\4137\45\4138\4140\4141\45\4144\4145\4146\4150\45\4151\4152\4153\4160\45\4169\4176\45\4181\4182\45\4183\4184\45\4185\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4959\4969\45\4977\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5906\45\5908\5920\45\5937\5938\45\5940\5952\45\5969\5970\45\5971\5984\45\5996\5998\45\6000\6002\45\6003\6016\45\6067\6070\6071\45\6077\6078\45\6085\6086\6087\45\6088\6089\45\6099\6103\6108\6109\6112\45\6121\6155\45\6157\6160\45\6169\6176\45\6210\6211\6212\45\6263\6272\45\6312\6313\6400\45\6428\6432\45\6434\6435\45\6438\6439\45\6440\6441\45\6443\6448\45\6449\6450\6451\45\6456\6457\45\6459\6470\45\6479\6480\45\6509\6512\45\6516\6528\45\6569\6576\45\6592\6593\45\6599\6600\45\6601\6608\45\6617\6656\45\6678\6679\45\6680\6681\45\6683\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7616\45\7619\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8255\45\8256\8276\8305\8319\8336\45\8340\8400\45\8412\8417\8421\45\8427\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12330\45\12335\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12441\45\12442\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43010\43011\45\43013\43014\43015\45\43018\43019\43020\45\43042\43043\45\43044\43045\45\43046\43047\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64286\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65024\45\65039\65056\45\65059\65075\45\65076\65101\45\65103\65137\65139\65143\65145\65147\65149\65151\45\65276\65296\45\65305\65313\45\65338\65343\65345\45\65370\65382\45\65391\65392\65393\45\65437\65438\45\65439\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+dqs' :: TokenMatcher
+dqs' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\92\92\124\92\92\34\124\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , anyOf strings'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\94\40\92\115\42\41\40\34\34\34\40\63\58\46\124\92\110\41\42\63\34\34\34\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\94\40\92\115\42\41\40\39\39\39\40\63\58\46\124\92\110\41\42\63\39\39\39\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\99")])
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\93\123\125\58\40\41\44\59\91\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\92" (Arbitrary "\84\101\120\116")
+    , tok "\40\105\110\124\105\115\124\97\110\100\124\111\114\124\110\111\116\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\91\45\126\43\47\42\37\61\60\62\38\94\124\46\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , anyOf keywords'
+    , tokNext "\40\100\101\102\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\99\108\97\115\115\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\102\114\111\109\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo fromimport')
+    , tokNext "\40\105\109\112\111\114\116\41\40\40\63\58\92\115\124\92\92\92\115\41\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , anyOf builtins'
+    , anyOf backtick'
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tdqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo tsqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo dqs')
+    , tokNext "\40\63\58\91\114\82\93\124\91\117\85\93\91\114\82\93\124\91\114\82\93\91\117\85\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo sqs')
+    , tokNext "\91\117\85\93\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tdqs'])
+    , tokNext "\91\117\85\93\63\39\39\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', tsqs'])
+    , tokNext "\91\117\85\93\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', dqs'])
+    , tokNext "\91\117\85\93\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (Combined [stringescape', sqs'])
+    , anyOf name'
+    , anyOf numbers'
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\65\45\90\95\97\45\122\170\181\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1488\45\1514\1520\45\1522\1569\45\1594\1600\1601\45\1610\1646\45\1647\1649\45\1747\1749\1765\45\1766\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1901\1920\45\1957\1969\2308\45\2361\2365\2384\2392\45\2401\2429\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2493\2510\2524\45\2525\2527\45\2529\2544\45\2545\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2649\45\2652\2654\2674\45\2676\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2749\2768\2784\45\2785\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2877\2908\45\2909\2911\45\2913\2929\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3168\45\3169\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3261\3294\3296\45\3297\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3424\45\3425\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3585\45\3632\3634\3648\45\3653\3654\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3762\3773\3776\45\3780\3782\3804\45\3805\3840\3904\45\3911\3913\45\3946\3976\45\3979\4096\45\4129\4131\45\4135\4137\45\4138\4176\45\4181\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5920\45\5937\5952\45\5969\5984\45\5996\5998\45\6000\6016\45\6067\6103\6108\6176\45\6210\6211\6212\45\6263\6272\45\6312\6400\45\6428\6480\45\6509\6512\45\6516\6528\45\6569\6593\45\6599\6656\45\6678\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8305\8319\8336\45\8340\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65137\65139\65143\65145\65147\65149\65151\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65392\65393\45\65437\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\91\48\45\57\65\45\90\95\97\45\122\170\181\183\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\768\45\879\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1155\45\1158\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1425\45\1465\1467\45\1469\1471\1473\45\1474\1476\45\1477\1479\1488\45\1514\1520\45\1522\1552\45\1557\1569\45\1594\1600\1601\45\1610\1611\45\1630\1632\45\1641\1646\45\1647\1648\1649\45\1747\1749\1750\45\1756\1759\45\1764\1765\45\1766\1767\45\1768\1770\45\1773\1774\45\1775\1776\45\1785\1786\45\1788\1791\1808\1809\1810\45\1839\1840\45\1866\1869\45\1901\1920\45\1957\1958\45\1968\1969\2305\45\2306\2307\2308\45\2361\2364\2365\2366\45\2368\2369\45\2376\2377\45\2380\2381\2384\2385\45\2388\2392\45\2401\2402\45\2403\2406\45\2415\2429\2433\2434\45\2435\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2492\2493\2494\45\2496\2497\45\2500\2503\45\2504\2507\45\2508\2509\2510\2519\2524\45\2525\2527\45\2529\2530\45\2531\2534\45\2543\2544\45\2545\2561\45\2562\2563\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2620\2622\45\2624\2625\45\2626\2631\45\2632\2635\45\2637\2649\45\2652\2654\2662\45\2671\2672\45\2673\2674\45\2676\2689\45\2690\2691\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2748\2749\2750\45\2752\2753\45\2757\2759\45\2760\2761\2763\45\2764\2765\2768\2784\45\2785\2786\45\2787\2790\45\2799\2817\2818\45\2819\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2876\2877\2878\2879\2880\2881\45\2883\2887\45\2888\2891\45\2892\2893\2902\2903\2908\45\2909\2911\45\2913\2918\45\2927\2929\2946\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3006\45\3007\3008\3009\45\3010\3014\45\3016\3018\45\3020\3021\3031\3046\45\3055\3073\45\3075\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3134\45\3136\3137\45\3140\3142\45\3144\3146\45\3149\3157\45\3158\3168\45\3169\3174\45\3183\3202\45\3203\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3260\3261\3262\3263\3264\45\3268\3270\3271\45\3272\3274\45\3275\3276\45\3277\3285\45\3286\3294\3296\45\3297\3302\45\3311\3330\45\3331\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3390\45\3392\3393\45\3395\3398\45\3400\3402\45\3404\3405\3415\3424\45\3425\3430\45\3439\3458\45\3459\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3530\3535\45\3537\3538\45\3540\3542\3544\45\3551\3570\45\3571\3585\45\3632\3633\3634\45\3635\3636\45\3642\3648\45\3653\3654\3655\45\3662\3664\45\3673\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3761\3762\45\3763\3764\45\3769\3771\45\3772\3773\3776\45\3780\3782\3784\45\3789\3792\45\3801\3804\45\3805\3840\3864\45\3865\3872\45\3881\3893\3895\3897\3902\45\3903\3904\45\3911\3913\45\3946\3953\45\3966\3967\3968\45\3972\3974\45\3975\3976\45\3979\3984\45\3991\3993\45\4028\4038\4096\45\4129\4131\45\4135\4137\45\4138\4140\4141\45\4144\4145\4146\4150\45\4151\4152\4153\4160\45\4169\4176\45\4181\4182\45\4183\4184\45\4185\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4959\4969\45\4977\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5906\45\5908\5920\45\5937\5938\45\5940\5952\45\5969\5970\45\5971\5984\45\5996\5998\45\6000\6002\45\6003\6016\45\6067\6070\6071\45\6077\6078\45\6085\6086\6087\45\6088\6089\45\6099\6103\6108\6109\6112\45\6121\6155\45\6157\6160\45\6169\6176\45\6210\6211\6212\45\6263\6272\45\6312\6313\6400\45\6428\6432\45\6434\6435\45\6438\6439\45\6440\6441\45\6443\6448\45\6449\6450\6451\45\6456\6457\45\6459\6470\45\6479\6480\45\6509\6512\45\6516\6528\45\6569\6576\45\6592\6593\45\6599\6600\45\6601\6608\45\6617\6656\45\6678\6679\45\6680\6681\45\6683\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7616\45\7619\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8255\45\8256\8276\8305\8319\8336\45\8340\8400\45\8412\8417\8421\45\8427\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12330\45\12335\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12441\45\12442\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43010\43011\45\43013\43014\43015\45\43018\43019\43020\45\43042\43043\45\43044\43045\45\43046\43047\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64286\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65024\45\65039\65056\45\65059\65075\45\65076\65101\45\65103\65137\65139\65143\65145\65147\65149\65151\45\65276\65296\45\65305\65313\45\65338\65343\65345\45\65370\65382\45\65391\65392\65393\45\65437\65438\45\65439\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tok "\40\92\115\43\41\40\97\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")])
+    , tok "\92\46" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\91\65\45\90\95\97\45\122\170\181\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1488\45\1514\1520\45\1522\1569\45\1594\1600\1601\45\1610\1646\45\1647\1649\45\1747\1749\1765\45\1766\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1901\1920\45\1957\1969\2308\45\2361\2365\2384\2392\45\2401\2429\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2493\2510\2524\45\2525\2527\45\2529\2544\45\2545\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2649\45\2652\2654\2674\45\2676\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2749\2768\2784\45\2785\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2877\2908\45\2909\2911\45\2913\2929\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3168\45\3169\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3261\3294\3296\45\3297\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3424\45\3425\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3585\45\3632\3634\3648\45\3653\3654\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3762\3773\3776\45\3780\3782\3804\45\3805\3840\3904\45\3911\3913\45\3946\3976\45\3979\4096\45\4129\4131\45\4135\4137\45\4138\4176\45\4181\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5920\45\5937\5952\45\5969\5984\45\5996\5998\45\6000\6016\45\6067\6103\6108\6176\45\6210\6211\6212\45\6263\6272\45\6312\6400\45\6428\6480\45\6509\6512\45\6516\6528\45\6569\6593\45\6599\6656\45\6678\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8305\8319\8336\45\8340\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65137\65139\65143\65145\65147\65149\65151\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65392\65393\45\65437\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\91\48\45\57\65\45\90\95\97\45\122\170\181\183\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\768\45\879\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1155\45\1158\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1425\45\1465\1467\45\1469\1471\1473\45\1474\1476\45\1477\1479\1488\45\1514\1520\45\1522\1552\45\1557\1569\45\1594\1600\1601\45\1610\1611\45\1630\1632\45\1641\1646\45\1647\1648\1649\45\1747\1749\1750\45\1756\1759\45\1764\1765\45\1766\1767\45\1768\1770\45\1773\1774\45\1775\1776\45\1785\1786\45\1788\1791\1808\1809\1810\45\1839\1840\45\1866\1869\45\1901\1920\45\1957\1958\45\1968\1969\2305\45\2306\2307\2308\45\2361\2364\2365\2366\45\2368\2369\45\2376\2377\45\2380\2381\2384\2385\45\2388\2392\45\2401\2402\45\2403\2406\45\2415\2429\2433\2434\45\2435\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2492\2493\2494\45\2496\2497\45\2500\2503\45\2504\2507\45\2508\2509\2510\2519\2524\45\2525\2527\45\2529\2530\45\2531\2534\45\2543\2544\45\2545\2561\45\2562\2563\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2620\2622\45\2624\2625\45\2626\2631\45\2632\2635\45\2637\2649\45\2652\2654\2662\45\2671\2672\45\2673\2674\45\2676\2689\45\2690\2691\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2748\2749\2750\45\2752\2753\45\2757\2759\45\2760\2761\2763\45\2764\2765\2768\2784\45\2785\2786\45\2787\2790\45\2799\2817\2818\45\2819\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2876\2877\2878\2879\2880\2881\45\2883\2887\45\2888\2891\45\2892\2893\2902\2903\2908\45\2909\2911\45\2913\2918\45\2927\2929\2946\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3006\45\3007\3008\3009\45\3010\3014\45\3016\3018\45\3020\3021\3031\3046\45\3055\3073\45\3075\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3134\45\3136\3137\45\3140\3142\45\3144\3146\45\3149\3157\45\3158\3168\45\3169\3174\45\3183\3202\45\3203\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3260\3261\3262\3263\3264\45\3268\3270\3271\45\3272\3274\45\3275\3276\45\3277\3285\45\3286\3294\3296\45\3297\3302\45\3311\3330\45\3331\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3390\45\3392\3393\45\3395\3398\45\3400\3402\45\3404\3405\3415\3424\45\3425\3430\45\3439\3458\45\3459\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3530\3535\45\3537\3538\45\3540\3542\3544\45\3551\3570\45\3571\3585\45\3632\3633\3634\45\3635\3636\45\3642\3648\45\3653\3654\3655\45\3662\3664\45\3673\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3761\3762\45\3763\3764\45\3769\3771\45\3772\3773\3776\45\3780\3782\3784\45\3789\3792\45\3801\3804\45\3805\3840\3864\45\3865\3872\45\3881\3893\3895\3897\3902\45\3903\3904\45\3911\3913\45\3946\3953\45\3966\3967\3968\45\3972\3974\45\3975\3976\45\3979\3984\45\3991\3993\45\4028\4038\4096\45\4129\4131\45\4135\4137\45\4138\4140\4141\45\4144\4145\4146\4150\45\4151\4152\4153\4160\45\4169\4176\45\4181\4182\45\4183\4184\45\4185\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4959\4969\45\4977\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5906\45\5908\5920\45\5937\5938\45\5940\5952\45\5969\5970\45\5971\5984\45\5996\5998\45\6000\6002\45\6003\6016\45\6067\6070\6071\45\6077\6078\45\6085\6086\6087\45\6088\6089\45\6099\6103\6108\6109\6112\45\6121\6155\45\6157\6160\45\6169\6176\45\6210\6211\6212\45\6263\6272\45\6312\6313\6400\45\6428\6432\45\6434\6435\45\6438\6439\45\6440\6441\45\6443\6448\45\6449\6450\6451\45\6456\6457\45\6459\6470\45\6479\6480\45\6509\6512\45\6516\6528\45\6569\6576\45\6592\6593\45\6599\6600\45\6601\6608\45\6617\6656\45\6678\6679\45\6680\6681\45\6683\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7616\45\7619\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8255\45\8256\8276\8305\8319\8336\45\8340\8400\45\8412\8417\8421\45\8427\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12330\45\12335\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12441\45\12442\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43010\43011\45\43013\43014\43015\45\43018\43019\43020\45\43042\43043\45\43044\43045\45\43046\43047\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64286\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65024\45\65039\65056\45\65059\65075\45\65076\65101\45\65103\65137\65139\65143\65145\65147\65149\65151\45\65276\65296\45\65305\65313\45\65338\65343\65345\45\65370\65382\45\65391\65392\65393\45\65437\65438\45\65439\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\40\92\115\42\41\40\44\41\40\92\115\42\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")])
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+tdqs' :: TokenMatcher
+tdqs' =
+    [ tokNext "\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf strings'
+    , anyOf nl'
+    ]
+
+strings' :: TokenMatcher
+strings' =
+    [ tok "\91\94\92\92\92\39\34\37\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\91\92\39\34\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\37" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+fromimport' :: TokenMatcher
+fromimport' =
+    [ tokNext "\40\92\115\43\41\40\105\109\112\111\114\116\41\92\98" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")]) Pop
+    , tok "\92\46" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    , tok "\91\65\45\90\95\97\45\122\170\181\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1488\45\1514\1520\45\1522\1569\45\1594\1600\1601\45\1610\1646\45\1647\1649\45\1747\1749\1765\45\1766\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1901\1920\45\1957\1969\2308\45\2361\2365\2384\2392\45\2401\2429\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2493\2510\2524\45\2525\2527\45\2529\2544\45\2545\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2649\45\2652\2654\2674\45\2676\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2749\2768\2784\45\2785\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2877\2908\45\2909\2911\45\2913\2929\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3168\45\3169\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3261\3294\3296\45\3297\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3424\45\3425\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3585\45\3632\3634\3648\45\3653\3654\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3762\3773\3776\45\3780\3782\3804\45\3805\3840\3904\45\3911\3913\45\3946\3976\45\3979\4096\45\4129\4131\45\4135\4137\45\4138\4176\45\4181\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5920\45\5937\5952\45\5969\5984\45\5996\5998\45\6000\6016\45\6067\6103\6108\6176\45\6210\6211\6212\45\6263\6272\45\6312\6400\45\6428\6480\45\6509\6512\45\6516\6528\45\6569\6593\45\6599\6656\45\6678\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8305\8319\8336\45\8340\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65137\65139\65143\65145\65147\65149\65151\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65392\65393\45\65437\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\91\48\45\57\65\45\90\95\97\45\122\170\181\183\186\192\45\214\216\45\246\248\45\442\443\444\45\447\448\45\451\452\45\577\592\45\687\688\45\705\710\45\721\736\45\740\750\768\45\879\902\904\45\906\908\910\45\929\931\45\974\976\45\1013\1015\45\1153\1155\45\1158\1162\45\1230\1232\45\1273\1280\45\1295\1329\45\1366\1369\1377\45\1415\1425\45\1465\1467\45\1469\1471\1473\45\1474\1476\45\1477\1479\1488\45\1514\1520\45\1522\1552\45\1557\1569\45\1594\1600\1601\45\1610\1611\45\1630\1632\45\1641\1646\45\1647\1648\1649\45\1747\1749\1750\45\1756\1759\45\1764\1765\45\1766\1767\45\1768\1770\45\1773\1774\45\1775\1776\45\1785\1786\45\1788\1791\1808\1809\1810\45\1839\1840\45\1866\1869\45\1901\1920\45\1957\1958\45\1968\1969\2305\45\2306\2307\2308\45\2361\2364\2365\2366\45\2368\2369\45\2376\2377\45\2380\2381\2384\2385\45\2388\2392\45\2401\2402\45\2403\2406\45\2415\2429\2433\2434\45\2435\2437\45\2444\2447\45\2448\2451\45\2472\2474\45\2480\2482\2486\45\2489\2492\2493\2494\45\2496\2497\45\2500\2503\45\2504\2507\45\2508\2509\2510\2519\2524\45\2525\2527\45\2529\2530\45\2531\2534\45\2543\2544\45\2545\2561\45\2562\2563\2565\45\2570\2575\45\2576\2579\45\2600\2602\45\2608\2610\45\2611\2613\45\2614\2616\45\2617\2620\2622\45\2624\2625\45\2626\2631\45\2632\2635\45\2637\2649\45\2652\2654\2662\45\2671\2672\45\2673\2674\45\2676\2689\45\2690\2691\2693\45\2701\2703\45\2705\2707\45\2728\2730\45\2736\2738\45\2739\2741\45\2745\2748\2749\2750\45\2752\2753\45\2757\2759\45\2760\2761\2763\45\2764\2765\2768\2784\45\2785\2786\45\2787\2790\45\2799\2817\2818\45\2819\2821\45\2828\2831\45\2832\2835\45\2856\2858\45\2864\2866\45\2867\2869\45\2873\2876\2877\2878\2879\2880\2881\45\2883\2887\45\2888\2891\45\2892\2893\2902\2903\2908\45\2909\2911\45\2913\2918\45\2927\2929\2946\2947\2949\45\2954\2958\45\2960\2962\45\2965\2969\45\2970\2972\2974\45\2975\2979\45\2980\2984\45\2986\2990\45\3001\3006\45\3007\3008\3009\45\3010\3014\45\3016\3018\45\3020\3021\3031\3046\45\3055\3073\45\3075\3077\45\3084\3086\45\3088\3090\45\3112\3114\45\3123\3125\45\3129\3134\45\3136\3137\45\3140\3142\45\3144\3146\45\3149\3157\45\3158\3168\45\3169\3174\45\3183\3202\45\3203\3205\45\3212\3214\45\3216\3218\45\3240\3242\45\3251\3253\45\3257\3260\3261\3262\3263\3264\45\3268\3270\3271\45\3272\3274\45\3275\3276\45\3277\3285\45\3286\3294\3296\45\3297\3302\45\3311\3330\45\3331\3333\45\3340\3342\45\3344\3346\45\3368\3370\45\3385\3390\45\3392\3393\45\3395\3398\45\3400\3402\45\3404\3405\3415\3424\45\3425\3430\45\3439\3458\45\3459\3461\45\3478\3482\45\3505\3507\45\3515\3517\3520\45\3526\3530\3535\45\3537\3538\45\3540\3542\3544\45\3551\3570\45\3571\3585\45\3632\3633\3634\45\3635\3636\45\3642\3648\45\3653\3654\3655\45\3662\3664\45\3673\3713\45\3714\3716\3719\45\3720\3722\3725\3732\45\3735\3737\45\3743\3745\45\3747\3749\3751\3754\45\3755\3757\45\3760\3761\3762\45\3763\3764\45\3769\3771\45\3772\3773\3776\45\3780\3782\3784\45\3789\3792\45\3801\3804\45\3805\3840\3864\45\3865\3872\45\3881\3893\3895\3897\3902\45\3903\3904\45\3911\3913\45\3946\3953\45\3966\3967\3968\45\3972\3974\45\3975\3976\45\3979\3984\45\3991\3993\45\4028\4038\4096\45\4129\4131\45\4135\4137\45\4138\4140\4141\45\4144\4145\4146\4150\45\4151\4152\4153\4160\45\4169\4176\45\4181\4182\45\4183\4184\45\4185\4256\45\4293\4304\45\4346\4348\4352\45\4441\4447\45\4514\4520\45\4601\4608\45\4680\4682\45\4685\4688\45\4694\4696\4698\45\4701\4704\45\4744\4746\45\4749\4752\45\4784\4786\45\4789\4792\45\4798\4800\4802\45\4805\4808\45\4822\4824\45\4880\4882\45\4885\4888\45\4954\4959\4969\45\4977\4992\45\5007\5024\45\5108\5121\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5872\5888\45\5900\5902\45\5905\5906\45\5908\5920\45\5937\5938\45\5940\5952\45\5969\5970\45\5971\5984\45\5996\5998\45\6000\6002\45\6003\6016\45\6067\6070\6071\45\6077\6078\45\6085\6086\6087\45\6088\6089\45\6099\6103\6108\6109\6112\45\6121\6155\45\6157\6160\45\6169\6176\45\6210\6211\6212\45\6263\6272\45\6312\6313\6400\45\6428\6432\45\6434\6435\45\6438\6439\45\6440\6441\45\6443\6448\45\6449\6450\6451\45\6456\6457\45\6459\6470\45\6479\6480\45\6509\6512\45\6516\6528\45\6569\6576\45\6592\6593\45\6599\6600\45\6601\6608\45\6617\6656\45\6678\6679\45\6680\6681\45\6683\7424\45\7467\7468\45\7521\7522\45\7543\7544\7545\45\7578\7579\45\7615\7616\45\7619\7680\45\7835\7840\45\7929\7936\45\7957\7960\45\7965\7968\45\8005\8008\45\8013\8016\45\8023\8025\8027\8029\8031\45\8061\8064\45\8116\8118\45\8124\8126\8130\45\8132\8134\45\8140\8144\45\8147\8150\45\8155\8160\45\8172\8178\45\8180\8182\45\8188\8255\45\8256\8276\8305\8319\8336\45\8340\8400\45\8412\8417\8421\45\8427\8450\8455\8458\45\8467\8469\8472\8473\45\8477\8484\8486\8488\8490\45\8493\8494\8495\45\8497\8499\45\8500\8501\45\8504\8505\8508\45\8511\8517\45\8521\8544\45\8579\11264\45\11310\11312\45\11358\11392\45\11492\11520\45\11557\11568\45\11621\11631\11648\45\11670\11680\45\11686\11688\45\11694\11696\45\11702\11704\45\11710\11712\45\11718\11720\45\11726\11728\45\11734\11736\45\11742\12293\12294\12295\12321\45\12329\12330\45\12335\12337\45\12341\12344\45\12346\12347\12348\12353\45\12438\12441\45\12442\12445\45\12446\12447\12449\45\12538\12540\45\12542\12543\12549\45\12588\12593\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40891\40960\45\40980\40981\40982\45\42124\43008\45\43009\43010\43011\45\43013\43014\43015\45\43018\43019\43020\45\43042\43043\45\43044\43045\45\43046\43047\44032\45\55203\63744\45\64045\64048\45\64106\64112\45\64217\64256\45\64262\64275\45\64279\64285\64286\64287\45\64296\64298\45\64310\64312\45\64316\64318\64320\45\64321\64323\45\64324\64326\45\64433\64467\45\64605\64612\45\64829\64848\45\64911\64914\45\64967\65008\45\65017\65024\45\65039\65056\45\65059\65075\45\65076\65101\45\65103\65137\65139\65143\65145\65147\65149\65151\45\65276\65296\45\65305\65313\45\65338\65343\65345\45\65370\65382\45\65391\65392\65393\45\65437\65438\45\65439\65440\45\65470\65474\45\65479\65482\45\65487\65490\45\65495\65498\45\65500\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Python3Traceback.hs b/src/Text/Highlighter/Lexers/Python3Traceback.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Python3Traceback.hs
@@ -0,0 +1,32 @@
+module Text.Highlighter.Lexers.Python3Traceback (lexer) where
+import qualified Text.Highlighter.Lexers.Python3 as Python3
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110\51"
+    , lAliases = ["\112\121\51\116\98"]
+    , lExtensions = ["\46\112\121\51\116\98"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\121\116\104\111\110\51\45\116\114\97\99\101\98\97\99\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tokNext "\94\84\114\97\99\101\98\97\99\107\32\92\40\109\111\115\116\32\114\101\99\101\110\116\32\99\97\108\108\32\108\97\115\116\92\41\58\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\84\114\97\99\101\98\97\99\107") (GoTo intb')
+    , tok "\94\68\117\114\105\110\103\32\104\97\110\100\108\105\110\103\32\111\102\32\116\104\101\32\97\98\111\118\101\32\101\120\99\101\112\116\105\111\110\44\32\97\110\111\116\104\101\114\32\101\120\99\101\112\116\105\111\110\32\111\99\99\117\114\114\101\100\58\92\110\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\84\114\97\99\101\98\97\99\107")
+    , tok "\94\84\104\101\32\97\98\111\118\101\32\101\120\99\101\112\116\105\111\110\32\119\97\115\32\116\104\101\32\100\105\114\101\99\116\32\99\97\117\115\101\32\111\102\32\116\104\101\32\102\111\108\108\111\119\105\110\103\32\101\120\99\101\112\116\105\111\110\58\92\110\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\84\114\97\99\101\98\97\99\107")
+    ]
+
+intb' :: TokenMatcher
+intb' =
+    [ tok "\94\40\32\32\70\105\108\101\32\41\40\34\91\94\34\93\43\34\41\40\44\32\108\105\110\101\32\41\40\92\100\43\41\40\44\32\105\110\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\73\100\101\110\116\105\102\105\101\114"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\32\32\32\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Using Python3.lexer), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\91\32\92\116\93\42\41\40\46\46\46\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\94\40\46\43\41\40\58\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\73\100\101\110\116\105\102\105\101\114"), (Arbitrary "\84\101\120\116")]) Pop
+    , tokNext "\94\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\58\63\92\110\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/PythonTraceback.hs b/src/Text/Highlighter/Lexers/PythonTraceback.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/PythonTraceback.hs
@@ -0,0 +1,32 @@
+module Text.Highlighter.Lexers.PythonTraceback (lexer) where
+import qualified Text.Highlighter.Lexers.Python as Python
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\121\116\104\111\110"
+    , lAliases = ["\112\121\116\98"]
+    , lExtensions = ["\46\112\121\116\98"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\112\121\116\104\111\110\45\116\114\97\99\101\98\97\99\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\94\84\114\97\99\101\98\97\99\107\32\92\40\109\111\115\116\32\114\101\99\101\110\116\32\99\97\108\108\32\108\97\115\116\92\41\58\92\110" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\84\114\97\99\101\98\97\99\107") (GoTo intb')
+    , tokNext "\94\40\63\61\32\32\70\105\108\101\32\34\91\94\34\93\43\34\44\32\108\105\110\101\32\92\100\43\41" (Arbitrary "\71\101\110\101\114\105\99" :. Arbitrary "\84\114\97\99\101\98\97\99\107") (GoTo intb')
+    , tok "\94\46\42\92\110" (Arbitrary "\79\116\104\101\114")
+    ]
+
+intb' :: TokenMatcher
+intb' =
+    [ tok "\94\40\32\32\70\105\108\101\32\41\40\34\91\94\34\93\43\34\41\40\44\32\108\105\110\101\32\41\40\92\100\43\41\40\44\32\105\110\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\73\100\101\110\116\105\102\105\101\114"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\32\32\70\105\108\101\32\41\40\34\91\94\34\93\43\34\41\40\44\32\108\105\110\101\32\41\40\92\100\43\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\32\32\32\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Using Python.lexer), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\91\32\92\116\93\42\41\40\46\46\46\41\40\92\110\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\67\111\109\109\101\110\116"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\94\40\46\43\41\40\58\32\41\40\46\43\41\40\92\110\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\73\100\101\110\116\105\102\105\101\114"), (Arbitrary "\84\101\120\116")]) Pop
+    , tokNext "\94\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\58\63\92\110\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116")]) Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Ragel.hs b/src/Text/Highlighter/Lexers/Ragel.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Ragel.hs
@@ -0,0 +1,91 @@
+module Text.Highlighter.Lexers.Ragel (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\82\97\103\101\108"
+    , lAliases = ["\114\97\103\101\108"]
+    , lExtensions = []
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+host' :: TokenMatcher
+host' =
+    [ tok "\40\91\94\123\125\92\39\34\47\35\93\43\124\91\94\92\92\93\91\92\92\93\91\123\125\93\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\47\47\46\42\36\92\110\63\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\92\35\46\42\36\92\110\63\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\124\47\41\43" (Arbitrary "\79\116\104\101\114")
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Push
+    , tokNext "\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+literals' :: TokenMatcher
+literals' =
+    [ tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\91\40\92\92\92\92\124\92\92\92\93\124\91\94\92\93\93\41\42\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116" :. Arbitrary "\87\104\105\116\101\115\112\97\99\101")
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\40\97\99\99\101\115\115\124\97\99\116\105\111\110\124\97\108\112\104\116\121\112\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\103\101\116\107\101\121\124\119\114\105\116\101\124\109\97\99\104\105\110\101\124\105\110\99\108\117\100\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\110\121\124\97\115\99\105\105\124\101\120\116\101\110\100\124\97\108\112\104\97\124\100\105\103\105\116\124\97\108\110\117\109\124\108\111\119\101\114\124\117\112\112\101\114\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\120\100\105\103\105\116\124\99\110\116\114\108\124\103\114\97\112\104\124\112\114\105\110\116\124\112\117\110\99\116\124\115\112\97\99\101\124\122\108\101\110\124\101\109\112\116\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+operators' :: TokenMatcher
+operators' =
+    [ tok "\44" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\124\124\38\124\45\124\45\45" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\46\124\60\58\124\58\62\124\58\62\62" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\58" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\45\62" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\47\124\101\111\102\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\33\124\101\114\114\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\92\94\124\108\101\114\114\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\126\124\116\111\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\40\92\42\124\102\114\111\109\92\98\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\62\124\64\124\92\36\124\37" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\42\124\92\63\124\92\43\124\123\91\48\45\57\93\42\44\91\48\45\57\93\42\125" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\33\124\92\94" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\40\124\92\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+identifiers' :: TokenMatcher
+identifiers' =
+    [ tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\95\48\45\57\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf literals'
+    , anyOf whitespace'
+    , anyOf comments'
+    , anyOf keywords'
+    , anyOf numbers'
+    , anyOf identifiers'
+    , anyOf operators'
+    , tokNext "\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo host')
+    , tok "\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\92\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\48\120\91\48\45\57\65\45\70\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\43\45\93\63\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/RagelEmbedded.hs b/src/Text/Highlighter/Lexers/RagelEmbedded.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/RagelEmbedded.hs
@@ -0,0 +1,29 @@
+module Text.Highlighter.Lexers.RagelEmbedded (lexer) where
+import qualified Text.Highlighter.Lexers.Ragel as Ragel
+import qualified Text.Highlighter.Lexers.Ragel as Ragel
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\82\97\103\101\108"
+    , lAliases = ["\114\97\103\101\108\45\101\109"]
+    , lExtensions = ["\46\114\108"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\91\94\37\92\39\34\47\35\93\43\124\37\40\63\61\91\94\37\93\124\36\41\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\47\47\46\42\36\92\110\63\124\92\35\46\42\36\92\110\63\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\124\47\41\43" (Arbitrary "\79\116\104\101\114")
+    , tok "\40\37\37\41\40\63\33\91\123\37\93\41\40\46\42\41\40\36\124\59\41\40\92\110\63\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Using Ragel.lexer), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tokNext "\40\37\37\37\37\124\37\37\41\123" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") (GoTo multiLineFsm')
+    ]
+
+multiLineFsm' :: TokenMatcher
+multiLineFsm' =
+    [ tok "\40\40\91\94\125\92\39\34\92\91\47\35\93\124\125\40\63\61\91\94\37\93\124\36\41\124\125\37\40\63\61\91\94\37\93\124\36\41\124\91\94\92\92\93\91\92\92\93\91\123\125\93\124\40\62\124\92\36\124\37\124\60\124\64\124\60\62\41\47\124\47\40\63\33\92\42\41\40\92\92\92\92\124\92\92\47\124\91\94\47\93\41\42\47\92\42\124\47\40\63\61\91\94\47\92\42\93\124\36\41\41\43\124\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34\124\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39\124\92\91\40\92\92\92\92\124\92\92\92\93\124\91\94\92\93\93\41\42\92\93\124\47\92\42\40\46\124\92\110\41\42\63\92\42\47\124\47\47\46\42\36\92\110\63\124\92\35\46\42\36\92\110\63\41\43" (Using Ragel.lexer)
+    , tokNext "\125\37\37" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Redcode.hs b/src/Text/Highlighter/Lexers/Redcode.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Redcode.hs
@@ -0,0 +1,28 @@
+module Text.Highlighter.Lexers.Redcode (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\82\101\100\99\111\100\101"
+    , lAliases = ["\114\101\100\99\111\100\101"]
+    , lExtensions = ["\46\99\119"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\59\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\98\40\68\65\84\124\77\79\86\124\65\68\68\124\83\85\66\124\77\85\76\124\68\73\86\124\77\79\68\124\74\77\80\124\74\77\90\124\74\77\78\124\68\74\78\124\67\77\80\124\83\76\84\124\83\80\76\124\79\82\71\124\69\81\85\124\69\78\68\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\92\98\40\65\124\66\124\65\66\124\66\65\124\70\124\88\124\73\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\91\65\45\90\97\45\122\95\93\91\65\45\90\97\45\122\95\48\45\57\93\43" (Arbitrary "\78\97\109\101")
+    , tok "\91\45\43\42\47\37\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\35\36\64\60\62\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\46\44\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\45\43\93\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/S.hs b/src/Text/Highlighter/Lexers/S.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/S.hs
@@ -0,0 +1,86 @@
+module Text.Highlighter.Lexers.S (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83"
+    , lAliases = ["\115\112\108\117\115", "\115", "\114"]
+    , lExtensions = ["\46\83", "\46\82"]
+    , lMimetypes = ["\116\101\120\116\47\83\45\112\108\117\115", "\116\101\120\116\47\83", "\116\101\120\116\47\82"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+statements' :: TokenMatcher
+statements' =
+    [ anyOf comments'
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string_squote')
+    , tokNext "\92\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string_dquote')
+    , anyOf builtin_symbols'
+    , anyOf numbers'
+    , anyOf keywords'
+    , anyOf punctuation'
+    , anyOf operators'
+    , anyOf valid_name'
+    ]
+
+string_dquote' :: TokenMatcher
+string_dquote' =
+    [ tokNext "\91\94\92\34\93\42\92\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
+operators' :: TokenMatcher
+operators' =
+    [ tok "\60\45\124\45\124\61\61\124\60\61\124\62\61\124\60\124\62\124\38\38\124\38\124\33\61\124\92\124\92\124\63" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\92\42\124\92\43\124\92\94\124\47\124\37\37\124\37\47\37\124\61" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\37\105\110\37\124\37\42\37" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+keywords' :: TokenMatcher
+keywords' =
+    [ tok "\102\111\114\40\63\61\92\115\42\92\40\41\124\119\104\105\108\101\40\63\61\92\115\42\92\40\41\124\105\102\40\63\61\92\115\42\92\40\41\124\40\63\60\61\92\115\41\101\108\115\101\124\40\63\60\61\92\115\41\98\114\101\97\107\40\63\61\59\124\36\41\124\114\101\116\117\114\110\40\63\61\92\115\42\92\40\41\124\102\117\110\99\116\105\111\110\40\63\61\92\115\42\92\40\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\82\101\115\101\114\118\101\100")
+    ]
+
+numbers' :: TokenMatcher
+numbers' =
+    [ tok "\40\63\60\33\91\48\45\57\97\45\122\65\45\90\92\41\92\125\92\93\96\92\34\93\41\40\63\61\92\115\42\41\91\45\92\43\93\63\91\48\45\57\93\43\40\92\46\91\48\45\57\93\42\41\63\40\69\91\48\45\57\93\91\45\92\43\93\63\40\92\46\91\48\45\57\93\42\41\63\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\46\91\48\45\57\93\42\40\69\91\48\45\57\93\91\45\92\43\93\63\40\92\46\91\48\45\57\93\42\41\63\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    ]
+
+valid_name' :: TokenMatcher
+valid_name' =
+    [ tok "\91\97\45\122\65\45\90\93\91\48\45\57\97\45\122\65\45\90\92\46\95\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\96\46\43\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107")
+    ]
+
+builtin_symbols' :: TokenMatcher
+builtin_symbols' =
+    [ tok "\40\78\85\76\76\124\78\65\124\84\82\85\69\124\70\65\76\83\69\124\78\97\78\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\84\124\70\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
+punctuation' :: TokenMatcher
+punctuation' =
+    [ tok "\92\91\124\92\93\124\92\91\92\91\124\92\93\92\93\124\92\36\124\92\40\124\92\41\124\64\124\58\58\58\63\124\59\124\44" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
+comments' :: TokenMatcher
+comments' =
+    [ tok "\35\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf statements'
+    , tok "\92\123\124\92\125" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
+string_squote' :: TokenMatcher
+string_squote' =
+    [ tokNext "\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Scala.hs b/src/Text/Highlighter/Lexers/Scala.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Scala.hs
@@ -0,0 +1,85 @@
+module Text.Highlighter.Lexers.Scala (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83\99\97\108\97"
+    , lAliases = ["\115\99\97\108\97"]
+    , lExtensions = ["\46\115\99\97\108\97"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\115\99\97\108\97"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\47\92\42\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Push
+    , tokNext "\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\42\47\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\40\99\108\97\115\115\124\116\114\97\105\116\124\111\98\106\101\99\116\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo class')
+    , tok "\39\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63" (Arbitrary "\84\101\120\116" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\91\94\92\83\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo comment')
+    , tok "\64\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63" (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")
+    , tok "\40\97\98\115\116\114\97\99\116\124\99\97\40\63\58\115\101\124\116\99\104\41\124\100\40\63\58\101\102\124\111\41\124\101\40\63\58\108\115\101\124\120\116\101\110\100\115\41\124\102\40\63\58\105\110\97\108\40\63\58\108\121\41\63\124\111\114\40\63\58\83\111\109\101\41\63\41\124\105\40\63\58\102\124\109\112\108\105\99\105\116\41\124\108\97\122\121\124\109\97\116\99\104\124\110\101\119\124\111\118\101\114\114\105\100\101\124\112\114\40\63\58\105\118\97\116\101\124\111\116\101\99\116\101\100\41\124\114\101\40\63\58\113\117\105\114\101\115\124\116\117\114\110\41\124\115\40\63\58\101\97\108\101\100\124\117\112\101\114\41\124\116\40\63\58\104\40\63\58\105\115\124\114\111\119\41\124\114\121\41\124\118\97\91\108\114\93\124\119\40\63\58\104\105\108\101\124\105\116\104\41\124\121\105\101\108\100\41\92\98\124\40\60\91\37\58\45\93\124\61\62\124\62\58\124\91\35\61\64\95\8658\8592\93\41\40\8\124\40\63\61\92\115\41\124\36\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\58\40\63\33\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo type')
+    , tok "\91\65\45\90\92\36\95\192\45\214\216\45\222\256\258\260\262\264\266\268\270\272\274\276\278\280\282\284\286\288\290\292\294\296\298\300\302\304\306\308\310\313\315\317\319\321\323\325\327\330\332\334\336\338\340\342\344\346\348\350\352\354\356\358\360\362\364\366\368\370\372\374\376\45\377\379\381\385\45\386\388\390\45\391\393\45\395\398\45\401\403\45\404\406\45\408\412\45\413\415\45\416\418\420\422\45\423\425\428\430\45\431\433\45\435\437\439\45\440\444\452\455\458\461\463\465\467\469\471\473\475\478\480\482\484\486\488\490\492\494\497\500\502\45\504\506\508\510\512\514\516\518\520\522\524\526\528\530\532\534\536\538\540\542\544\546\548\550\552\554\556\558\560\562\570\45\571\573\45\574\577\579\45\582\584\586\588\590\880\882\886\902\904\45\911\913\45\939\975\978\45\980\984\986\988\990\992\994\996\998\1000\1002\1004\1006\1012\1015\1017\45\1018\1021\45\1071\1120\1122\1124\1126\1128\1130\1132\1134\1136\1138\1140\1142\1144\1146\1148\1150\1152\1162\1164\1166\1168\1170\1172\1174\1176\1178\1180\1182\1184\1186\1188\1190\1192\1194\1196\1198\1200\1202\1204\1206\1208\1210\1212\1214\1216\45\1217\1219\1221\1223\1225\1227\1229\1232\1234\1236\1238\1240\1242\1244\1246\1248\1250\1252\1254\1256\1258\1260\1262\1264\1266\1268\1270\1272\1274\1276\1278\1280\1282\1284\1286\1288\1290\1292\1294\1296\1298\1300\1302\1304\1306\1308\1310\1312\1314\1329\45\1366\4256\45\4293\7680\7682\7684\7686\7688\7690\7692\7694\7696\7698\7700\7702\7704\7706\7708\7710\7712\7714\7716\7718\7720\7722\7724\7726\7728\7730\7732\7734\7736\7738\7740\7742\7744\7746\7748\7750\7752\7754\7756\7758\7760\7762\7764\7766\7768\7770\7772\7774\7776\7778\7780\7782\7784\7786\7788\7790\7792\7794\7796\7798\7800\7802\7804\7806\7808\7810\7812\7814\7816\7818\7820\7822\7824\7826\7828\7838\7840\7842\7844\7846\7848\7850\7852\7854\7856\7858\7860\7862\7864\7866\7868\7870\7872\7874\7876\7878\7880\7882\7884\7886\7888\7890\7892\7894\7896\7898\7900\7902\7904\7906\7908\7910\7912\7914\7916\7918\7920\7922\7924\7926\7928\7930\7932\7934\7944\45\7951\7960\45\7965\7976\45\7983\7992\45\7999\8008\45\8013\8025\45\8031\8040\45\8047\8120\45\8123\8136\45\8139\8152\45\8155\8168\45\8172\8184\45\8187\8450\8455\8459\45\8461\8464\45\8466\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8496\45\8499\8510\45\8511\8517\8579\11264\45\11310\11360\11362\45\11364\11367\11369\11371\11373\45\11375\11378\11381\11392\11394\11396\11398\11400\11402\11404\11406\11408\11410\11412\11414\11416\11418\11420\11422\11424\11426\11428\11430\11432\11434\11436\11438\11440\11442\11444\11446\11448\11450\11452\11454\11456\11458\11460\11462\11464\11466\11468\11470\11472\11474\11476\11478\11480\11482\11484\11486\11488\11490\42560\42562\42564\42566\42568\42570\42572\42574\42576\42578\42580\42582\42584\42586\42588\42590\42594\42596\42598\42600\42602\42604\42624\42626\42628\42630\42632\42634\42636\42638\42640\42642\42644\42646\42786\42788\42790\42792\42794\42796\42798\42802\42804\42806\42808\42810\42812\42814\42816\42818\42820\42822\42824\42826\42828\42830\42832\42834\42836\42838\42840\42842\42844\42846\42848\42850\42852\42854\42856\42858\42860\42862\42873\42875\42877\45\42878\42880\42882\42884\42886\42891\65313\45\65338\93\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tokNext "\40\105\109\112\111\114\116\124\112\97\99\107\97\103\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo import')
+    , tokNext "\40\116\121\112\101\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo type')
+    , tok "\34\34\34\40\63\58\46\124\92\110\41\42\63\34\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\92\92\46\39\124\39\91\94\92\92\93\39\124\39\92\92\117\91\48\45\57\97\45\102\93\123\52\125\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63" (Arbitrary "\78\97\109\101")
+    , tok "\96\91\94\96\93\43\96" (Arbitrary "\78\97\109\101")
+    , tokNext "\92\91" (Arbitrary "\79\112\101\114\97\116\111\114") (GoTo typeparam')
+    , tok "\91\92\40\92\41\92\123\92\125\59\44\46\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\91\48\45\57\93\91\48\45\57\93\42\92\46\91\48\45\57\93\42\124\92\46\91\48\45\57\93\43\41\40\91\101\69\93\91\43\45\93\63\91\48\45\57\93\43\41\63\91\102\70\100\68\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\91\48\45\57\93\43\76\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
+typeparam' :: TokenMatcher
+typeparam' =
+    [ tok "\91\92\115\92\110\44\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\60\91\37\58\93\124\61\62\124\62\58\124\91\35\95\8658\93\124\102\111\114\83\111\109\101\124\116\121\112\101" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\91\92\93\92\41\92\125\93\41" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "\91\92\40\92\91\92\123\93" (Arbitrary "\79\112\101\114\97\116\111\114") Push
+    , tok "\92\46\124\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    ]
+
+import' :: TokenMatcher
+import' =
+    [ tokNext "\40\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\92\46\41\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+type' :: TokenMatcher
+type' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\60\91\37\58\93\124\62\58\124\91\35\95\8658\93\124\102\111\114\83\111\109\101\124\116\121\112\101" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\91\44\92\41\59\125\93\124\61\62\124\61\41\40\91\92\115\92\110\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116")]) Pop
+    , tokNext "\91\92\40\92\123\93" (Arbitrary "\79\112\101\114\97\116\111\114") Push
+    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96\41\40\63\58\92\46\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96\41\41\42\41\40\92\115\42\41\40\92\91\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) (DoAll [Pop, (GoTo typeparam')])
+    , tokNext "\40\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96\41\40\63\58\92\46\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96\41\41\42\41\40\92\115\42\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101"), (Arbitrary "\84\101\120\116")]) Pop
+    , tok "\92\46\124\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    ]
+
+class' :: TokenMatcher
+class' =
+    [ tokNext "\40\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96\41\40\92\115\42\41\40\92\91\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")]) (GoTo typeparam')
+    , tok "\91\92\115\92\110\93\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\123" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "\92\40" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\40\63\58\91\97\45\122\65\45\90\92\36\95\170\181\186\192\45\214\216\45\246\248\45\687\880\45\883\886\45\887\891\45\893\902\904\45\1013\1015\45\1153\1162\45\1366\1377\45\1415\1488\45\1522\1569\45\1599\1601\45\1610\1646\45\1647\1649\45\1747\1749\1774\45\1775\1786\45\1788\1791\1808\1810\45\1839\1869\45\1957\1969\1994\45\2026\2308\45\2361\2365\2384\2392\45\2401\2418\45\2431\2437\45\2489\2493\2510\2524\45\2529\2544\45\2545\2565\45\2617\2649\45\2654\2674\45\2676\2693\45\2745\2749\2768\45\2785\2821\45\2873\2877\2908\45\2913\2929\2947\45\3001\3024\3077\45\3133\3160\45\3169\3205\45\3257\3261\3294\45\3297\3333\45\3389\3424\45\3425\3450\45\3455\3461\45\3526\3585\45\3632\3634\45\3635\3648\45\3653\3713\45\3760\3762\45\3763\3773\45\3780\3804\45\3840\3904\45\3948\3976\45\3979\4096\45\4138\4159\4176\45\4181\4186\45\4189\4193\4197\45\4198\4206\45\4208\4213\45\4225\4238\4256\45\4346\4352\45\4954\4992\45\5007\5024\45\5740\5743\45\5750\5761\45\5786\5792\45\5866\5870\45\5905\5920\45\5937\5952\45\5969\5984\45\6000\6016\45\6067\6108\6176\45\6210\6212\45\6312\6314\45\6428\6480\45\6569\6593\45\6599\6656\45\6678\6917\45\6963\6981\45\6987\7043\45\7072\7086\45\7087\7168\45\7203\7245\45\7247\7258\45\7287\7424\45\7467\7522\45\7543\7545\45\7578\7680\45\8124\8126\8130\45\8140\8144\45\8155\8160\45\8172\8178\45\8188\8305\8319\8450\8455\8458\45\8467\8469\8473\45\8477\8484\8486\8488\8490\45\8493\8495\45\8505\8508\45\8511\8517\45\8521\8526\8544\45\8584\11264\45\11388\11392\45\11492\11520\45\11621\11648\45\11742\12294\45\12295\12321\45\12329\12344\45\12346\12348\12353\45\12438\12447\12449\45\12538\12543\45\12686\12704\45\12727\12784\45\12799\13312\45\19893\19968\45\40980\40982\45\42124\42240\45\42507\42512\45\42527\42538\45\42606\42624\45\42647\42786\45\42863\42865\45\42887\42891\45\43009\43011\45\43013\43015\45\43018\43020\45\43042\43072\45\43123\43138\45\43187\43274\45\43301\43312\45\43334\43520\45\43560\43584\45\43586\43588\45\43595\44032\45\55203\63744\45\64285\64287\45\64296\64298\45\64829\64848\45\65019\65136\45\65276\65313\45\65338\65345\45\65370\65382\45\65391\65393\45\65437\65440\45\65500\93\124\91\48\45\57\93\41\42\40\63\58\40\63\60\61\95\41\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\41\63\124\91\45\126\92\94\92\42\33\37\38\92\92\60\62\92\124\43\61\58\47\63\64\166\45\167\169\172\174\176\45\177\182\215\247\1014\1154\1542\45\1544\1550\45\1551\1769\1789\45\1790\2038\2554\2928\3059\45\3064\3066\3199\3313\45\3314\3449\3841\45\3843\3859\45\3863\3866\45\3871\3892\3894\3896\4030\45\4037\4039\45\4047\4254\45\4255\4960\5008\45\5017\6464\6624\45\6655\7009\45\7018\7028\45\7036\8260\8274\8314\45\8316\8330\45\8332\8448\45\8449\8451\45\8454\8456\45\8457\8468\8470\45\8472\8478\45\8483\8485\8487\8489\8494\8506\45\8507\8512\45\8516\8522\45\8525\8527\8592\45\9000\9003\45\9290\9372\45\9449\9472\45\10087\10132\45\10180\10183\45\10213\10224\45\10626\10649\45\10711\10716\45\10747\10750\45\11092\11493\45\11498\11904\45\12283\12292\12306\45\12307\12320\12342\45\12343\12350\45\12351\12688\45\12689\12694\45\12703\12736\45\12771\12800\45\12830\12842\45\12880\12896\45\12927\12938\45\12976\12992\45\13311\19904\45\19967\42128\45\42182\43048\45\43051\64297\65021\65122\65124\45\65126\65291\65308\45\65310\65372\65374\65506\65508\65512\45\65518\65532\45\65533\93\43\124\96\91\94\96\93\43\96" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Scheme.hs b/src/Text/Highlighter/Lexers/Scheme.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Scheme.hs
@@ -0,0 +1,35 @@
+module Text.Highlighter.Lexers.Scheme (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83\99\104\101\109\101"
+    , lAliases = ["\115\99\104\101\109\101", "\115\99\109"]
+    , lExtensions = ["\46\115\99\109"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\115\99\104\101\109\101", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\99\104\101\109\101"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\59\46\42\36" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\45\63\92\100\43\92\46\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\45\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\39\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\124\45\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\35\92\92\40\91\40\41\47\39\92\34\46\39\95\33\194\167\36\37\38\32\63\61\43\45\93\123\49\125\124\91\97\45\122\65\45\90\48\45\57\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\35\116\124\35\102\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\40\39\124\35\124\96\124\44\64\124\44\124\92\46\41" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\108\97\109\98\100\97\32\124\100\101\102\105\110\101\32\124\105\102\32\124\101\108\115\101\32\124\99\111\110\100\32\124\97\110\100\32\124\111\114\32\124\99\97\115\101\32\124\108\101\116\32\124\108\101\116\92\42\32\124\108\101\116\114\101\99\32\124\98\101\103\105\110\32\124\100\111\32\124\100\101\108\97\121\32\124\115\101\116\92\33\32\124\92\61\92\62\32\124\113\117\111\116\101\32\124\113\117\97\115\105\113\117\111\116\101\32\124\117\110\113\117\111\116\101\32\124\117\110\113\117\111\116\101\92\45\115\112\108\105\99\105\110\103\32\124\100\101\102\105\110\101\92\45\115\121\110\116\97\120\32\124\108\101\116\92\45\115\121\110\116\97\120\32\124\108\101\116\114\101\99\92\45\115\121\110\116\97\120\32\124\115\121\110\116\97\120\92\45\114\117\108\101\115\32\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\63\60\61\39\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\124\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\63\60\61\35\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\124\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\63\60\61\92\40\41\40\92\42\32\124\92\43\32\124\92\45\32\124\92\47\32\124\92\60\32\124\92\60\92\61\32\124\92\61\32\124\92\62\32\124\92\62\92\61\32\124\97\98\115\32\124\97\99\111\115\32\124\97\110\103\108\101\32\124\97\112\112\101\110\100\32\124\97\112\112\108\121\32\124\97\115\105\110\32\124\97\115\115\111\99\32\124\97\115\115\113\32\124\97\115\115\118\32\124\97\116\97\110\32\124\98\111\111\108\101\97\110\92\63\32\124\99\97\97\97\97\114\32\124\99\97\97\97\100\114\32\124\99\97\97\97\114\32\124\99\97\97\100\97\114\32\124\99\97\97\100\100\114\32\124\99\97\97\100\114\32\124\99\97\97\114\32\124\99\97\100\97\97\114\32\124\99\97\100\97\100\114\32\124\99\97\100\97\114\32\124\99\97\100\100\97\114\32\124\99\97\100\100\100\114\32\124\99\97\100\100\114\32\124\99\97\100\114\32\124\99\97\108\108\92\45\119\105\116\104\92\45\99\117\114\114\101\110\116\92\45\99\111\110\116\105\110\117\97\116\105\111\110\32\124\99\97\108\108\92\45\119\105\116\104\92\45\105\110\112\117\116\92\45\102\105\108\101\32\124\99\97\108\108\92\45\119\105\116\104\92\45\111\117\116\112\117\116\92\45\102\105\108\101\32\124\99\97\108\108\92\45\119\105\116\104\92\45\118\97\108\117\101\115\32\124\99\97\108\108\92\47\99\99\32\124\99\97\114\32\124\99\100\97\97\97\114\32\124\99\100\97\97\100\114\32\124\99\100\97\97\114\32\124\99\100\97\100\97\114\32\124\99\100\97\100\100\114\32\124\99\100\97\100\114\32\124\99\100\97\114\32\124\99\100\100\97\97\114\32\124\99\100\100\97\100\114\32\124\99\100\100\97\114\32\124\99\100\100\100\97\114\32\124\99\100\100\100\100\114\32\124\99\100\100\100\114\32\124\99\100\100\114\32\124\99\100\114\32\124\99\101\105\108\105\110\103\32\124\99\104\97\114\92\45\92\62\105\110\116\101\103\101\114\32\124\99\104\97\114\92\45\97\108\112\104\97\98\101\116\105\99\92\63\32\124\99\104\97\114\92\45\99\105\92\60\92\61\92\63\32\124\99\104\97\114\92\45\99\105\92\60\92\63\32\124\99\104\97\114\92\45\99\105\92\61\92\63\32\124\99\104\97\114\92\45\99\105\92\62\92\61\92\63\32\124\99\104\97\114\92\45\99\105\92\62\92\63\32\124\99\104\97\114\92\45\100\111\119\110\99\97\115\101\32\124\99\104\97\114\92\45\108\111\119\101\114\92\45\99\97\115\101\92\63\32\124\99\104\97\114\92\45\110\117\109\101\114\105\99\92\63\32\124\99\104\97\114\92\45\114\101\97\100\121\92\63\32\124\99\104\97\114\92\45\117\112\99\97\115\101\32\124\99\104\97\114\92\45\117\112\112\101\114\92\45\99\97\115\101\92\63\32\124\99\104\97\114\92\45\119\104\105\116\101\115\112\97\99\101\92\63\32\124\99\104\97\114\92\60\92\61\92\63\32\124\99\104\97\114\92\60\92\63\32\124\99\104\97\114\92\61\92\63\32\124\99\104\97\114\92\62\92\61\92\63\32\124\99\104\97\114\92\62\92\63\32\124\99\104\97\114\92\63\32\124\99\108\111\115\101\92\45\105\110\112\117\116\92\45\112\111\114\116\32\124\99\108\111\115\101\92\45\111\117\116\112\117\116\92\45\112\111\114\116\32\124\99\111\109\112\108\101\120\92\63\32\124\99\111\110\115\32\124\99\111\115\32\124\99\117\114\114\101\110\116\92\45\105\110\112\117\116\92\45\112\111\114\116\32\124\99\117\114\114\101\110\116\92\45\111\117\116\112\117\116\92\45\112\111\114\116\32\124\100\101\110\111\109\105\110\97\116\111\114\32\124\100\105\115\112\108\97\121\32\124\100\121\110\97\109\105\99\92\45\119\105\110\100\32\124\101\111\102\92\45\111\98\106\101\99\116\92\63\32\124\101\113\92\63\32\124\101\113\117\97\108\92\63\32\124\101\113\118\92\63\32\124\101\118\97\108\32\124\101\118\101\110\92\63\32\124\101\120\97\99\116\92\45\92\62\105\110\101\120\97\99\116\32\124\101\120\97\99\116\92\63\32\124\101\120\112\32\124\101\120\112\116\32\124\102\108\111\111\114\32\124\102\111\114\92\45\101\97\99\104\32\124\102\111\114\99\101\32\124\103\99\100\32\124\105\109\97\103\92\45\112\97\114\116\32\124\105\110\101\120\97\99\116\92\45\92\62\101\120\97\99\116\32\124\105\110\101\120\97\99\116\92\63\32\124\105\110\112\117\116\92\45\112\111\114\116\92\63\32\124\105\110\116\101\103\101\114\92\45\92\62\99\104\97\114\32\124\105\110\116\101\103\101\114\92\63\32\124\105\110\116\101\114\97\99\116\105\111\110\92\45\101\110\118\105\114\111\110\109\101\110\116\32\124\108\99\109\32\124\108\101\110\103\116\104\32\124\108\105\115\116\32\124\108\105\115\116\92\45\92\62\115\116\114\105\110\103\32\124\108\105\115\116\92\45\92\62\118\101\99\116\111\114\32\124\108\105\115\116\92\45\114\101\102\32\124\108\105\115\116\92\45\116\97\105\108\32\124\108\105\115\116\92\63\32\124\108\111\97\100\32\124\108\111\103\32\124\109\97\103\110\105\116\117\100\101\32\124\109\97\107\101\92\45\112\111\108\97\114\32\124\109\97\107\101\92\45\114\101\99\116\97\110\103\117\108\97\114\32\124\109\97\107\101\92\45\115\116\114\105\110\103\32\124\109\97\107\101\92\45\118\101\99\116\111\114\32\124\109\97\112\32\124\109\97\120\32\124\109\101\109\98\101\114\32\124\109\101\109\113\32\124\109\101\109\118\32\124\109\105\110\32\124\109\111\100\117\108\111\32\124\110\101\103\97\116\105\118\101\92\63\32\124\110\101\119\108\105\110\101\32\124\110\111\116\32\124\110\117\108\108\92\45\101\110\118\105\114\111\110\109\101\110\116\32\124\110\117\108\108\92\63\32\124\110\117\109\98\101\114\92\45\92\62\115\116\114\105\110\103\32\124\110\117\109\98\101\114\92\63\32\124\110\117\109\101\114\97\116\111\114\32\124\111\100\100\92\63\32\124\111\112\101\110\92\45\105\110\112\117\116\92\45\102\105\108\101\32\124\111\112\101\110\92\45\111\117\116\112\117\116\92\45\102\105\108\101\32\124\111\117\116\112\117\116\92\45\112\111\114\116\92\63\32\124\112\97\105\114\92\63\32\124\112\101\101\107\92\45\99\104\97\114\32\124\112\111\114\116\92\63\32\124\112\111\115\105\116\105\118\101\92\63\32\124\112\114\111\99\101\100\117\114\101\92\63\32\124\113\117\111\116\105\101\110\116\32\124\114\97\116\105\111\110\97\108\92\63\32\124\114\97\116\105\111\110\97\108\105\122\101\32\124\114\101\97\100\32\124\114\101\97\100\92\45\99\104\97\114\32\124\114\101\97\108\92\45\112\97\114\116\32\124\114\101\97\108\92\63\32\124\114\101\109\97\105\110\100\101\114\32\124\114\101\118\101\114\115\101\32\124\114\111\117\110\100\32\124\115\99\104\101\109\101\92\45\114\101\112\111\114\116\92\45\101\110\118\105\114\111\110\109\101\110\116\32\124\115\101\116\92\45\99\97\114\92\33\32\124\115\101\116\92\45\99\100\114\92\33\32\124\115\105\110\32\124\115\113\114\116\32\124\115\116\114\105\110\103\32\124\115\116\114\105\110\103\92\45\92\62\108\105\115\116\32\124\115\116\114\105\110\103\92\45\92\62\110\117\109\98\101\114\32\124\115\116\114\105\110\103\92\45\92\62\115\121\109\98\111\108\32\124\115\116\114\105\110\103\92\45\97\112\112\101\110\100\32\124\115\116\114\105\110\103\92\45\99\105\92\60\92\61\92\63\32\124\115\116\114\105\110\103\92\45\99\105\92\60\92\63\32\124\115\116\114\105\110\103\92\45\99\105\92\61\92\63\32\124\115\116\114\105\110\103\92\45\99\105\92\62\92\61\92\63\32\124\115\116\114\105\110\103\92\45\99\105\92\62\92\63\32\124\115\116\114\105\110\103\92\45\99\111\112\121\32\124\115\116\114\105\110\103\92\45\102\105\108\108\92\33\32\124\115\116\114\105\110\103\92\45\108\101\110\103\116\104\32\124\115\116\114\105\110\103\92\45\114\101\102\32\124\115\116\114\105\110\103\92\45\115\101\116\92\33\32\124\115\116\114\105\110\103\92\60\92\61\92\63\32\124\115\116\114\105\110\103\92\60\92\63\32\124\115\116\114\105\110\103\92\61\92\63\32\124\115\116\114\105\110\103\92\62\92\61\92\63\32\124\115\116\114\105\110\103\92\62\92\63\32\124\115\116\114\105\110\103\92\63\32\124\115\117\98\115\116\114\105\110\103\32\124\115\121\109\98\111\108\92\45\92\62\115\116\114\105\110\103\32\124\115\121\109\98\111\108\92\63\32\124\116\97\110\32\124\116\114\97\110\115\99\114\105\112\116\92\45\111\102\102\32\124\116\114\97\110\115\99\114\105\112\116\92\45\111\110\32\124\116\114\117\110\99\97\116\101\32\124\118\97\108\117\101\115\32\124\118\101\99\116\111\114\32\124\118\101\99\116\111\114\92\45\92\62\108\105\115\116\32\124\118\101\99\116\111\114\92\45\102\105\108\108\92\33\32\124\118\101\99\116\111\114\92\45\108\101\110\103\116\104\32\124\118\101\99\116\111\114\92\45\114\101\102\32\124\118\101\99\116\111\114\92\45\115\101\116\92\33\32\124\118\101\99\116\111\114\92\63\32\124\119\105\116\104\92\45\105\110\112\117\116\92\45\102\114\111\109\92\45\102\105\108\101\32\124\119\105\116\104\92\45\111\117\116\112\117\116\92\45\116\111\92\45\102\105\108\101\32\124\119\114\105\116\101\32\124\119\114\105\116\101\92\45\99\104\97\114\32\124\122\101\114\111\92\63\32\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\40\63\60\61\92\40\41\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\124\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tok "\91\97\45\122\65\45\90\48\45\57\33\36\37\38\42\43\44\47\58\60\61\62\63\64\94\95\126\124\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\92\40\124\92\41\41" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Smalltalk.hs b/src/Text/Highlighter/Lexers/Smalltalk.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Smalltalk.hs
@@ -0,0 +1,118 @@
+module Text.Highlighter.Lexers.Smalltalk (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83\109\97\108\108\116\97\108\107"
+    , lAliases = ["\115\109\97\108\108\116\97\108\107", "\115\113\117\101\97\107"]
+    , lExtensions = ["\46\115\116"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\115\109\97\108\108\116\97\108\107"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+objects' :: TokenMatcher
+objects' =
+    [ tokNext "\92\91" (Arbitrary "\84\101\120\116") (GoTo blockvariables')
+    , tokNext "\92\93" (Arbitrary "\84\101\120\116") (GoTo afterobject')
+    , tokNext "\92\98\40\115\101\108\102\124\115\117\112\101\114\124\116\114\117\101\124\102\97\108\115\101\124\110\105\108\124\116\104\105\115\67\111\110\116\101\120\116\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110" :. Arbitrary "\80\115\101\117\100\111") (GoTo afterobject')
+    , tokNext "\92\98\91\65\45\90\93\92\119\42\40\63\33\58\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") (GoTo afterobject')
+    , tokNext "\92\98\91\97\45\122\93\92\119\42\40\63\33\58\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo afterobject')
+    , tokNext "\35\40\34\91\94\34\93\42\34\124\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43\124\91\92\119\58\93\43\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo afterobject')
+    , anyOf literals'
+    ]
+
+blockvariables' :: TokenMatcher
+blockvariables' =
+    [ anyOf whitespaces'
+    , tok "\40\58\41\40\92\115\42\41\40\91\65\45\90\97\45\122\92\119\93\43\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    , tokNext "\92\124" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+_parenth_helper' :: TokenMatcher
+_parenth_helper' =
+    [ anyOf whitespaces'
+    , tok "\40\92\100\43\114\41\63\45\63\92\100\43\40\92\46\92\100\43\41\63\40\101\45\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\45\43\42\47\92\92\126\60\62\61\124\38\35\33\63\44\64\37\92\119\43\58\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\92\39\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\36\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tokNext "\35\42\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo inner_parenth')
+    ]
+
+afterobject' :: TokenMatcher
+afterobject' =
+    [ tokNext "\33\32\33\36" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf whitespaces'
+    , tokNext "\92\98\40\105\102\84\114\117\101\58\124\105\102\70\97\108\115\101\58\124\119\104\105\108\101\84\114\117\101\58\124\119\104\105\108\101\70\97\108\115\101\58\124\116\105\109\101\115\82\101\112\101\97\116\58\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") Pop
+    , tok "\92\98\40\110\101\119\92\98\40\63\33\58\41\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tokNext "\92\58\61\124\92\95" (Arbitrary "\79\112\101\114\97\116\111\114") Pop
+    , tokNext "\92\98\91\97\45\122\65\45\90\93\43\92\119\42\58" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    , tok "\92\98\91\97\45\122\65\45\90\93\43\92\119\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110")
+    , tokNext "\92\119\43\58\63\124\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    , tokNext "\92\46" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    , tok "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\92\93\41\125\93" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\92\91\40\123\93" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+literals' :: TokenMatcher
+literals' =
+    [ tokNext "\92\39\91\94\92\39\93\42\92\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo afterobject')
+    , tokNext "\92\36\46" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114") (GoTo afterobject')
+    , tokNext "\35\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (GoTo parenth')
+    , tokNext "\92\41" (Arbitrary "\84\101\120\116") (GoTo afterobject')
+    , tokNext "\40\92\100\43\114\41\63\45\63\92\100\43\40\92\46\92\100\43\41\63\40\101\45\63\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114") (GoTo afterobject')
+    ]
+
+methodDefinition' :: TokenMatcher
+methodDefinition' =
+    [ tok "\40\91\97\45\122\65\45\90\93\43\92\119\42\58\41\40\92\115\42\41\40\92\119\43\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")])
+    , tok "\94\40\92\98\91\97\45\122\65\45\90\93\43\92\119\42\92\98\41\40\92\115\42\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")])
+    , tok "\94\40\91\45\43\42\47\92\92\126\60\62\61\124\38\33\63\44\64\37\93\43\41\40\92\115\42\41\40\92\119\43\41\40\92\115\42\41\36" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116")])
+    ]
+
+parenth' :: TokenMatcher
+parenth' =
+    [ tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") (DoAll [(GoTo root'), (GoTo afterobject')])
+    , anyOf _parenth_helper'
+    ]
+
+inner_parenth' :: TokenMatcher
+inner_parenth' =
+    [ tokNext "\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108") Pop
+    , anyOf _parenth_helper'
+    ]
+
+whitespaces' :: TokenMatcher
+whitespaces' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\34\91\94\34\93\42\34" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+squeakFileout' :: TokenMatcher
+squeakFileout' =
+    [ tok "\94\34\91\94\34\93\42\34\33" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\94\39\91\94\39\93\42\39\33" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\94\40\33\41\40\92\119\43\41\40\32\99\111\109\109\101\110\116\83\116\97\109\112\58\32\41\40\46\42\63\41\40\32\112\114\105\111\114\58\32\46\42\63\33\92\110\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\94\40\33\41\40\92\119\43\40\63\58\32\99\108\97\115\115\41\63\41\40\32\109\101\116\104\111\100\115\70\111\114\58\32\41\40\92\39\91\94\92\39\93\42\92\39\41\40\46\42\63\33\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\94\40\92\119\43\41\40\32\115\117\98\99\108\97\115\115\58\32\41\40\35\92\119\43\41\40\92\115\43\105\110\115\116\97\110\99\101\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\92\115\43\99\108\97\115\115\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\92\115\43\112\111\111\108\68\105\99\116\105\111\110\97\114\105\101\115\58\32\41\40\46\42\63\41\40\92\115\43\99\97\116\101\103\111\114\121\58\32\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\94\40\92\119\43\40\63\58\32\99\108\97\115\115\41\63\41\40\92\115\43\105\110\115\116\97\110\99\101\86\97\114\105\97\98\108\101\78\97\109\101\115\58\32\41\40\46\42\63\41\40\33\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\40\33\92\110\41\40\92\93\46\42\41\40\33\32\33\41\36" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100")])
+    , tok "\33\32\33\36" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\40\60\41\40\92\119\43\58\41\40\46\42\63\41\40\62\41" (ByGroups [(Arbitrary "\84\101\120\116"), (Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116"), (Arbitrary "\84\101\120\116")])
+    , anyOf squeakFileout'
+    , anyOf whitespaces'
+    , anyOf methodDefinition'
+    , tok "\40\92\124\41\40\91\92\119\92\115\93\42\41\40\92\124\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , anyOf objects'
+    , tok "\92\94\124\92\58\61\124\92\95" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\92\93\40\123\125\46\59\33\93" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Smarty.hs b/src/Text/Highlighter/Lexers/Smarty.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Smarty.hs
@@ -0,0 +1,38 @@
+module Text.Highlighter.Lexers.Smarty (lexer) where
+import qualified Text.Highlighter.Lexers.Php as Php
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\80\104\112"
+    , lAliases = ["\115\109\97\114\116\121"]
+    , lExtensions = ["\46\116\112\108"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\115\109\97\114\116\121"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\123\93\43" (Arbitrary "\79\116\104\101\114")
+    , tok "\40\92\123\41\40\92\42\46\42\63\92\42\41\40\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\67\111\109\109\101\110\116"), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tok "\40\92\123\112\104\112\92\125\41\40\46\42\63\41\40\92\123\47\112\104\112\92\125\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Using Php.lexer), (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")])
+    , tokNext "\40\92\123\41\40\47\63\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41\40\92\115\42\41" (ByGroups [(Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99"), (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110"), (Arbitrary "\84\101\120\116")]) (GoTo smarty')
+    , tokNext "\92\123" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo smarty')
+    ]
+
+smarty' :: TokenMatcher
+smarty' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\92\125" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\35\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\35" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\92\36\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\40\92\46\91\97\45\122\65\45\90\48\45\57\95\93\43\41\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\126\33\37\94\38\42\40\41\43\61\124\92\91\92\93\58\59\44\46\60\62\47\63\123\125\64\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\8" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\91\48\45\57\93\40\92\46\91\48\45\57\93\42\41\63\40\101\69\91\43\45\93\91\48\45\57\93\41\63\91\102\108\70\76\100\68\93\63\124\48\91\120\88\93\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/SourcesList.hs b/src/Text/Highlighter/Lexers/SourcesList.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/SourcesList.hs
@@ -0,0 +1,48 @@
+module Text.Highlighter.Lexers.SourcesList (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\68\101\98\105\97\110\32\83\111\117\114\99\101\108\105\115\116"
+    , lAliases = ["\115\111\117\114\99\101\115\108\105\115\116", "\115\111\117\114\99\101\115\46\108\105\115\116"]
+    , lExtensions = ["\115\111\117\114\99\101\115\46\108\105\115\116"]
+    , lMimetypes = []
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+distribution' :: TokenMatcher
+distribution' =
+    [ tokNext "\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\92\36\92\40\65\82\67\72\92\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\94\92\115\36\91\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") (GoTo escapedDistribution')
+    , tok "\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\92\115\43" (Arbitrary "\84\101\120\116") (GoTo components')
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\94\40\100\101\98\40\63\58\45\115\114\99\41\63\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo distribution')
+    ]
+
+escapedDistribution' :: TokenMatcher
+escapedDistribution' =
+    [ tokNext "\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114") Pop
+    , tok "\92\36\92\40\65\82\67\72\92\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\94\92\93\36\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    , tok "\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\79\116\104\101\114")
+    ]
+
+components' :: TokenMatcher
+components' =
+    [ tokNext "\35\46\42\63\36" (Arbitrary "\67\111\109\109\101\110\116") (PopNum 2)
+    , tokNext "\36" (Arbitrary "\84\101\120\116") (PopNum 2)
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\83\43" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\80\115\101\117\100\111")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Sql.hs b/src/Text/Highlighter/Lexers/Sql.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Sql.hs
@@ -0,0 +1,38 @@
+module Text.Highlighter.Lexers.Sql (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83\81\76"
+    , lAliases = ["\115\113\108"]
+    , lExtensions = ["\46\115\113\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\115\113\108"]
+    , lStart = root'
+    , lFlags = [caseless]
+    }
+
+multilineComments' :: TokenMatcher
+multilineComments' =
+    [ tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComments')
+    , tokNext "\92\42\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") Pop
+    , tok "\91\94\47\92\42\93\43" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    , tok "\91\47\42\93" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\45\45\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tokNext "\47\92\42" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101") (GoTo multilineComments')
+    , tok "\40\65\66\79\82\84\124\65\66\83\124\65\66\83\79\76\85\84\69\124\65\67\67\69\83\83\124\65\68\65\124\65\68\68\124\65\68\77\73\78\124\65\70\84\69\82\124\65\71\71\82\69\71\65\84\69\124\65\76\73\65\83\124\65\76\76\124\65\76\76\79\67\65\84\69\124\65\76\84\69\82\124\65\78\65\76\89\83\69\124\65\78\65\76\89\90\69\124\65\78\68\124\65\78\89\124\65\82\69\124\65\83\124\65\83\67\124\65\83\69\78\83\73\84\73\86\69\124\65\83\83\69\82\84\73\79\78\124\65\83\83\73\71\78\77\69\78\84\124\65\83\89\77\77\69\84\82\73\67\124\65\84\124\65\84\79\77\73\67\124\65\85\84\72\79\82\73\90\65\84\73\79\78\124\65\86\71\124\66\65\67\75\87\65\82\68\124\66\69\70\79\82\69\124\66\69\71\73\78\124\66\69\84\87\69\69\78\124\66\73\84\86\65\82\124\66\73\84\95\76\69\78\71\84\72\124\66\79\84\72\124\66\82\69\65\68\84\72\124\66\89\124\67\124\67\65\67\72\69\124\67\65\76\76\124\67\65\76\76\69\68\124\67\65\82\68\73\78\65\76\73\84\89\124\67\65\83\67\65\68\69\124\67\65\83\67\65\68\69\68\124\67\65\83\69\124\67\65\83\84\124\67\65\84\65\76\79\71\124\67\65\84\65\76\79\71\95\78\65\77\69\124\67\72\65\73\78\124\67\72\65\82\65\67\84\69\82\73\83\84\73\67\83\124\67\72\65\82\65\67\84\69\82\95\76\69\78\71\84\72\124\67\72\65\82\65\67\84\69\82\95\83\69\84\95\67\65\84\65\76\79\71\124\67\72\65\82\65\67\84\69\82\95\83\69\84\95\78\65\77\69\124\67\72\65\82\65\67\84\69\82\95\83\69\84\95\83\67\72\69\77\65\124\67\72\65\82\95\76\69\78\71\84\72\124\67\72\69\67\75\124\67\72\69\67\75\69\68\124\67\72\69\67\75\80\79\73\78\84\124\67\76\65\83\83\124\67\76\65\83\83\95\79\82\73\71\73\78\124\67\76\79\66\124\67\76\79\83\69\124\67\76\85\83\84\69\82\124\67\79\65\76\83\69\67\69\124\67\79\66\79\76\124\67\79\76\76\65\84\69\124\67\79\76\76\65\84\73\79\78\124\67\79\76\76\65\84\73\79\78\95\67\65\84\65\76\79\71\124\67\79\76\76\65\84\73\79\78\95\78\65\77\69\124\67\79\76\76\65\84\73\79\78\95\83\67\72\69\77\65\124\67\79\76\85\77\78\124\67\79\76\85\77\78\95\78\65\77\69\124\67\79\77\77\65\78\68\95\70\85\78\67\84\73\79\78\124\67\79\77\77\65\78\68\95\70\85\78\67\84\73\79\78\95\67\79\68\69\124\67\79\77\77\69\78\84\124\67\79\77\77\73\84\124\67\79\77\77\73\84\84\69\68\124\67\79\77\80\76\69\84\73\79\78\124\67\79\78\68\73\84\73\79\78\95\78\85\77\66\69\82\124\67\79\78\78\69\67\84\124\67\79\78\78\69\67\84\73\79\78\124\67\79\78\78\69\67\84\73\79\78\95\78\65\77\69\124\67\79\78\83\84\82\65\73\78\84\124\67\79\78\83\84\82\65\73\78\84\83\124\67\79\78\83\84\82\65\73\78\84\95\67\65\84\65\76\79\71\124\67\79\78\83\84\82\65\73\78\84\95\78\65\77\69\124\67\79\78\83\84\82\65\73\78\84\95\83\67\72\69\77\65\124\67\79\78\83\84\82\85\67\84\79\82\124\67\79\78\84\65\73\78\83\124\67\79\78\84\73\78\85\69\124\67\79\78\86\69\82\83\73\79\78\124\67\79\78\86\69\82\84\124\67\79\80\89\124\67\79\82\82\69\83\80\79\78\84\73\78\71\124\67\79\85\78\84\124\67\82\69\65\84\69\124\67\82\69\65\84\69\68\66\124\67\82\69\65\84\69\85\83\69\82\124\67\82\79\83\83\124\67\85\66\69\124\67\85\82\82\69\78\84\124\67\85\82\82\69\78\84\95\68\65\84\69\124\67\85\82\82\69\78\84\95\80\65\84\72\124\67\85\82\82\69\78\84\95\82\79\76\69\124\67\85\82\82\69\78\84\95\84\73\77\69\124\67\85\82\82\69\78\84\95\84\73\77\69\83\84\65\77\80\124\67\85\82\82\69\78\84\95\85\83\69\82\124\67\85\82\83\79\82\124\67\85\82\83\79\82\95\78\65\77\69\124\67\89\67\76\69\124\68\65\84\65\124\68\65\84\65\66\65\83\69\124\68\65\84\69\84\73\77\69\95\73\78\84\69\82\86\65\76\95\67\79\68\69\124\68\65\84\69\84\73\77\69\95\73\78\84\69\82\86\65\76\95\80\82\69\67\73\83\73\79\78\124\68\65\89\124\68\69\65\76\76\79\67\65\84\69\124\68\69\67\76\65\82\69\124\68\69\70\65\85\76\84\124\68\69\70\65\85\76\84\83\124\68\69\70\69\82\82\65\66\76\69\124\68\69\70\69\82\82\69\68\124\68\69\70\73\78\69\68\124\68\69\70\73\78\69\82\124\68\69\76\69\84\69\124\68\69\76\73\77\73\84\69\82\124\68\69\76\73\77\73\84\69\82\83\124\68\69\82\69\70\124\68\69\83\67\124\68\69\83\67\82\73\66\69\124\68\69\83\67\82\73\80\84\79\82\124\68\69\83\84\82\79\89\124\68\69\83\84\82\85\67\84\79\82\124\68\69\84\69\82\77\73\78\73\83\84\73\67\124\68\73\65\71\78\79\83\84\73\67\83\124\68\73\67\84\73\79\78\65\82\89\124\68\73\83\67\79\78\78\69\67\84\124\68\73\83\80\65\84\67\72\124\68\73\83\84\73\78\67\84\124\68\79\124\68\79\77\65\73\78\124\68\82\79\80\124\68\89\78\65\77\73\67\124\68\89\78\65\77\73\67\95\70\85\78\67\84\73\79\78\124\68\89\78\65\77\73\67\95\70\85\78\67\84\73\79\78\95\67\79\68\69\124\69\65\67\72\124\69\76\83\69\124\69\78\67\79\68\73\78\71\124\69\78\67\82\89\80\84\69\68\124\69\78\68\124\69\78\68\45\69\88\69\67\124\69\81\85\65\76\83\124\69\83\67\65\80\69\124\69\86\69\82\89\124\69\88\67\69\80\84\124\69\83\67\69\80\84\73\79\78\124\69\88\67\76\85\68\73\78\71\124\69\88\67\76\85\83\73\86\69\124\69\88\69\67\124\69\88\69\67\85\84\69\124\69\88\73\83\84\73\78\71\124\69\88\73\83\84\83\124\69\88\80\76\65\73\78\124\69\88\84\69\82\78\65\76\124\69\88\84\82\65\67\84\124\70\65\76\83\69\124\70\69\84\67\72\124\70\73\78\65\76\124\70\73\82\83\84\124\70\79\82\124\70\79\82\67\69\124\70\79\82\69\73\71\78\124\70\79\82\84\82\65\78\124\70\79\82\87\65\82\68\124\70\79\85\78\68\124\70\82\69\69\124\70\82\69\69\90\69\124\70\82\79\77\124\70\85\76\76\124\70\85\78\67\84\73\79\78\124\71\124\71\69\78\69\82\65\76\124\71\69\78\69\82\65\84\69\68\124\71\69\84\124\71\76\79\66\65\76\124\71\79\124\71\79\84\79\124\71\82\65\78\84\124\71\82\65\78\84\69\68\124\71\82\79\85\80\124\71\82\79\85\80\73\78\71\124\72\65\78\68\76\69\82\124\72\65\86\73\78\71\124\72\73\69\82\65\82\67\72\89\124\72\79\76\68\124\72\79\83\84\124\73\68\69\78\84\73\84\89\124\73\71\78\79\82\69\124\73\76\73\75\69\124\73\77\77\69\68\73\65\84\69\124\73\77\77\85\84\65\66\76\69\124\73\77\80\76\69\77\69\78\84\65\84\73\79\78\124\73\77\80\76\73\67\73\84\124\73\78\124\73\78\67\76\85\68\73\78\71\124\73\78\67\82\69\77\69\78\84\124\73\78\68\69\88\124\73\78\68\73\84\67\65\84\79\82\124\73\78\70\73\88\124\73\78\72\69\82\73\84\83\124\73\78\73\84\73\65\76\73\90\69\124\73\78\73\84\73\65\76\76\89\124\73\78\78\69\82\124\73\78\79\85\84\124\73\78\80\85\84\124\73\78\83\69\78\83\73\84\73\86\69\124\73\78\83\69\82\84\124\73\78\83\84\65\78\84\73\65\66\76\69\124\73\78\83\84\69\65\68\124\73\78\84\69\82\83\69\67\84\124\73\78\84\79\124\73\78\86\79\75\69\82\124\73\83\124\73\83\78\85\76\76\124\73\83\79\76\65\84\73\79\78\124\73\84\69\82\65\84\69\124\74\79\73\78\124\75\69\89\124\75\69\89\95\77\69\77\66\69\82\124\75\69\89\95\84\89\80\69\124\76\65\78\67\79\77\80\73\76\69\82\124\76\65\78\71\85\65\71\69\124\76\65\82\71\69\124\76\65\83\84\124\76\65\84\69\82\65\76\124\76\69\65\68\73\78\71\124\76\69\70\84\124\76\69\78\71\84\72\124\76\69\83\83\124\76\69\86\69\76\124\76\73\75\69\124\76\73\77\73\84\124\76\73\83\84\69\78\124\76\79\65\68\124\76\79\67\65\76\124\76\79\67\65\76\84\73\77\69\124\76\79\67\65\76\84\73\77\69\83\84\65\77\80\124\76\79\67\65\84\73\79\78\124\76\79\67\65\84\79\82\124\76\79\67\75\124\76\79\87\69\82\124\77\65\80\124\77\65\84\67\72\124\77\65\88\124\77\65\88\86\65\76\85\69\124\77\69\83\83\65\71\69\95\76\69\78\71\84\72\124\77\69\83\83\65\71\69\95\79\67\84\69\84\95\76\69\78\71\84\72\124\77\69\83\83\65\71\69\95\84\69\88\84\124\77\69\84\72\79\68\124\77\73\78\124\77\73\78\85\84\69\124\77\73\78\86\65\76\85\69\124\77\79\68\124\77\79\68\69\124\77\79\68\73\70\73\69\83\124\77\79\68\73\70\89\124\77\79\78\84\72\124\77\79\82\69\124\77\79\86\69\124\77\85\77\80\83\124\78\65\77\69\83\124\78\65\84\73\79\78\65\76\124\78\65\84\85\82\65\76\124\78\67\72\65\82\124\78\67\76\79\66\124\78\69\87\124\78\69\88\84\124\78\79\124\78\79\67\82\69\65\84\69\68\66\124\78\79\67\82\69\65\84\69\85\83\69\82\124\78\79\78\69\124\78\79\84\124\78\79\84\72\73\78\71\124\78\79\84\73\70\89\124\78\79\84\78\85\76\76\124\78\85\76\76\124\78\85\76\76\65\66\76\69\124\78\85\76\76\73\70\124\79\66\74\69\67\84\124\79\67\84\69\84\95\76\69\78\71\84\72\124\79\70\124\79\70\70\124\79\70\70\83\69\84\124\79\73\68\83\124\79\76\68\124\79\78\124\79\78\76\89\124\79\80\69\78\124\79\80\69\82\65\84\73\79\78\124\79\80\69\82\65\84\79\82\124\79\80\84\73\79\78\124\79\80\84\73\79\78\83\124\79\82\124\79\82\68\69\82\124\79\82\68\73\78\65\76\73\84\89\124\79\85\84\124\79\85\84\69\82\124\79\85\84\80\85\84\124\79\86\69\82\76\65\80\83\124\79\86\69\82\76\65\89\124\79\86\69\82\82\73\68\73\78\71\124\79\87\78\69\82\124\80\65\68\124\80\65\82\65\77\69\84\69\82\124\80\65\82\65\77\69\84\69\82\83\124\80\65\82\65\77\69\84\69\82\95\77\79\68\69\124\80\65\82\65\77\65\84\69\82\95\78\65\77\69\124\80\65\82\65\77\65\84\69\82\95\79\82\68\73\78\65\76\95\80\79\83\73\84\73\79\78\124\80\65\82\65\77\69\84\69\82\95\83\80\69\67\73\70\73\67\95\67\65\84\65\76\79\71\124\80\65\82\65\77\69\84\69\82\95\83\80\69\67\73\70\73\67\95\78\65\77\69\124\80\65\82\65\77\65\84\69\82\95\83\80\69\67\73\70\73\67\95\83\67\72\69\77\65\124\80\65\82\84\73\65\76\124\80\65\83\67\65\76\124\80\69\78\68\65\78\84\124\80\76\65\67\73\78\71\124\80\76\73\124\80\79\83\73\84\73\79\78\124\80\79\83\84\70\73\88\124\80\82\69\67\73\83\73\79\78\124\80\82\69\70\73\88\124\80\82\69\79\82\68\69\82\124\80\82\69\80\65\82\69\124\80\82\69\83\69\82\86\69\124\80\82\73\77\65\82\89\124\80\82\73\79\82\124\80\82\73\86\73\76\69\71\69\83\124\80\82\79\67\69\68\85\82\65\76\124\80\82\79\67\69\68\85\82\69\124\80\85\66\76\73\67\124\82\69\65\68\124\82\69\65\68\83\124\82\69\67\72\69\67\75\124\82\69\67\85\82\83\73\86\69\124\82\69\70\124\82\69\70\69\82\69\78\67\69\83\124\82\69\70\69\82\69\78\67\73\78\71\124\82\69\73\78\68\69\88\124\82\69\76\65\84\73\86\69\124\82\69\78\65\77\69\124\82\69\80\69\65\84\65\66\76\69\124\82\69\80\76\65\67\69\124\82\69\83\69\84\124\82\69\83\84\65\82\84\124\82\69\83\84\82\73\67\84\124\82\69\83\85\76\84\124\82\69\84\85\82\78\124\82\69\84\85\82\78\69\68\95\76\69\78\71\84\72\124\82\69\84\85\82\78\69\68\95\79\67\84\69\84\95\76\69\78\71\84\72\124\82\69\84\85\82\78\69\68\95\83\81\76\83\84\65\84\69\124\82\69\84\85\82\78\83\124\82\69\86\79\75\69\124\82\73\71\72\84\124\82\79\76\69\124\82\79\76\76\66\65\67\75\124\82\79\76\76\85\80\124\82\79\85\84\73\78\69\124\82\79\85\84\73\78\69\95\67\65\84\65\76\79\71\124\82\79\85\84\73\78\69\95\78\65\77\69\124\82\79\85\84\73\78\69\95\83\67\72\69\77\65\124\82\79\87\124\82\79\87\83\124\82\79\87\95\67\79\85\78\84\124\82\85\76\69\124\83\65\86\69\95\80\79\73\78\84\124\83\67\65\76\69\124\83\67\72\69\77\65\124\83\67\72\69\77\65\95\78\65\77\69\124\83\67\79\80\69\124\83\67\82\79\76\76\124\83\69\65\82\67\72\124\83\69\67\79\78\68\124\83\69\67\85\82\73\84\89\124\83\69\76\69\67\84\124\83\69\76\70\124\83\69\78\83\73\84\73\86\69\124\83\69\82\73\65\76\73\90\65\66\76\69\124\83\69\82\86\69\82\95\78\65\77\69\124\83\69\83\83\73\79\78\124\83\69\83\83\73\79\78\95\85\83\69\82\124\83\69\84\124\83\69\84\79\70\124\83\69\84\83\124\83\72\65\82\69\124\83\72\79\87\124\83\73\77\73\76\65\82\124\83\73\77\80\76\69\124\83\73\90\69\124\83\79\77\69\124\83\79\85\82\67\69\124\83\80\65\67\69\124\83\80\69\67\73\70\73\67\124\83\80\69\67\73\70\73\67\84\89\80\69\124\83\80\69\67\73\70\73\67\95\78\65\77\69\124\83\81\76\124\83\81\76\67\79\68\69\124\83\81\76\69\82\82\79\82\124\83\81\76\69\88\67\69\80\84\73\79\78\124\83\81\76\83\84\65\84\69\124\83\81\76\87\65\82\78\73\78\73\71\124\83\84\65\66\76\69\124\83\84\65\82\84\124\83\84\65\84\69\124\83\84\65\84\69\77\69\78\84\124\83\84\65\84\73\67\124\83\84\65\84\73\83\84\73\67\83\124\83\84\68\73\78\124\83\84\68\79\85\84\124\83\84\79\82\65\71\69\124\83\84\82\73\67\84\124\83\84\82\85\67\84\85\82\69\124\83\84\89\80\69\124\83\85\66\67\76\65\83\83\95\79\82\73\71\73\78\124\83\85\66\76\73\83\84\124\83\85\66\83\84\82\73\78\71\124\83\85\77\124\83\89\77\77\69\84\82\73\67\124\83\89\83\73\68\124\83\89\83\84\69\77\124\83\89\83\84\69\77\95\85\83\69\82\124\84\65\66\76\69\124\84\65\66\76\69\95\78\65\77\69\124\32\84\69\77\80\124\84\69\77\80\76\65\84\69\124\84\69\77\80\79\82\65\82\89\124\84\69\82\77\73\78\65\84\69\124\84\72\65\78\124\84\72\69\78\124\84\73\77\69\83\84\65\77\80\124\84\73\77\69\90\79\78\69\95\72\79\85\82\124\84\73\77\69\90\79\78\69\95\77\73\78\85\84\69\124\84\79\124\84\79\65\83\84\124\84\82\65\73\76\73\78\71\124\84\82\65\78\83\65\84\73\79\78\124\84\82\65\78\83\65\67\84\73\79\78\83\95\67\79\77\77\73\84\84\69\68\124\84\82\65\78\83\65\67\84\73\79\78\83\95\82\79\76\76\69\68\95\66\65\67\75\124\84\82\65\78\83\65\84\73\79\78\95\65\67\84\73\86\69\124\84\82\65\78\83\70\79\82\77\124\84\82\65\78\83\70\79\82\77\83\124\84\82\65\78\83\76\65\84\69\124\84\82\65\78\83\76\65\84\73\79\78\124\84\82\69\65\84\124\84\82\73\71\71\69\82\124\84\82\73\71\71\69\82\95\67\65\84\65\76\79\71\124\84\82\73\71\71\69\82\95\78\65\77\69\124\84\82\73\71\71\69\82\95\83\67\72\69\77\65\124\84\82\73\77\124\84\82\85\69\124\84\82\85\78\67\65\84\69\124\84\82\85\83\84\69\68\124\84\89\80\69\124\85\78\67\79\77\77\73\84\84\69\68\124\85\78\68\69\82\124\85\78\69\78\67\82\89\80\84\69\68\124\85\78\73\79\78\124\85\78\73\81\85\69\124\85\78\75\78\79\87\78\124\85\78\76\73\83\84\69\78\124\85\78\78\65\77\69\68\124\85\78\78\69\83\84\124\85\78\84\73\76\124\85\80\68\65\84\69\124\85\80\80\69\82\124\85\83\65\71\69\124\85\83\69\82\124\85\83\69\82\95\68\69\70\73\78\69\68\95\84\89\80\69\95\67\65\84\65\76\79\71\124\85\83\69\82\95\68\69\70\73\78\69\68\95\84\89\80\69\95\78\65\77\69\124\85\83\69\82\95\68\69\70\73\78\69\68\95\84\89\80\69\95\83\67\72\69\77\65\124\85\83\73\78\71\124\86\65\67\85\85\77\124\86\65\76\73\68\124\86\65\76\73\68\65\84\79\82\124\86\65\76\85\69\83\124\86\65\82\73\65\66\76\69\124\86\69\82\66\79\83\69\124\86\69\82\83\73\79\78\124\86\73\69\87\124\86\79\76\65\84\73\76\69\124\87\72\69\78\124\87\72\69\78\69\86\69\82\124\87\72\69\82\69\124\87\73\84\72\124\87\73\84\72\79\85\84\124\87\79\82\75\124\87\82\73\84\69\124\89\69\65\82\124\90\79\78\69\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\65\82\82\65\89\124\66\73\71\73\78\84\124\66\73\78\65\82\89\124\66\73\84\124\66\76\79\66\124\66\79\79\76\69\65\78\124\67\72\65\82\124\67\72\65\82\65\67\84\69\82\124\68\65\84\69\124\68\69\67\124\68\69\67\73\77\65\76\124\70\76\79\65\84\124\73\78\84\124\73\78\84\69\71\69\82\124\73\78\84\69\82\86\65\76\124\78\85\77\66\69\82\124\78\85\77\69\82\73\67\124\82\69\65\76\124\83\69\82\73\65\76\124\83\77\65\76\76\73\78\84\124\86\65\82\67\72\65\82\124\86\65\82\89\73\78\71\124\73\78\84\56\124\83\69\82\73\65\76\56\124\84\69\88\84\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\43\42\47\60\62\61\126\33\64\35\37\94\38\124\96\63\94\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\39\40\39\39\124\91\94\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\34\40\34\34\124\91\94\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\121\109\98\111\108")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    , tok "\91\59\58\40\41\92\91\92\93\44\92\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/SquidConf.hs b/src/Text/Highlighter/Lexers/SquidConf.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/SquidConf.hs
@@ -0,0 +1,36 @@
+module Text.Highlighter.Lexers.SquidConf (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\83\113\117\105\100\67\111\110\102"
+    , lAliases = ["\115\113\117\105\100\99\111\110\102", "\115\113\117\105\100\46\99\111\110\102", "\115\113\117\105\100"]
+    , lExtensions = ["\115\113\117\105\100\46\99\111\110\102"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\115\113\117\105\100\99\111\110\102"]
+    , lStart = root'
+    , lFlags = [caseless]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tokNext "\92\115\42\84\65\71\58\46\42" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101") Pop
+    , tokNext "\46\42" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\92\98\40\63\58\97\99\108\124\97\108\119\97\121\115\95\100\105\114\101\99\116\124\97\110\110\111\117\110\99\101\95\104\111\115\116\124\97\110\110\111\117\110\99\101\95\112\101\114\105\111\100\124\97\110\110\111\117\110\99\101\95\112\111\114\116\124\97\110\110\111\117\110\99\101\95\116\111\124\97\110\111\110\121\109\105\122\101\95\104\101\97\100\101\114\115\124\97\112\112\101\110\100\95\100\111\109\97\105\110\124\97\115\95\119\104\111\105\115\95\115\101\114\118\101\114\124\97\117\116\104\95\112\97\114\97\109\95\98\97\115\105\99\124\97\117\116\104\101\110\116\105\99\97\116\101\95\99\104\105\108\100\114\101\110\124\97\117\116\104\101\110\116\105\99\97\116\101\95\112\114\111\103\114\97\109\124\97\117\116\104\101\110\116\105\99\97\116\101\95\116\116\108\124\98\114\111\107\101\110\95\112\111\115\116\115\124\98\117\102\102\101\114\101\100\95\108\111\103\115\124\99\97\99\104\101\95\97\99\99\101\115\115\95\108\111\103\124\99\97\99\104\101\95\97\110\110\111\117\110\99\101\124\99\97\99\104\101\95\100\105\114\124\99\97\99\104\101\95\100\110\115\95\112\114\111\103\114\97\109\124\99\97\99\104\101\95\101\102\102\101\99\116\105\118\101\95\103\114\111\117\112\124\99\97\99\104\101\95\101\102\102\101\99\116\105\118\101\95\117\115\101\114\124\99\97\99\104\101\95\104\111\115\116\124\99\97\99\104\101\95\104\111\115\116\95\97\99\108\124\99\97\99\104\101\95\104\111\115\116\95\100\111\109\97\105\110\124\99\97\99\104\101\95\108\111\103\124\99\97\99\104\101\95\109\101\109\124\99\97\99\104\101\95\109\101\109\95\104\105\103\104\124\99\97\99\104\101\95\109\101\109\95\108\111\119\124\99\97\99\104\101\95\109\103\114\124\99\97\99\104\101\109\103\114\95\112\97\115\115\119\100\124\99\97\99\104\101\95\112\101\101\114\124\99\97\99\104\101\95\112\101\101\114\95\97\99\99\101\115\115\124\99\97\104\99\101\95\114\101\112\108\97\99\101\109\101\110\116\95\112\111\108\105\99\121\124\99\97\99\104\101\95\115\116\111\112\108\105\115\116\124\99\97\99\104\101\95\115\116\111\112\108\105\115\116\95\112\97\116\116\101\114\110\124\99\97\99\104\101\95\115\116\111\114\101\95\108\111\103\124\99\97\99\104\101\95\115\119\97\112\124\99\97\99\104\101\95\115\119\97\112\95\104\105\103\104\124\99\97\99\104\101\95\115\119\97\112\95\108\111\103\124\99\97\99\104\101\95\115\119\97\112\95\108\111\119\124\99\108\105\101\110\116\95\100\98\124\99\108\105\101\110\116\95\108\105\102\101\116\105\109\101\124\99\108\105\101\110\116\95\110\101\116\109\97\115\107\124\99\111\110\110\101\99\116\95\116\105\109\101\111\117\116\124\99\111\114\101\100\117\109\112\95\100\105\114\124\100\101\97\100\95\112\101\101\114\95\116\105\109\101\111\117\116\124\100\101\98\117\103\95\111\112\116\105\111\110\115\124\100\101\108\97\121\95\97\99\99\101\115\115\124\100\101\108\97\121\95\99\108\97\115\115\124\100\101\108\97\121\95\105\110\105\116\105\97\108\95\98\117\99\107\101\116\95\108\101\118\101\108\124\100\101\108\97\121\95\112\97\114\97\109\101\116\101\114\115\124\100\101\108\97\121\95\112\111\111\108\115\124\100\101\110\121\95\105\110\102\111\124\100\110\115\95\99\104\105\108\100\114\101\110\124\100\110\115\95\100\101\102\110\97\109\101\115\124\100\110\115\95\110\97\109\101\115\101\114\118\101\114\115\124\100\110\115\95\116\101\115\116\110\97\109\101\115\124\101\109\117\108\97\116\101\95\104\116\116\112\100\95\108\111\103\124\101\114\114\95\104\116\109\108\95\116\101\120\116\124\102\97\107\101\95\117\115\101\114\95\97\103\101\110\116\124\102\105\114\101\119\97\108\108\95\105\112\124\102\111\114\119\97\114\100\101\100\95\102\111\114\124\102\111\114\119\97\114\100\95\115\110\109\112\100\95\112\111\114\116\124\102\113\100\110\99\97\99\104\101\95\115\105\122\101\124\102\116\112\103\101\116\95\111\112\116\105\111\110\115\124\102\116\112\103\101\116\95\112\114\111\103\114\97\109\124\102\116\112\95\108\105\115\116\95\119\105\100\116\104\124\102\116\112\95\112\97\115\115\105\118\101\124\102\116\112\95\117\115\101\114\124\104\97\108\102\95\99\108\111\115\101\100\95\99\108\105\101\110\116\115\124\104\101\97\100\101\114\95\97\99\99\101\115\115\124\104\101\97\100\101\114\95\114\101\112\108\97\99\101\124\104\105\101\114\97\114\99\104\121\95\115\116\111\112\108\105\115\116\124\104\105\103\104\95\114\101\115\112\111\110\115\101\95\116\105\109\101\95\119\97\114\110\105\110\103\124\104\105\103\104\95\112\97\103\101\95\102\97\117\108\116\95\119\97\114\110\105\110\103\124\104\116\99\112\95\112\111\114\116\124\104\116\116\112\95\97\99\99\101\115\115\124\104\116\116\112\95\97\110\111\110\121\109\105\122\101\114\124\104\116\116\112\100\95\97\99\99\101\108\124\104\116\116\112\100\95\97\99\99\101\108\95\104\111\115\116\124\104\116\116\112\100\95\97\99\99\101\108\95\112\111\114\116\124\104\116\116\112\100\95\97\99\99\101\108\95\117\115\101\115\95\104\111\115\116\95\104\101\97\100\101\114\124\104\116\116\112\100\95\97\99\99\101\108\95\119\105\116\104\95\112\114\111\120\121\124\104\116\116\112\95\112\111\114\116\124\104\116\116\112\95\114\101\112\108\121\95\97\99\99\101\115\115\124\105\99\112\95\97\99\99\101\115\115\124\105\99\112\95\104\105\116\95\115\116\97\108\101\124\105\99\112\95\112\111\114\116\124\105\99\112\95\113\117\101\114\121\95\116\105\109\101\111\117\116\124\105\100\101\110\116\95\108\111\111\107\117\112\124\105\100\101\110\116\95\108\111\111\107\117\112\95\97\99\99\101\115\115\124\105\100\101\110\116\95\116\105\109\101\111\117\116\124\105\110\99\111\109\105\110\103\95\104\116\116\112\95\97\118\101\114\97\103\101\124\105\110\99\111\109\105\110\103\95\105\99\112\95\97\118\101\114\97\103\101\124\105\110\115\105\100\101\95\102\105\114\101\119\97\108\108\124\105\112\99\97\99\104\101\95\104\105\103\104\124\105\112\99\97\99\104\101\95\108\111\119\124\105\112\99\97\99\104\101\95\115\105\122\101\124\108\111\99\97\108\95\100\111\109\97\105\110\124\108\111\99\97\108\95\105\112\124\108\111\103\102\105\108\101\95\114\111\116\97\116\101\124\108\111\103\95\102\113\100\110\124\108\111\103\95\105\99\112\95\113\117\101\114\105\101\115\124\108\111\103\95\109\105\109\101\95\104\100\114\115\124\109\97\120\105\109\117\109\95\111\98\106\101\99\116\95\115\105\122\101\124\109\97\120\105\109\117\109\95\115\105\110\103\108\101\95\97\100\100\114\95\116\114\105\101\115\124\109\99\97\115\116\95\103\114\111\117\112\115\124\109\99\97\115\116\95\105\99\112\95\113\117\101\114\121\95\116\105\109\101\111\117\116\124\109\99\97\115\116\95\109\105\115\115\95\97\100\100\114\124\109\99\97\115\116\95\109\105\115\115\95\101\110\99\111\100\101\95\107\101\121\124\109\99\97\115\116\95\109\105\115\115\95\112\111\114\116\124\109\101\109\111\114\121\95\112\111\111\108\115\124\109\101\109\111\114\121\95\112\111\111\108\115\95\108\105\109\105\116\124\109\101\109\111\114\121\95\114\101\112\108\97\99\101\109\101\110\116\95\112\111\108\105\99\121\124\109\105\109\101\95\116\97\98\108\101\124\109\105\110\95\104\116\116\112\95\112\111\108\108\95\99\110\116\124\109\105\110\95\105\99\112\95\112\111\108\108\95\99\110\116\124\109\105\110\105\109\117\109\95\100\105\114\101\99\116\95\104\111\112\115\124\109\105\110\105\109\117\109\95\111\98\106\101\99\116\95\115\105\122\101\124\109\105\110\105\109\117\109\95\114\101\116\114\121\95\116\105\109\101\111\117\116\124\109\105\115\115\95\97\99\99\101\115\115\124\110\101\103\97\116\105\118\101\95\100\110\115\95\116\116\108\124\110\101\103\97\116\105\118\101\95\116\116\108\124\110\101\105\103\104\98\111\114\95\116\105\109\101\111\117\116\124\110\101\105\103\104\98\111\114\95\116\121\112\101\95\100\111\109\97\105\110\124\110\101\116\100\98\95\104\105\103\104\124\110\101\116\100\98\95\108\111\119\124\110\101\116\100\98\95\112\105\110\103\95\112\101\114\105\111\100\124\110\101\116\100\98\95\112\105\110\103\95\114\97\116\101\124\110\101\118\101\114\95\100\105\114\101\99\116\124\110\111\95\99\97\99\104\101\124\112\97\115\115\116\104\114\111\117\103\104\95\112\114\111\120\121\124\112\99\111\110\110\95\116\105\109\101\111\117\116\124\112\105\100\95\102\105\108\101\110\97\109\101\124\112\105\110\103\101\114\95\112\114\111\103\114\97\109\124\112\111\115\105\116\105\118\101\95\100\110\115\95\116\116\108\124\112\114\101\102\101\114\95\100\105\114\101\99\116\124\112\114\111\120\121\95\97\117\116\104\124\112\114\111\120\121\95\97\117\116\104\95\114\101\97\108\109\124\113\117\101\114\121\95\105\99\109\112\124\113\117\105\99\107\95\97\98\111\114\116\124\113\117\105\99\107\95\97\98\111\114\116\124\113\117\105\99\107\95\97\98\111\114\116\95\109\97\120\124\113\117\105\99\107\95\97\98\111\114\116\95\109\105\110\124\113\117\105\99\107\95\97\98\111\114\116\95\112\99\116\124\114\97\110\103\101\95\111\102\102\115\101\116\95\108\105\109\105\116\124\114\101\97\100\95\116\105\109\101\111\117\116\124\114\101\100\105\114\101\99\116\95\99\104\105\108\100\114\101\110\124\114\101\100\105\114\101\99\116\95\112\114\111\103\114\97\109\124\114\101\100\105\114\101\99\116\95\114\101\119\114\105\116\101\115\95\104\111\115\116\95\104\101\97\100\101\114\124\114\101\102\101\114\101\110\99\101\95\97\103\101\124\114\101\102\101\114\101\110\99\101\95\97\103\101\124\114\101\102\114\101\115\104\95\112\97\116\116\101\114\110\124\114\101\108\111\97\100\95\105\110\116\111\95\105\109\115\124\114\101\113\117\101\115\116\95\98\111\100\121\95\109\97\120\95\115\105\122\101\124\114\101\113\117\101\115\116\95\115\105\122\101\124\114\101\113\117\101\115\116\95\116\105\109\101\111\117\116\124\115\104\117\116\100\111\119\110\95\108\105\102\101\116\105\109\101\124\115\105\110\103\108\101\95\112\97\114\101\110\116\95\98\121\112\97\115\115\124\115\105\116\101\115\101\108\101\99\116\95\116\105\109\101\111\117\116\124\115\110\109\112\95\97\99\99\101\115\115\124\115\110\109\112\95\105\110\99\111\109\105\110\103\95\97\100\100\114\101\115\115\124\115\110\109\112\95\112\111\114\116\124\115\111\117\114\99\101\95\112\105\110\103\124\115\115\108\95\112\114\111\120\121\124\115\116\111\114\101\95\97\118\103\95\111\98\106\101\99\116\95\115\105\122\101\124\115\116\111\114\101\95\111\98\106\101\99\116\115\95\112\101\114\95\98\117\99\107\101\116\124\115\116\114\105\112\95\113\117\101\114\121\95\116\101\114\109\115\124\115\119\97\112\95\108\101\118\101\108\49\95\100\105\114\115\124\115\119\97\112\95\108\101\118\101\108\50\95\100\105\114\115\124\116\99\112\95\105\110\99\111\109\105\110\103\95\97\100\100\114\101\115\115\124\116\99\112\95\111\117\116\103\111\105\110\103\95\97\100\100\114\101\115\115\124\116\99\112\95\114\101\99\118\95\98\117\102\115\105\122\101\124\116\101\115\116\95\114\101\97\99\104\97\98\105\108\105\116\121\124\117\100\112\95\104\105\116\95\111\98\106\124\117\100\112\95\104\105\116\95\111\98\106\95\115\105\122\101\124\117\100\112\95\105\110\99\111\109\105\110\103\95\97\100\100\114\101\115\115\124\117\100\112\95\111\117\116\103\111\105\110\103\95\97\100\100\114\101\115\115\124\117\110\105\113\117\101\95\104\111\115\116\110\97\109\101\124\117\110\108\105\110\107\100\95\112\114\111\103\114\97\109\124\117\114\105\95\119\104\105\116\101\115\112\97\99\101\124\117\115\101\114\97\103\101\110\116\95\108\111\103\124\118\105\115\105\98\108\101\95\104\111\115\116\110\97\109\101\124\119\97\105\115\95\114\101\108\97\121\124\119\97\105\115\95\114\101\108\97\121\95\104\111\115\116\124\119\97\105\115\95\114\101\108\97\121\95\112\111\114\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\63\58\112\114\111\120\121\45\111\110\108\121\124\119\101\105\103\104\116\124\116\116\108\124\110\111\45\113\117\101\114\121\124\100\101\102\97\117\108\116\124\114\111\117\110\100\45\114\111\98\105\110\124\109\117\108\116\105\99\97\115\116\45\114\101\115\112\111\110\100\101\114\124\111\110\124\111\102\102\124\97\108\108\124\100\101\110\121\124\97\108\108\111\119\124\118\105\97\124\112\97\114\101\110\116\124\110\111\45\100\105\103\101\115\116\124\104\101\97\112\124\108\114\117\124\114\101\97\108\109\124\99\104\105\108\100\114\101\110\124\99\114\101\100\101\110\116\105\97\108\115\116\116\108\124\110\111\110\101\124\100\105\115\97\98\108\101\124\111\102\102\108\105\110\101\95\116\111\103\103\108\101\124\100\105\115\107\100\124\113\49\124\113\50\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\111\110\115\116\97\110\116")
+    , tok "\92\98\40\63\58\115\104\117\116\100\111\119\110\124\105\110\102\111\124\112\97\114\97\109\101\116\101\114\124\115\101\114\118\101\114\95\108\105\115\116\124\99\108\105\101\110\116\95\108\105\115\116\124\115\113\117\105\100\92\46\99\111\110\102\41\92\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\115\116\97\116\115\47\92\98\40\63\58\115\104\117\116\100\111\119\110\124\105\110\102\111\124\112\97\114\97\109\101\116\101\114\124\115\101\114\118\101\114\95\108\105\115\116\124\99\108\105\101\110\116\95\108\105\115\116\124\115\113\117\105\100\92\46\99\111\110\102\41\92\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\108\111\103\47\92\98\40\63\58\115\104\117\116\100\111\119\110\124\105\110\102\111\124\112\97\114\97\109\101\116\101\114\124\115\101\114\118\101\114\95\108\105\115\116\124\99\108\105\101\110\116\95\108\105\115\116\124\115\113\117\105\100\92\46\99\111\110\102\41\92\98\61" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\98\40\63\58\117\114\108\95\114\101\103\101\120\124\117\114\108\112\97\116\104\95\114\101\103\101\120\124\114\101\102\101\114\101\114\95\114\101\103\101\120\124\112\111\114\116\124\112\114\111\116\111\124\114\101\113\95\109\105\109\101\95\116\121\112\101\124\114\101\112\95\109\105\109\101\95\116\121\112\101\124\109\101\116\104\111\100\124\98\114\111\119\115\101\114\124\117\115\101\114\124\115\114\99\124\100\115\116\124\116\105\109\101\124\100\115\116\100\111\109\97\105\110\124\105\100\101\110\116\124\115\110\109\112\95\99\111\109\109\117\110\105\116\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\63\58\92\100\123\49\44\51\125\92\46\41\123\51\125\92\100\123\49\44\51\125\92\98\40\63\58\47\40\63\58\92\98\40\63\58\92\100\123\49\44\51\125\92\46\41\123\51\125\92\100\123\49\44\51\125\92\98\41\124\92\100\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\98\92\100\43\92\98" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\83\43" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Tcl.hs b/src/Text/Highlighter/Lexers/Tcl.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Tcl.hs
@@ -0,0 +1,147 @@
+module Text.Highlighter.Lexers.Tcl (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\84\99\108"
+    , lAliases = ["\116\99\108"]
+    , lExtensions = ["\46\116\99\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\116\99\108", "\116\101\120\116\47\120\45\115\99\114\105\112\116\46\116\99\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\45\116\99\108"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tokNext "\46\42\91\94\92\92\93\92\110" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\46\42\92\92\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+stringSquare' :: TokenMatcher
+stringSquare' =
+    [ tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo stringSquare')
+    , tok "\40\63\115\41\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\92\92\92\110\124\91\94\92\93\92\92\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tokNext "\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") Pop
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo stringSquare')
+    , tok "\40\63\115\41\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") Pop
+    ]
+
+commandInParen' :: TokenMatcher
+commandInParen' =
+    [ tokNext "\92\98\40\97\102\116\101\114\124\97\112\112\108\121\124\97\114\114\97\121\124\98\114\101\97\107\124\99\97\116\99\104\124\99\111\110\116\105\110\117\101\124\101\108\115\101\105\102\124\101\108\115\101\124\101\114\114\111\114\124\101\118\97\108\124\101\120\112\114\124\102\111\114\124\102\111\114\101\97\99\104\124\103\108\111\98\97\108\124\105\102\124\110\97\109\101\115\112\97\99\101\124\112\114\111\99\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\115\101\116\124\115\119\105\116\99\104\124\116\104\101\110\124\116\114\97\99\101\124\117\110\115\101\116\124\117\112\100\97\116\101\124\117\112\108\101\118\101\108\124\117\112\118\97\114\124\118\97\114\105\97\98\108\101\124\118\119\97\105\116\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paramsInParen')
+    , tokNext "\92\98\40\97\112\112\101\110\100\124\98\103\101\114\114\111\114\124\98\105\110\97\114\121\124\99\100\124\99\104\97\110\124\99\108\111\99\107\124\99\108\111\115\101\124\99\111\110\99\97\116\124\100\100\101\124\100\105\99\116\124\101\110\99\111\100\105\110\103\124\101\111\102\124\101\120\101\99\124\101\120\105\116\124\102\98\108\111\99\107\101\100\124\102\99\111\110\102\105\103\117\114\101\124\102\99\111\112\121\124\102\105\108\101\124\102\105\108\101\101\118\101\110\116\124\102\108\117\115\104\124\102\111\114\109\97\116\124\103\101\116\115\124\103\108\111\98\124\104\105\115\116\111\114\121\124\104\116\116\112\124\105\110\99\114\124\105\110\102\111\124\105\110\116\101\114\112\124\106\111\105\110\124\108\97\112\112\101\110\100\124\108\97\115\115\105\103\110\124\108\105\110\100\101\120\124\108\105\110\115\101\114\116\124\108\105\115\116\124\108\108\101\110\103\116\104\124\108\111\97\100\124\108\111\97\100\84\107\124\108\114\97\110\103\101\124\108\114\101\112\101\97\116\124\108\114\101\112\108\97\99\101\124\108\114\101\118\101\114\115\101\124\108\115\101\97\114\99\104\124\108\115\101\116\124\108\115\111\114\116\124\109\97\116\104\102\117\110\99\124\109\97\116\104\111\112\124\109\101\109\111\114\121\124\109\115\103\99\97\116\124\111\112\101\110\124\112\97\99\107\97\103\101\124\112\105\100\124\112\107\103\58\58\99\114\101\97\116\101\124\112\107\103\95\109\107\73\110\100\101\120\124\112\108\97\116\102\111\114\109\124\112\108\97\116\102\111\114\109\58\58\115\104\101\108\108\124\112\117\116\115\124\112\119\100\124\114\101\95\115\121\110\116\97\120\124\114\101\97\100\124\114\101\102\99\104\97\110\124\114\101\103\101\120\112\124\114\101\103\105\115\116\114\121\124\114\101\103\115\117\98\124\115\99\97\110\124\115\101\101\107\124\115\111\99\107\101\116\124\115\111\117\114\99\101\124\115\112\108\105\116\124\115\116\114\105\110\103\124\115\117\98\115\116\124\116\101\108\108\124\116\105\109\101\124\116\109\124\117\110\107\110\111\119\110\124\117\110\108\111\97\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") (GoTo paramsInParen')
+    , tokNext "\40\91\92\119\92\46\92\45\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo paramsInParen')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    ]
+
+data' :: TokenMatcher
+data' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\48\120\91\97\45\102\65\45\70\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\92\46\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\92\36\40\91\92\119\92\46\92\45\92\58\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\40\91\92\119\92\46\92\45\92\58\93\43\41" (Arbitrary "\84\101\120\116")
+    ]
+
+brace' :: TokenMatcher
+brace' =
+    [ tokNext "\125" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf commandInBrace'
+    , anyOf basic'
+    , anyOf data'
+    ]
+
+paren' :: TokenMatcher
+paren' =
+    [ tokNext "\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf commandInParen'
+    , anyOf basic'
+    , anyOf data'
+    ]
+
+paramsInParen' :: TokenMatcher
+paramsInParen' =
+    [ tokNext "\92\41" (Arbitrary "\75\101\121\119\111\114\100") (DoAll [Pop, Pop])
+    , anyOf params'
+    ]
+
+bracket' :: TokenMatcher
+bracket' =
+    [ tokNext "\92\93" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf commandInBracket'
+    , anyOf basic'
+    , anyOf data'
+    ]
+
+command' :: TokenMatcher
+command' =
+    [ tokNext "\92\98\40\97\102\116\101\114\124\97\112\112\108\121\124\97\114\114\97\121\124\98\114\101\97\107\124\99\97\116\99\104\124\99\111\110\116\105\110\117\101\124\101\108\115\101\105\102\124\101\108\115\101\124\101\114\114\111\114\124\101\118\97\108\124\101\120\112\114\124\102\111\114\124\102\111\114\101\97\99\104\124\103\108\111\98\97\108\124\105\102\124\110\97\109\101\115\112\97\99\101\124\112\114\111\99\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\115\101\116\124\115\119\105\116\99\104\124\116\104\101\110\124\116\114\97\99\101\124\117\110\115\101\116\124\117\112\100\97\116\101\124\117\112\108\101\118\101\108\124\117\112\118\97\114\124\118\97\114\105\97\98\108\101\124\118\119\97\105\116\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo params')
+    , tokNext "\92\98\40\97\112\112\101\110\100\124\98\103\101\114\114\111\114\124\98\105\110\97\114\121\124\99\100\124\99\104\97\110\124\99\108\111\99\107\124\99\108\111\115\101\124\99\111\110\99\97\116\124\100\100\101\124\100\105\99\116\124\101\110\99\111\100\105\110\103\124\101\111\102\124\101\120\101\99\124\101\120\105\116\124\102\98\108\111\99\107\101\100\124\102\99\111\110\102\105\103\117\114\101\124\102\99\111\112\121\124\102\105\108\101\124\102\105\108\101\101\118\101\110\116\124\102\108\117\115\104\124\102\111\114\109\97\116\124\103\101\116\115\124\103\108\111\98\124\104\105\115\116\111\114\121\124\104\116\116\112\124\105\110\99\114\124\105\110\102\111\124\105\110\116\101\114\112\124\106\111\105\110\124\108\97\112\112\101\110\100\124\108\97\115\115\105\103\110\124\108\105\110\100\101\120\124\108\105\110\115\101\114\116\124\108\105\115\116\124\108\108\101\110\103\116\104\124\108\111\97\100\124\108\111\97\100\84\107\124\108\114\97\110\103\101\124\108\114\101\112\101\97\116\124\108\114\101\112\108\97\99\101\124\108\114\101\118\101\114\115\101\124\108\115\101\97\114\99\104\124\108\115\101\116\124\108\115\111\114\116\124\109\97\116\104\102\117\110\99\124\109\97\116\104\111\112\124\109\101\109\111\114\121\124\109\115\103\99\97\116\124\111\112\101\110\124\112\97\99\107\97\103\101\124\112\105\100\124\112\107\103\58\58\99\114\101\97\116\101\124\112\107\103\95\109\107\73\110\100\101\120\124\112\108\97\116\102\111\114\109\124\112\108\97\116\102\111\114\109\58\58\115\104\101\108\108\124\112\117\116\115\124\112\119\100\124\114\101\95\115\121\110\116\97\120\124\114\101\97\100\124\114\101\102\99\104\97\110\124\114\101\103\101\120\112\124\114\101\103\105\115\116\114\121\124\114\101\103\115\117\98\124\115\99\97\110\124\115\101\101\107\124\115\111\99\107\101\116\124\115\111\117\114\99\101\124\115\112\108\105\116\124\115\116\114\105\110\103\124\115\117\98\115\116\124\116\101\108\108\124\116\105\109\101\124\116\109\124\117\110\107\110\111\119\110\124\117\110\108\111\97\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") (GoTo params')
+    , tokNext "\40\91\92\119\92\46\92\45\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo params')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    ]
+
+params' :: TokenMatcher
+params' =
+    [ tokNext "\59" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tokNext "\92\110" (Arbitrary "\84\101\120\116") Pop
+    , tok "\40\101\108\115\101\124\101\108\115\101\105\102\124\116\104\101\110\41" (Arbitrary "\75\101\121\119\111\114\100")
+    , anyOf basic'
+    , anyOf data'
+    ]
+
+basic' :: TokenMatcher
+basic' =
+    [ tokNext "\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paren')
+    , tokNext "\92\91" (Arbitrary "\75\101\121\119\111\114\100") (GoTo bracket')
+    , tokNext "\92\123" (Arbitrary "\75\101\121\119\111\114\100") (GoTo brace')
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101") (GoTo string')
+    , tok "\40\101\113\124\110\101\124\105\110\124\110\105\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\33\61\124\61\61\124\60\60\124\62\62\124\60\61\124\62\61\124\38\38\124\92\124\92\124\124\92\42\92\42\124\91\45\43\126\33\42\47\37\60\62\38\94\124\63\58\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    ]
+
+paramsInBracket' :: TokenMatcher
+paramsInBracket' =
+    [ tokNext "\92\93" (Arbitrary "\75\101\121\119\111\114\100") (DoAll [Pop, Pop])
+    , anyOf params'
+    ]
+
+commandInBracket' :: TokenMatcher
+commandInBracket' =
+    [ tokNext "\92\98\40\97\102\116\101\114\124\97\112\112\108\121\124\97\114\114\97\121\124\98\114\101\97\107\124\99\97\116\99\104\124\99\111\110\116\105\110\117\101\124\101\108\115\101\105\102\124\101\108\115\101\124\101\114\114\111\114\124\101\118\97\108\124\101\120\112\114\124\102\111\114\124\102\111\114\101\97\99\104\124\103\108\111\98\97\108\124\105\102\124\110\97\109\101\115\112\97\99\101\124\112\114\111\99\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\115\101\116\124\115\119\105\116\99\104\124\116\104\101\110\124\116\114\97\99\101\124\117\110\115\101\116\124\117\112\100\97\116\101\124\117\112\108\101\118\101\108\124\117\112\118\97\114\124\118\97\114\105\97\98\108\101\124\118\119\97\105\116\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paramsInBracket')
+    , tokNext "\92\98\40\97\112\112\101\110\100\124\98\103\101\114\114\111\114\124\98\105\110\97\114\121\124\99\100\124\99\104\97\110\124\99\108\111\99\107\124\99\108\111\115\101\124\99\111\110\99\97\116\124\100\100\101\124\100\105\99\116\124\101\110\99\111\100\105\110\103\124\101\111\102\124\101\120\101\99\124\101\120\105\116\124\102\98\108\111\99\107\101\100\124\102\99\111\110\102\105\103\117\114\101\124\102\99\111\112\121\124\102\105\108\101\124\102\105\108\101\101\118\101\110\116\124\102\108\117\115\104\124\102\111\114\109\97\116\124\103\101\116\115\124\103\108\111\98\124\104\105\115\116\111\114\121\124\104\116\116\112\124\105\110\99\114\124\105\110\102\111\124\105\110\116\101\114\112\124\106\111\105\110\124\108\97\112\112\101\110\100\124\108\97\115\115\105\103\110\124\108\105\110\100\101\120\124\108\105\110\115\101\114\116\124\108\105\115\116\124\108\108\101\110\103\116\104\124\108\111\97\100\124\108\111\97\100\84\107\124\108\114\97\110\103\101\124\108\114\101\112\101\97\116\124\108\114\101\112\108\97\99\101\124\108\114\101\118\101\114\115\101\124\108\115\101\97\114\99\104\124\108\115\101\116\124\108\115\111\114\116\124\109\97\116\104\102\117\110\99\124\109\97\116\104\111\112\124\109\101\109\111\114\121\124\109\115\103\99\97\116\124\111\112\101\110\124\112\97\99\107\97\103\101\124\112\105\100\124\112\107\103\58\58\99\114\101\97\116\101\124\112\107\103\95\109\107\73\110\100\101\120\124\112\108\97\116\102\111\114\109\124\112\108\97\116\102\111\114\109\58\58\115\104\101\108\108\124\112\117\116\115\124\112\119\100\124\114\101\95\115\121\110\116\97\120\124\114\101\97\100\124\114\101\102\99\104\97\110\124\114\101\103\101\120\112\124\114\101\103\105\115\116\114\121\124\114\101\103\115\117\98\124\115\99\97\110\124\115\101\101\107\124\115\111\99\107\101\116\124\115\111\117\114\99\101\124\115\112\108\105\116\124\115\116\114\105\110\103\124\115\117\98\115\116\124\116\101\108\108\124\116\105\109\101\124\116\109\124\117\110\107\110\111\119\110\124\117\110\108\111\97\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") (GoTo paramsInBracket')
+    , tokNext "\40\91\92\119\92\46\92\45\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo paramsInBracket')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    ]
+
+paramsInBrace' :: TokenMatcher
+paramsInBrace' =
+    [ tokNext "\125" (Arbitrary "\75\101\121\119\111\114\100") (DoAll [Pop, Pop])
+    , anyOf params'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf command'
+    , anyOf basic'
+    , anyOf data'
+    , tok "\125" (Arbitrary "\75\101\121\119\111\114\100")
+    ]
+
+commandInBrace' :: TokenMatcher
+commandInBrace' =
+    [ tokNext "\92\98\40\97\102\116\101\114\124\97\112\112\108\121\124\97\114\114\97\121\124\98\114\101\97\107\124\99\97\116\99\104\124\99\111\110\116\105\110\117\101\124\101\108\115\101\105\102\124\101\108\115\101\124\101\114\114\111\114\124\101\118\97\108\124\101\120\112\114\124\102\111\114\124\102\111\114\101\97\99\104\124\103\108\111\98\97\108\124\105\102\124\110\97\109\101\115\112\97\99\101\124\112\114\111\99\124\114\101\110\97\109\101\124\114\101\116\117\114\110\124\115\101\116\124\115\119\105\116\99\104\124\116\104\101\110\124\116\114\97\99\101\124\117\110\115\101\116\124\117\112\100\97\116\101\124\117\112\108\101\118\101\108\124\117\112\118\97\114\124\118\97\114\105\97\98\108\101\124\118\119\97\105\116\124\119\104\105\108\101\41\92\98" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paramsInBrace')
+    , tokNext "\92\98\40\97\112\112\101\110\100\124\98\103\101\114\114\111\114\124\98\105\110\97\114\121\124\99\100\124\99\104\97\110\124\99\108\111\99\107\124\99\108\111\115\101\124\99\111\110\99\97\116\124\100\100\101\124\100\105\99\116\124\101\110\99\111\100\105\110\103\124\101\111\102\124\101\120\101\99\124\101\120\105\116\124\102\98\108\111\99\107\101\100\124\102\99\111\110\102\105\103\117\114\101\124\102\99\111\112\121\124\102\105\108\101\124\102\105\108\101\101\118\101\110\116\124\102\108\117\115\104\124\102\111\114\109\97\116\124\103\101\116\115\124\103\108\111\98\124\104\105\115\116\111\114\121\124\104\116\116\112\124\105\110\99\114\124\105\110\102\111\124\105\110\116\101\114\112\124\106\111\105\110\124\108\97\112\112\101\110\100\124\108\97\115\115\105\103\110\124\108\105\110\100\101\120\124\108\105\110\115\101\114\116\124\108\105\115\116\124\108\108\101\110\103\116\104\124\108\111\97\100\124\108\111\97\100\84\107\124\108\114\97\110\103\101\124\108\114\101\112\101\97\116\124\108\114\101\112\108\97\99\101\124\108\114\101\118\101\114\115\101\124\108\115\101\97\114\99\104\124\108\115\101\116\124\108\115\111\114\116\124\109\97\116\104\102\117\110\99\124\109\97\116\104\111\112\124\109\101\109\111\114\121\124\109\115\103\99\97\116\124\111\112\101\110\124\112\97\99\107\97\103\101\124\112\105\100\124\112\107\103\58\58\99\114\101\97\116\101\124\112\107\103\95\109\107\73\110\100\101\120\124\112\108\97\116\102\111\114\109\124\112\108\97\116\102\111\114\109\58\58\115\104\101\108\108\124\112\117\116\115\124\112\119\100\124\114\101\95\115\121\110\116\97\120\124\114\101\97\100\124\114\101\102\99\104\97\110\124\114\101\103\101\120\112\124\114\101\103\105\115\116\114\121\124\114\101\103\115\117\98\124\115\99\97\110\124\115\101\101\107\124\115\111\99\107\101\116\124\115\111\117\114\99\101\124\115\112\108\105\116\124\115\116\114\105\110\103\124\115\117\98\115\116\124\116\101\108\108\124\116\105\109\101\124\116\109\124\117\110\107\110\111\119\110\124\117\110\108\111\97\100\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110") (GoTo paramsInBrace')
+    , tokNext "\40\91\92\119\92\46\92\45\93\43\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101") (GoTo paramsInBrace')
+    , tokNext "\35" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Tcsh.hs b/src/Text/Highlighter/Lexers/Tcsh.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Tcsh.hs
@@ -0,0 +1,67 @@
+module Text.Highlighter.Lexers.Tcsh (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\84\99\115\104"
+    , lAliases = ["\116\99\115\104", "\99\115\104"]
+    , lExtensions = ["\46\116\99\115\104", "\46\99\115\104"]
+    , lMimetypes = ["\97\112\112\108\105\99\97\116\105\111\110\47\120\45\99\115\104"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+curly' :: TokenMatcher
+curly' =
+    [ tokNext "\125" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , tok "\58\45" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\91\97\45\122\65\45\90\48\45\57\95\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , tok "\91\94\125\58\34\92\39\96\36\93\43" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , anyOf root'
+    ]
+
+backticks' :: TokenMatcher
+backticks' =
+    [ tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") Pop
+    , anyOf root'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf basic'
+    , tokNext "\92\36\92\40" (Arbitrary "\75\101\121\119\111\114\100") (GoTo paren')
+    , tokNext "\92\36\123\35\63" (Arbitrary "\75\101\121\119\111\114\100") (GoTo curly')
+    , tokNext "\96" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") (GoTo backticks')
+    , anyOf data'
+    ]
+
+basic' :: TokenMatcher
+basic' =
+    [ tok "\92\98\40\105\102\124\101\110\100\105\102\124\101\108\115\101\124\119\104\105\108\101\124\116\104\101\110\124\102\111\114\101\97\99\104\124\99\97\115\101\124\100\101\102\97\117\108\116\124\99\111\110\116\105\110\117\101\124\103\111\116\111\124\98\114\101\97\107\115\119\124\101\110\100\124\115\119\105\116\99\104\124\101\110\100\115\119\41\92\115\42\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\97\108\105\97\115\124\97\108\108\111\99\124\98\103\124\98\105\110\100\107\101\121\124\98\114\101\97\107\124\98\117\105\108\116\105\110\115\124\98\121\101\124\99\97\108\108\101\114\124\99\100\124\99\104\100\105\114\124\99\111\109\112\108\101\116\101\124\100\105\114\115\124\101\99\104\111\124\101\99\104\111\116\99\124\101\118\97\108\124\101\120\101\99\124\101\120\105\116\124\102\103\124\102\105\108\101\116\101\115\116\124\103\101\116\120\118\101\114\115\124\103\108\111\98\124\103\101\116\115\112\97\116\104\124\104\97\115\104\115\116\97\116\124\104\105\115\116\111\114\121\124\104\117\112\124\105\110\108\105\98\124\106\111\98\115\124\107\105\108\108\124\108\105\109\105\116\124\108\111\103\124\108\111\103\105\110\124\108\111\103\111\117\116\124\108\115\45\70\124\109\105\103\114\97\116\101\124\110\101\119\103\114\112\124\110\105\99\101\124\110\111\104\117\112\124\110\111\116\105\102\121\124\111\110\105\110\116\114\124\112\111\112\100\124\112\114\105\110\116\101\110\118\124\112\117\115\104\100\124\114\101\104\97\115\104\124\114\101\112\101\97\116\124\114\111\111\116\110\111\100\101\124\112\111\112\100\124\112\117\115\104\100\124\115\101\116\124\115\104\105\102\116\124\115\99\104\101\100\124\115\101\116\101\110\118\124\115\101\116\112\97\116\104\124\115\101\116\116\99\124\115\101\116\116\121\124\115\101\116\120\118\101\114\115\124\115\104\105\102\116\124\115\111\117\114\99\101\124\115\116\111\112\124\115\117\115\112\101\110\100\124\115\111\117\114\99\101\124\115\117\115\112\101\110\100\124\116\101\108\108\116\99\124\116\105\109\101\124\117\109\97\115\107\124\117\110\97\108\105\97\115\124\117\110\99\111\109\112\108\101\116\101\124\117\110\104\97\115\104\124\117\110\105\118\101\114\115\101\124\117\110\108\105\109\105\116\124\117\110\115\101\116\124\117\110\115\101\116\101\110\118\124\118\101\114\124\119\97\105\116\124\119\97\114\112\124\119\97\116\99\104\108\111\103\124\119\104\101\114\101\124\119\104\105\99\104\41\92\115\42\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\35\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\92\92\91\92\119\92\87\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\40\92\98\92\119\43\41\40\92\115\42\41\40\61\41" (ByGroups [(Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101"), (Arbitrary "\84\101\120\116"), (Arbitrary "\79\112\101\114\97\116\111\114")])
+    , tok "\91\92\91\92\93\123\125\40\41\61\93\43" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\60\60\92\115\42\40\92\39\63\41\92\92\63\40\92\119\43\41\91\92\119\92\87\93\43\63\92\50" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+paren' :: TokenMatcher
+paren' =
+    [ tokNext "\92\41" (Arbitrary "\75\101\121\119\111\114\100") Pop
+    , anyOf root'
+    ]
+
+data' :: TokenMatcher
+data' =
+    [ tok "\40\63\115\41\34\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\34\92\92\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\40\63\115\41\39\40\92\92\92\92\124\92\92\91\48\45\55\93\43\124\92\92\46\124\91\94\39\92\92\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\91\94\61\92\115\92\110\92\91\92\93\123\125\40\41\36\34\92\39\96\92\92\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\100\43\40\63\61\32\124\92\90\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\92\36\35\63\40\92\119\43\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Tex.hs b/src/Text/Highlighter/Lexers/Tex.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Tex.hs
@@ -0,0 +1,64 @@
+module Text.Highlighter.Lexers.Tex (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\84\101\88"
+    , lAliases = ["\116\101\120", "\108\97\116\101\120"]
+    , lExtensions = ["\46\116\101\120", "\46\97\117\120", "\46\116\111\99"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\116\101\120", "\116\101\120\116\47\120\45\108\97\116\101\120"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+displaymath' :: TokenMatcher
+displaymath' =
+    [ tokNext "\92\92\92\93" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\92\36\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\36" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , anyOf math'
+    ]
+
+general' :: TokenMatcher
+general' =
+    [ tok "\37\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\123\125\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\38\95\94\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    ]
+
+command' :: TokenMatcher
+command' =
+    [ tok "\92\91\46\42\63\92\93" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tok "\92\42" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "" (Arbitrary "\84\101\120\116") Pop
+    ]
+
+inlinemath' :: TokenMatcher
+inlinemath' =
+    [ tokNext "\92\92\92\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , anyOf math'
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tokNext "\92\92\92\91" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") (GoTo displaymath')
+    , tokNext "\92\92\92\40" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo inlinemath')
+    , tokNext "\92\36\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\66\97\99\107\116\105\99\107") (GoTo displaymath')
+    , tokNext "\92\36" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo inlinemath')
+    , tokNext "\92\92\40\91\97\45\122\65\45\90\93\43\124\46\41" (Arbitrary "\75\101\121\119\111\114\100") (GoTo command')
+    , anyOf general'
+    , tok "\91\94\92\92\36\37\38\95\94\123\125\93\43" (Arbitrary "\84\101\120\116")
+    ]
+
+math' :: TokenMatcher
+math' =
+    [ tok "\92\92\40\91\97\45\122\65\45\90\93\43\124\46\41" (Arbitrary "\78\97\109\101" :. Arbitrary "\86\97\114\105\97\98\108\101")
+    , anyOf general'
+    , tok "\91\48\45\57\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\91\45\61\33\43\42\47\40\41\92\91\92\93\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\91\94\61\33\43\42\47\40\41\92\91\92\93\92\92\36\37\38\95\94\123\125\48\45\57\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Vala.hs b/src/Text/Highlighter/Lexers/Vala.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Vala.hs
@@ -0,0 +1,89 @@
+module Text.Highlighter.Lexers.Vala (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\86\97\108\97"
+    , lAliases = ["\118\97\108\97", "\118\97\112\105"]
+    , lExtensions = ["\46\118\97\108\97", "\46\118\97\112\105"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\118\97\108\97"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+statements' :: TokenMatcher
+statements' =
+    [ tokNext "\76\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\76\63\39\40\92\92\46\124\92\92\91\48\45\55\93\123\49\44\51\125\124\92\92\120\91\97\45\102\65\45\70\48\45\57\93\123\49\44\50\125\124\91\94\92\92\92\39\92\110\93\41\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\67\104\97\114")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\41\91\101\69\93\91\43\45\93\63\92\100\43\91\108\76\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\46\92\100\43\124\92\100\43\91\102\70\93\41\91\102\70\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\48\120\91\48\45\57\97\45\102\65\45\70\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\48\91\48\45\55\93\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\79\99\116")
+    , tok "\92\100\43\91\76\108\93\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\91\126\33\37\94\38\42\43\61\124\63\58\60\62\47\45\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tok "\40\92\91\41\40\67\111\109\112\97\99\116\124\73\109\109\117\116\97\98\108\101\124\40\63\58\66\111\111\108\101\97\110\124\83\105\109\112\108\101\41\84\121\112\101\41\40\92\93\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114"), (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")])
+    , tok "\40\92\91\41\40\67\67\111\100\101\124\40\63\58\73\110\116\101\103\101\114\124\70\108\111\97\116\105\110\103\41\84\121\112\101\41" (ByGroups [(Arbitrary "\80\117\110\99\116\117\97\116\105\111\110"), (Arbitrary "\78\97\109\101" :. Arbitrary "\68\101\99\111\114\97\116\111\114")])
+    , tok "\91\40\41\92\91\92\93\44\46\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\40\97\115\124\98\97\115\101\124\98\114\101\97\107\124\99\97\115\101\124\99\97\116\99\104\124\99\111\110\115\116\114\117\99\116\124\99\111\110\116\105\110\117\101\124\100\101\102\97\117\108\116\124\100\101\108\101\116\101\124\100\111\124\101\108\115\101\124\101\110\117\109\124\102\105\110\97\108\108\121\124\102\111\114\124\102\111\114\101\97\99\104\124\103\101\116\124\105\102\124\105\110\124\105\115\124\108\111\99\107\124\110\101\119\124\111\117\116\124\112\97\114\97\109\115\124\114\101\116\117\114\110\124\115\101\116\124\115\105\122\101\111\102\124\115\119\105\116\99\104\124\116\104\105\115\124\116\104\114\111\119\124\116\114\121\124\116\121\112\101\111\102\124\119\104\105\108\101\124\121\105\101\108\100\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\40\97\98\115\116\114\97\99\116\124\99\111\110\115\116\124\100\101\108\101\103\97\116\101\124\100\121\110\97\109\105\99\124\101\110\115\117\114\101\115\124\101\120\116\101\114\110\124\105\110\108\105\110\101\124\105\110\116\101\114\110\97\108\124\111\118\101\114\114\105\100\101\124\111\119\110\101\100\124\112\114\105\118\97\116\101\124\112\114\111\116\101\99\116\101\100\124\112\117\98\108\105\99\124\114\101\102\124\114\101\113\117\105\114\101\115\124\115\105\103\110\97\108\124\115\116\97\116\105\99\124\116\104\114\111\119\115\124\117\110\111\119\110\101\100\124\118\97\114\124\118\105\114\116\117\97\108\124\118\111\108\97\116\105\108\101\124\119\101\97\107\124\121\105\101\108\100\115\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tokNext "\40\110\97\109\101\115\112\97\99\101\124\117\115\105\110\103\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\78\97\109\101\115\112\97\99\101"), (Arbitrary "\84\101\120\116")]) (GoTo namespace')
+    , tokNext "\40\99\108\97\115\115\124\101\114\114\111\114\100\111\109\97\105\110\124\105\110\116\101\114\102\97\99\101\124\115\116\114\117\99\116\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110"), (Arbitrary "\84\101\120\116")]) (GoTo class')
+    , tok "\40\92\46\41\40\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\41" (ByGroups [(Arbitrary "\79\112\101\114\97\116\111\114"), (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")])
+    , tok "\40\118\111\105\100\124\98\111\111\108\124\99\104\97\114\124\100\111\117\98\108\101\124\102\108\111\97\116\124\105\110\116\124\105\110\116\56\124\105\110\116\49\54\124\105\110\116\51\50\124\105\110\116\54\52\124\108\111\110\103\124\115\104\111\114\116\124\115\105\122\101\95\116\124\115\115\105\122\101\95\116\124\115\116\114\105\110\103\124\116\105\109\101\95\116\124\117\99\104\97\114\124\117\105\110\116\124\117\105\110\116\56\124\117\105\110\116\49\54\124\117\105\110\116\51\50\124\117\105\110\116\54\52\124\117\108\111\110\103\124\117\110\105\99\104\97\114\124\117\115\104\111\114\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\116\114\117\101\124\102\97\108\115\101\124\110\117\108\108\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101")
+    ]
+
+whitespace' :: TokenMatcher
+whitespace' =
+    [ tokNext "\94\92\115\42\35\105\102\92\115\43\48" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") (GoTo if0')
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\92\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\47\47\40\92\110\124\40\46\124\92\110\41\42\63\91\94\92\92\93\92\110\41" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\47\40\92\92\92\110\41\63\91\42\93\40\46\124\92\110\41\42\63\91\42\93\40\92\92\92\110\41\63\47" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\77\117\108\116\105\108\105\110\101")
+    ]
+
+statement' :: TokenMatcher
+statement' =
+    [ anyOf whitespace'
+    , anyOf statements'
+    , tok "\91\123\125\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tokNext "\59" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110") Pop
+    ]
+
+if0' :: TokenMatcher
+if0' =
+    [ tokNext "\94\92\115\42\35\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Push
+    , tokNext "\94\92\115\42\35\101\108\40\63\58\115\101\124\105\102\41\46\42\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tokNext "\94\92\115\42\35\101\110\100\105\102\46\42\63\40\63\60\33\92\92\41\92\110" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99") Pop
+    , tok "\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+namespace' :: TokenMatcher
+namespace' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ anyOf whitespace'
+    , tokNext "" (Arbitrary "\84\101\120\116") (GoTo statement')
+    ]
+
+class' :: TokenMatcher
+class' =
+    [ tokNext "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\92\92\40\91\92\92\97\98\102\110\114\116\118\34\92\39\93\124\120\91\97\45\102\65\45\70\48\45\57\93\123\50\44\52\125\124\91\48\45\55\93\123\49\44\51\125\41" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\69\115\99\97\112\101")
+    , tok "\91\94\92\92\34\92\110\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92\92\110" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tok "\92\92" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/VbNet.hs b/src/Text/Highlighter/Lexers/VbNet.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/VbNet.hs
@@ -0,0 +1,64 @@
+module Text.Highlighter.Lexers.VbNet (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\86\66\46\110\101\116"
+    , lAliases = ["\118\98\46\110\101\116", "\118\98\110\101\116"]
+    , lExtensions = ["\46\118\98", "\46\98\97\115"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\118\98\110\101\116", "\116\101\120\116\47\120\45\118\98\97"]
+    , lStart = root'
+    , lFlags = [caseless, multiline]
+    }
+
+classname' :: TokenMatcher
+classname' =
+    [ tokNext "\91\97\45\122\95\93\91\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\67\108\97\115\115") Pop
+    ]
+
+namespace' :: TokenMatcher
+namespace' =
+    [ tokNext "\91\97\45\122\95\93\91\97\45\122\48\45\57\95\46\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\78\97\109\101\115\112\97\99\101") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\92\115\42\60\46\42\63\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101")
+    , tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tok "\92\110" (Arbitrary "\84\101\120\116")
+    , tok "\114\101\109\92\98\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\39\46\42\63\92\110" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\35\73\102\92\115\46\42\63\92\115\84\104\101\110\124\35\69\108\115\101\73\102\92\115\46\42\63\92\115\84\104\101\110\124\35\69\110\100\92\115\43\73\102\124\35\67\111\110\115\116\124\35\69\120\116\101\114\110\97\108\83\111\117\114\99\101\46\42\63\92\110\124\35\69\110\100\92\115\43\69\120\116\101\114\110\97\108\83\111\117\114\99\101\124\35\82\101\103\105\111\110\46\42\63\92\110\124\35\69\110\100\92\115\43\82\101\103\105\111\110\124\35\69\120\116\101\114\110\97\108\67\104\101\99\107\115\117\109" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\91\92\40\92\41\123\125\33\35\44\46\58\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\79\112\116\105\111\110\92\115\43\40\83\116\114\105\99\116\124\69\120\112\108\105\99\105\116\124\67\111\109\112\97\114\101\41\92\115\43\40\79\110\124\79\102\102\124\66\105\110\97\114\121\124\84\101\120\116\41" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\68\101\99\108\97\114\97\116\105\111\110")
+    , tok "\40\63\60\33\92\46\41\40\65\100\100\72\97\110\100\108\101\114\124\65\108\105\97\115\124\66\121\82\101\102\124\66\121\86\97\108\124\67\97\108\108\124\67\97\115\101\124\67\97\116\99\104\124\67\66\111\111\108\124\67\66\121\116\101\124\67\67\104\97\114\124\67\68\97\116\101\124\67\68\101\99\124\67\68\98\108\124\67\73\110\116\124\67\76\110\103\124\67\79\98\106\124\67\111\110\115\116\124\67\111\110\116\105\110\117\101\124\67\83\66\121\116\101\124\67\83\104\111\114\116\124\67\83\110\103\124\67\83\116\114\124\67\84\121\112\101\124\67\85\73\110\116\124\67\85\76\110\103\124\67\85\83\104\111\114\116\124\68\101\99\108\97\114\101\124\68\101\102\97\117\108\116\124\68\101\108\101\103\97\116\101\124\68\105\109\124\68\105\114\101\99\116\67\97\115\116\124\68\111\124\69\97\99\104\124\69\108\115\101\124\69\108\115\101\73\102\124\69\110\100\124\69\110\100\73\102\124\69\110\117\109\124\69\114\97\115\101\124\69\114\114\111\114\124\69\118\101\110\116\124\69\120\105\116\124\70\97\108\115\101\124\70\105\110\97\108\108\121\124\70\111\114\124\70\114\105\101\110\100\124\70\117\110\99\116\105\111\110\124\71\101\116\124\71\108\111\98\97\108\124\71\111\83\117\98\124\71\111\84\111\124\72\97\110\100\108\101\115\124\73\102\124\73\109\112\108\101\109\101\110\116\115\124\73\109\112\111\114\116\115\124\73\110\104\101\114\105\116\115\124\73\110\116\101\114\102\97\99\101\124\76\101\116\124\76\105\98\124\76\111\111\112\124\77\101\124\77\111\100\117\108\101\124\77\117\115\116\73\110\104\101\114\105\116\124\77\117\115\116\79\118\101\114\114\105\100\101\124\77\121\66\97\115\101\124\77\121\67\108\97\115\115\124\78\97\109\101\115\112\97\99\101\124\78\97\114\114\111\119\105\110\103\124\78\101\119\124\78\101\120\116\124\78\111\116\124\78\111\116\104\105\110\103\124\78\111\116\73\110\104\101\114\105\116\97\98\108\101\124\78\111\116\79\118\101\114\114\105\100\97\98\108\101\124\79\102\124\79\110\124\79\112\101\114\97\116\111\114\124\79\112\116\105\111\110\124\79\112\116\105\111\110\97\108\124\79\118\101\114\108\111\97\100\115\124\79\118\101\114\114\105\100\97\98\108\101\124\79\118\101\114\114\105\100\101\115\124\80\97\114\97\109\65\114\114\97\121\124\80\97\114\116\105\97\108\124\80\114\105\118\97\116\101\124\80\114\111\112\101\114\116\121\124\80\114\111\116\101\99\116\101\100\124\80\117\98\108\105\99\124\82\97\105\115\101\69\118\101\110\116\124\82\101\97\100\79\110\108\121\124\82\101\68\105\109\124\82\101\109\111\118\101\72\97\110\100\108\101\114\124\82\101\115\117\109\101\124\82\101\116\117\114\110\124\83\101\108\101\99\116\124\83\101\116\124\83\104\97\100\111\119\115\124\83\104\97\114\101\100\124\83\105\110\103\108\101\124\83\116\97\116\105\99\124\83\116\101\112\124\83\116\111\112\124\83\116\114\117\99\116\117\114\101\124\83\117\98\124\83\121\110\99\76\111\99\107\124\84\104\101\110\124\84\104\114\111\119\124\84\111\124\84\114\117\101\124\84\114\121\124\84\114\121\67\97\115\116\124\87\101\110\100\124\85\115\105\110\103\124\87\104\101\110\124\87\104\105\108\101\124\87\105\100\101\110\105\110\103\124\87\105\116\104\124\87\105\116\104\69\118\101\110\116\115\124\87\114\105\116\101\79\110\108\121\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tokNext "\40\63\60\33\92\46\41\40\70\117\110\99\116\105\111\110\124\83\117\98\124\80\114\111\112\101\114\116\121\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo funcname')
+    , tokNext "\40\63\60\33\92\46\41\40\67\108\97\115\115\124\83\116\114\117\99\116\117\114\101\124\69\110\117\109\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo classname')
+    , tokNext "\40\63\60\33\92\46\41\40\78\97\109\101\115\112\97\99\101\124\73\109\112\111\114\116\115\41\40\92\115\43\41" (ByGroups [(Arbitrary "\75\101\121\119\111\114\100"), (Arbitrary "\84\101\120\116")]) (GoTo namespace')
+    , tok "\40\63\60\33\92\46\41\40\66\111\111\108\101\97\110\124\66\121\116\101\124\67\104\97\114\124\68\97\116\101\124\68\101\99\105\109\97\108\124\68\111\117\98\108\101\124\73\110\116\101\103\101\114\124\76\111\110\103\124\79\98\106\101\99\116\124\83\66\121\116\101\124\83\104\111\114\116\124\83\105\110\103\108\101\124\83\116\114\105\110\103\124\86\97\114\105\97\110\116\124\85\73\110\116\101\103\101\114\124\85\76\111\110\103\124\85\83\104\111\114\116\41\92\98" (Arbitrary "\75\101\121\119\111\114\100" :. Arbitrary "\84\121\112\101")
+    , tok "\40\63\60\33\92\46\41\40\65\100\100\114\101\115\115\79\102\124\65\110\100\124\65\110\100\65\108\115\111\124\65\115\124\71\101\116\84\121\112\101\124\73\110\124\73\115\124\73\115\78\111\116\124\76\105\107\101\124\77\111\100\124\79\114\124\79\114\69\108\115\101\124\84\121\112\101\79\102\124\88\111\114\41\92\98" (Arbitrary "\79\112\101\114\97\116\111\114" :. Arbitrary "\87\111\114\100")
+    , tok "\38\61\124\91\42\93\61\124\47\61\124\92\92\61\124\92\94\61\124\92\43\61\124\45\61\124\60\60\61\124\62\62\61\124\60\60\124\62\62\124\58\61\124\60\61\124\62\61\124\60\62\124\91\45\38\42\47\92\92\94\43\61\60\62\93" (Arbitrary "\79\112\101\114\97\116\111\114")
+    , tokNext "\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") (GoTo string')
+    , tok "\91\97\45\122\65\45\90\95\93\91\97\45\122\65\45\90\48\45\57\95\93\42\91\37\38\64\33\35\36\93\63" (Arbitrary "\78\97\109\101")
+    , tok "\35\46\42\63\35" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\68\97\116\101")
+    , tok "\40\92\100\43\92\46\92\100\42\124\92\100\42\92\46\92\100\43\41\40\91\102\70\93\91\43\45\93\63\91\48\45\57\93\43\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\70\108\111\97\116")
+    , tok "\92\100\43\40\91\83\73\76\68\70\82\93\124\85\83\124\85\73\124\85\76\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\38\72\91\48\45\57\97\45\102\93\43\40\91\83\73\76\68\70\82\93\124\85\83\124\85\73\124\85\76\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\38\79\91\48\45\55\93\43\40\91\83\73\76\68\70\82\93\124\85\83\124\85\73\124\85\76\41\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\73\110\116\101\103\101\114")
+    , tok "\95\92\110" (Arbitrary "\84\101\120\116")
+    ]
+
+string' :: TokenMatcher
+string' =
+    [ tok "\34\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    , tokNext "\34\67\63" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tok "\91\94\34\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103")
+    ]
+
+funcname' :: TokenMatcher
+funcname' =
+    [ tokNext "\91\97\45\122\95\93\91\97\45\122\48\45\57\95\93\42" (Arbitrary "\78\97\109\101" :. Arbitrary "\70\117\110\99\116\105\111\110") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Vim.hs b/src/Text/Highlighter/Lexers/Vim.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Vim.hs
@@ -0,0 +1,33 @@
+module Text.Highlighter.Lexers.Vim (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\86\105\109\76"
+    , lAliases = ["\118\105\109"]
+    , lExtensions = ["\46\118\105\109", "\46\118\105\109\114\99"]
+    , lMimetypes = ["\116\101\120\116\47\120\45\118\105\109"]
+    , lStart = root'
+    , lFlags = [multiline]
+    }
+
+root' :: TokenMatcher
+root' =
+    [ tok "\94\92\115\42\34\46\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\40\63\60\61\92\115\41\34\91\94\92\45\58\46\37\35\61\42\93\46\42" (Arbitrary "\67\111\109\109\101\110\116")
+    , tok "\91\32\92\116\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\47\40\92\92\92\92\124\92\92\47\124\91\94\92\110\47\93\41\42\47" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\82\101\103\101\120")
+    , tok "\34\40\92\92\92\92\124\92\92\34\124\91\94\92\110\34\93\41\42\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\68\111\117\98\108\101")
+    , tok "\39\40\92\92\92\92\124\92\92\39\124\91\94\92\110\39\93\41\42\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103" :. Arbitrary "\83\105\110\103\108\101")
+    , tok "\45\63\92\100\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114")
+    , tok "\35\91\48\45\57\97\45\102\93\123\54\125" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\78\117\109\98\101\114" :. Arbitrary "\72\101\120")
+    , tok "\94\58" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\91\40\41\60\62\43\61\33\124\44\126\45\93" (Arbitrary "\80\117\110\99\116\117\97\116\105\111\110")
+    , tok "\92\98\40\108\101\116\124\105\102\124\101\108\115\101\124\101\110\100\105\102\124\101\108\115\101\105\102\124\102\117\110\124\102\117\110\99\116\105\111\110\124\101\110\100\102\117\110\99\116\105\111\110\41\92\98" (Arbitrary "\75\101\121\119\111\114\100")
+    , tok "\92\98\40\78\79\78\69\124\98\111\108\100\124\105\116\97\108\105\99\124\117\110\100\101\114\108\105\110\101\124\100\97\114\107\124\108\105\103\104\116\41\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\66\117\105\108\116\105\110")
+    , tok "\92\98\92\119\43\92\98" (Arbitrary "\78\97\109\101" :. Arbitrary "\79\116\104\101\114")
+    , tok "\46" (Arbitrary "\84\101\120\116")
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Xml.hs b/src/Text/Highlighter/Lexers/Xml.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Xml.hs
@@ -0,0 +1,49 @@
+module Text.Highlighter.Lexers.Xml (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\88\77\76"
+    , lAliases = ["\120\109\108"]
+    , lExtensions = ["\46\120\109\108", "\46\120\115\108", "\46\114\115\115", "\46\120\115\108\116", "\46\120\115\100", "\46\119\115\100\108"]
+    , lMimetypes = ["\116\101\120\116\47\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\109\108", "\105\109\97\103\101\47\115\118\103\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\114\115\115\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\97\116\111\109\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\115\108\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\115\108\116\43\120\109\108"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\45\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\45\45\62" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\45" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\46\58\45\93\43\92\115\42\61" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101") (GoTo attr')
+    , tokNext "\47\63\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\60\38\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\38\92\83\42\63\59" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    , tok "\92\60\92\33\92\91\67\68\65\84\65\92\91\46\42\63\92\93\92\93\92\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\60\92\63\46\42\63\92\63\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\60\33\91\94\62\93\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (GoTo tag')
+    , tok "\60\92\115\42\47\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    ]
+
+attr' :: TokenMatcher
+attr' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\91\94\92\115\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Lexers/Xslt.hs b/src/Text/Highlighter/Lexers/Xslt.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Lexers/Xslt.hs
@@ -0,0 +1,49 @@
+module Text.Highlighter.Lexers.Xslt (lexer) where
+
+import Text.Regex.PCRE.Light
+import Text.Highlighter.Types
+
+lexer :: Lexer
+lexer = Lexer
+    { lName = "\88\83\76\84"
+    , lAliases = ["\120\115\108\116"]
+    , lExtensions = ["\46\120\115\108", "\46\120\115\108\116"]
+    , lMimetypes = ["\116\101\120\116\47\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\109\108", "\105\109\97\103\101\47\115\118\103\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\114\115\115\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\97\116\111\109\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\115\108\43\120\109\108", "\97\112\112\108\105\99\97\116\105\111\110\47\120\115\108\116\43\120\109\108"]
+    , lStart = root'
+    , lFlags = [multiline, dotall]
+    }
+
+comment' :: TokenMatcher
+comment' =
+    [ tok "\91\94\45\93\43" (Arbitrary "\67\111\109\109\101\110\116")
+    , tokNext "\45\45\62" (Arbitrary "\67\111\109\109\101\110\116") Pop
+    , tok "\45" (Arbitrary "\67\111\109\109\101\110\116")
+    ]
+
+tag' :: TokenMatcher
+tag' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\91\97\45\122\65\45\90\48\45\57\95\46\58\45\93\43\92\115\42\61" (Arbitrary "\78\97\109\101" :. Arbitrary "\65\116\116\114\105\98\117\116\101") (GoTo attr')
+    , tokNext "\47\63\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") Pop
+    ]
+
+root' :: TokenMatcher
+root' =
+    [ tok "\91\94\60\38\93\43" (Arbitrary "\84\101\120\116")
+    , tok "\38\92\83\42\63\59" (Arbitrary "\78\97\109\101" :. Arbitrary "\69\110\116\105\116\121")
+    , tok "\92\60\92\33\92\91\67\68\65\84\65\92\91\46\42\63\92\93\92\93\92\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\33\45\45" (Arbitrary "\67\111\109\109\101\110\116") (GoTo comment')
+    , tok "\60\92\63\46\42\63\92\63\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tok "\60\33\91\94\62\93\42\62" (Arbitrary "\67\111\109\109\101\110\116" :. Arbitrary "\80\114\101\112\114\111\99")
+    , tokNext "\60\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103") (GoTo tag')
+    , tok "\60\92\115\42\47\92\115\42\91\97\45\122\65\45\90\48\45\57\58\46\95\45\93\43\92\115\42\62" (Arbitrary "\78\97\109\101" :. Arbitrary "\84\97\103")
+    ]
+
+attr' :: TokenMatcher
+attr' =
+    [ tok "\92\115\43" (Arbitrary "\84\101\120\116")
+    , tokNext "\34\46\42\63\34" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\39\46\42\63\39" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    , tokNext "\91\94\92\115\62\93\43" (Arbitrary "\76\105\116\101\114\97\108" :. Arbitrary "\83\116\114\105\110\103") Pop
+    ]
+
diff --git a/src/Text/Highlighter/Types.hs b/src/Text/Highlighter/Types.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Highlighter/Types.hs
@@ -0,0 +1,209 @@
+{-# LANGUAGE BangPatterns #-}
+module Text.Highlighter.Types where
+
+import Data.Char (toLower)
+import Text.Regex.PCRE.Light
+import qualified Data.ByteString as BS
+
+data Match
+    = Match
+        { mRegexp :: String
+        , mType :: TokenType
+        , mNextState :: NextState
+        }
+    | AnyOf TokenMatcher
+    deriving Show
+
+type TokenMatcher = [Match]
+
+data Lexer =
+    Lexer
+        { lName :: String
+        , lAliases :: [String]
+        , lExtensions :: [String]
+        , lMimetypes :: [String]
+        , lStart :: TokenMatcher
+        , lFlags :: [PCREOption]
+        }
+
+data NextState
+    = Continue
+    | GoTo TokenMatcher
+    | Pop
+    | PopNum Int
+    | Push
+    | DoAll [NextState]
+    | Combined [TokenMatcher]
+    deriving Show
+
+data Token =
+    Token
+        { tType :: TokenType
+        , tText :: BS.ByteString
+        }
+    deriving Show
+
+data TokenType
+    = Text
+    | Whitespace
+    | Error
+    | Other
+    | Keyword
+    | Name
+    | Literal
+    | String
+    | Number
+    | Operator
+    | Punctuation
+    | Comment
+    | Generic
+    | TokenType :. TokenType
+
+    -- Subtypes
+    -- Keyword
+    | Declaration
+    | Reserved
+    | Type
+
+    -- Keyword, Name.Builtin
+    | Pseudo
+
+    -- Keyword, Name
+    | Namespace
+
+    -- Nane, Name.Variable
+    | Class
+
+    -- Keyword, Name
+    | Constant
+
+    -- Name
+    | Attribute
+    | Builtin
+    | Decorator
+    | Entity
+    | Exception
+    | Function
+    | Identifier
+    | Label
+    | Property
+    | Tag
+    | Variable
+    | Global
+    | Instance
+    | Anonymous
+
+    -- Literal
+    | Date
+    | Scalar
+    | Plain
+
+    -- String
+    | Atom
+    | Backtick
+    | Char
+    | Doc
+    | Double
+    | Escape
+    | Heredoc
+    | Interp
+    | Interpol
+    | Regex
+    | Regexp
+    | Symbol
+
+    -- String, Comment
+    | Single
+
+    -- Number
+    | Bin
+    | Binary
+    | Decimal
+    | Float
+    | Hex
+    | Hexadecimal
+    | Int
+    | Integer
+    | Long
+    | Oct
+    | Octal
+
+    -- Operator
+    | Word
+
+    -- Comment
+    | Multiline
+    | Preproc
+    | Special
+
+    -- Generic
+    | Deleted
+    | Emph
+    | Heading
+    | Inserted
+    | Output
+    | Prompt
+    | Strong
+    | Subheading
+    | Traceback
+    | ByGroups [TokenType]
+
+    | Indicator
+
+    -- Some arbitrary token name
+    | Arbitrary String
+
+    -- Use another lexer to yield some tokens
+    | Using Lexer
+    deriving Show
+
+instance Show Lexer where
+    show l = "<Lexer " ++ lName l ++ ">"
+    
+tok :: String -> TokenType -> Match
+tok s tt = Match s tt Continue
+
+tokNext :: String -> TokenType -> NextState -> Match
+tokNext s = Match s
+
+anyOf :: TokenMatcher -> Match
+anyOf ms = AnyOf ms
+
+shortName :: TokenType -> String
+shortName ((_ :. a) :. b) =
+    shortName a ++ shortName b
+shortName (Name :. Constant) = "no"
+shortName (Name :. Entity) = "ni"
+shortName (Name :. Property) = "py"
+shortName (Arbitrary "Name" :. Arbitrary "Constant") = "no"
+shortName (Arbitrary "Name" :. Arbitrary "Entity") = "ni"
+shortName (Arbitrary "Name" :. Arbitrary "Property") = "py"
+shortName (Literal :. b) =
+    shortName b
+shortName (Arbitrary "Literal" :. b) =
+    shortName b
+shortName (a :. Other) =
+    shortName a ++ "x"
+shortName (a :. Error) =
+    shortName a ++ "r"
+shortName (a :. Single) =
+    shortName a ++ "1"
+shortName (a :. Double) =
+    shortName a ++ "2"
+shortName (a :. Arbitrary "Other") =
+    shortName a ++ "x"
+shortName (a :. Arbitrary "Error") =
+    shortName a ++ "r"
+shortName (a :. Arbitrary "Single") =
+    shortName a ++ "1"
+shortName (a :. Arbitrary "Double") =
+    shortName a ++ "2"
+shortName (a :. b) =
+    shortName a ++ shortName b
+shortName Error = "err"
+shortName (Arbitrary "Error") = "err"
+shortName Number = "m"
+shortName (Arbitrary "Number") = "m"
+shortName (Arbitrary t) =
+    [toLower (head t)]
+shortName x = [toLower (head (show x))]
