From 1a096f0901264629947afb89436019895e5e7ef5 Mon Sep 17 00:00:00 2001 From: Adam Stankiewicz Date: Wed, 9 Jun 2021 16:54:25 +0200 Subject: Fix script indentation inside html, closes #693 --- after/ftplugin/html.vim | 13 - after/indent/html.vim | 1064 ------------------------------------- after/syntax/html.vim | 186 +------ after/syntax/html/aria.vim | 79 --- after/syntax/html/electron.vim | 19 - after/syntax/html/rdfa.vim | 15 - after/syntax/javascript/html5.vim | 53 -- 7 files changed, 1 insertion(+), 1428 deletions(-) delete mode 100644 after/ftplugin/html.vim delete mode 100644 after/indent/html.vim delete mode 100644 after/syntax/html/aria.vim delete mode 100644 after/syntax/html/electron.vim delete mode 100644 after/syntax/html/rdfa.vim delete mode 100644 after/syntax/javascript/html5.vim (limited to 'after') diff --git a/after/ftplugin/html.vim b/after/ftplugin/html.vim deleted file mode 100644 index 5a6b963e..00000000 --- a/after/ftplugin/html.vim +++ /dev/null @@ -1,13 +0,0 @@ -if polyglot#init#is_disabled(expand(':p'), 'html5', 'after/ftplugin/html.vim') - finish -endif - -" Maintainer: othree -" URL: http://github.com/othree/html5.vim -" Last Change: 2014-05-02 -" License: MIT -" Changes: Add - to keyword - -" setlocal iskeyword+=- - -setlocal commentstring= diff --git a/after/indent/html.vim b/after/indent/html.vim deleted file mode 100644 index 67728aac..00000000 --- a/after/indent/html.vim +++ /dev/null @@ -1,1064 +0,0 @@ -if polyglot#init#is_disabled(expand(':p'), 'html5', 'after/indent/html.vim') - finish -endif - -" Vim indent script for HTML -" Header: "{{{ -" Maintainer: Bram Moolenaar -" Original Author: Andy Wokula -" Last Change: 2017 Jun 13 -" Version: 1.0 -" Description: HTML indent script with cached state for faster indenting on a -" range of lines. -" Supports template systems through hooks. -" Supports Closure stylesheets. -" -" Credits: -" indent/html.vim (2006 Jun 05) from J. Zellner -" indent/css.vim (2006 Dec 20) from N. Weibull -" -" History: -" 2014 June (v1.0) overhaul (Bram) -" 2012 Oct 21 (v0.9) added support for shiftwidth() -" 2011 Sep 09 (v0.8) added HTML5 tags (thx to J. Zuckerman) -" 2008 Apr 28 (v0.6) revised customization -" 2008 Mar 09 (v0.5) fixed 'indk' issue (thx to C.J. Robinson) -"}}} - -" Init Folklore, check user settings (2nd time ++) -if exists("b:did_indent") "{{{ - finish -endif - -" Load the Javascript indent script first, it defines GetJavascriptIndent(). -" Undo the rest. -" Load base python indent. -if !exists('*GetJavascriptIndent') - runtime! indent/javascript.vim -endif -let b:did_indent = 1 - -setlocal indentexpr=HtmlIndent() -setlocal indentkeys=o,O,,<>>,{,},!^F - -" Needed for % to work when finding start/end of a tag. -setlocal matchpairs+=<:> - -let b:undo_indent = "setlocal inde< indk<" - -" b:hi_indent keeps state to speed up indenting consecutive lines. -let b:hi_indent = {"lnum": -1} - -"""""" Code below this is loaded only once. """"" -if exists("*HtmlIndent") && !exists('g:force_reload_html') - call HtmlIndent_CheckUserSettings() - finish -endif - -" Allow for line continuation below. -let s:cpo_save = &cpo -set cpo-=C -"}}} - -" Check and process settings from b:html_indent and g:html_indent... variables. -" Prefer using buffer-local settings over global settings, so that there can -" be defaults for all HTML files and exceptions for specific types of HTML -" files. -func! HtmlIndent_CheckUserSettings() - "{{{ - let inctags = '' - if exists("b:html_indent_inctags") - let inctags = b:html_indent_inctags - elseif exists("g:html_indent_inctags") - let inctags = g:html_indent_inctags - endif - let b:hi_tags = {} - if len(inctags) > 0 - call s:AddITags(b:hi_tags, split(inctags, ",")) - endif - - let autotags = '' - if exists("b:html_indent_autotags") - let autotags = b:html_indent_autotags - elseif exists("g:html_indent_autotags") - let autotags = g:html_indent_autotags - endif - let b:hi_removed_tags = {} - if len(autotags) > 0 - call s:RemoveITags(b:hi_removed_tags, split(autotags, ",")) - endif - - " Syntax names indicating being inside a string of an attribute value. - let string_names = [] - if exists("b:html_indent_string_names") - let string_names = b:html_indent_string_names - elseif exists("g:html_indent_string_names") - let string_names = g:html_indent_string_names - endif - let b:hi_insideStringNames = ['htmlString'] - if len(string_names) > 0 - for s in string_names - call add(b:hi_insideStringNames, s) - endfor - endif - - " Syntax names indicating being inside a tag. - let tag_names = [] - if exists("b:html_indent_tag_names") - let tag_names = b:html_indent_tag_names - elseif exists("g:html_indent_tag_names") - let tag_names = g:html_indent_tag_names - endif - let b:hi_insideTagNames = ['htmlTag', 'htmlScriptTag'] - if len(tag_names) > 0 - for s in tag_names - call add(b:hi_insideTagNames, s) - endfor - endif - - let indone = {"zero": 0 - \,"auto": "indent(prevnonblank(v:lnum-1))" - \,"inc": "b:hi_indent.blocktagind + shiftwidth()"} - - let script1 = '' - if exists("b:html_indent_script1") - let script1 = b:html_indent_script1 - elseif exists("g:html_indent_script1") - let script1 = g:html_indent_script1 - endif - if len(script1) > 0 - let b:hi_js1indent = get(indone, script1, indone.zero) - else - let b:hi_js1indent = 0 - endif - - let style1 = '' - if exists("b:html_indent_style1") - let style1 = b:html_indent_style1 - elseif exists("g:html_indent_style1") - let style1 = g:html_indent_style1 - endif - if len(style1) > 0 - let b:hi_css1indent = get(indone, style1, indone.zero) - else - let b:hi_css1indent = 0 - endif - - if !exists('b:html_indent_line_limit') - if exists('g:html_indent_line_limit') - let b:html_indent_line_limit = g:html_indent_line_limit - else - let b:html_indent_line_limit = 200 - endif - endif -endfunc "}}} - -" Init Script Vars -"{{{ -let b:hi_lasttick = 0 -let b:hi_newstate = {} -let s:countonly = 0 - "}}} - -" Fill the s:indent_tags dict with known tags. -" The key is "tagname" or "/tagname". {{{ -" The value is: -" 1 opening tag -" 2 "pre" -" 3 "script" -" 4 "style" -" 5 comment start -" 6 conditional comment start -" -1 closing tag -" -2 "/pre" -" -3 "/script" -" -4 "/style" -" -5 comment end -" -6 conditional comment end -let s:indent_tags = {} -let s:endtags = [0,0,0,0,0,0,0] " long enough for the highest index -"}}} - -" Add a list of tag names for a pair of to "tags". -func! s:AddITags(tags, taglist) - "{{{ - for itag in a:taglist - let a:tags[itag] = 1 - let a:tags['/' . itag] = -1 - endfor -endfunc "}}} - -" Take a list of tag name pairs that are not to be used as tag pairs. -func! s:RemoveITags(tags, taglist) - "{{{ - for itag in a:taglist - let a:tags[itag] = 1 - let a:tags['/' . itag] = 1 - endfor -endfunc "}}} - -" Add a block tag, that is a tag with a different kind of indenting. -func! s:AddBlockTag(tag, id, ...) - "{{{ - if !(a:id >= 2 && a:id < len(s:endtags)) - echoerr 'AddBlockTag ' . a:id - return - endif - let s:indent_tags[a:tag] = a:id - if a:0 == 0 - let s:indent_tags['/' . a:tag] = -a:id - let s:endtags[a:id] = "" - else - let s:indent_tags[a:1] = -a:id - let s:endtags[a:id] = a:1 - endif -endfunc "}}} - -" Add known tag pairs. -" Self-closing tags and tags that are sometimes {{{ -" self-closing (e.g.,

) are not here (when encountering

we can find -" the matching

, but not the other way around). -" Old HTML tags: -call s:AddITags(s:indent_tags, [ - \ 'a', 'abbr', 'acronym', 'address', 'b', 'bdo', 'big', - \ 'blockquote', 'body', 'button', 'caption', 'center', 'cite', 'code', - \ 'colgroup', 'del', 'dfn', 'dir', 'div', 'dl', 'em', 'fieldset', 'font', - \ 'form', 'frameset', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'html', - \ 'i', 'iframe', 'ins', 'kbd', 'label', 'legend', 'li', - \ 'map', 'menu', 'noframes', 'noscript', 'object', 'ol', - \ 'optgroup', 'p', 'q', 's', 'samp', 'select', 'small', 'span', 'strong', 'sub', - \ 'sup', 'table', 'textarea', 'title', 'tt', 'u', 'ul', 'var', 'th', 'td', - \ 'tr', 'tbody', 'tfoot', 'thead']) - -" New HTML5 elements: -call s:AddITags(s:indent_tags, [ - \ 'area', 'article', 'aside', 'audio', 'bdi', 'canvas', - \ 'command', 'data', 'datalist', 'details', 'dislog', 'embed', 'figcaption', - \ 'figure', 'footer', 'header', 'keygen', 'main', 'mark', 'meter', 'nav', 'output', - \ 'picture', 'progress', 'rp', 'rt', 'ruby', 'section', 'source', 'summary', 'svg', - \ 'time', 'track', 'video', 'wbr']) - -" Tags added for web components: -call s:AddITags(s:indent_tags, [ - \ 'content', 'shadow', 'template']) -"}}} - -" Add Block Tags: these contain alien content -"{{{ -call s:AddBlockTag('pre', 2) -call s:AddBlockTag('script', 3) -call s:AddBlockTag('style', 4) -call s:AddBlockTag('') -call s:AddBlockTag('') -"}}} - -" Return non-zero when "tagname" is an opening tag, not being a block tag, for -" which there should be a closing tag. Can be used by scripts that include -" HTML indenting. -func! HtmlIndent_IsOpenTag(tagname) - "{{{ - if get(s:indent_tags, a:tagname) == 1 - return 1 - endif - return get(b:hi_tags, a:tagname) == 1 -endfunc "}}} - -" Get the value for "tagname", taking care of buffer-local tags. -func! s:get_tag(tagname) - "{{{ - let i = get(s:indent_tags, a:tagname) - if (i == 1 || i == -1) && get(b:hi_removed_tags, a:tagname) != 0 - return 0 - endif - if i == 0 - let i = get(b:hi_tags, a:tagname) - endif - return i -endfunc "}}} - -" Count the number of start and end tags in "text". -func! s:CountITags(text) - "{{{ - " Store the result in s:curind and s:nextrel. - let s:curind = 0 " relative indent steps for current line [unit &sw]: - let s:nextrel = 0 " relative indent steps for next line [unit &sw]: - let s:block = 0 " assume starting outside of a block - let s:countonly = 1 " don't change state - call substitute(a:text, '<\zs/\=\w\+\(-\w\+\)*\>\|\|', '\=s:CheckTag(submatch(0))', 'g') - let s:countonly = 0 -endfunc "}}} - -" Count the number of start and end tags in text. -func! s:CountTagsAndState(text) - "{{{ - " Store the result in s:curind and s:nextrel. Update b:hi_newstate.block. - let s:curind = 0 " relative indent steps for current line [unit &sw]: - let s:nextrel = 0 " relative indent steps for next line [unit &sw]: - - let s:block = b:hi_newstate.block - let tmp = substitute(a:text, '<\zs/\=\w\+\(-\w\+\)*\>\|\|', '\=s:CheckTag(submatch(0))', 'g') - if s:block == 3 - let b:hi_newstate.scripttype = s:GetScriptType(matchstr(tmp, '\C.*\zs[^>]*')) - endif - let b:hi_newstate.block = s:block -endfunc "}}} - -" Used by s:CountITags() and s:CountTagsAndState(). -func! s:CheckTag(itag) - "{{{ - " Returns an empty string or "SCRIPT". - " a:itag can be "tag" or "/tag" or "" - if (s:CheckCustomTag(a:itag)) - return "" - endif - let ind = s:get_tag(a:itag) - if ind == -1 - " closing tag - if s:block != 0 - " ignore itag within a block - return "" - endif - if s:nextrel == 0 - let s:curind -= 1 - else - let s:nextrel -= 1 - endif - elseif ind == 1 - " opening tag - if s:block != 0 - return "" - endif - let s:nextrel += 1 - elseif ind != 0 - " block-tag (opening or closing) - return s:CheckBlockTag(a:itag, ind) - " else ind==0 (other tag found): keep indent - endif - return "" -endfunc "}}} - -" Used by s:CheckTag(). Returns an empty string or "SCRIPT". -func! s:CheckBlockTag(blocktag, ind) - "{{{ - if a:ind > 0 - " a block starts here - if s:block != 0 - " already in a block (nesting) - ignore - " especially ignore comments after other blocktags - return "" - endif - let s:block = a:ind " block type - if s:countonly - return "" - endif - let b:hi_newstate.blocklnr = v:lnum - " save allover indent for the endtag - let b:hi_newstate.blocktagind = b:hi_indent.baseindent + (s:nextrel + s:curind) * shiftwidth() - if a:ind == 3 - return "SCRIPT" " all except this must be lowercase - " line is to be checked again for the type attribute - endif - else - let s:block = 0 - " we get here if starting and closing a block-tag on the same line - endif - return "" -endfunc "}}} - -" Used by s:CheckTag(). -func! s:CheckCustomTag(ctag) - "{{{ - " Returns 1 if ctag is the tag for a custom element, 0 otherwise. - " a:ctag can be "tag" or "/tag" or "" - let pattern = '\%\(\w\+-\)\+\w\+' - if match(a:ctag, pattern) == -1 - return 0 - endif - if matchstr(a:ctag, '\/\ze.\+') == "/" - " closing tag - if s:block != 0 - " ignore ctag within a block - return 1 - endif - if s:nextrel == 0 - let s:curind -= 1 - else - let s:nextrel -= 1 - endif - else - " opening tag - if s:block != 0 - return 1 - endif - let s:nextrel += 1 - endif - return 1 -endfunc "}}} - -" Return the