diff --git a/runtime/syntax/2html.vim b/runtime/syntax/2html.vim
index 9dfed26..fdee1ea 100644
--- a/runtime/syntax/2html.vim
+++ b/runtime/syntax/2html.vim
@@ -1,6 +1,6 @@
 " Vim syntax support file
 " Maintainer: Ben Fritz <fritzophrenic@gmail.com>
-" Last Change: 2011 May 27
+" Last Change: 2012 Jun 30
 "
 " Additional contributors:
 "
@@ -20,7 +20,7 @@
 " this file uses line continuations
 let s:cpo_sav = &cpo
 let s:ls  = &ls
-set cpo-=C
+set cpo&vim
 
 let s:end=line('$')
 
@@ -33,6 +33,17 @@
 
 let s:settings = tohtml#GetUserSettings()
 
+if !exists('s:FOLDED_ID')
+  let s:FOLDED_ID  = hlID("Folded")     | lockvar s:FOLDED_ID
+  let s:FOLD_C_ID  = hlID("FoldColumn") | lockvar s:FOLD_C_ID
+  let s:LINENR_ID  = hlID('LineNr')     | lockvar s:LINENR_ID
+  let s:DIFF_D_ID  = hlID("DiffDelete") | lockvar s:DIFF_D_ID
+  let s:DIFF_A_ID  = hlID("DiffAdd")    | lockvar s:DIFF_A_ID
+  let s:DIFF_C_ID  = hlID("DiffChange") | lockvar s:DIFF_C_ID
+  let s:DIFF_T_ID  = hlID("DiffText")   | lockvar s:DIFF_T_ID
+  let s:CONCEAL_ID = hlID('Conceal')    | lockvar s:CONCEAL_ID
+endif
+
 " Whitespace
 if s:settings.pre_wrap
   let s:whitespace = "white-space: pre-wrap; "
@@ -40,26 +51,137 @@
   let s:whitespace = ""
 endif
 
+if !empty(s:settings.prevent_copy)
+  if s:settings.no_invalid
+    " User has decided they don't want invalid markup. Still works in
+    " OpenOffice, and for text editors, but when pasting into Microsoft Word the
+    " input elements get pasted too and they cannot be deleted (at least not
+    " easily).
+    let s:unselInputType = ""
+  else
+    " Prevent from copy-pasting the input elements into Microsoft Word where
+    " they cannot be deleted easily by deliberately inserting invalid markup.
+    let s:unselInputType = " type='invalid_input_type'"
+  endif
+endif
+
 " When not in gui we can only guess the colors.
+" TODO - is this true anymore?
 if has("gui_running")
   let s:whatterm = "gui"
 else
   let s:whatterm = "cterm"
   if &t_Co == 8
-    let s:cterm_color = {0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00", 4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"}
+    let s:cterm_color = {
+	    \   0: "#808080", 1: "#ff6060", 2: "#00ff00", 3: "#ffff00",
+	    \   4: "#8080ff", 5: "#ff40ff", 6: "#00ffff", 7: "#ffffff"
+	    \ }
   else
-    let s:cterm_color = {0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00", 12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"}
+    let s:cterm_color = {
+	    \   0: "#000000", 1: "#c00000", 2: "#008000", 3: "#804000", 
+	    \   4: "#0000c0", 5: "#c000c0", 6: "#008080", 7: "#c0c0c0", 
+	    \   8: "#808080", 9: "#ff6060", 10: "#00ff00", 11: "#ffff00",
+	    \   12: "#8080ff", 13: "#ff40ff", 14: "#00ffff", 15: "#ffffff"
+	    \ }
 
     " Colors for 88 and 256 come from xterm.
     if &t_Co == 88
-      call extend(s:cterm_color, {16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff", 20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff", 24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff", 28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff", 32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff", 36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff", 40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff", 44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff", 48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff", 52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff", 56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff", 60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff", 64: "#ff0000"})
-      call extend(s:cterm_color, {65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00", 69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00", 73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00", 77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e", 81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2", 85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"})
+      call extend(s:cterm_color, {
+	    \   16: "#000000", 17: "#00008b", 18: "#0000cd", 19: "#0000ff",
+	    \   20: "#008b00", 21: "#008b8b", 22: "#008bcd", 23: "#008bff",
+	    \   24: "#00cd00", 25: "#00cd8b", 26: "#00cdcd", 27: "#00cdff",
+	    \   28: "#00ff00", 29: "#00ff8b", 30: "#00ffcd", 31: "#00ffff",
+	    \   32: "#8b0000", 33: "#8b008b", 34: "#8b00cd", 35: "#8b00ff",
+	    \   36: "#8b8b00", 37: "#8b8b8b", 38: "#8b8bcd", 39: "#8b8bff",
+	    \   40: "#8bcd00", 41: "#8bcd8b", 42: "#8bcdcd", 43: "#8bcdff",
+	    \   44: "#8bff00", 45: "#8bff8b", 46: "#8bffcd", 47: "#8bffff",
+	    \   48: "#cd0000", 49: "#cd008b", 50: "#cd00cd", 51: "#cd00ff",
+	    \   52: "#cd8b00", 53: "#cd8b8b", 54: "#cd8bcd", 55: "#cd8bff",
+	    \   56: "#cdcd00", 57: "#cdcd8b", 58: "#cdcdcd", 59: "#cdcdff",
+	    \   60: "#cdff00", 61: "#cdff8b", 62: "#cdffcd", 63: "#cdffff",
+	    \   64: "#ff0000"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   65: "#ff008b", 66: "#ff00cd", 67: "#ff00ff", 68: "#ff8b00",
+	    \   69: "#ff8b8b", 70: "#ff8bcd", 71: "#ff8bff", 72: "#ffcd00",
+	    \   73: "#ffcd8b", 74: "#ffcdcd", 75: "#ffcdff", 76: "#ffff00",
+	    \   77: "#ffff8b", 78: "#ffffcd", 79: "#ffffff", 80: "#2e2e2e",
+	    \   81: "#5c5c5c", 82: "#737373", 83: "#8b8b8b", 84: "#a2a2a2",
+	    \   85: "#b9b9b9", 86: "#d0d0d0", 87: "#e7e7e7"
+	    \ })
     elseif &t_Co == 256
