Improve html heuristics

This commit is contained in:
Adam Stankiewicz
2020-09-24 09:24:13 +02:00
parent c284af58fa
commit 6b4da27538
4 changed files with 21 additions and 9 deletions

View File

@@ -372,9 +372,12 @@ func! polyglot#DetectHtmlFiletype()
endif
for lnum in range(1, min([line("$"), 50]))
let line = getline(lnum)
if line =~# '{{.*}}\|{%-\=\s*\(end.*\|extends\|block\|macro\|set\|if\|for\|include\|trans\)\(\<\|\>\)'
if line =~# '{{.*}}\|{%-\=\s*\(end.*\|extends\|block\|macro\|set\|if\|for\|include\|trans\)\(\<\|\>\)\|{#\s\+'
set ft=jinja.html | return
endif
if line =~# '\(\<\|\>\)DTD\s\+XHTML\s'
set ft=xhtml | return
endif
endfor
set ft=html | return
endfunc

View File

@@ -181,7 +181,10 @@ rules:
pattern: '^(%|<[%&].*>)'
filetype: mason
- lines: 50
pattern: '{{.*}}|{%-?\s*(end.*|extends|block|macro|set|if|for|include|trans)\b'
filetype: jinja.html
rules:
- pattern: '{{.*}}|{%-?\s*(end.*|extends|block|macro|set|if|for|include|trans)\b|{#\s+'
filetype: jinja.html
- pattern: '\bDTD\s+XHTML\s'
filetype: xhtml
- filetype: html
fallback: true

View File

@@ -317,7 +317,7 @@ def rule_to_code(rule)
EOS
end
if (rule.keys - ["filetype", "override", "set", "extensions"]).size > 0
if (rule.keys - ["filetype", "override", "set", "extensions", "fallback"]).size > 0
raise "Unknown rule: #{JSON.generate(rule)}"
end
@@ -335,7 +335,11 @@ def rule_to_code(rule)
end
if rule.has_key?("filetype")
return "set ft=#{rule["filetype"]} | return"
if rule.has_key?("fallback")
return "set ft=#{rule["filetype"]} | return"
else
return "setf FALLBACK #{rule["filetype"]} | return"
end
end
if rule.has_key?("extensions")

View File

@@ -356,6 +356,8 @@ call TestExtension("tt2html", "html.tt2", "<html>")
call TestExtension("html", "empty.html", "")
call TestExtension("mason", "mason1.html", "% my $planet = 42;")
call TestExtension("mason", "mason2.html", "<%filter></%filter>")
call TestExtension("jinja.html", "jinja.html", "{{ item.href }}")
call TestExtension("jinja.html", "jinja.html", "{% for item in navigation %}{% endfor %}")
call TestExtension("jinja.html", "jinja.html", "{% block head %}")
call TestExtension("jinja.html", "jinja1.html", "{{ item.href }}")
call TestExtension("jinja.html", "jinja2.html", "{% for item in navigation %}{% endfor %}")
call TestExtension("jinja.html", "jinja3.html", "{% block head %}")
call TestExtension("jinja.html", "jinja4.html", "{# some comment #}")
call TestExtension("xhtml", "xhtml.html", "<DTD XHTML ")