Created
August 30, 2012 01:32
-
-
Save juanpabloaj/3521476 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
" http://vim.wikia.com/wiki/HTML_entities | |
" http://www.bigbaer.com/sidebars/entities/ | |
" FIXME: you don't know how to use the -range argument! (doesn't work) | |
command! -range HtmlEncode <line1>,<line2>call HtmlEntities('encode') | |
command! -range HtmlDecode <line1>,<line2>call HtmlEntities('decode') | |
" TODO: only accept full lines as a range; would be nice for arbitrary selection | |
function! HtmlEntities(action) range | |
" & -> & should be the first substitution | |
let entities = [ | |
\ ['&', '&'], | |
\ ['"', '"'], | |
\ ['<', '<'], | |
\ ['>', '>'], | |
\ ['¡', '¡'], | |
\ ['¢', '¢'], | |
\ ['£', '£'], | |
\ ['¤', '¤'], | |
\ ['Â¥', '¥'], | |
\ ['â¬', '€'], | |
\ ['¦', '¦'], | |
\ ['§', '§'], | |
\ ['¨', '¨'], | |
\ ['©', '©'], | |
\ ['ª', 'ª'], | |
\ ['«', '«'], | |
\ ['¬', '¬'], | |
\ ['®', '®'], | |
\ ['â¢', '™'], | |
\ ['¯', '¯'], | |
\ ['°', '°'], | |
\ ['±', '±'], | |
\ ['²', '²'], | |
\ ['³', '³'], | |
\ ['´', '´'], | |
\ ['µ', 'µ'], | |
\ ['¶', '¶'], | |
\ ['·', '·'], | |
\ ['¸', '¸'], | |
\ ['¹', '¹'], | |
\ ['º', 'º'], | |
\ ['»', '»'], | |
\ ['¼', '¼'], | |
\ ['½', '½'], | |
\ ['¾', '¾'], | |
\ ['¿', '¿'], | |
\ ['Ã', '×'], | |
\ ['÷', '÷'], | |
\ ['Ã', 'À'], | |
\ ['Ã', 'Á'], | |
\ ['Ã', 'Â'], | |
\ ['Ã', 'Ã'], | |
\ ['Ã', 'Ä'], | |
\ ['Ã ', 'Å'], | |
\ ['Ã', 'Æ'], | |
\ ['Ã', 'Ç'], | |
\ ['Ã', 'È'], | |
\ ['Ã', 'É'], | |
\ ['Ã', 'Ê'], | |
\ ['Ã', 'Ë'], | |
\ ['Ã', 'Ì'], | |
\ ['Ã', 'Í'], | |
\ ['Ã', 'Î'], | |
\ ['Ã', 'Ï'], | |
\ ['Ã', 'Ð'], | |
\ ['Ã', 'Ñ'], | |
\ ['Ã', 'Ò'], | |
\ ['Ã', 'Ó'], | |
\ ['Ã', 'Ô'], | |
\ ['Ã', 'Õ'], | |
\ ['Ã', 'Ö'], | |
\ ['Ã', 'Ø'], | |
\ ['Ã', 'Ù'], | |
\ ['Ã', 'Ú'], | |
\ ['Ã', 'Û'], | |
\ ['Ã', 'Ü'], | |
\ ['Ã', 'Ý'], | |
\ ['Ã', 'Þ'], | |
\ ['Ã', 'ß'], | |
\ ['Ã ', 'à'], | |
\ ['á', 'á'], | |
\ ['â', 'â'], | |
\ ['ã', 'ã'], | |
\ ['ä', 'ä'], | |
\ ['Ã¥', 'å'], | |
\ ['æ', 'æ'], | |
\ ['ç', 'ç'], | |
\ ['è', 'è'], | |
\ ['é', 'é'], | |
\ ['ê', 'ê'], | |
\ ['ë', 'ë'], | |
\ ['ì', 'ì'], | |
\ ['Ã', 'í'], | |
\ ['î', 'î'], | |
\ ['ï', 'ï'], | |
\ ['ð', 'ð'], | |
\ ['ñ', 'ñ'], | |
\ ['ò', 'ò'], | |
\ ['ó', 'ó'], | |
\ ['ô', 'ô'], | |
\ ['õ', 'õ'], | |
\ ['ö', 'ö'], | |
\ ['ø', 'ø'], | |
\ ['ù', 'ù'], | |
\ ['ú', 'ú'], | |
\ ['û', 'û'], | |
\ ['ü', 'ü'], | |
\ ['ý', 'ý'], | |
\ ['þ', 'þ'], | |
\ ['ÿ', 'ÿ'], | |
\ ['Å', 'Œ'], | |
\ ['Å', 'œ'], | |
\ ['Å ', 'Š'], | |
\ ['Å¡', 'š'], | |
\ ['Ÿ', 'Ÿ'], | |
\ ['Ë', 'ˆ'], | |
\ ['Ë', '&tilde'], | |
\ ['â', '‌'], | |
\ ['â', '‍'], | |
\ ['â', '‎'], | |
\ ['â', '‏'], | |
\ ['â', '–'], | |
\ ['â', '—'], | |
\ ['â', '‘'], | |
\ ['â', '’'], | |
\ ['â', '‚'], | |
\ ['â', '“'], | |
\ ['â', '”'], | |
\ ['â', '„'], | |
\ ['â ', '†'], | |
\ ['â¡', '‡'], | |
\ ['â°', '‰'], | |
\ ['â¹', '‹'], | |
\ ['âº', '›'], | |
\ ['Æ', 'ƒ'], | |
\ ['â¢', '•'], | |
\ ['â¦', '…'], | |
\ ['â²', '′'], | |
\ ['â³', '″'], | |
\ ['â¾', '‾'], | |
\ ['â', '⁄'], | |
\ ['â', '℘'], | |
\ ['â', 'ℑ'], | |
\ ['â', 'ℜ'], | |
\ ['âµ', 'ℵ'], | |
\ ['â', '←'], | |
\ ['â', '↑'], | |
\ ['â', '→'], | |
\ ['â', '↓'], | |
\ ['â', '↔'], | |
\ ['âµ', '↵'], | |
\ ['â', '⇐'], | |
\ ['â', '⇑'], | |
\ ['â', '⇒'], | |
\ ['â', '⇓'], | |
\ ['â', '⇔'], | |
\ ['â', '∀'], | |
\ ['â', '∂'], | |
\ ['â', '∃'], | |
\ ['â ', '∅'], | |
\ ['â', '∇'], | |
\ ['â', '∈'], | |
\ ['â', '∉'], | |
\ ['â', '∋'], | |
\ ['â', '∏'], | |
\ ['â', '∑'], | |
\ ['â', '−'], | |
\ ['â', '∗'], | |
\ ['â', '√'], | |
\ ['â', '∝'], | |
\ ['â', '∞'], | |
\ ['â ', '∠'], | |
\ ['â§', '∧'], | |
\ ['â¨', '∨'], | |
\ ['â©', '∩'], | |
\ ['âª', '∪'], | |
\ ['â«', '∫'], | |
\ ['â´', '∴'], | |
\ ['â¼', '∼'], | |
\ ['â ', '≅'], | |
\ ['â', '≈'], | |
\ ['â ', '≠'], | |
\ ['â¡', '≡'], | |
\ ['â¤', '≤'], | |
\ ['â¥', '≥'], | |
\ ['â', '⊂'], | |
\ ['â', '⊃'], | |
\ ['â', '⊄'], | |
\ ['â', '⊆'], | |
\ ['â', '⊇'], | |
\ ['â', '⊕'], | |
\ ['â', '⊗'], | |
\ ['â¥', '⊥'], | |
\ ['â ', '⋅'], | |
\ ['â', '⌈'], | |
\ ['â', '⌉'], | |
\ ['â', '⌊'], | |
\ ['â', '⌋'], | |
\ ['â¨', '⟨'], | |
\ ['â©', '⟩'], | |
\ ['â', '◊'], | |
\ ['â ', '℠'], | |
\ ['â', '℃'], | |
\ ['â ', '℅'], | |
\ ['â', '℉'], | |
\ ['â', '№'], | |
\ ['â', '℗'], | |
\ ['â', '℞'], | |
\ ['Ω', 'Ω'], | |
\ ['â§', '℧'], | |
\ ['â', '☀'], | |
\ ['â', '☁'], | |
\ ['â', '☂'], | |
\ ['â', '☃'], | |
\ ['â', '☄'], | |
\ ['â ', '★'], | |
\ ['â', '☆'], | |
\ ['â', '☇'], | |
\ ['â', '☈'], | |
\ ['â', '☉'], | |
\ ['â', '☊'], | |
\ ['â', '☋'], | |
\ ['â', '☌'], | |
\ ['â', '☍'], | |
\ ['â', '☎'], | |
\ ['â', '☏'], | |
\ ['â', '☐'], | |
\ ['â', '☑'], | |
\ ['â', '☒'], | |
\ ['â', '☓'], | |
\ ['â', '☚'], | |
\ ['â', '☛'], | |
\ ['â', '☜'], | |
\ ['â', '☝'], | |
\ ['â', '☞'], | |
\ ['â', '☟'], | |
\ ['â ', '☠'], | |
\ ['â¡', '☡'], | |
\ ['â¢', '☢'], | |
\ ['â£', '☣'], | |
\ ['â¤', '☤'], | |
\ ['â¥', '☥'], | |
\ ['â¦', '☦'], | |
\ ['â§', '☧'], | |
\ ['â¨', '☨'], | |
\ ['â©', '☩'], | |
\ ['âª', '☪'], | |
\ ['â«', '☫'], | |
\ ['â¬', '☬'], | |
\ ['â', '☭'], | |
\ ['â®', '☮'], | |
\ ['â¯', '☯'], | |
\ ['â°', '☰'], | |
\ ['â±', '☱'], | |
\ ['â²', '☲'], | |
\ ['â³', '☳'], | |
\ ['â´', '☴'], | |
\ ['âµ', '☵'], | |
\ ['â¶', '☶'], | |
\ ['â·', '☷'], | |
\ ['â¸', '☸'], | |
\ ['â¹', '☹'], | |
\ ['âº', '☺'], | |
\ ['â»', '☻'], | |
\ ['â½', '☽'], | |
\ ['â¾', '☾'], | |
\ ['â¿', '☿'], | |
\ ['â', '♀'], | |
\ ['â', '♁'], | |
\ ['â', '♂'], | |
\ ['â', '♃'], | |
\ ['â', '♄'], | |
\ ['â ', '♅'], | |
\ ['â', '♆'], | |
\ ['â', '♇'], | |
\ ['â', '♈'], | |
\ ['â', '♉'], | |
\ ['â', '♊'], | |
\ ['â', '♋'], | |
\ ['â', '♌'], | |
\ ['â', '♍'], | |
\ ['â', '♎'], | |
\ ['â', '♏'], | |
\ ['â', '♐'], | |
\ ['â', '♑'], | |
\ ['â', '♒'], | |
\ ['â', '♓'], | |
\ ['â', '♔'], | |
\ ['â', '♕'], | |
\ ['â', '♖'], | |
\ ['â', '♗'], | |
\ ['â', '♘'], | |
\ ['â', '♙'], | |
\ ['â', '♚'], | |
\ ['â', '♛'], | |
\ ['â', '♜'], | |
\ ['â', '♝'], | |
\ ['â', '♞'], | |
\ ['â', '♟'], | |
\ ['â ', '♠'], | |
\ ['â¡', '♡'], | |
\ ['â¢', '♢'], | |
\ ['â£', '♣'], | |
\ ['â¤', '♤'], | |
\ ['â¥', '♥'], | |
\ ['â¦', '♦'], | |
\ ['â§', '♧'], | |
\ ['â¨', '♨'], | |
\ ['â©', '♩'], | |
\ ['âª', '♪'], | |
\ ['â«', '♫'], | |
\ ['â¬', '♬'], | |
\ ['â', '♭'], | |
\ ['â®', '♮'], | |
\ ['â¯', '♯'], | |
\ ['â', '✁'], | |
\ ['â', '✂'], | |
\ ['â', '✃'], | |
\ ['â', '✄'], | |
\ ['â', '✆'], | |
\ ['â', '✇'], | |
\ ['â', '✈'], | |
\ ['â', '✉'], | |
\ ['â', '✌'], | |
\ ['â', '✍'], | |
\ ['â', '✎'], | |
\ ['â', '✏'], | |
\ ['â', '✓'], | |
\ ['â', '✔'], | |
\ ['â', '𘚥'], | |
\ ['â', '✖'], | |
\ ['â', '✗'], | |
\ ['â', '✘'], | |
\ ['â', '✝'], | |
\ ['â', '✞'], | |
\ ['â', '✟'], | |
\ ['â ', '✠'], | |
\ ['â¡', '✡'], | |
\ ['â', '❛'], | |
\ ['â', '❜'], | |
\ ['â', '❝'], | |
\ ['â', '❞'], | |
\ ['Î', 'Α'], | |
\ ['Î', 'Β'], | |
\ ['Î', 'Γ'], | |
\ ['Î', 'Δ'], | |
\ ['Î', 'Ε'], | |
\ ['Î', 'Ζ'], | |
\ ['Î', 'Η'], | |
\ ['Î', 'Θ'], | |
\ ['Î', 'Ι'], | |
\ ['Î', 'Κ'], | |
\ ['Î', 'Λ'], | |
\ ['Î', 'Μ'], | |
\ ['Î', 'Ν'], | |
\ ['Î', 'Ξ'], | |
\ ['Î', 'Ο'], | |
\ ['Î ', 'Π'], | |
\ ['Ρ', 'Ρ'], | |
\ ['Σ', 'Σ'], | |
\ ['Τ', 'Τ'], | |
\ ['Î¥', 'Υ'], | |
\ ['Φ', 'Φ'], | |
\ ['Χ', 'Χ'], | |
\ ['Ψ', 'Ψ'], | |
\ ['Ω', 'Ω'], | |
\ ['α', 'α'], | |
\ ['β', 'β'], | |
\ ['γ', 'γ'], | |
\ ['δ', 'δ'], | |
\ ['ε', 'ε'], | |
\ ['ζ', 'ζ'], | |
\ ['η', 'η'], | |
\ ['θ', 'θ'], | |
\ ['ι', 'ι'], | |
\ ['κ', 'κ'], | |
\ ['λ', 'λ'], | |
\ ['μ', 'μ'], | |
\ ['ν', 'ν'], | |
\ ['ξ', 'ξ'], | |
\ ['ο', 'ο'], | |
\ ['Ï', 'π'], | |
\ ['Ï', 'ρ'], | |
\ ['Ï', 'ς'], | |
\ ['Ï', 'σ'], | |
\ ['Ï', 'τ'], | |
\ ['Ï ', 'υ'], | |
\ ['Ï', 'φ'], | |
\ ['Ï', 'χ'], | |
\ ['Ï', 'ψ'], | |
\ ['Ï', 'ω'], | |
\ ['Ï', 'ϑ'], | |
\ ['Ï', 'ϒ'], | |
\ ['Ï', 'ϖ'] | |
\] | |
if a:action == 'encode' | |
let pat = 0 | |
let sub = 1 | |
elseif a:action == 'decode' | |
let pat = 1 | |
let sub = 0 | |
else | |
return | |
endif | |
for pair in entities | |
let substitution = substitute(pair[sub], '&', '\\\&', 'g') | |
execute 'silent '.a:firstline.','.a:lastline.'s/'.pair[pat].'/'.substitution.'/eg' | |
endfor | |
endfunction |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment