Nimbin[12]?Mirrors & Forks / syntastic / commits / fca2caf1

syntastic git · master

syntastic vim plugin (fork)

vim fork · first commit 2009-07-10 · last commit 2022-07-10 (4 years ago) · synced 3 days ago · upstream: github.com/vim-syntastic/syntastic

Vim Script 99%
git clone https://git.christianimmanuel.de/mirrors-forks/syntastic.gitwget https://git.christianimmanuel.de/mirrors-forks/syntastic/archive/syntastic.tar.gz

Checker html/w3: Add support for SVG and XHTML

Kevin Locke · 2019-01-28 19:02 · fca2caf1e02575d1684e7c608d8cf2d9562cd8c6

Apply the same changes that were applied to html/validator in
vim-syntastic/syntastic#2241 to w3/html so that it can be used to
validate SVG and XHTML as well.

Add support for `g:syntastic_{type}_w3_doctype` to control the doctype
POST parameter sent to the validator.  This is necessary for SVG without
a DTD (which would otherwise be validated as generic XML) and useful for
all the types to control validation.

Signed-off-by: Kevin Locke <kevin@kevinlocke.name>
 doc/syntastic-checkers.txt   | 186 +++++++++++++++++++++++++++++++++++++++++--
 syntax_checkers/html/w3.vim  |  55 ++++++++++---
 syntax_checkers/svg/w3.vim   |  23 ++++++
 syntax_checkers/xhtml/w3.vim |  23 ++++++
 4 files changed, 272 insertions(+), 15 deletions(-)

diff --git a/doc/syntastic-checkers.txt b/doc/syntastic-checkers.txt
index 9f9d8b0f..cb897e17 100644
--- a/doc/syntastic-checkers.txt
+++ b/doc/syntastic-checkers.txt
@@ -3175,7 +3175,7 @@ details:
     https://validator.w3.org/source/
 
 As a syntastic linter, you can validate your files against the online service
