From 554e0c02f5226021e63961c983b4597ec8fa1503 Mon Sep 17 00:00:00 2001 From: mattn Date: Wed, 5 Feb 2014 18:40:39 +0900 Subject: [PATCH] Look Content-Type for ^YA. closes #188 --- autoload/emmet/util.vim | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/autoload/emmet/util.vim b/autoload/emmet/util.vim index f73c96f..296e7af 100644 --- a/autoload/emmet/util.vim +++ b/autoload/emmet/util.vim @@ -150,18 +150,38 @@ endfunction " html utils "============================================================================== function! emmet#util#getContentFromURL(url) - let res = system(printf("%s %s", g:emmet_curl_command, shellescape(substitute(a:url, '#.*', '', '')))) - let charset = matchstr(res, ']\+content=["''][^;"'']\+;\s*charset=\zs[^;"'']\+\ze["''][^>]*>') + let res = system(printf("%s -i %s", g:emmet_curl_command, shellescape(substitute(a:url, '#.*', '', '')))) + while res =~ '^HTTP/1.\d 3' || res =~ '^HTTP/1\.\d 200 Connection established' || res =~ '^HTTP/1\.\d 100 Continue' + let pos = stridx(res, "\r\n\r\n") + if pos != -1 + let res = strpart(res, pos+4) + else + let pos = stridx(res, "\n\n") + let res = strpart(res, pos+2) + endif + endwhile + let pos = stridx(res, "\r\n\r\n") + if pos != -1 + let content = strpart(res, pos+4) + else + let pos = stridx(res, "\n\n") + let content = strpart(res, pos+2) + endif + let header = res[:pos-1] + let charset = matchstr(content, ']\+content=["''][^;"'']\+;\s*charset=\zs[^;"'']\+\ze["''][^>]*>') if len(charset) == 0 - let charset = matchstr(res, ']*>') + let charset = matchstr(content, ']*>') endif if len(charset) == 0 - let s1 = len(split(res, '?')) - let utf8 = iconv(res, 'utf-8', &encoding) + let charset = matchstr(header, '\nContent-Type:.* charset=[''"]\?\zs[^''";\n]\+\ze') + endif + if len(charset) == 0 + let s1 = len(split(content, '?')) + let utf8 = iconv(content, 'utf-8', &encoding) let s2 = len(split(utf8, '?')) - return (s2 == s1 || s2 >= s1 * 2) ? utf8 : res + return (s2 == s1 || s2 >= s1 * 2) ? utf8 : content endif - return iconv(res, charset, &encoding) + return iconv(content, charset, &encoding) endfunction function! emmet#util#getTextFromHTML(buf)