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 endif
for lnum in range(1, min([line("$"), 50])) for lnum in range(1, min([line("$"), 50]))
let line = getline(lnum) 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 set ft=jinja.html | return
endif endif
if line =~# '\(\<\|\>\)DTD\s\+XHTML\s'
set ft=xhtml | return
endif
endfor endfor
set ft=html | return set ft=html | return
endfunc endfunc

View File

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

View File

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

View File

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