" html
" Last Change: 2010-09-10
" Maintainer: Yasuhiro Matsumoto
" License: This file is placed in the public domain.
" Reference:
"
let s:save_cpo = &cpo
set cpo&vim
function! s:nr2byte(nr)
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)
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)
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)
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)
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)
return webapi#html#parse(join(readfile(a:fname), "\n"))
endfunction
function! webapi#html#parseURL(url)
return webapi#html#parse(webapi#http#get(a:url).content)
endfunction
let &cpo = s:save_cpo
unlet s:save_cpo
" vim:set et: