forked from mattn/webapi-vim
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhtml.vim
More file actions
74 lines (65 loc) · 2.26 KB
/
html.vim
File metadata and controls
74 lines (65 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
" html
" Last Change: 2010-09-10
" Maintainer: Yasuhiro Matsumoto <[email protected]>
" License: This file is placed in the public domain.
" Reference:
"
let s:save_cpo = &cpo
set cpo&vim
function! s:nr2byte(nr) abort
if a:nr < 0x80
return nr2char(a:nr)
elseif a:nr < 0x800
return nr2char(a:nr/64+192).nr2char(a:nr%64+128)
else
return nr2char(a:nr/4096%16+224).nr2char(a:nr/64%64+128).nr2char(a:nr%64+128)
endif
endfunction
function! s:nr2enc_char(charcode) abort
if &encoding == 'utf-8'
return nr2char(a:charcode)
endif
let char = s:nr2byte(a:charcode)
if strlen(char) > 1
let char = strtrans(iconv(char, 'utf-8', &encoding))
endif
return char
endfunction
function! webapi#html#decodeEntityReference(str) abort
let str = a:str
let str = substitute(str, '>', '>', 'g')
let str = substitute(str, '<', '<', 'g')
let str = substitute(str, '"', '"', 'g')
let str = substitute(str, ''', "'", 'g')
let str = substitute(str, ' ', ' ', 'g')
let str = substitute(str, '¥', '\¥', 'g')
let str = substitute(str, '&#\(\d\+\);', '\=s:nr2enc_char(submatch(1))', 'g')
let str = substitute(str, '&', '\&', 'g')
let str = substitute(str, '»', '>', 'g')
let str = substitute(str, '«', '<', 'g')
return str
endfunction
function! webapi#html#encodeEntityReference(str) abort
let str = a:str
let str = substitute(str, '&', '\&', 'g')
let str = substitute(str, '>', '\>', 'g')
let str = substitute(str, '<', '\<', 'g')
let str = substitute(str, "\n", '\
', 'g')
let str = substitute(str, '"', '\"', 'g')
let str = substitute(str, "'", '\'', 'g')
let str = substitute(str, ' ', '\ ', 'g')
return str
endfunction
function! webapi#html#parse(html) abort
let html = substitute(a:html, '<\(area\|base\|basefont\|br\|nobr\|col\|frame\|hr\|img\|input\|isindex\|link\|meta\|param\|embed\|keygen\|command\)\([^>]*[^/]\|\)>', '<\1\2/>', 'g')
return webapi#xml#parse(html)
endfunction
function! webapi#html#parseFile(fname) abort
return webapi#html#parse(join(readfile(a:fname), "\n"))
endfunction
function! webapi#html#parseURL(url) abort
return webapi#html#parse(webapi#http#get(a:url).content)
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et: