
<font color="#0000ff">&quot; Vim syntax support file</font>
<font color="#0000ff">&quot;</font> <font color="#a020f0">Maintainer:</font><font color="#0000ff"> Bram Moolenaar &lt;Bram@vim.org&gt;</font>
<font color="#0000ff">&quot;</font> <font color="#a020f0">Last Change:</font><font color="#0000ff"> 2001 Sep 02</font>
<font color="#0000ff">&quot;^I       (modified by David Nev{c}as (Yeti) &lt;yeti@physics.muni.cz&gt;)</font>

<font color="#0000ff">&quot; Transform a file into HTML, using the current syntax highlighting.</font>

<font color="#0000ff">&quot; Number lines when explicitely requested or when `number' is set</font>
<font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_number_lines&quot;</font>)
  <font color="#804040"><b>let</b></font> s:numblines <font color="#804040"><b>=</b></font> html_number_lines
<font color="#804040"><b>else</b></font>
  <font color="#804040"><b>let</b></font> s:numblines <font color="#804040"><b>=</b></font> &amp;<font color="#804040"><b>number</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; When not in gui we can only guess the colors.</font>
<font color="#804040"><b>if</b></font> <font color="#008080">has</font>(<font color="#ff00ff">&quot;gui_running&quot;</font>)
  <font color="#804040"><b>let</b></font> s:whatterm <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;gui&quot;</font>
<font color="#804040"><b>else</b></font>
  <font color="#804040"><b>let</b></font> s:whatterm <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;cterm&quot;</font>
  <font color="#804040"><b>if</b></font> &amp;t_Co <font color="#804040"><b>==</b></font> <font color="#ff00ff">8</font>
    <font color="#804040"><b>let</b></font> s:cterm_color0  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#808080&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color1  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ff6060&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color2  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#00ff00&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color3  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ffff00&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color4  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#8080ff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color5  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ff40ff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color6  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#00ffff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color7  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ffffff&quot;</font>
  <font color="#804040"><b>else</b></font>
    <font color="#804040"><b>let</b></font> s:cterm_color0  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#000000&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color1  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#c00000&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color2  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#008000&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color3  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#804000&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color4  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#0000c0&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color5  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#c000c0&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color6  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#008080&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color7  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#c0c0c0&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color8  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#808080&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color9  <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ff6060&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color10 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#00ff00&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color11 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ffff00&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color12 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#8080ff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color13 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ff40ff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color14 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#00ffff&quot;</font>
    <font color="#804040"><b>let</b></font> s:cterm_color15 <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;#ffffff&quot;</font>
  <font color="#804040"><b>endif</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Return good color specification: in GUI no transformation is done, in</font>
<font color="#0000ff">&quot; terminal return RGB values of known colors and empty string on unknown</font>
<font color="#804040"><b>if</b></font> s:whatterm <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;gui&quot;</font>
  <font color="#804040"><b>function</b></font>! <font color="#6a5acd">s:</font>HtmlColor(<font color="#804040"><b>color</b></font>)
    <font color="#804040"><b>return</b></font> a:color
  <font color="#804040"><b>endfun</b></font>
<font color="#804040"><b>else</b></font>
  <font color="#804040"><b>function</b></font>! <font color="#6a5acd">s:</font>HtmlColor(<font color="#804040"><b>color</b></font>)
    <font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;s:cterm_color&quot;</font> <font color="#804040"><b>.</b></font> a:color)
      <font color="#804040"><b>execute</b></font> <font color="#ff00ff">&quot;return s:cterm_color&quot;</font> <font color="#804040"><b>.</b></font> a:color
    <font color="#804040"><b>else</b></font>
      <font color="#804040"><b>return</b></font> <font color="#ff00ff">&quot;&quot;</font>
    <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>endfun</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#804040"><b>if</b></font> !<font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
<font color="#0000ff">  &quot; Return opening HTML tag for given highlight id</font>
  <font color="#804040"><b>function</b></font>! <font color="#6a5acd">s:</font>HtmlOpening(id)
    <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;&quot;</font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;inverse&quot;</font>)
<font color="#0000ff">      &quot; For inverse, we always must set both colors (and exchange them)</font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;span style=&quot;background-color: '</font> <font color="#804040"><b>.</b></font> ( <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> ? <font color="#804040"><b>x</b></font> <font color="#804040"><b>: s</b></font>:fgc ) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot;&gt;'</font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;font color=&quot;'</font> <font color="#804040"><b>.</b></font> ( <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> ? <font color="#804040"><b>x</b></font> <font color="#804040"><b>: s</b></font>:bgc ) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot;&gt;'</font>
    <font color="#804040"><b>else</b></font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;span style=&quot;background-color: '</font> <font color="#804040"><b>.</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot;&gt;'</font> | <font color="#804040"><b>endif</b></font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;font color=&quot;'</font> <font color="#804040"><b>.</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot;&gt;'</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bold&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;b&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;italic&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;i&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;underline&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;u&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>return</b></font> a
  <font color="#804040"><b>endfun</b></font>

<font color="#0000ff">  &quot; Return closing HTML tag for given highlight id</font>
  <font color="#804040"><b>function</b></font> <font color="#6a5acd">s:</font>HtmlClosing(id)
    <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;&quot;</font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;underline&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;/u&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;italic&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;/i&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bold&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;/b&gt;&quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;inverse&quot;</font>)
      <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;/font&gt;&lt;/span&gt;'</font>
    <font color="#804040"><b>else</b></font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;/font&gt;'</font> | <font color="#804040"><b>endif</b></font>
      <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
      <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;/span&gt;'</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>return</b></font> a
  <font color="#804040"><b>endfun</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Return CSS style describing given highlight id (can be empty)</font>
<font color="#804040"><b>function</b></font>! <font color="#6a5acd">s:</font>CSS1(id)
  <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;inverse&quot;</font>)
<font color="#0000ff">    &quot; For inverse, we always must set both colors (and exchange them)</font>
    <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
    <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;color: &quot;</font> <font color="#804040"><b>.</b></font> ( <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> ? <font color="#804040"><b>x</b></font> <font color="#804040"><b>: s</b></font>:bgc ) <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; &quot;</font>
    <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
    <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;background-color: &quot;</font> <font color="#804040"><b>.</b></font> ( <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> ? <font color="#804040"><b>x</b></font> <font color="#804040"><b>: s</b></font>:fgc ) <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; &quot;</font>
  <font color="#804040"><b>else</b></font>
    <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
    <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;color: &quot;</font> <font color="#804040"><b>.</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; &quot;</font> | <font color="#804040"><b>endif</b></font>
    <font color="#804040"><b>let</b></font> x <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
    <font color="#804040"><b>if</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font> | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;background-color: &quot;</font> <font color="#804040"><b>.</b></font> <font color="#804040"><b>x</b></font> <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; &quot;</font> | <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;bold&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;font-weight: bold; &quot;</font> | <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;italic&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;font-style: italic; &quot;</font> | <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>if</b></font> <font color="#008080">synIDattr</font>(a:id, <font color="#ff00ff">&quot;underline&quot;</font>) | <font color="#804040"><b>let</b></font> a <font color="#804040"><b>=</b></font> a <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;text-decoration: underline; &quot;</font> | <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>return</b></font> a
<font color="#804040"><b>endfun</b></font>

<font color="#0000ff">&quot; Set some options to make it work faster.</font>
<font color="#0000ff">&quot; Expand tabs in original buffer to get 'tabstop' correctly used.</font>
<font color="#0000ff">&quot; Don't report changes for :substitute, there will be many of them.</font>
<font color="#804040"><b>let</b></font> s:old_title <font color="#804040"><b>=</b></font> &amp;title
<font color="#804040"><b>let</b></font> s:old_icon <font color="#804040"><b>=</b></font> &amp;icon
<font color="#804040"><b>let</b></font> s:old_et <font color="#804040"><b>=</b></font> &amp;l:et
<font color="#804040"><b>let</b></font> s:old_report <font color="#804040"><b>=</b></font> &amp;report
<font color="#804040"><b>set</b></font> <font color="#a020f0">notitle</font> <font color="#a020f0">noicon</font>
<font color="#804040"><b>setlocal</b></font> <font color="#a020f0">et</font>
<font color="#804040"><b>set</b></font> <font color="#a020f0">report</font>=1000000

<font color="#0000ff">&quot; Split window to create a buffer with the HTML file.</font>
<font color="#804040"><b>if</b></font> <font color="#008080">expand</font>(<font color="#ff00ff">&quot;%&quot;</font>) <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>new</b></font> Untitled<font color="#804040"><b>.</b></font>html
<font color="#804040"><b>else</b></font>
  <font color="#804040"><b>new</b></font> %<font color="#804040"><b>.</b></font>html
<font color="#804040"><b>endif</b></font>
<font color="#804040"><b>set</b></font> <font color="#a020f0">modifiable</font>
<font color="#ff00ff">%</font><font color="#804040"><b>d</b></font>
<font color="#804040"><b>let</b></font> s:old_paste <font color="#804040"><b>=</b></font> &amp;paste
<font color="#804040"><b>set</b></font> <font color="#a020f0">paste</font>

<font color="#0000ff">&quot; The DTD</font>
<font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
  <font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01//EN&quot;n    &quot;http://www.w3.org/TR/html4/strict.dtd&quot;&gt;ne&quot;</font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; HTML header, with the title and generator ;-). Left free space for the CSS,</font>
<font color="#0000ff">&quot; to be filled at the end.</font>
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&lt;html&gt;n&lt;head&gt;n&lt;title&gt;e&quot;</font>
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&quot;</font> <font color="#804040"><b>.</b></font> expand(<font color="#ff00ff">&quot;%:p:~&quot;</font>) <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&lt;/title&gt;ne&quot;</font>
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&lt;meta name=&quot;Generator&quot; content=&quot;Vim/&quot;</font> <font color="#804040"><b>.</b></font> version/100 <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;.&quot;</font> <font color="#804040"><b>.</b></font> version %100 <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;&quot;&gt;ne&quot;</font>
<font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
  <font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&lt;style type=&quot;text/css&quot;&gt;n&lt;!--n--&gt;n&lt;/style&gt;ne&quot;</font>
<font color="#804040"><b>endif</b></font>
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal a&lt;/head&gt;n&lt;body&gt;n&lt;pre&gt;ne&quot;</font>

<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal &lt;C-W&gt;p&quot;</font>

<font color="#0000ff">&quot; List of all id's</font>
<font color="#804040"><b>let</b></font> s:idlist <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;,&quot;</font>

<font color="#0000ff">&quot; Loop over all lines in the original text</font>
<font color="#804040"><b>let</b></font> s:<font color="#804040"><b>end</b></font> <font color="#804040"><b>=</b></font> <font color="#008080">line</font>(<font color="#ff00ff">&quot;$&quot;</font>)
<font color="#804040"><b>let</b></font> s:lnum <font color="#804040"><b>=</b></font> <font color="#ff00ff">1</font>
<font color="#804040"><b>while</b></font> s:lnum <font color="#804040"><b>&lt;=</b></font> s:end

<font color="#0000ff">  &quot; Get the current line, with tabs expanded to spaces when needed</font>
<font color="#0000ff">  &quot;</font> <font color="#a020f0">FIXME:</font><font color="#0000ff"> What if it changes syntax highlighting?</font>
  <font color="#804040"><b>let</b></font> s:line <font color="#804040"><b>=</b></font> <font color="#008080">getline</font>(s:lnum)
  <font color="#804040"><b>if</b></font> <font color="#008080">stridx</font>(s:line, <font color="#ff00ff">&quot;t&quot;</font>) <font color="#804040"><b>&gt;=</b></font> <font color="#ff00ff">0</font>
    <font color="#804040"><b>exe</b></font> s:lnum <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;retab!&quot;</font>
    <font color="#804040"><b>let</b></font> s:did_retab <font color="#804040"><b>=</b></font> <font color="#ff00ff">1</font>
    <font color="#804040"><b>let</b></font> s:line <font color="#804040"><b>=</b></font> <font color="#008080">getline</font>(s:lnum)
  <font color="#804040"><b>else</b></font>
    <font color="#804040"><b>let</b></font> s:did_retab <font color="#804040"><b>=</b></font> <font color="#ff00ff">0</font>
  <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>let</b></font> s:len <font color="#804040"><b>=</b></font> <font color="#008080">strlen</font>(s:line)
  <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>new</b></font> <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;&quot;</font>

  <font color="#804040"><b>if</b></font> s:numblines
    <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>new</b></font> <font color="#804040"><b>=</b></font> <font color="#ff00ff">'&lt;span class=lnr&gt;'</font> <font color="#804040"><b>.</b></font> <font color="#008080">strpart</font>(<font color="#ff00ff">'        '</font>, <font color="#ff00ff">0</font>, <font color="#008080">strlen</font>(<font color="#008080">line</font>(<font color="#ff00ff">&quot;$&quot;</font>)) <font color="#804040"><b>-</b></font> <font color="#008080">strlen</font>(s:lnum)) <font color="#804040"><b>.</b></font> s:lnum <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;/span&gt;  '</font>
  <font color="#804040"><b>endif</b></font>

<font color="#0000ff">  &quot; Loop over each character in the line</font>
  <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>col</b></font> <font color="#804040"><b>=</b></font> <font color="#ff00ff">1</font>
  <font color="#804040"><b>while</b></font> s:col <font color="#804040"><b>&lt;=</b></font> s:len
    <font color="#804040"><b>let</b></font> s:startcol <font color="#804040"><b>=</b></font> s:col <font color="#0000ff">&quot; The start column for processing text</font>
    <font color="#804040"><b>let</b></font> s:id <font color="#804040"><b>=</b></font> <font color="#008080">synID</font>(s:lnum, s:col, <font color="#ff00ff">1</font>)
    <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>col</b></font> <font color="#804040"><b>=</b></font> s:col <font color="#804040"><b>+</b></font> <font color="#ff00ff">1</font>
<font color="#0000ff">    &quot; Speed loop (it's small - that's the trick)</font>
<font color="#0000ff">    &quot; Go along till we find a change in synID</font>
    <font color="#804040"><b>while</b></font> s:col <font color="#804040"><b>&lt;=</b></font> s:len <font color="#804040"><b>&amp;&amp;</b></font> s:id <font color="#804040"><b>==</b></font> <font color="#008080">synID</font>(s:lnum, s:col, <font color="#ff00ff">1</font>) | <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>col</b></font> <font color="#804040"><b>=</b></font> s:col <font color="#804040"><b>+</b></font> <font color="#ff00ff">1</font> | <font color="#804040"><b>endwhile</b></font>

<font color="#0000ff">    &quot; Output the text with the same synID, with class set to c{s:id}</font>
    <font color="#804040"><b>let</b></font> s:id <font color="#804040"><b>=</b></font> <font color="#008080">synIDtrans</font>(s:id)
    <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>new</b></font> <font color="#804040"><b>=</b></font> s:new <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;span class=c'</font> <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&gt;'</font> <font color="#804040"><b>.</b></font> <font color="#008080">substitute</font>(<font color="#008080">substitute</font>(<font color="#008080">substitute</font>(<font color="#008080">substitute</font>(<font color="#008080">substitute</font>(<font color="#008080">strpart</font>(s:line, s:startcol <font color="#804040"><b>-</b></font> <font color="#ff00ff">1</font>, s:col <font color="#804040"><b>-</b></font> s:startcol), <font color="#ff00ff">'&amp;'</font>, <font color="#ff00ff">'&amp;amp;'</font>, <font color="#ff00ff">'g'</font>), <font color="#ff00ff">'&lt;'</font>, <font color="#ff00ff">'&amp;lt;'</font>, <font color="#ff00ff">'g'</font>), <font color="#ff00ff">'&gt;'</font>, <font color="#ff00ff">'&amp;gt;'</font>, <font color="#ff00ff">'g'</font>), <font color="#ff00ff">'&quot;'</font>, <font color="#ff00ff">'&amp;quot;'</font>, <font color="#ff00ff">'g'</font>), <font color="#ff00ff">&quot;x0c&quot;</font>, <font color="#ff00ff">'&lt;hr class=&quot;PAGE-BREAK&quot;&gt;'</font>, <font color="#ff00ff">'g'</font>) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&lt;/span&gt;'</font>
<font color="#0000ff">    &quot; Add the class to class list if it's not there yet</font>
    <font color="#804040"><b>if</b></font> <font color="#008080">stridx</font>(s:idlist, <font color="#ff00ff">&quot;,&quot;</font> <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;,&quot;</font>) <font color="#804040"><b>==</b></font> <font color="#ff00ff">-1</font>
      <font color="#804040"><b>let</b></font> s:idlist <font color="#804040"><b>=</b></font> s:idlist <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;,&quot;</font>
    <font color="#804040"><b>endif</b></font>

    <font color="#804040"><b>if</b></font> s:col <font color="#804040"><b>&gt;</b></font> s:len
      <font color="#804040"><b>break</b></font>
    <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>endwhile</b></font>
  <font color="#804040"><b>if</b></font> s:did_retab
    <font color="#804040"><b>undo</b></font>
  <font color="#804040"><b>endif</b></font>

  <font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal &lt;C-W&gt;pa&quot;</font> <font color="#804040"><b>.</b></font> strtrans(s:new) <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;ne&lt;C-W&gt;p&quot;</font>
  <font color="#804040"><b>let</b></font> s:lnum <font color="#804040"><b>=</b></font> s:lnum <font color="#804040"><b>+</b></font> <font color="#ff00ff">1</font>
  <font color="#804040"><b>+</b></font>
<font color="#804040"><b>endwhile</b></font>
<font color="#0000ff">&quot; Finish with the last line</font>
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal &lt;C-W&gt;pa&lt;/pre&gt;n&lt;/body&gt;n&lt;/html&gt;e&quot;</font>

<font color="#0000ff">&quot; Now, when we finally know which, we define the colors and styles</font>
<font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
  <font color="#ff00ff">8</font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Find out the background and foreground color.</font>
<font color="#804040"><b>let</b></font> s:fgc <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(highlightID(<font color="#ff00ff">&quot;Normal&quot;</font>), <font color="#ff00ff">&quot;fg#&quot;</font>, s:whatterm))
<font color="#804040"><b>let</b></font> s:bgc <font color="#804040"><b>=</b></font> s:HtmlColor(<font color="#008080">synIDattr</font>(highlightID(<font color="#ff00ff">&quot;Normal&quot;</font>), <font color="#ff00ff">&quot;bg#&quot;</font>, s:whatterm))
<font color="#804040"><b>if</b></font> s:fgc <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>let</b></font> s:fgc <font color="#804040"><b>=</b></font> ( &amp;background <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;dark&quot;</font> ? <font color="#ff00ff">&quot;#ffffff&quot;</font> : <font color="#6a5acd">&quot;#</font><font color="#ff00ff">000000</font>&quot; )
<font color="#804040"><b>endif</b></font>
<font color="#804040"><b>if</b></font> s:bgc <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>let</b></font> s:bgc <font color="#804040"><b>=</b></font> ( &amp;background <font color="#804040"><b>==</b></font> <font color="#ff00ff">&quot;dark&quot;</font> ? <font color="#6a5acd">&quot;#</font><font color="#ff00ff">000000</font><font color="#ff00ff">&quot; : &quot;</font><font color="#ff00ff">#ffffff</font>&quot; )
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Normal/global attributes</font>
<font color="#0000ff">&quot; For Netscape 4, set &lt;body&gt; attributes too, though, strictly speaking, it's</font>
<font color="#0000ff">&quot; incorrect.</font>
<font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
  <font color="#804040"><b>execute</b></font> <font color="#ff00ff">&quot;normal Anpre { color: &quot;</font> <font color="#804040"><b>.</b></font> s:fgc <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; background-color: &quot;</font> <font color="#804040"><b>.</b></font> s:bgc <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;; }e&quot;</font>
  <font color="#804040"><b>yank</b></font>
  <font color="#804040"><b>put</b></font>
  <font color="#804040"><b>execute</b></font> <font color="#ff00ff">&quot;normal ^cwbodye&quot;</font>
<font color="#804040"><b>else</b></font>
  <font color="#804040"><b>execute</b></font> <font color="#ff00ff">'%s:&lt;body&gt;:&lt;body '</font> <font color="#804040"><b>.</b></font> <font color="#ff00ff">'bgcolor=&quot;'</font> <font color="#804040"><b>.</b></font> s:bgc <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot; text=&quot;'</font> <font color="#804040"><b>.</b></font> s:fgc <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&quot;&gt;'</font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Line numbering attributes</font>
<font color="#804040"><b>if</b></font> s:numblines
  <font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
    <font color="#804040"><b>execute</b></font> <font color="#ff00ff">&quot;normal An.lnr { &quot;</font> <font color="#804040"><b>.</b></font> s:CSS1(highlightID(<font color="#ff00ff">&quot;LineNr&quot;</font>)) <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;}e&quot;</font>
  <font color="#804040"><b>else</b></font>
    <font color="#804040"><b>execute</b></font> <font color="#ff00ff">'%s+&lt;span class=lnr&gt;</font><font color="#6a5acd">(</font><font color="#ff00ff">[^&lt;]*</font><font color="#6a5acd">)</font><font color="#ff00ff">&lt;/span&gt;+'</font> <font color="#804040"><b>.</b></font> s:HtmlOpening(highlightID(<font color="#ff00ff">&quot;LineNr&quot;</font>)) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'1'</font> <font color="#804040"><b>.</b></font> s:HtmlClosing(highlightID(<font color="#ff00ff">&quot;LineNr&quot;</font>)) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'+g'</font>
  <font color="#804040"><b>endif</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Gather attributes for all other classes</font>
<font color="#804040"><b>let</b></font> s:idlist <font color="#804040"><b>=</b></font> <font color="#008080">strpart</font>(s:idlist, <font color="#ff00ff">1</font>)
<font color="#804040"><b>while</b></font> s:idlist <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>let</b></font> s:attr <font color="#804040"><b>=</b></font> <font color="#ff00ff">&quot;&quot;</font>
  <font color="#804040"><b>let</b></font> s:<font color="#804040"><b>col</b></font> <font color="#804040"><b>=</b></font> <font color="#008080">stridx</font>(s:idlist, <font color="#ff00ff">&quot;,&quot;</font>)
  <font color="#804040"><b>let</b></font> s:id <font color="#804040"><b>=</b></font> <font color="#008080">strpart</font>(s:idlist, <font color="#ff00ff">0</font>, s:col)
  <font color="#804040"><b>let</b></font> s:idlist <font color="#804040"><b>=</b></font> <font color="#008080">strpart</font>(s:idlist, s:col <font color="#804040"><b>+</b></font> <font color="#ff00ff">1</font>)
  <font color="#804040"><b>let</b></font> s:attr <font color="#804040"><b>=</b></font> s:CSS1(s:id)
<font color="#0000ff">  &quot; If the class has some attributes, export the style, otherwise DELETE all</font>
<font color="#0000ff">  &quot; its occurences to make the HTML shorter</font>
  <font color="#804040"><b>if</b></font> s:attr <font color="#804040"><b>!=</b></font> <font color="#ff00ff">&quot;&quot;</font>
    <font color="#804040"><b>if</b></font> <font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
      <font color="#804040"><b>execute</b></font> <font color="#ff00ff">&quot;normal An.c&quot;</font> <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot; { &quot;</font> <font color="#804040"><b>.</b></font> s:attr <font color="#804040"><b>.</b></font> <font color="#ff00ff">&quot;}&quot;</font>
    <font color="#804040"><b>else</b></font>
      <font color="#804040"><b>execute</b></font> <font color="#ff00ff">'%s+&lt;span class=c'</font> <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&gt;</font><font color="#6a5acd">(</font><font color="#ff00ff">[^&lt;]*</font><font color="#6a5acd">)</font><font color="#ff00ff">&lt;/span&gt;+'</font> <font color="#804040"><b>.</b></font> s:HtmlOpening(s:id) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'1'</font> <font color="#804040"><b>.</b></font> s:HtmlClosing(s:id) <font color="#804040"><b>.</b></font> <font color="#ff00ff">'+g'</font>
    <font color="#804040"><b>endif</b></font>
  <font color="#804040"><b>else</b></font>
    <font color="#804040"><b>execute</b></font> <font color="#ff00ff">'%s+&lt;span class=c'</font> <font color="#804040"><b>.</b></font> s:id <font color="#804040"><b>.</b></font> <font color="#ff00ff">'&gt;</font><font color="#6a5acd">(</font><font color="#ff00ff">[^&lt;]*</font><font color="#6a5acd">)</font><font color="#ff00ff">&lt;/span&gt;+1+g'</font>
    <font color="#ff00ff">8</font>
  <font color="#804040"><b>endif</b></font>
<font color="#804040"><b>endwhile</b></font>

<font color="#0000ff">&quot; Cleanup (we've already lost last user's pattern match highlighting)</font>
<font color="#ff00ff">%</font><font color="#804040"><b>s</b></font><font color="#6a5acd">:</font>s+$<font color="#6a5acd">::</font><font color="#6a5acd">e</font>
<font color="#804040"><b>if</b></font> <font color="#008080">has</font>(<font color="#ff00ff">&quot;extra_search&quot;</font>)
  <font color="#804040"><b>nohlsearch</b></font>
<font color="#804040"><b>endif</b></font>

<font color="#0000ff">&quot; Restore old settings</font>
<font color="#804040"><b>let</b></font> &amp;report <font color="#804040"><b>=</b></font> s:old_report
<font color="#804040"><b>let</b></font> &amp;title <font color="#804040"><b>=</b></font> s:old_title
<font color="#804040"><b>let</b></font> &amp;icon <font color="#804040"><b>=</b></font> s:old_icon
<font color="#804040"><b>let</b></font> &amp;paste <font color="#804040"><b>=</b></font> s:old_paste
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal &lt;C-W&gt;p&quot;</font>
<font color="#804040"><b>let</b></font> &amp;l:et <font color="#804040"><b>=</b></font> s:old_et
<font color="#804040"><b>exe</b></font> <font color="#ff00ff">&quot;normal &lt;C-W&gt;p&quot;</font>

<font color="#0000ff">&quot; Save a little bit of memory (worths doing?)</font>
<font color="#804040"><b>unlet</b></font> s:old_et s:old_paste s:old_icon s:old_report s:old_title
<font color="#804040"><b>unlet</b></font> s:whatterm s:idlist s:lnum s:end s:fgc s:bgc
<font color="#804040"><b>unlet</b></font>! s:col s:id s:attr s:len s:line s:new s:did_retab s:numblines
<font color="#804040"><b>delfunc</b></font> s:HtmlColor
<font color="#804040"><b>delfunc</b></font> s:CSS1
<font color="#804040"><b>if</b></font> !<font color="#008080">exists</font>(<font color="#ff00ff">&quot;html_use_css&quot;</font>)
  <font color="#804040"><b>delfunc</b></font> s:HtmlOpening
  <font color="#804040"><b>delfunc</b></font> s:HtmlClosing
<font color="#804040"><b>endif</b></font>
