diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,5 +1,21 @@
-# Revision history for skylighting-core
+# Revision history for skylighting and skylighting-core
 
+## 0.8 -- 2019-05-27
+
+ *  Wrap html source lines with `<span>`, not `<a>` (David
+    Baynard).  Fixes jgm/pandoc#4386. Also fixes #33 (and
+    therefore fixes jgm/pandoc#4278).
+  * Prevent line-wrap overlap in html by increasing padding
+    (David Baynard).
+  * Remove superfluous 'pointer-events: all' (David Baynard).
+  * Simplify HTML generation code (David Baynard).
+  * Remove sourceLine class from spans (David Baynard).
+  * Display line numbers using css counters (David Baynard).
+  * Add Elm syntax definition (#66, #68, Bonghyun Kim).
+  * Put changelog in base directory, use symlinks to point to it.
+    We have the same changelog for skylighting and skylighting-core,
+    for simplicity.  (Version numbers are kept in sync.)
+
 ## 0.7.7 -- 2019-02-27
 
   * Add parseSyntaxDefinitionFromString [API change].
@@ -82,6 +98,314 @@
 
 ## 0.7 -- 2018-03-03
 
-  * Initial release of this library, which includes the core
-    functionality of skylighting, relicensed as BSD3
-    (Jonathan Daugherty).
+  * Split skylighting into skylighting-core (BSD3) and skylighting (GPL)
+    (#37, Jonathan Daugherty).  skylighting-core (BSD3 licensed) includes
+    the core library functionality and the source of the XML syntax, but
+    not the compiled Syntax modules, and skylighting (GPL2 licensed)
+    includes Syntax modules compiled from the XML syntax files.
+
+  * We discontinue support for GHC before 7.10 (because we need to support the
+    reexport-modules Cabal directive.)
+
+  * Print message about loaded syntax defs to stderr (#36).
+
+  * New module Skylighting.Loader, exporting
+    `loadSyntaxFromFile` and `loadSyntaxesFromDir` (Jonathan Daugherty).
+
+  * Adjust tests to load xml definitions dynamically.
+
+## 0.6 -- 2018-01-18
+
+  * Add ANSI color output (Alexander Ronald Altman, #22).
+
+    + New package dependencies: `ansi-terminal` and `colour`.
+    + New module: `Skylighting.Format.ANSI`, exporting `formatANSI`,
+      (also reexported from the module `Skylighting`).
+    + In `Skylighting.Types`, new types `ANSIColorLevel` and
+      `Xterm256ColorCode`, and a new field `ansiColorLevel` in
+      `FormatOptions`.
+    + Main `skylighting` executable now supports ANSI output (use
+      `ansi` as argument to `--format`), which is now the default output
+      format. A new flag `--color-level` has been added to select
+      the number of colors (with options `16`, `256`, `true`, and
+      the default `auto`).
+
+  * Reword error for missing contexts in IncludeRules.
+
+  * Use ordNub instead of nub for missingIncludes.
+
+## 0.5.1 -- 2018-01-07
+
+  * Fixed tokenizer exceptions (#31).  Previously `throwError`
+    did not actually generate `Left` results in `tokenize`,
+    because of the way the MonadPlus instance worked. Rewrote
+    the TokenizerM monad from scratch so that exceptions would
+    not be skipped.
+
+  * Improved error message about undefined contexts.
+
+  * Makefile: use cabal for bootstrap target.
+
+  * README: remove stack bootstrap instructions.
+    You can no longer bootstrap with stack, because it
+    insists on building ALL the executables the first time,
+    and of course that can't be done with this library.
+
+  * Use quickcheck for fuzz test.
+
+## 0.5.0.1 -- 2017-12-18
+
+  * Small improvements to fuzz tests in test suite.  We now
+    ensure that we print the random text on test failure.  Also,
+    we now run the test with many smaller samples rather than
+    one big one.
+
+  * Add aeson lower bound (because of toEncoding) (#28).
+
+## 0.5 -- 2017-12-10
+
+  * Fix line spacing and overflowing content in generated HTML
+    (David Baynard, #25, see jgm/pandoc#4128).
+
+    + Fix empty line height, explicitly
+    + Ensure long lines scroll on screen
+    + Only apply colour to the outer div
+    + Don't reset line number colour
+    + Fix borders on empty code lines
+    + Collapse divs correctly.
+
+  * Changes to Style types and JSON instances.  Previously we could not
+    successfully round-trip through JSON.
+
+    + `tokenStyles` is now a map rather than an association list.
+    + We now use `line-number-color` instead of `line-numbers` at
+      the top level in the JSON instances, falling back to
+      `line-numbers` in `editor-colors`, for KDE theme compatibility.
+    + We use `line-number-background-color` at the top level, falling
+      back to the text background color.
+    + We use `text-color` at the top level, falling back to the `text-color`
+      of the `Normal` token style if it exists, for KDE compatibility.
+    + We use `background-color` at the top level, falling back to
+      the `background-color` in `editor-colors`, for KDE compatibility.
+    + A round-trip JSON test has been added.
+
+## 0.4.4.1 -- 2017-11-27
+
+  * HTML formatting: fix color, bgcolor when numbering enabled.
+    Previously, the code got the color and background color
+    the numbers were supposed to get.  See jgm/pandoc #4103.
+  * Updated syntax descriptions for bash, clojure, commonlisp, diff,
+    dockerfile, doxygen, doxygenlua, fsharp, hamlet, haskell, haxe,
+    java, javascript, julia, latex, literate-curry, literate-haskell,
+    makefile, mediawiki, monobasic, ocaml, prolog, r, relaxng, scala,
+    sci, sql-mysql, sql-postgresql, sql, xslt.
+  * test program:  use --accept instead of --regen.
+
+## 0.4.4 -- 2017-11-21
+
+  * HTML formatter: always use an a element (rather than a div)
+    for source lines.  The divs were invalid, because code
+    elements must contain phrasing content.  Previously we used
+    a elements when line anchors were called for, but there is
+    no clear reason not to use them always.
+  * skylighting binary: add doctype to generated HTML.
+
+## 0.4.3.2 -- 2017-11-04
+
+  * Fixed regression in `data-line-number` attributes in HTML
+    output.  We should not include the `lineIdPrefix` in
+    front of this.
+
+## 0.4.3.1 -- 2017-11-03
+
+  * Fixed typo in css (Artymort).
+  * Fixed travis build times.
+
+## 0.4.3 --- 2017-11-02
+
+  * `FormatOptions`: added `lineIdPrefix` (jgm/pandoc#4031).
+    This is needed because a web page may contain several
+    code samples, and we need to make sure that the ids on
+    lines are unique.
+  * HTML formatter: use `lineIdPrefix` in ids for lines.
+  * HTML formatter: Don't put href attributes on divs.
+
+## 0.4.2 --- 2017-10-26
+
+  * HTML output: remove outer div.  This prevented margin
+    collapsing between the pre and surrounding block elements,
+    and often gave us excess white space around code blocks.
+    See jgm/pandoc#3996.
+
+## 0.4.1 --- 2017-09-28
+
+  * Updated XML definitions from KDE repository.
+    Changed: actionscript, ada, agda, alert, alert_indent, asn1, awk, bash,
+    boo, c, changelog, clojure, cmake, coldfusion, commonlisp, cpp, cs, css,
+    curry, d, dockerfile, dot, doxygen, doxygenlua, eiffel, email, erlang,
+    fortran, fsharp, gcc, haskell, haxe, isocpp, java, javascript, jsp, julia,
+    lilypond, lua, m4, makefile, matlab, maxima, mips, modelines, modula-2,
+    monobasic, objectivec, objectivecpp, ocaml, octave, opencl, pascal, perl,
+    php, pike, postscript, prolog, purebasic, python, r, relaxng,
+    relaxngcompact, rest, rhtml, ruby, rust, scala, scheme, sci, sql-mysql,
+    sql-postgresql, sql, tcl, tcsh, verilog, vhdl, xml, xslt, xul, zsh.
+  * Added support for powershell, using definition from KDE repository.
+  * Stop terminating long builds on TravisCI (Kyle Ondy).
+
+## 0.4 --- 2017-09-15
+
+  * Removed ToJSON/FromJSON instances for KeywordAttr,
+    WordSet, Matcher, Context, ContextSwitch, Rule, Syntax
+    (added in 0.3.5).  Creating these increased the memory
+    requirements for compiling skylighting to a degree not
+    justified by the usefulness of these instances.
+
+## 0.3.5 --- 2017-09-14
+
+  * Added ToJSON/FromJSON instances for all basic types.
+  * Added some background colors to 'kate' style, matching default.theme,
+    and made FromJSON for Style sensitive to background-color.
+
+## 0.3.4.1 -- 2017-09-09
+
+  * HTML formatting: do not use `div` elements for source
+    lines in inline output.
+
+## 0.3.4 -- 2017-09-09
+
+  * HTML formatting changes (David Baynard).  Note that these
+    changes may require changes in hard-coded CSS that is
+    used with skylighting's HTML output.
+
+    + Wrap lines of source code in a `div` with `display` set to
+      `inline-block`.  The `div`s make per-line processing easier.
+      They cannot be set as `display: block` as that introduces extra
+      new lines when copying and pasting.
+    + Render line numbers in html using CSS pseudo elements rather than
+      a table.  The line numbers are always produced, as `data-line-number`
+      attributes, and css to display them as `::before` elements are
+      always produced. The option to switch on line numbering only
+      toggles a class; this means it is possible to toggle line numbering
+      without re-running skylighting.
+    + If the `linkAnchors` option is set, wrap with an `a` element rather
+      than a `div`, set so that clicking the line number (and only the
+      line number) will jump to that line.
+    + Code wraps by default when html is printed, with wrapped lines
+      indented.
+
+## 0.3.3.1 -- 2017-06-26
+
+  * Updated xml syntax definitions and clojure test.
+  * Improved 'make update-xml' target.
+  * Updated version bound for criterion.
+
+## 0.3.3 -- 2017-04-22
+
+  * Revert change from 0.3.2; now entities from a DTD are
+    resolved if the DTD element is included.  This is needed
+    for agda.xml and some others.  If you want to use a custom
+    xml definition without needing language.dtd, just remove
+    the reference to language.dtd in your xml file.
+  * Added `case` keyword for ats (Hanwen (Steinway) Wu).
+
+## 0.3.2 -- 2017-04-01
+
+  * Parse xml definitions without resolving entities from
+    language.dtd.  This allows xml definitions to be used even
+    when language.dtd isn't available.  Existing definitions
+    don't rely on the two or three entities definied in
+    language.dtd, so this is harmless.
+  * Small optimizations.
+
+## 0.3.1 -- 2017-02-28
+
+  * Use handwritten parser for Float instead of regex.  Fixes
+    jgm/highlighting-kate#57 (again).
+  * Added float parsing tests.
+  * Use parsec parsers, not regex, for CStringChar and CChar.
+  * Rewrote Int, Hex, Oct, CStringChar, CCHar parsers with parsec
+    instead of regex.  This speeds things up.
+  * Don't include leading + in Int, Hex, Oct parsers.  That gives
+    bad results for things like `i+1`.
+
+## 0.3 -- 2017-02-19
+
+  * Store literal binary-encoded representations of the Syntax
+    structure in Skylighting.Syntax.*.hs, instead of the
+    structure itself.  This works around a problem ghc has
+    compiling modules with large structures.  This indirect method
+    produces faster compile times and avoids massive memory usage by
+    ghc (especially in profiling builds).  For background see
+    http://stackoverflow.com/questions/16348340/.  Closes #7.
+  * Types: Internals of 'WordSet' are no longer exposed.
+
+## 0.2 -- 2017-02-19
+
+  * Restore Data, Typeable, Generic instances for basic types.
+    To do this, we remove reCompiled field from RE (API change).  Instead, we
+    have the tokenizer compile regexes the first time it encounters them,
+    memoizing the results.  Performance is not significantly worse.
+  * Skylighting.Syntax.*:  use string representation of the Syntax,
+    which is then 'read', rather than including the code for the data
+    structure directly (#7).  This indirect method produces faster compile
+    times and avoids massive memory usage by ghc (especially in profiling
+    builds).  For background see
+    http://stackoverflow.com/questions/16348340/compiling-very-large-constants-with-ghc
+  * Use -fprof-auto-exported for profiling builds.
+  * Added benchmark for xml syntax definition parsing.
+  * Patched perl.xml (improperly escaped regex) (#8).
+    This fixes a perl regex compilation error for regex patterns
+    with backslash as delimiter, e.g. m\a\.
+  * Add a flag to build with system pcre (Felix Yan).
+
+## 0.1.1.5  -- 2017-02-03
+
+  * Avoid depending on a PrintfArg instance for Text (#5).
+    This isn't provided in some older versions of the text library.
+    This change should allow the package to build on older platforms.
+
+## 0.1.1.4  -- 2017-01-31
+
+  * Properly escape characters in subDynamic.
+    This fixes a problem that caused failures with
+
+        echo -e "s\0b\0c" | skylighting -s perl
+
+  * More efficient rewrite of char escaping for regexes.
+
+## 0.1.1.3  -- 2017-01-29
+
+  * Increase test timeout to 6s.
+  * Avoid double {{}} in latex macros.
+  * Fixed problem compiling Format.LaTeX on older ghc versions (7.8.3)
+    that can't take a Text as PrintfArg.
+
+## 0.1.1.2  -- 2017-01-28
+
+  * Added much more extensive testing to ensure that tokenizers
+    don't hang or drop input.
+  * Fixed some issues with line-end and fallthrough context
+    handling.
+  * Fixed a bug in WordDetect handling which caused it to drop
+    input (#2).
+
+## 0.1.1.1  -- 2017-01-21
+
+  * Optimized.  Speed is now comparable to highlighting-kate
+    and often better.
+  * Added benchmarks.
+
+## 0.1.1    -- 2017-01-19
+
+  * Added breezeDark style, from breeze-dark.theme.
+  * Fixed performance bug in regex application (#1).  This gives a
+    significant speedup, especially for inputs with long lines.
+
+## 0.1.0.1  -- 2016-12-23
+
+  * Fixed bug in LaTeX renderer (backslash in wrong position).
+
+## 0.1.0.0  -- 2016-12-23
+
+  * Initial release
+
diff --git a/skylighting-core.cabal b/skylighting-core.cabal
--- a/skylighting-core.cabal
+++ b/skylighting-core.cabal
@@ -1,5 +1,5 @@
 name:                skylighting-core
-version:             0.7.7
+version:             0.8
 synopsis:            syntax highlighting library
 description:         Skylighting is a syntax highlighting library.
                      It derives its tokenizers from XML syntax
diff --git a/src/Skylighting/Format/HTML.hs b/src/Skylighting/Format/HTML.hs
--- a/src/Skylighting/Format/HTML.hs
+++ b/src/Skylighting/Format/HTML.hs
@@ -7,7 +7,6 @@
 import Data.List (intersperse, sort)
 import qualified Data.Map as Map
 import Data.Monoid ((<>))
-import Data.String (fromString)
 import qualified Data.Text as Text
 import Skylighting.Types
 import Text.Blaze.Html
@@ -81,19 +80,13 @@
 -- subsequent per-line processing (e.g. adding line numnbers) possible.
 sourceLineToHtml :: FormatOptions -> LineNo -> SourceLine -> Html
 sourceLineToHtml opts lno cont =
-  (if lineAnchors opts
-      then H.a   ! A.class_ sourceLine
-                 ! A.id lineNum
-                 ! A.href lineRef
-                 ! dataAttrib
-      else H.a   ! A.class_ sourceLine
-                 ! A.id lineNum
-                 ! dataAttrib) $ mapM_ (tokenToHtml opts) cont
-  where  sourceLine = toValue "sourceLine"
-         lineNum = toValue prefixedLineNo
+  H.span ! A.id lineNum
+         $ do
+           H.a ! A.href lineRef $ mempty
+           mapM_ (tokenToHtml opts) cont
+  where  lineNum = toValue prefixedLineNo
          lineRef = toValue ('#':prefixedLineNo)
          prefixedLineNo = Text.unpack (lineIdPrefix opts) <> show (lineNo lno)
-         dataAttrib = A.title (toValue (show (lineNo lno)))
 
 tokenToHtml :: FormatOptions -> Token -> Html
 tokenToHtml _ (NormalTok, txt)  = toHtml txt
@@ -141,22 +134,21 @@
 styleToCss f = unlines $
   divspec ++ numberspec ++ colorspec ++ linkspec ++
     sort (map toCss (Map.toList (tokenStyles f)))
-   where colorspec = [
-           "div.sourceCode\n  { "
-           ++ case (defaultColor f, backgroundColor f) of
-                (Nothing, Nothing) -> ""
-                (Just c, Nothing)  -> "color: " ++ fromColor c ++ ";"
-                (Nothing, Just c)  -> "background-color: " ++ fromColor c ++ ";"
-                (Just c1, Just c2) -> "color: " ++ fromColor c1
-                     ++ "; background-color: " ++ fromColor c2 ++ ";"
-           ++ " }"]
+   where colorspec = pure . unwords $ [
+            "div.sourceCode\n  {"
+          , maybe "" (\c -> "color: "            ++ fromColor c ++ ";") (defaultColor f)
+          , maybe "" (\c -> "background-color: " ++ fromColor c ++ ";") (backgroundColor f)
+          , "}"
+          ]
          numberspec = [
-            "pre.numberSource a.sourceLine"
-          , "  { position: relative; left: -4em; }"
-          , "pre.numberSource a.sourceLine::before"
-          , "  { content: attr(title);"
+            "pre.numberSource code"
+          , "  { counter-reset: source-line 0; }"
+          , "pre.numberSource code > span"
+          , "  { position: relative; left: -4em; counter-increment: source-line; }"
+          , "pre.numberSource code > span > a:first-child::before"
+          , "  { content: counter(source-line);"
           , "    position: relative; left: -1em; text-align: right; vertical-align: baseline;"
-          , "    border: none; pointer-events: all; display: inline-block;"
+          , "    border: none; display: inline-block;"
           , "    -webkit-touch-callout: none; -webkit-user-select: none;"
           , "    -khtml-user-select: none; -moz-user-select: none;"
           , "    -ms-user-select: none; user-select: none;"
@@ -171,9 +163,9 @@
               " padding-left: 4px; }"
           ]
          divspec = [
-            "a.sourceLine { display: inline-block; line-height: 1.25; }"
-          , "a.sourceLine { pointer-events: none; color: inherit; text-decoration: inherit; }"
-          , "a.sourceLine:empty { height: 1.2em; }" -- correct empty line height
+            "code.sourceCode > span { display: inline-block; line-height: 1.25; }"
+          , "code.sourceCode > span { color: inherit; text-decoration: inherit; }"
+          , "code.sourceCode > span:empty { height: 1.2em; }" -- correct empty line height
           , ".sourceCode { overflow: visible; }" -- needed for line numbers
           , "code.sourceCode { white-space: pre; position: relative; }" -- position relative needed for relative contents
           , "div.sourceCode { margin: 1em 0; }" -- Collapse neighbours correctly
@@ -183,11 +175,11 @@
           , "}"
           , "@media print {"
           , "code.sourceCode { white-space: pre-wrap; }"
-          , "a.sourceLine { text-indent: -1em; padding-left: 1em; }"
+          , "code.sourceCode > span { text-indent: -5em; padding-left: 5em; }"
           , "}"
           ]
          linkspec = [ "@media screen {"
-          , "a.sourceLine::before { text-decoration: underline; }"
+          , "code.sourceCode > span > a:first-child::before { text-decoration: underline; }"
           , "}"
           ]
 
diff --git a/xml/elm.xml b/xml/elm.xml
new file mode 100644
--- /dev/null
+++ b/xml/elm.xml
@@ -0,0 +1,143 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE language SYSTEM "language.dtd">
+<language name="Elm" version="1" kateversion="5.0" section="Sources" extensions="*.elm" author="Bonghyun Kim (bonghyun.d.kim@gmail.com)" license="MIT" style="elm">
+  <highlighting>
+    <list name="declarations">
+      <item>type</item>
+      <item>alias</item>
+      <item>port</item>
+    </list>
+    <list name="controlFlows">
+      <item>case</item>
+      <item>of</item>
+      <item>if</item>
+      <item>else</item>
+      <item>then</item>
+    </list>
+    <list name="letExpressions">
+      <item>let</item>
+      <item>in</item>
+    </list>
+    <list name="imports">
+      <item>module</item>
+      <item>exposing</item>
+      <item>import</item>
+      <item>as</item>
+    </list>
+    <list name="infixes">
+      <item>infix</item>
+      <item>left</item>
+      <item>right</item>
+      <item>non</item>
+    </list>
+    <list name="effects">
+      <item>effect</item>
+      <item>where</item>
+      <item>command</item>
+      <item>subscription</item>
+    </list>
+    <contexts>
+      <context attribute="Normal" lineEndContext="#stay" name="code">
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" />
+        <Detect2Chars attribute="Comment" context="comment" char="-" char1="-" />
+        <WordDetect attribute="Comment" context="documentation" String="{-|" />
+
+        <keyword attribute="Keyword"          context="#stay" String="declarations" />
+        <keyword attribute="Keyword"          context="#stay" String="letExpressions" />
+        <keyword attribute="Keyword"          context="#stay" String="effects" />
+        <keyword attribute="Keyword"          context="#stay" String="imports" />
+        <keyword attribute="Keyword"          context="#stay" String="infixes" />
+        <keyword attribute="ControlFlowKeyword"          context="#stay" String="controlFlows" />
+
+        <WordDetect attribute="Import" context="module" String="module" />
+        <WordDetect attribute="Port" context="port" String="port" />
+        <WordDetect attribute="Import" context="import" String="import" />
+
+        <RegExpr attribute="Name"         context="#stay" String="(\b[a-z]\w*|\b_\b)" />
+        <RegExpr attribute="Operator"         context="#stay" String="(-&gt;|::|\/\/|\.\.|&amp;&amp;|\|\||\+\+|\|&gt;|&lt;\||&gt;&gt;|&lt;&lt;|==|\/=|&lt;=|&gt;=)" />
+        <RegExpr attribute="Operator"         context="#stay" String="[+-\/*%=&gt;&lt;^\|!]" />
+        <RegExpr attribute="Operator"         context="#stay" String="[@\#$&amp;~?]" />
+
+        <RegExpr attribute="Type"             context="#stay" String="\b[A-Z][\w]*" />
+
+        <Int        attribute="Decimal" context="#stay" />
+        <RegExpr    attribute="Hex"     context="#stay" String="0x[\da-f]+" insensitive="true" />
+        <RegExpr    attribute="Float"   context="#stay" String="\d+\.\d+(e[+-]?\d+)?" insensitive="true" />
+
+        <RegExpr    attribute="Char"    context="#stay" String="'(.|\\'|\\n|\\r|\\t|\\&quot;|\\\\|\\u\{(10|0?[0-9])[0-9a-fA-F]{4}\})'" />
+        <DetectChar attribute="String"  context="string" char="&quot;" />
+        <RegExpr attribute="String"     context="multilineString" String="&quot;&quot;&quot;"/>
+      </context>
+      <context attribute="Comment" lineEndContext="#pop" name="comment">
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="comments">
+        <Detect2Chars attribute="Comment" context="comments" char="{" char1="-" />
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      </context>
+      <context attribute="String" lineEndContext="#stay" name="string">
+        <RegExpr attribute="String" context="#stay" String="\\." />
+        <DetectChar attribute="String" context="#pop" char="&quot;" />
+      </context>
+      <context attribute="String" lineEndContext="#stay" name="multilineString">
+        <RegExpr attribute="String" context="#stay" String="\s*" />
+        <RegExpr attribute="String" context="#stay" String="\.*" />
+        <StringDetect attribute="String" context="#pop" String="&quot;&quot;&quot;" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="module">
+        <DetectChar attribute="Normal" context="moduleParentheses" char="(" />
+        <keyword attribute="Keyword"          context="#stay" String="imports" />
+        <RegExpr attribute="Name"         context="#stay" String="\b[a-z][\w]*" />
+        <RegExpr attribute="Type"             context="#stay" String="\b[A-Z][\w]*" />
+        <DetectChar attribute="Normal" context="#pop" char=")" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="moduleParentheses">
+        <DetectChar attribute="Normal" context="moduleParentheses" char="(" />
+        <RegExpr attribute="Name"         context="#stay" String="\b[a-z][\w]*" />
+        <RegExpr attribute="Type"             context="#stay" String="\b[A-Z][\w]*" />
+        <DetectChar attribute="Normal" context="#pop" char=")" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="port">
+        <WordDetect attribute="Import" context="module" String="imports" />
+      </context>
+      <context attribute="Normal" lineEndContext="#stay" name="import">
+        <DetectChar attribute="Normal" context="moduleParentheses" char="(" />
+        <keyword attribute="Keyword"          context="#stay" String="imports" />
+        <RegExpr attribute="Name"         context="#stay" String="\b[a-z][\w]*" />
+        <RegExpr attribute="Type"             context="#stay" String="\b[A-Z][\w]*" />
+        <DetectChar attribute="Normal" context="#pop" char=")" />
+      </context>
+      <context attribute="Comment" lineEndContext="#stay" name="documentation">
+        <WordDetect attribute="Comment" context="#stay" String="@docs" />
+        <Detect2Chars attribute="Comment" context="#pop" char="-" char1="}" />
+      </context>
+    </contexts>
+
+    <itemDatas>
+      <itemData name="Normal"           defStyleNum="dsNormal"   spellChecking="false" />
+      <itemData name="Comment"          defStyleNum="dsComment" />
+
+      <itemData name="Keyword"          defStyleNum="dsKeyword"  spellChecking="false" />
+      <itemData name="ControlFlowKeyword" defStyleNum="dsControlFlow"  spellChecking="false" />
+
+      <itemData name="Name"         defStyleNum="dsFunction"   spellChecking="false" />
+      <itemData name="Port"         defStyleNum="dsNormal"   spellChecking="false" />
+      <itemData name="Import"         defStyleNum="dsImport"   spellChecking="false" />
+      <itemData name="Operator"         defStyleNum="dsOperator" spellChecking="false" />
+      <itemData name="Type"             defStyleNum="dsDataType" spellChecking="false" />
+
+      <itemData name="Decimal"          defStyleNum="dsDecVal"   spellChecking="false" />
+      <itemData name="Hex"          defStyleNum="dsBaseN"   spellChecking="false" />
+      <itemData name="Float"            defStyleNum="dsFloat"    spellChecking="false" />
+      <itemData name="Char"             defStyleNum="dsChar"     spellChecking="false" />
+      <itemData name="String"           defStyleNum="dsString" />
+    </itemDatas>
+  </highlighting>
+  <general>
+    <folding indentationsensitive="1"/>
+    <comments>
+      <comment name="singleLine" start="--" />
+      <comment name="multiLine" start="{-" end="-}" />
+    </comments>
+    <keywords casesensitive="1" />
+</general>
+</language>