-      call extend(s:cterm_color, {16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af", 20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f", 24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff", 28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af", 32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f", 36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff", 40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af", 44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f", 48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff", 52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af", 56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f", 60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff", 64: "#5f8700"})
-      call extend(s:cterm_color, {65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7", 69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87", 73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700", 77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7", 81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87", 85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000", 89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7", 93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87", 97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700", 101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7", 105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87", 109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"})
-      call extend(s:cterm_color, {113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7", 117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87", 121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000", 125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7", 129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87", 133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700", 137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7", 141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87", 145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700", 149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7", 153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87", 157: "#afffaf", 158: "#afffd7"})
-      call extend(s:cterm_color, {159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087", 163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00", 167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7", 171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787", 175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00", 179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7", 183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787", 187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00", 191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7", 195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087", 199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00", 203: "#ff5f5f", 204: "#ff5f87"})
-      call extend(s:cterm_color, {205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700", 209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7", 213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87", 217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700", 221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7", 225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87", 229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808", 233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030", 237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858", 241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080", 245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8", 249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0", 253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"})
+      call extend(s:cterm_color, {
+	    \   16: "#000000", 17: "#00005f", 18: "#000087", 19: "#0000af",
+	    \   20: "#0000d7", 21: "#0000ff", 22: "#005f00", 23: "#005f5f",
+	    \   24: "#005f87", 25: "#005faf", 26: "#005fd7", 27: "#005fff",
+	    \   28: "#008700", 29: "#00875f", 30: "#008787", 31: "#0087af",
+	    \   32: "#0087d7", 33: "#0087ff", 34: "#00af00", 35: "#00af5f",
+	    \   36: "#00af87", 37: "#00afaf", 38: "#00afd7", 39: "#00afff",
+	    \   40: "#00d700", 41: "#00d75f", 42: "#00d787", 43: "#00d7af",
+	    \   44: "#00d7d7", 45: "#00d7ff", 46: "#00ff00", 47: "#00ff5f",
+	    \   48: "#00ff87", 49: "#00ffaf", 50: "#00ffd7", 51: "#00ffff",
+	    \   52: "#5f0000", 53: "#5f005f", 54: "#5f0087", 55: "#5f00af",
+	    \   56: "#5f00d7", 57: "#5f00ff", 58: "#5f5f00", 59: "#5f5f5f",
+	    \   60: "#5f5f87", 61: "#5f5faf", 62: "#5f5fd7", 63: "#5f5fff",
+	    \   64: "#5f8700"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   65: "#5f875f", 66: "#5f8787", 67: "#5f87af", 68: "#5f87d7",
+	    \   69: "#5f87ff", 70: "#5faf00", 71: "#5faf5f", 72: "#5faf87",
+	    \   73: "#5fafaf", 74: "#5fafd7", 75: "#5fafff", 76: "#5fd700",
+	    \   77: "#5fd75f", 78: "#5fd787", 79: "#5fd7af", 80: "#5fd7d7",
+	    \   81: "#5fd7ff", 82: "#5fff00", 83: "#5fff5f", 84: "#5fff87",
+	    \   85: "#5fffaf", 86: "#5fffd7", 87: "#5fffff", 88: "#870000",
+	    \   89: "#87005f", 90: "#870087", 91: "#8700af", 92: "#8700d7",
+	    \   93: "#8700ff", 94: "#875f00", 95: "#875f5f", 96: "#875f87",
+	    \   97: "#875faf", 98: "#875fd7", 99: "#875fff", 100: "#878700",
+	    \   101: "#87875f", 102: "#878787", 103: "#8787af", 104: "#8787d7",
+	    \   105: "#8787ff", 106: "#87af00", 107: "#87af5f", 108: "#87af87",
+	    \   109: "#87afaf", 110: "#87afd7", 111: "#87afff", 112: "#87d700"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   113: "#87d75f", 114: "#87d787", 115: "#87d7af", 116: "#87d7d7",
+	    \   117: "#87d7ff", 118: "#87ff00", 119: "#87ff5f", 120: "#87ff87",
+	    \   121: "#87ffaf", 122: "#87ffd7", 123: "#87ffff", 124: "#af0000",
+	    \   125: "#af005f", 126: "#af0087", 127: "#af00af", 128: "#af00d7",
+	    \   129: "#af00ff", 130: "#af5f00", 131: "#af5f5f", 132: "#af5f87",
+	    \   133: "#af5faf", 134: "#af5fd7", 135: "#af5fff", 136: "#af8700",
+	    \   137: "#af875f", 138: "#af8787", 139: "#af87af", 140: "#af87d7",
+	    \   141: "#af87ff", 142: "#afaf00", 143: "#afaf5f", 144: "#afaf87",
+	    \   145: "#afafaf", 146: "#afafd7", 147: "#afafff", 148: "#afd700",
+	    \   149: "#afd75f", 150: "#afd787", 151: "#afd7af", 152: "#afd7d7",
+	    \   153: "#afd7ff", 154: "#afff00", 155: "#afff5f", 156: "#afff87",
+	    \   157: "#afffaf", 158: "#afffd7"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   159: "#afffff", 160: "#d70000", 161: "#d7005f", 162: "#d70087",
+	    \   163: "#d700af", 164: "#d700d7", 165: "#d700ff", 166: "#d75f00",
+	    \   167: "#d75f5f", 168: "#d75f87", 169: "#d75faf", 170: "#d75fd7",
+	    \   171: "#d75fff", 172: "#d78700", 173: "#d7875f", 174: "#d78787",
+	    \   175: "#d787af", 176: "#d787d7", 177: "#d787ff", 178: "#d7af00",
+	    \   179: "#d7af5f", 180: "#d7af87", 181: "#d7afaf", 182: "#d7afd7",
+	    \   183: "#d7afff", 184: "#d7d700", 185: "#d7d75f", 186: "#d7d787",
+	    \   187: "#d7d7af", 188: "#d7d7d7", 189: "#d7d7ff", 190: "#d7ff00",
+	    \   191: "#d7ff5f", 192: "#d7ff87", 193: "#d7ffaf", 194: "#d7ffd7",
+	    \   195: "#d7ffff", 196: "#ff0000", 197: "#ff005f", 198: "#ff0087",
+	    \   199: "#ff00af", 200: "#ff00d7", 201: "#ff00ff", 202: "#ff5f00",
+	    \   203: "#ff5f5f", 204: "#ff5f87"
+	    \ })
+      call extend(s:cterm_color, {
+	    \   205: "#ff5faf", 206: "#ff5fd7", 207: "#ff5fff", 208: "#ff8700",
+	    \   209: "#ff875f", 210: "#ff8787", 211: "#ff87af", 212: "#ff87d7",
+	    \   213: "#ff87ff", 214: "#ffaf00", 215: "#ffaf5f", 216: "#ffaf87",
+	    \   217: "#ffafaf", 218: "#ffafd7", 219: "#ffafff", 220: "#ffd700",
+	    \   221: "#ffd75f", 222: "#ffd787", 223: "#ffd7af", 224: "#ffd7d7",
+	    \   225: "#ffd7ff", 226: "#ffff00", 227: "#ffff5f", 228: "#ffff87",
+	    \   229: "#ffffaf", 230: "#ffffd7", 231: "#ffffff", 232: "#080808",
+	    \   233: "#121212", 234: "#1c1c1c", 235: "#262626", 236: "#303030",
+	    \   237: "#3a3a3a", 238: "#444444", 239: "#4e4e4e", 240: "#585858",
+	    \   241: "#626262", 242: "#6c6c6c", 243: "#767676", 244: "#808080",
+	    \   245: "#8a8a8a", 246: "#949494", 247: "#9e9e9e", 248: "#a8a8a8",
+	    \   249: "#b2b2b2", 250: "#bcbcbc", 251: "#c6c6c6", 252: "#d0d0d0",
+	    \   253: "#dadada", 254: "#e4e4e4", 255: "#eeeeee"
+	    \ })
     endif
   endif
 endif
@@ -80,6 +202,16 @@
   endfun
 endif
 
+" Find out the background and foreground color for use later
+let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
+let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
+if s:fgc == ""
+  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
+endif
+if s:bgc == ""
+  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
+endif
+
 if !s:settings.use_css
   " Return opening HTML tag for given highlight id
   function! s:HtmlOpening(id)
@@ -120,30 +252,193 @@
   endfun
 endif
 
+" Use a different function for formatting based on user options. This way we
+" can avoid a lot of logic during the actual execution.
+"
+" Build the function line by line containing only what is needed for the options
+" in use for maximum code sharing with minimal branch logic for greater speed.
+"
+" Note, 'exec' commands do not recognize line continuations, so must concatenate
+" lines rather than continue them.
+if s:settings.use_css
+  " save CSS to a list of rules to add to the output at the end of processing
+
+  " first, get the style names we need
+  let wrapperfunc_lines = [
+	\ 'function! s:BuildStyleWrapper(style_id, diff_style_id, text, make_unselectable, unformatted)',
+	\ '',
+	\ '  let l:style_name = synIDattr(a:style_id, "name", s:whatterm)'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [
+	\ '  let l:diff_style_name = synIDattr(a:diff_style_id, "name", s:whatterm)']
+
+  " Add normal groups and diff groups to separate lists so we can order them to
+  " allow diff highlight to override normal highlight
+
+  " if primary style IS a diff style, grab it from the diff cache instead
+  " (always succeeds because we pre-populate it)
+  let wrapperfunc_lines += [
+	\ '',
+	\ '  if a:style_id == s:DIFF_D_ID || a:style_id == s:DIFF_A_ID ||'.
+	\ '          a:style_id == s:DIFF_C_ID || a:style_id == s:DIFF_T_ID',
+	\ '    let l:saved_style = get(s:diffstylelist,a:style_id)',
+	\ '  else'
+	\ ]
+  endif
+
+  " get primary style info from cache or build it on the fly if not found
+  let wrapperfunc_lines += [
+	\ '    let l:saved_style = get(s:stylelist,a:style_id)',
+	\ '    if type(l:saved_style) == type(0)',
+	\ '      unlet l:saved_style',
+	\ '      let l:saved_style = s:CSS1(a:style_id)',
+	\ '      if l:saved_style != ""',
+	\ '        let l:saved_style = "." . l:style_name . " { " . l:saved_style . "}"',
+	\ '      endif',
+	\ '      let s:stylelist[a:style_id]= l:saved_style',
+	\ '    endif'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [ '  endif' ]
+  endif
+
+  " Build the wrapper tags around the text. It turns out that caching these
+  " gives pretty much zero performance gain and adds a lot of logic.
+
+  let wrapperfunc_lines += [
+	\ '',
+	\ '  if l:saved_style == ""'
+	\ ]
+  if &diff
+    let wrapperfunc_lines += [
+	\ '    if a:diff_style_id <= 0'
+	\ ]
+  endif
+  " no surroundings if neither primary nor diff style has any info
+  let wrapperfunc_lines += [
+	\ '       return a:text'
+	\ ]
+  if &diff
+    " no primary style, but diff style
+    let wrapperfunc_lines += [
+	\ '     else',
+	\ '       return "<span class=\"" .l:diff_style_name . "\">".a:text."</span>"',
+	\ '     endif'
+	\ ]
+  endif
+  " open tag for non-empty primary style
+  let wrapperfunc_lines += [
+	\ '  else']
+  " non-empty primary style. handle either empty or non-empty diff style.
+  "
+  " separate the two classes by a space to apply them both if there is a diff
+  " style name, unless the primary style is empty, then just use the diff style
+  " name
+  let diffstyle =
+	  \ (&diff ? '(a:diff_style_id <= 0 ? "" : " ". l:diff_style_name) .'
+	  \        : "")
+  if s:settings.prevent_copy == ""
+    let wrapperfunc_lines += [
+	  \ '    return "<span class=\"" . l:style_name .'.diffstyle.'"\">".a:text."</span>"'
+	  \ ]
+  else
+
+    "
+    " Wrap the <input> in a <span> to allow fixing the stupid bug in some fonts
+    " which cause browsers to display a 1px gap between lines when these
+    " <input>s have a background color (maybe not really a bug, this isn't
+    " well-defined)
+    "
+    " use strwidth, because we care only about how many character boxes are
+    " needed to size the input, we don't care how many characters (including
+    " separately counted composing chars, from strchars()) or bytes (from
+    " len())the string contains. strdisplaywidth() is not needed because none of
+    " the unselectable groups can contain tab characters (fold column, fold
+    " text, line number).
+    "
+    " Note, if maxlength property needs to be added in the future, it will need
+    " to use strchars(), because HTML specifies that the maxlength parameter
+    " uses the number of unique codepoints for its limit.
+    let wrapperfunc_lines += [
+	  \ '    if a:make_unselectable',
+	  \ '      return "<span class=\"" . l:style_name .'.diffstyle.'"\">'.
+	  \                '<input'.s:unselInputType.' class=\"" . l:style_name .'.diffstyle.'"\"'.
+	  \                 ' value=\"".substitute(a:unformatted,''\s\+$'',"","")."\"'.
+	  \                 ' onselect=''this.blur(); return false;'''.
+	  \                 ' onmousedown=''this.blur(); return false;'''.
+	  \                 ' onclick=''this.blur(); return false;'''.
+	  \                 ' readonly=''readonly'''.
+	  \                 ' size=\"".strwidth(a:unformatted)."\"'.
+	  \                 (s:settings.use_xhtml ? '/' : '').'></span>"',
+	  \ '    else',
+	  \ '      return "<span class=\"" . l:style_name .'. diffstyle .'"\">".a:text."</span>"'
+	  \ ]
+  endif
+  " close off tag for non-empty primary style
+  if s:settings.prevent_copy == ""
+    let wrapperfunc_lines[-1] .=
+	  \ '                     "\">".a:text."</span>"'
+  else
+    let wrapperfunc_lines[-1] .=
+	  \ '                     "\">".a:text."</span>"'
+  endif
+  let wrapperfunc_lines += [
+	\ '  endif',
+	\ 'endfun'
+	\ ]
+else
+  " Non-CSS method just needs the wrapper.
+  "
+  " Functions used to get opening/closing automatically return null strings if
+  " no styles exist.
+  if &diff
+    let wrapperfunc_lines = [
+	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, text, unusedarg, unusedarg2)',
+	  \ '  return s:HtmlOpening(a:style_id).(a:diff_style_id <= 0 ? "" :'.
+	  \                                     's:HtmlOpening(a:diff_style_id)).a:text.'.
+	  \   '(a:diff_style_id <= 0 ? "" : s:HtmlClosing(a:diff_style_id)).s:HtmlClosing(a:style_id)',
+	  \ 'endfun'
+	  \ ]
+  else
+    let wrapperfunc_lines = [
+	  \ 'function! s:BuildStyleWrapper(style_id, diff_style_id, text, unusedarg, unusedarg2)',
+	  \ '  return s:HtmlOpening(a:style_id).a:text.s:HtmlClosing(a:style_id)',
+	  \ 'endfun'
+	  \ ]
+  endif
+endif
+
+" create the function we built line by line above
+exec join(wrapperfunc_lines, "\n")
+
+let s:diff_mode = &diff
+
 " Return HTML valid characters enclosed in a span of class style_name with
 " unprintable characters expanded and double spaces replaced as necessary.
-function! s:HtmlFormat(text, style_name, diff_style_name)
+"
+" TODO: eliminate unneeded logic like done for BuildStyleWrapper
+function! s:HtmlFormat(text, style_id, diff_style_id, make_unselectable)
   " Replace unprintable characters
-  let formatted = strtrans(a:text)
+  let unformatted = strtrans(a:text)
 
-  " separate the two classes by a space to apply them both if there is a diff
-  " style name
-  let l:style_name = a:style_name . (a:diff_style_name == '' ? '' : ' ') . a:diff_style_name
+  let formatted = unformatted
 
   " Replace the reserved html characters
   let formatted = substitute(formatted, '&', '\&amp;',  'g')
   let formatted = substitute(formatted, '<', '\&lt;',   'g')
   let formatted = substitute(formatted, '>', '\&gt;',   'g')
   let formatted = substitute(formatted, '"', '\&quot;', 'g')
-  " TODO: Use &apos; for "'"?
+  " &apos; is not valid in HTML but it is in XHTML, so just use the numeric
+  " reference for it instead. Needed because it could appear in quotes
+  " especially if unselectable regions is turned on.
+  let formatted = substitute(formatted, '"', '\&#0039;', 'g')
 
   " Replace a "form feed" character with HTML to do a page break
+  " TODO: need to prevent this in unselectable areas? Probably it should never
+  " BE in an unselectable area...
   let formatted = substitute(formatted, "\x0c", '<hr class="PAGE-BREAK">', 'g')
 
-  " Mangle modelines so Vim doesn't try to use HTML text as a modeline if
-  " editing this file in the future
-  let formatted = substitute(formatted, '\v(\s+%(vim?|ex)):', '\1\&#0058;', 'g')
-
   " Replace double spaces, leading spaces, and trailing spaces if needed
   if ' ' != s:HtmlSpace
     let formatted = substitute(formatted, '  ', s:HtmlSpace . s:HtmlSpace, 'g')
@@ -151,32 +446,86 @@
     let formatted = substitute(formatted, ' \+$', s:HtmlSpace, 'g')
   endif
 
-  " Enclose in a span of class style_name
-  let formatted = '<span class="' . l:style_name . '">' . formatted . '</span>'
-
-  " Add the class to class list if it's not there yet.
-  " Add normal groups to the beginning so diff groups can override them.
-  let s:id = hlID(a:style_name)
-  if index(s:idlist, s:id ) == -1
-    if a:style_name =~ 'Diff\%(Add\|Change\|Delete\|Text\)'
-      call add(s:idlist, s:id)
-    else
-      call insert(s:idlist, s:id)
-    endif
-  endif
-  
-  " Add the diff highlight class to class list if used and it's not there yet.
-  " Add diff groups to the end so they override the other highlighting.
-  if a:diff_style_name != ""
-    let s:diff_id = hlID(a:diff_style_name)
-    if index(s:idlist, s:diff_id) == -1
-      call add(s:idlist, s:diff_id)
-    endif
-  endif
-
-  return formatted
+  " Enclose in the correct format
+  return s:BuildStyleWrapper(a:style_id, a:diff_style_id, formatted, a:make_unselectable, unformatted)
 endfun
 
+" set up functions to call HtmlFormat in certain ways based on whether the
+" element is supposed to be unselectable or not
+if s:settings.prevent_copy =~# 'n'
+  function! s:HtmlFormat_n(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 1)
+  endfun
+else
+  function! s:HtmlFormat_n(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 'd'
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 1)
+  endfun
+else
+  function! s:HtmlFormat_d(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 'f'
+  " Note the <input> elements for fill spaces will have a single space for
+  " content, to allow active cursor CSS selection to work.
+  "
+  " Wrap the whole thing in a span for the 1px padding workaround for gaps.
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    let l:input_open = "<input readonly='readonly'".s:unselInputType.
+	  \ " onselect='this.blur(); return false;'".
+	  \ " onmousedown='this.blur(); ".a:click." return false;'".
+	  \ " onclick='return false;' size='".
+	  \ string(a:len + (empty(a:char2) ? 0 : 1) + a:numfill) .
+	  \ "' "
+    let l:common_attrs = "class='FoldColumn' value='"
+    let l:input_close = (s:settings.use_xhtml ? "' />" : "'>")
+    return "<span class='".a:class."'>".
+	  \ l:input_open.l:common_attrs.repeat(a:char, a:len).
+	  \ (!empty(a:char2) ? a:char2 : "").
+	  \ l:input_close . "</span>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:FoldColumn_build('', s:foldcolumn, 0, '', 'FoldColumn', '')
+  endfun
+else
+  " For normal fold columns, simply space-pad to the desired width (note that
+  " the FoldColumn definition includes a whitespace:pre rule)
+  function! s:FoldColumn_build(char, len, numfill, char2, class, click)
+    return "<a href='#' class='".a:class."' onclick='".a:click."'>".
+	  \ repeat(a:char, a:len).a:char2.repeat(' ', a:numfill).
+	  \ "</a>"
+  endfun
+  function! s:FoldColumn_fill()
+    return s:HtmlFormat(repeat(' ', s:foldcolumn), s:FOLD_C_ID, 0, 0)
+  endfun
+endif
+if s:settings.prevent_copy =~# 't'
+  " put an extra empty span at the end for dynamic folds, so the linebreak can
+  " be surrounded. Otherwise do it as normal.
+  "
+  " TODO: isn't there a better way to do this, than placing it here and using a
+  " substitute later?
+  if s:settings.dynamic_folds
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 1) .
+	    \ s:HtmlFormat("", a:style_id, 0, 0)
+    endfun
+  else
+    function! s:HtmlFormat_t(text, style_id, diff_style_id)
+      return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 1)
+    endfun
+  endif
+else
+  function! s:HtmlFormat_t(text, style_id, diff_style_id)
+    return s:HtmlFormat(a:text, a:style_id, a:diff_style_id, 0)
+  endfun
+endif
+
 " Return CSS style describing given highlight id (can be empty)
 function! s:CSS1(id)
   let a = ""
@@ -190,7 +539,15 @@
     let x = s:HtmlColor(synIDattr(a:id, "fg#", s:whatterm))
     if x != "" | let a = a . "color: " . x . "; " | endif
     let x = s:HtmlColor(synIDattr(a:id, "bg#", s:whatterm))
-    if x != "" | let a = a . "background-color: " . x . "; " | endif
+    if x != ""
+      let a = a . "background-color: " . x . "; "
+      " stupid hack because almost every browser seems to have at least one font
+      " which shows 1px gaps between lines which have background
+      let a = a . "padding-bottom: 1px; "
+    elseif (a:id == s:FOLDED_ID || a:id == s:LINENR_ID || a:id == s:FOLD_C_ID) && !empty(s:settings.prevent_copy)
+      " input elements default to a different color than the rest of the page
+      let a = a . "background-color: " . s:bgc . "; "
+    endif
   endif
   if synIDattr(a:id, "bold") | let a = a . "font-weight: bold; " | endif
   if synIDattr(a:id, "italic") | let a = a . "font-style: italic; " | endif
@@ -336,7 +693,12 @@
 call add(s:lines, '<meta name="syntax" content="'.s:current_syntax.'"'.s:tag_close)
 call add(s:lines, '<meta name="settings" content="'.
       \ join(filter(keys(s:settings),'s:settings[v:val]'),',').
+      \ ',prevent_copy='.s:settings.prevent_copy.
       \ '"'.s:tag_close)
+call add(s:lines, '<meta name="colorscheme" content="'.
+      \ (exists('g:colors_name')
+      \ ? g:colors_name
+      \ : 'none'). '"'.s:tag_close)
 
 if s:settings.use_css
   if s:settings.dynamic_folds
@@ -412,12 +774,18 @@
   endif
 endif
 
+" insert script tag if any javascript is needed
+if s:settings.dynamic_folds || s:settings.prevent_copy != ""
+  call extend(s:lines, [
+	\ "",
+	\ "<script type='text/javascript'>",
+	\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--"])
+endif
+
 " insert javascript to toggle folds open and closed
 if s:settings.dynamic_folds
   call extend(s:lines, [
 	\ "",
-	\ "<script type='text/javascript'>",
-	\ s:settings.use_xhtml ? '//<![CDATA[' : "<!--",
 	\ "function toggleFold(objID)",
 	\ "{",
 	\ "  var fold;",
@@ -430,22 +798,114 @@
 	\ "  {",
 	\ "    fold.className = 'closed-fold';",
 	\ "  }",
-	\ "}",
-	\ s:settings.use_xhtml ? '//]]>' : '-->',
-	\ "</script>"
+	\ "}"
 	\])
 endif
 
-if s:settings.no_pre
-  call extend(s:lines, ["</head>", "<body>"])
+" Small text columns like the foldcolumn and line number column need a weird
+" hack to work around Webkit's and (in versions prior to 9) IE's lack of support
+" for the 'ch' unit without messing up Opera, which also doesn't support it but
+" works anyway.
+"
+" The problem is that without the 'ch' unit, it is not possible to specify a
+" size of an <input> in terms of character widths. Only Opera seems to do the
+" "sensible" thing and make the <input> sized to fit exactly as many characters
+" as specified by its "size" attribute, but the spec actually says "at least
+" wide enough to fit 'size' characters", so the other browsers are technically
+" correct as well.
+"
+" Anyway, this leads to two diffculties:
+"   1. The foldcolumn is made up of multiple elements side-by-side with
+"      different sizes, each of which has their own extra padding added. Thus, a
+"      column made up of one item of size 1 and another of size 2 would not
+"      necessarily be equal in size to another line's foldcolumn with a single
+"      item of size 3.
+"   2. The extra padding added to the <input> elements adds up to make the
+"      foldcolumn and line number column too wide, especially in Webkit
+"      browsers.
+"
+" So, the full workaround is:
+"   1. Define a default size in em, equal to the number of characters in the
+"      input element, in case javascript is disabled and the browser does not
+"      support the 'ch' unit. Unfortunately this makes Opera no longer work
+"      properly without javascript. 1em per character is much too wide but it
+"      looks better in webkit browsers than unaligned columns.
+"   2. Insert the following javascript to run at page load, which checks for the
+"      width of a single character (in an extraneous page element inserted
+"      before the page title, and set to hidden) and compares it to the width of
+"      another extra <input> element with only one character. If the width
+"      matches, the script does nothing more, but if not, it will figure out the
+"      fraction of an em unit which would correspond with a ch unit if there
+"      were one, and set the containing element (<pre> or <div>) to a class with
+"      pre-defined rules which is closest to that fraction of an em. Rules are
+"      defined from 0.05 em to 1em per ch.
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines, [
+	\ '',
+	\ '/* simulate a "ch" unit by asking the browser how big a zero character is */',
+	\ 'function FixCharWidth() {',
+	\ '  /* get the hidden element which gives the width of a single character */',
+	\ '  var goodWidth = document.getElementById("oneCharWidth").clientWidth;',
+	\ '  /* get all input elements, we''ll filter on class later */',
+	\ '  var inputTags = document.getElementsByTagName("input");',
+	\ '  var ratio = 5;',
+	\ '  var inputWidth = document.getElementById("oneInputWidth").clientWidth;',
+	\ '  var emWidth = document.getElementById("oneEmWidth").clientWidth;',
+	\ '  if (inputWidth > goodWidth) {',
+	\ '    while (ratio < 100*goodWidth/emWidth && ratio < 100) {',
+	\ '    ratio += 5;',
+	\ '  }',
+	\ '  document.getElementById("vimCodeElement").className = "em"+ratio;',
+	\ '  }',
+	\ '}'
+	\ ])
+endif
+
+" insert script closing tag if any javascript is needed
+if s:settings.dynamic_folds || s:settings.prevent_copy != ""
+  call extend(s:lines, [
+	\ '',
+	\ s:settings.use_xhtml ? '//]]>' : '-->',
+	\ "</script>"
+	\ ])
+endif
+
+call extend(s:lines, ["</head>"])
+if !empty(s:settings.prevent_copy)
+  call extend(s:lines,
+	\ ["<body onload='FixCharWidth();'>",
+	\ "<!-- hidden divs used by javascript to get the width of a char -->",
+	\ "<div id='oneCharWidth'>0</div>",
+	\ "<div id='oneInputWidth'><input size='1' value='0'".s:tag_close."</div>",
+	\ "<div id='oneEmWidth' style='width: 1em;'></div>"
+	\ ])
 else
-  call extend(s:lines, ["</head>", "<body>", "<pre>"])
+  call extend(s:lines, ["<body>"])
+endif
+if s:settings.no_pre
+  " if we're not using CSS we use a font tag which can't have a div inside
+  if s:settings.use_css
+    call extend(s:lines, ["<div id='vimCodeElement'>"])
+  endif
+else
+  call extend(s:lines, ["<pre id='vimCodeElement'>"])
 endif
 
 exe s:orgwin . "wincmd w"
 
-" List of all id's
-let s:idlist = []
+" caches of style data
+" initialize to include line numbers if using them
+if s:settings.number_lines
+  let s:stylelist = { s:LINENR_ID : ".LineNr { " . s:CSS1( s:LINENR_ID ) . "}" }
+else
+  let s:stylelist = {}
+endif
+let s:diffstylelist = {
+      \   s:DIFF_A_ID : ".DiffAdd { " . s:CSS1( s:DIFF_A_ID ) . "}",
+      \   s:DIFF_C_ID : ".DiffChange { " . s:CSS1( s:DIFF_C_ID ) . "}",
+      \   s:DIFF_D_ID : ".DiffDelete { " . s:CSS1( s:DIFF_D_ID ) . "}",
+      \   s:DIFF_T_ID : ".DiffText { " . s:CSS1( s:DIFF_T_ID ) . "}"
+      \ }
 
 " set up progress bar in the status line
 if !s:settings.no_progress
@@ -772,15 +1232,22 @@
 
       if !s:settings.no_pre
 	" HTML line wrapping is off--go ahead and fill to the margin
+	" TODO: what about when CSS wrapping is turned on?
 	let s:new = s:new . repeat(s:difffillchar, &columns - strlen(s:new) - s:margin)
       else
 	let s:new = s:new . repeat(s:difffillchar, 3)
       endif
 
-      let s:new = s:HtmlFormat(s:new, "DiffDelete", "")
+      let s:new = s:HtmlFormat_d(s:new, s:DIFF_D_ID, 0)
       if s:settings.number_lines
-	" Indent if line numbering is on; must be after escaping.
-	let s:new = repeat(s:LeadingSpace, s:margin) . s:new
+	" Indent if line numbering is on. Indent gets style of line number
+	" column.
+	let s:new = s:HtmlFormat_n(repeat(' ', s:margin), s:LINENR_ID, 0) . s:new
+      endif
+      if s:settings.dynamic_folds && !s:settings.no_foldcolumn && s:foldcolumn > 0
+	" Indent for foldcolumn if there is one. Assume it's empty, there should
+	" not be a fold for deleted lines in diff mode.
+	let s:new = s:FoldColumn_fill() . s:new
       endif
       call add(s:lines, s:new.s:HtmlEndline)
 
@@ -793,8 +1260,6 @@
   " Start the line with the line number.
   if s:settings.number_lines
     let s:numcol = repeat(' ', s:margin - 1 - strlen(s:lnum)) . s:lnum . ' '
-  else
-    let s:numcol = ""
   endif
 
   let s:new = ""
@@ -802,14 +1267,14 @@
   if has('folding') && !s:settings.ignore_folding && foldclosed(s:lnum) > -1 && !s:settings.dynamic_folds
     "
     " This is the beginning of a folded block (with no dynamic folding)
-    "
-    let s:new = s:numcol . foldtextresult(s:lnum)
+    let s:new = foldtextresult(s:lnum)
     if !s:settings.no_pre
       " HTML line wrapping is off--go ahead and fill to the margin
       let s:new = s:new . repeat(s:foldfillchar, &columns - strlen(s:new))
     endif
 
-    let s:new = s:HtmlFormat(s:new, "Folded", "")
+    " put numcol in a separate group for sake of unselectable text
+    let s:new = (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0): "") . s:HtmlFormat_t(s:new, s:FOLDED_ID, 0)
 
     " Skip to the end of the fold
     let s:new_lnum = foldclosedend(s:lnum)
@@ -851,38 +1316,46 @@
 	if !s:settings.no_foldcolumn
 	  " add fold column that can open the new fold
 	  if s:allfolds[0].level > 1 && s:firstfold
-	    let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1) . "</a>"
+	    let s:new = s:new . s:FoldColumn_build('|', s:allfolds[0].level - 1, 0, "",
+		  \ 'toggle-open FoldColumn','javascript:toggleFold("fold'.s:foldstack[0].id.'");')
 	  endif
-	  let s:new = s:new . "<a class='toggle-open FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>+</a>"
-	  let s:new = s:new . "<a class='toggle-open "
+	  " add the filler spaces separately from the '+' char so that it can be
+	  " shown/hidden separately during a hover unfold
+	  let s:new = s:new . s:FoldColumn_build("+", 1, 0, "",
+		\ 'toggle-open FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
 	  " If this is not the last fold we're opening on this line, we need
 	  " to keep the filler spaces hidden if the fold is opened by mouse
 	  " hover. If it is the last fold to open in the line, we shouldn't hide
 	  " them, so don't apply the toggle-filler class.
-	  if get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum
-	    let s:new = s:new . "toggle-filler "
-	  endif
-	  let s:new = s:new . "FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-	  let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level) . "</a>"
+	  let s:new = s:new . s:FoldColumn_build(" ", 1, s:foldcolumn - s:allfolds[0].level - 1, "",
+		\ 'toggle-open FoldColumn'. (get(s:allfolds, 1, {'firstline': 0}).firstline == s:lnum ?" toggle-filler" :""),
+		\ 'javascript:toggleFold("fold'.s:foldId.'");')
 
 	  " add fold column that can close the new fold
-	  let s:new = s:new . "<a class='toggle-closed FoldColumn' href='javascript:toggleFold(\"fold".s:foldId."\")'>"
-	  if s:firstfold
-	    let s:new = s:new . repeat('|', s:allfolds[0].level - 1)
-	  endif
-	  let s:new = s:new . "-"
-	  " only add spaces if we aren't opening another fold on the same line
+	  " only add extra blank space if we aren't opening another fold on the
+	  " same line
 	  if get(s:allfolds, 1, {'firstline': 0}).firstline != s:lnum
-	    let s:new = s:new . repeat(" ", s:foldcolumn - s:allfolds[0].level)
+	    let s:extra_space = s:foldcolumn - s:allfolds[0].level
+	  else
+	    let s:extra_space = 0
 	  endif
-	  let s:new = s:new . "</a>"
+	  if s:firstfold
+	    " the first fold in a line has '|' characters from folds opened in
+	    " previous lines, before the '-' for this fold
+	    let s:new .= s:FoldColumn_build('|', s:allfolds[0].level - 1, s:extra_space, '-',
+		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
+	  else
+	    " any subsequent folds in the line only add a single '-'
+	    let s:new = s:new . s:FoldColumn_build("-", 1, s:extra_space, "",
+		  \ 'toggle-closed FoldColumn', 'javascript:toggleFold("fold'.s:foldId.'");')
+	  endif
 	  let s:firstfold = 0
 	endif
 
-	" add fold text, moving the span ending to the next line so collapsing
-	" of folds works correctly
-	let s:new = s:new . substitute(s:HtmlFormat(s:numcol . foldtextresult(s:lnum), "Folded", ""), '</span>', s:HtmlEndline.'\n\0', '')
+	" Add fold text, moving the span ending to the next line so collapsing
+	" of folds works correctly.
+	" Put numcol in a separate group for sake of unselectable text.
+	let s:new = s:new . (s:settings.number_lines ? s:HtmlFormat_n(s:numcol, s:FOLDED_ID, 0) : "") . substitute(s:HtmlFormat_t(foldtextresult(s:lnum), s:FOLDED_ID, 0), '</span>', s:HtmlEndline.'\n\0', '')
 	let s:new = s:new . "<span class='fulltext'>"
 
 	" open the fold now that we have the fold text to allow retrieval of
@@ -902,14 +1375,13 @@
 	  " add the empty foldcolumn for unfolded lines if there is a fold
 	  " column at all
 	  if s:foldcolumn > 0
-	    let s:new = s:new . s:HtmlFormat(repeat(' ', s:foldcolumn), "FoldColumn", "")
+	    let s:new = s:new . s:FoldColumn_fill()
 	  endif
 	else
 	  " add the fold column for folds not on the opening line
 	  if get(s:foldstack, 0).firstline < s:lnum
-	    let s:new = s:new . "<a class='FoldColumn' href='javascript:toggleFold(\"fold".s:foldstack[0].id."\")'>"
-	    let s:new = s:new . repeat('|', s:foldstack[0].level)
-	    let s:new = s:new . repeat(' ', s:foldcolumn - s:foldstack[0].level) . "</a>"
+	    let s:new = s:new . s:FoldColumn_build('|', s:foldstack[0].level, s:foldcolumn - s:foldstack[0].level, "",
+		  \ 'FoldColumn', 'javascript:toggleFold("fold'.s:foldstack[0].id.'");')
 	  endif
 	endif
       endif
@@ -917,8 +1389,7 @@
 
     " Now continue with the unfolded line text
     if s:settings.number_lines
-      " TODO: why not use the real highlight name here?
-      let s:new = s:new . s:HtmlFormat(s:numcol, "lnr", "")
+      let s:new = s:new . s:HtmlFormat_n(s:numcol, s:LINENR_ID, 0)
     endif
 
     " Get the diff attribute, if any.
@@ -932,7 +1403,6 @@
 
     " most of the time we won't use the diff_id, initialize to zero
     let s:diff_id = 0
-    let s:diff_id_name = ""
 
     while s:col <= s:len || (s:col == 1 && s:diffattr)
       let s:startcol = s:col " The start column for processing text
@@ -1000,20 +1470,16 @@
 
 	" get the highlight group name to use
 	let s:id = synIDtrans(s:id)
-	let s:id_name = synIDattr(s:id, "name", s:whatterm)
-	if s:diff_id
-	  let s:diff_id_name = synIDattr(s:diff_id, "name", s:whatterm)
-	endif
       else
 	" use Conceal highlighting for concealed text
-	let s:id_name = 'Conceal'
+	let s:id = s:CONCEAL_ID
 	let s:expandedtab = s:concealinfo[1]
       endif
 
-      " Output the text with the same synID, with class set to {s:id_name},
-      " unless it has been concealed completely.
+      " Output the text with the same synID, with class set to the highlight ID
+      " name, unless it has been concealed completely.
       if strlen(s:expandedtab) > 0
-	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id_name, s:diff_id_name)
+	let s:new = s:new . s:HtmlFormat(s:expandedtab,  s:id, s:diff_id, 0)
       endif
     endwhile
   endif
@@ -1038,9 +1504,9 @@
   endwhile
 
   " add fold column to the style list if not already there
-  let s:id = hlID('FoldColumn')
-  if index(s:idlist, s:id) == -1
-    call insert(s:idlist, s:id)
+  let s:id = s:FOLD_C_ID
+  if !has_key(s:stylelist, s:id)
+    let s:stylelist[s:id] = '.FoldColumn { ' . s:CSS1(s:id) . '}'
   endif
 endif
 
@@ -1049,7 +1515,7 @@
     " Close off the font tag that encapsulates the whole <body>
     call extend(s:lines, ["</font>", "</body>", "</html>"])
   else
-    call extend(s:lines, ["</body>", "</html>"])
+    call extend(s:lines, ["</div>", "</body>", "</html>"])
   endif
 else
   call extend(s:lines, ["</pre>", "</body>", "</html>"])
@@ -1059,29 +1525,27 @@
 call setline(1, s:lines)
 unlet s:lines
 
+" Mangle modelines so Vim doesn't try to use HTML text as a modeline if editing
+" this file in the future; need to do this after generating all the text in case
+" the modeline text has different highlight groups which all turn out to be
+" stripped from the final output.
+%s!\v(%(^|\s+)%(vim?|ex)):!\1\&#0058;!ge
+
 " Now, when we finally know which, we define the colors and styles
 if s:settings.use_css
   1;/<style type="text/+1
 endif
 
-" Find out the background and foreground color.
-let s:fgc = s:HtmlColor(synIDattr(hlID("Normal"), "fg#", s:whatterm))
-let s:bgc = s:HtmlColor(synIDattr(hlID("Normal"), "bg#", s:whatterm))
-if s:fgc == ""
-  let s:fgc = ( &background == "dark" ? "#ffffff" : "#000000" )
-endif
-if s:bgc == ""
-  let s:bgc = ( &background == "dark" ? "#000000" : "#ffffff" )
-endif
-
 " Normal/global attributes
 " For Netscape 4, set <body> attributes too, though, strictly speaking, it's
 " incorrect.
 if s:settings.use_css
   if s:settings.no_pre
-    execute "normal! A\nbody { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }\e"
+    call append('.', "body { color: " . s:fgc . "; background-color: " . s:bgc . "; font-family: ". s:htmlfont ."; }")
+    +
   else
-    execute "normal! A\npre { " . s:whitespace . "font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }\e"
+    call append('.', "pre { " . s:whitespace . "font-family: ". s:htmlfont ."; color: " . s:fgc . "; background-color: " . s:bgc . "; }")
+    +
     yank
     put
     execute "normal! ^cwbody\e"
@@ -1090,64 +1554,85 @@
       exec 's#'.s:whitespace
     endif
   endif
+  " fix browser inconsistencies (sometimes within the same browser) of different
+  " default font size for different elements
+  call append('.', '* { font-size: 1em; }')
+  +
+  " if we use any input elements for unselectable content, make sure they look
+  " like normal text
+  if !empty(s:settings.prevent_copy)
+    call append('.', 'input { border: none; margin: 0; padding: 0; font-family: '.s:htmlfont.'; }')
+    +
+    " ch units for browsers which support them, em units for a somewhat
+    " reasonable fallback. Also make sure the special elements for size
+    " calculations aren't seen.
+    call append('.', [
+	  \ "input[size='1'] { width: 1em; width: 1ch; }",
+	  \ "input[size='2'] { width: 2em; width: 2ch; }",
+	  \ "input[size='3'] { width: 3em; width: 3ch; }",
+	  \ "input[size='4'] { width: 4em; width: 4ch; }",
+	  \ "input[size='5'] { width: 5em; width: 5ch; }",
+	  \ "input[size='6'] { width: 6em; width: 6ch; }",
+	  \ "input[size='7'] { width: 7em; width: 7ch; }",
+	  \ "input[size='8'] { width: 8em; width: 8ch; }",
+	  \ "input[size='9'] { width: 9em; width: 9ch; }",
+	  \ "input[size='10'] { width: 10em; width: 10ch; }",
+	  \ "input[size='11'] { width: 11em; width: 11ch; }",
+	  \ "input[size='12'] { width: 12em; width: 12ch; }",
+	  \ "input[size='13'] { width: 13em; width: 13ch; }",
+	  \ "input[size='14'] { width: 14em; width: 14ch; }",
+	  \ "input[size='15'] { width: 15em; width: 15ch; }",
+	  \ "input[size='16'] { width: 16em; width: 16ch; }",
+	  \ "input[size='17'] { width: 17em; width: 17ch; }",
+	  \ "input[size='18'] { width: 18em; width: 18ch; }",
+	  \ "input[size='19'] { width: 19em; width: 19ch; }",
+	  \ "input[size='20'] { width: 20em; width: 20ch; }",
+	  \ "#oneCharWidth, #oneEmWidth, #oneInputWidth { padding: 0; margin: 0; position: absolute; left: -999999px; visibility: hidden; }"
+	  \ ])
+    +21
+    for w in range(5, 100, 5)
+      let base = 0.01 * w
+      call append('.', join(map(range(1,20), "'.em'.w.' input[size='''.v:val.'''] { width: '.string(v:val*base).'em; }'")))
+      +
+    endfor
+    if s:settings.prevent_copy =~# 'f'
+    " Make the cursor show active fold columns as active areas, and empty fold
+    " columns as not interactive.
+      call append('.', ['input.FoldColumn { cursor: pointer; }',
+	    \ 'input.FoldColumn[value=""] { cursor: default; }'
+	    \ ])
+      +2
+    endif
+    " make line number column show as non-interactive if not selectable
+    if s:settings.prevent_copy =~# 'n'
+      call append('.', 'input.LineNr { cursor: default; }')
+      +
+    endif
+    " make fold text and line number column within fold text show as
+    " non-interactive if not selectable
+    if (s:settings.prevent_copy =~# 'n' || s:settings.prevent_copy =~# 't') && !s:settings.ignore_folding
+      call append('.', 'input.Folded { cursor: default; }')
+      +
+    endif
+  endif
 else
   execute '%s:<body>:<body bgcolor="' . s:bgc . '" text="' . s:fgc . '">\r<font face="'. s:htmlfont .'">'
 endif
 
-" Line numbering attributes
-if s:settings.number_lines
-  if s:settings.use_css
-    execute "normal! A\n.lnr { " . s:CSS1(hlID("LineNr")) . "}\e"
-  else
-    execute '%s+^<span class="lnr">\([^<]*\)</span>+' . s:HtmlOpening(hlID("LineNr")) . '\1' . s:HtmlClosing(hlID("LineNr")) . '+g'
+" Gather attributes for all other classes. Do diff first so that normal
+" highlight groups are inserted before it.
+if s:settings.use_css
+  if s:diff_mode
+    call append('.', filter(map(keys(s:diffstylelist), "s:diffstylelist[v:val]"), 'v:val != ""'))
+  endif
+  if !empty(s:stylelist)
+    call append('.', filter(map(keys(s:stylelist), "s:stylelist[v:val]"), 'v:val != ""'))
   endif
 endif
 
-" Gather attributes for all other classes
-if !s:settings.no_progress && !empty(s:idlist)
-  let s:pgb = s:ProgressBar("Processing classes:", len(s:idlist),s:newwin)
-endif
-while !empty(s:idlist)
-  let s:attr = ""
-  let s:id = remove(s:idlist, 0)
-  let s:attr = s:CSS1(s:id)
-  let s:id_name = synIDattr(s:id, "name", s:whatterm)
-
-  " If the class has some attributes, export the style, otherwise DELETE all
-  " its occurences to make the HTML shorter
-  if s:attr != ""
-    if s:settings.use_css
-      execute "normal! A\n." . s:id_name . " { " . s:attr . "}"
-    else
-      " replace spans of just this class name with non-CSS style markup
-      execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '\1' . s:HtmlClosing(s:id) . '+ge'
-      " Replace spans of this class name AND a diff class with non-CSS style
-      " markup surrounding a span of just the diff class. The diff class will
-      " be handled later because we know that information is at the end.
-      execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+' . s:HtmlOpening(s:id) . '<span class="\1">\2</span>' . s:HtmlClosing(s:id) . '+ge'
-    endif
-  else
-    execute '%s+<span class="' . s:id_name . '">\([^<]*\)</span>+\1+ge'
-    execute '%s+<span class="' . s:id_name . ' \(Diff\%(Add\|Change\|Delete\|Text\)\)">\([^<]*\)</span>+<span class="\1">\2</span>+ge'
-    if s:settings.use_css
-      1;/<\/style>/-2
-    endif
-  endif
-
-  if !s:settings.no_progress
-    call s:pgb.incr()
-    if s:pgb.needs_redraw
-      redrawstatus
-      let s:pgb.needs_redraw = 0
-      " TODO: sleep here to show the progress bar, but only if total time spent
-      " so far on this step is < 1 second? Too slow for batch runs like the test
-      " suite to sleep all the time. Maybe there's no good reason to sleep at
-      " all.
-    endif
-  endif
-endwhile
-
 " Add hyperlinks
+" TODO: add option to not do this? Maybe just make the color the same as the
+" text highlight group normally is?
 %s+\(https\=://\S\{-}\)\(\([.,;:}]\=\(\s\|$\)\)\|[\\"'<>]\|&gt;\|&lt;\|&quot;\)+<a href="\1">\1</a>\2+ge
 
 " The DTD
@@ -1201,14 +1686,15 @@
 unlet s:old_et s:old_paste s:old_icon s:old_report s:old_title s:old_search
 unlet s:old_magic s:old_more s:old_fdm s:old_fen s:old_winheight
 unlet! s:old_isprint
-unlet s:whatterm s:idlist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
-unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo
+unlet s:whatterm s:stylelist s:diffstylelist s:lnum s:end s:margin s:fgc s:bgc s:old_winfixheight
+unlet! s:col s:id s:attr s:len s:line s:new s:expandedtab s:concealinfo s:diff_mode
 unlet! s:orgwin s:newwin s:orgbufnr s:idx s:i s:offset s:ls s:origwin_stl
 unlet! s:newwin_stl s:current_syntax
 if !v:profiling
   delfunc s:HtmlColor
   delfunc s:HtmlFormat
   delfunc s:CSS1
+  delfunc s:BuildStyleWrapper
   if !s:settings.use_css
     delfunc s:HtmlOpening
     delfunc s:HtmlClosing
@@ -1226,8 +1712,8 @@
 endif
 
 unlet! s:new_lnum s:diffattr s:difffillchar s:foldfillchar s:HtmlSpace
-unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:foldcolumn
-unlet s:foldstack s:allfolds s:foldId s:numcol s:settings
+unlet! s:LeadingSpace s:HtmlEndline s:firstfold s:numcol s:foldcolumn
+unlet s:foldstack s:allfolds s:foldId s:settings
 
 let &cpo = s:cpo_sav
 unlet! s:cpo_sav