-(see http://validator.w3.org/), or you can install it from sources and run it
+(see https://validator.w3.org/), or you can install it from sources and run it
 as a local service:
 
     https://github.com/w3c/markup-validator/
@@ -3184,17 +3184,37 @@ Requirement~
 
 This checker uses cURL:
 
-    http://curl.haxx.se/
+    https://curl.haxx.se/
 
 Checker options~
 
                                                    *'g:syntastic_html_w3_api'*
 Type: string
-Default: "http://validator.w3.org/check"
+Default: "https://validator.w3.org/check"
 URL of the service to use for checking. Leave it to the default to
-run the checks against "http://validator.w3.org/", or set it to
+run the checks against "https://validator.w3.org/", or set it to
 "http://localhost/w3c-validator/check" if you're running a local service.
 
+                                               *'g:syntastic_html_w3_doctype'*
+Type: string
+Default: ""
+Name of the document type definition to use for checking.  If unspecified, the
+type is detected from the file content.  Currently supported values for HTML:
+
+  - HTML5
+  - HTML 4.01 Strict
+  - HTML 4.01 Transitional
+  - HTML 4.01 Frameset
+  - HTML 4.01 + RDFa 1.1
+  - HTML 3.2
+  - HTML 2.0
+  - ISO/IEC 15445:2000 ("ISO HTML")
+
+References:
+
+    https://github.com/w3c/markup-validator/blob/master/htdocs/doctype-select.html
+    https://github.com/w3c/markup-validator/blob/master/htdocs/config/types.conf
+
                                                   *'g:syntastic_html_w3_exec'*
 Type: string
 Default: "curl"
@@ -3210,11 +3230,13 @@ Note~
 
 Non-zero exit codes from "cURL" are typically network errors, and are signaled
 by syntastic with messages such as: >
-    syntastic: error: checker html/validator returned abnormal status 26
+    syntastic: error: checker html/w3 returned abnormal status 26
 <
 You can lookup the meaning of these codes in cURL's manual:
     
-    http://curl.haxx.se/docs/manpage.html#EXIT
+    https://curl.haxx.se/docs/manpage.html#EXIT
+
+See also: |syntastic-svg-w3|, |syntastic-xhtml-w3|.
 
 ==============================================================================
 SYNTAX CHECKERS FOR JAVA                             *syntastic-checkers-java*
@@ -6579,6 +6601,7 @@ SYNTAX CHECKERS FOR SVG                               *syntastic-checkers-svg*
 The following checkers are available for SVG (filetype "svg"):
 
     1. Validator................|syntastic-svg-validator|
+    2. W3.......................|syntastic-svg-w3|
 
 ------------------------------------------------------------------------------
 1. Validator                                         *syntastic-svg-validator*
@@ -6670,6 +6693,78 @@ Example~
 <
 See also: |syntastic-html-validator|, |syntastic-xhtml-validator|.
 
+------------------------------------------------------------------------------
+2. W3                                                      *syntastic-svg-w3*
+
+Name:        w3
+Maintainer:  Kevin Locke <kevin@kevinlocke.name>
+
+"W3" is the W3C Markup Validator for SVG.  See the project's page for
+details:
+
+    https://validator.w3.org/source/
+
+As a syntastic linter, you can validate your files against the online service
+(see https://validator.w3.org/), or you can install it from sources and run it
+as a local service:
+
+    https://github.com/w3c/markup-validator/
+
+Requirement~
+
+This checker uses cURL:
+
+    http://curl.haxx.se/
+
+Checker options~
+
+                                                   *'g:syntastic_svg_w3_api'*
+Type: string
+Default: "https://validator.w3.org/check"
+URL of the service to use for checking. Leave it to the default to
+run the checks against "https://validator.w3.org/", or set it to
+"http://localhost/w3c-validator/check" if you're running a local service.
+
+                                                *'g:syntastic_svg_w3_doctype'*
+Type: string
+Default: "SVG 1.1" (if not detected from DTD)
+Name of the document type definition to use for checking.  If unspecified, the
+type is detected from a Document Type Declaration, if present, or "SVG 1.1" is
+used.  Currently supported values for SVG:
+
+  - SVG 1.0
+  - SVG 1.1
+  - SVG 1.1 Tiny
+  - SVG 1.1 Basic
+
+References:
+
+    https://github.com/w3c/markup-validator/blob/master/htdocs/doctype-select.html
+    https://github.com/w3c/markup-validator/blob/master/htdocs/config/types.conf
+
+                                                  *'g:syntastic_svg_w3_exec'*
+Type: string
+Default: "curl"
+Path to the "cURL" executable. Override it with a full path if your "cURL" is
+not installed in a standard location.
+
+This checker doesn't call the "makeprgBuild()" function, and thus it ignores
+the usual 'g:syntastic_svg_w3_<option>' variables. The only exception is
+'g:syntastic_svg_w3_exec', which can be used to override the path to the
+"cURL" executable.
+
+Note~
+
+Non-zero exit codes from "cURL" are typically network errors, and are signaled
+by syntastic with messages such as: >
+    syntastic: error: checker svg/w3 returned abnormal status 26
+<
+You can lookup the meaning of these codes in cURL's manual:
+    
+    http://curl.haxx.se/docs/manpage.svg#EXIT
+
+See also: |syntastic-html-w3|, |syntastic-xhtml-w3|.
+
 ==============================================================================
 SYNTAX CHECKERS FOR TCL                               *syntastic-checkers-tcl*
 
@@ -7483,6 +7578,7 @@ The following checkers are available for xHTML (filetype "xhtml"):
     2. jshint...................|syntastic-xhtml-jshint|
     3. proselint................|syntastic-xhtml-proselint|
     4. Validator................|syntastic-xhtml-validator|
+    5. W3.......................|syntastic-xhtml-w3|
 
 ------------------------------------------------------------------------------
 1. HTML tidy                                            *syntastic-xhtml-tidy*
@@ -7668,6 +7764,84 @@ Example~
 <
 See also: |syntastic-html-validator|, |syntastic-svg-validator|.
 
+------------------------------------------------------------------------------
+5. W3                                                     *syntastic-xhtml-w3*
+
+Name:        w3
+Maintainer:  Kevin Locke <kevin@kevinlocke.name>
+
+"W3" is the W3C Markup Validator for XHTML.  See the project's page for
+details:
+
+    https://validator.w3.org/source/
+
+As a syntastic linter, you can validate your files against the online service
+(see https://validator.w3.org/), or you can install it from sources and run it
+as a local service:
+
+    https://github.com/w3c/markup-validator/
+
+Requirement~
+
+This checker uses cURL:
+
+    https://curl.haxx.se/
+
+Checker options~
+
+                                                   *'g:syntastic_xhtml_w3_api'*
+Type: string
+Default: "https://validator.w3.org/check"
+URL of the service to use for checking. Leave it to the default to
+run the checks against "https://validator.w3.org/", or set it to
+"http://localhost/w3c-validator/check" if you're running a local service.
+
+                                              *'g:syntastic_xhtml_w3_doctype'*
+Type: string
+Default: ""
+Name of the document type definition to use for checking.  If unspecified, the
+type is detected from the file content.  Currently supported values for XHTML:
+
+  - XHTML 1.0 Strict
+  - XHTML 1.0 Transitional
+  - XHTML 1.0 Frameset
+  - XHTML 1.1
+  - XHTML + RDFa
+  - XHTML Basic 1.0
+  - XHTML Basic 1.1
+  - XHTML Mobile Profile 1.2
+  - XHTML-Print 1.0
+  - XHTML 1.1 plus MathML 2.0
+  - XHTML 1.1 plus MathML 2.0 plus SVG 1.1
+
+References:
+
+    https://github.com/w3c/markup-validator/blob/master/htdocs/doctype-select.html
+    https://github.com/w3c/markup-validator/blob/master/htdocs/config/types.conf
+
+                                                  *'g:syntastic_xhtml_w3_exec'*
+Type: string
+Default: "curl"
+Path to the "cURL" executable. Override it with a full path if your "cURL" is
+not installed in a standard location.
+
+This checker doesn't call the "makeprgBuild()" function, and thus it ignores
+the usual 'g:syntastic_xhtml_w3_<option>' variables. The only exception is
+'g:syntastic_xhtml_w3_exec', which can be used to override the path to the
+"cURL" executable.
+
+Note~
+
+Non-zero exit codes from "cURL" are typically network errors, and are signaled
+by syntastic with messages such as: >
+    syntastic: error: checker xhtml/w3 returned abnormal status 26
+<
+You can lookup the meaning of these codes in cURL's manual:
+    
+    https://curl.haxx.se/docs/manpage.xhtml#EXIT
+
+See also: |syntastic-html-w3|, |syntastic-svg-w3|.
+
 ==============================================================================
 SYNTAX CHECKERS FOR XML                               *syntastic-checkers-xml*
 
diff --git a/syntax_checkers/html/w3.vim b/syntax_checkers/html/w3.vim
index e26381fa..1d9f8d9e 100644
--- a/syntax_checkers/html/w3.vim
+++ b/syntax_checkers/html/w3.vim
@@ -15,18 +15,52 @@ if exists('g:loaded_syntastic_html_w3_checker')
 endif
 let g:loaded_syntastic_html_w3_checker = 1
 
-if !exists('g:syntastic_html_w3_api')
-    let g:syntastic_html_w3_api = 'http://validator.w3.org/check'
-endif
-
 let s:save_cpo = &cpo
 set cpo&vim
 
-function! SyntaxCheckers_html_w3_GetLocList() dict
+" Constants {{{1
+
+let s:DEFAULTS = {
+    \ 'api':      'https://validator.w3.org/check',
+    \ 'doctype':  '' }
+
+let s:CONTENT_TYPE = {
+    \ 'html': 'text/html',
+    \ 'svg':  'image/svg+xml',
+    \ 'xhtml': 'application/xhtml+xml' }
+
+" }}}1
+
+" @vimlint(EVL101, 1, l:api)
+" @vimlint(EVL101, 1, l:doctype)
+" @vimlint(EVL104, 1, l:doctype)
+function! SyntaxCheckers_html_w3_GetLocList() dict " {{{1
     let buf = bufnr('')
-    let makeprg = self.getExecEscaped() . ' -q -L -s -F output=json ' .
-        \ '-F uploaded_file=@' . syntastic#util#shescape(fnamemodify(bufname(buf), ':p')) . '\;type=text/html ' .
-        \ g:syntastic_html_w3_api
+    let type = self.getFiletype()
+    let fname = syntastic#util#shescape(fnamemodify(bufname(buf), ':p'))
+
+    for key in keys(s:DEFAULTS)
+        let l:{key} = syntastic#util#var(type . '_w3_' . key, get(s:DEFAULTS, key))
+    endfor
+    let ctype = get(s:CONTENT_TYPE, type, '')
+
+    " SVG is detected as generic XML if doctype is unspecified.
+    " Default "SVG 1.1" with "Only if missing" (fbd=1) to use DTD if present.
+    let fbd = ''
+    if type ==# 'svg' && doctype ==# ''
+        let doctype = 'SVG 1.1'
+        let fbd = '1'
+    endif
+
+    " vint: -ProhibitUsingUndeclaredVariable
+    let makeprg = self.getExecEscaped() . ' -q -L -s --compressed -F output=json' .
+        \ (doctype !=# '' ? ' -F doctype=' . syntastic#util#shescape(doctype) : '') .
+        \ (fbd !=# '' ? ' -F fbd=' . fbd : '') .
+        \ ' -F uploaded_file=@' . fname .
+            \ (ctype !=# '' ? '\;type=' . ctype : '') .
+            \ '\;filename=' . fname .
+        \ ' ' . api
+    " vint: ProhibitUsingUndeclaredVariable
 
     let errorformat =
         \ '%A %\+{,' .
@@ -50,7 +84,10 @@ function! SyntaxCheckers_html_w3_GetLocList() dict
     endfor
 
     return loclist
-endfunction
+endfunction " }}}1
+" @vimlint(EVL104, 0, l:doctype)
+" @vimlint(EVL101, 0, l:doctype)
+" @vimlint(EVL101, 0, l:api)
 
 call g:SyntasticRegistry.CreateAndRegisterChecker({
     \ 'filetype': 'html',
diff --git a/syntax_checkers/svg/w3.vim b/syntax_checkers/svg/w3.vim
new file mode 100644
index 00000000..dd87ded5
--- /dev/null
+++ b/syntax_checkers/svg/w3.vim
@@ -0,0 +1,23 @@
+"============================================================================
+"File:        w3.vim
+"Description: Syntax checking plugin for syntastic
+"Maintainer:  Kevin Locke <kevin@kevinlocke.name>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_svg_w3_checker')
+    finish
+endif
+let g:loaded_syntastic_svg_w3_checker = 1
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+    \ 'filetype': 'svg',
+    \ 'name': 'w3',
+    \ 'redirect': 'html/w3'})
+
+" vim: set sw=4 sts=4 et fdm=marker:
diff --git a/syntax_checkers/xhtml/w3.vim b/syntax_checkers/xhtml/w3.vim
new file mode 100644
index 00000000..91af989d
--- /dev/null
+++ b/syntax_checkers/xhtml/w3.vim
@@ -0,0 +1,23 @@
+"============================================================================
+"File:        w3.vim
+"Description: Syntax checking plugin for syntastic
+"Maintainer:  Kevin Locke <kevin@kevinlocke.name>
+"License:     This program is free software. It comes without any warranty,
+"             to the extent permitted by applicable law. You can redistribute
+"             it and/or modify it under the terms of the Do What The Fuck You
+"             Want To Public License, Version 2, as published by Sam Hocevar.
+"             See http://sam.zoy.org/wtfpl/COPYING for more details.
+"
+"============================================================================
+
+if exists('g:loaded_syntastic_xhtml_w3_checker')
+    finish
+endif
+let g:loaded_syntastic_xhtml_w3_checker = 1
+
+call g:SyntasticRegistry.CreateAndRegisterChecker({
+    \ 'filetype': 'xhtml',
+    \ 'name': 'w3',
+    \ 'redirect': 'html/w3'})
+
+" vim: set sw=4 sts=4 et fdm=marker: