dot_files/vim-plugins/bundle/xptemplate/ftplugin/html/html.xpt.vim
2017-07-09 00:26:06 +03:00

412 lines
9.9 KiB
VimL

" TODO entity char
" TODO back at 'base'
XPTemplate priority=lang
let s:f = g:XPTfuncs()
XPTinclude
\ _common/common
\ xml/xml
XPTvar $CURSOR_PH
XPTvar $CL <!--
XPTvar $CM
XPTvar $CR -->
XPTinclude
\ _comment/doubleSign
XPTembed
\ javascript/javascript
\ css/css
" ========================= Function and Variables =============================
fun! s:f.createTable(...) "{{{
let nrow_str = inputdialog("num of row:")
let nrow = nrow_str + 0
let ncol_str = inputdialog("num of column:")
let ncol = ncol_str + 0
let l = ""
let i = 0 | while i < nrow | let i += 1
let j = 0 | while j < ncol | let j += 1
let l .= "<tr>\n<td id=\"`pre^_".i."_".j."\"></td>\n</tr>\n"
endwhile
endwhile
return "<table id='`id^'>\n".l."</table>"
endfunction "}}}
let s:doctypes = {
\ 'HTML 3.2 Final' : 'html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"',
\ 'HTML 4.0 Frameset' : 'html PUBLIC "-//W3C//DTD HTML 4.0 Frameset//EN" "http://www.w3.org/TR/REC-html40/frameset.dtd"',
\ 'HTML 4.0 Transitional' : 'html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"',
\ 'HTML 4.0' : 'html PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"',
\ 'HTML 4.01 Frameset' : 'html PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"',
\ 'HTML 4.01 Transitional' : 'html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"',
\ 'HTML 4.01' : 'html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"',
\ 'HTML 5' : 'HTML',
\ 'XHTML 1.0 Frameset' : 'html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"',
\ 'XHTML 1.0 Strict' : 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"',
\ 'XHTML 1.0 Transitional' : 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"',
\ 'XHTML 1.1' : 'html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"',
\ 'XHTML Basic 1.0' : 'html PUBLIC "-//W3C//DTD XHTML Basic 1.0//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic10.dtd"',
\ 'XHTML Basic 1.1' : 'html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd"',
\ 'XHTML Mobile 1.0' : 'html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"',
\ 'XHTML Mobile 1.1' : 'html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.1//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile11.dtd"',
\ 'XHTML Mobile 1.2' : 'html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.2//EN" "http://www.openmobilealliance.org/tech/DTD/xhtml-mobile12.dtd"',
\}
fun! s:f.html_doctype_list()
return keys( s:doctypes )
endfunction
fun! s:f.html_doctype_post(v)
if has_key( s:doctypes, a:v )
return s:doctypes[ a:v ]
else
return ''
endif
endfunction
fun! s:f.html_enc()
return &fenc == '' ? &encoding : &fenc
endfunction
let s:nIndent = 0
fun! s:f.html_cont_ontype()
let v = self.V()
if v =~ '\V\n'
let v = matchstr( v, '\V\.\*\ze\n' )
let s:nIndent = &indentexpr != ''
\ ? eval( substitute( &indentexpr, '\Vv:lnum', 'line(".")', '' ) ) - indent( line( "." ) - 1 )
\ : self.NIndent()
return self.Finish( v . "\n" . repeat( ' ', s:nIndent ) )
else
return v
endif
endfunction
fun! s:f.html_cont_helper()
let v = self.V()
if v =~ '\V\n'
return self.ResetIndent( -s:nIndent, "\n" )
else
return ''
endif
endfunction
fun! s:f.html_tag_cmpl()
if !exists( 'b:xpt_html_tags' )
call htmlcomplete#LoadData()
let tagnames = sort( keys( b:html_omni ) )
let b:xpt_html_tags = []
let dict = {
\ 'vimxmlattrinfo' : 1,
\ 'vimxmlentities' : 1,
\ 'vimxmlroot' : 1,
\ 'vimxmltaginfo' : 1,
\ }
for t in tagnames
if !has_key( dict, t )
call add(b:xpt_html_tags, t)
endif
endfor
endif
return b:xpt_html_tags
endfunction
fun! s:f.html_close_tag()
let v = self.V()
if v =~ '\v/\s*$|^!'
return ''
else
return '</' . matchstr( v, '\v^\S+' ) . '>'
endif
endfunction
" ================================= Snippets ===================================
call XPTdefineSnippet("id", {'syn' : 'tag'}, 'id="`^"')
call XPTdefineSnippet("class", {'syn' : 'tag'}, 'class="`^"')
" TODO map < to tag
XPT tag hidden " <$_xSnipName>..</$_xSnipName>
XSET content|def=Echo( R( 't' ) =~ '\v/\s*$' ? Finish() : '' )
XSET content|ontype=html_cont_ontype()
<`t^$_xSnipName^>`content^`content^html_cont_helper()^`t^html_close_tag()^
..XPT
XPT _tag wrap=content hidden " <$_xSnipName >..</$_xSnipName>
XSET content|ontype=html_cont_ontype()
<`$_xSnipName^>`content^^`content^html_cont_helper()^</`$_xSnipName^>
..XPT
" XPT _t hidden " ..
" <`$_xSnipName^>`cont^</`$_xSnipName^>
XPT _tagAttr wrap=content hidden " <$_xSnipName >..</$_xSnipName>
XSET content|ontype=html_cont_ontype()
XSET att?=Echo('')
XSET att?|post=Echo(V()=~'\V\^ \$\|att?' ? '' : V())
<`$_xSnipName^` `att?^>`content^^`content^html_cont_helper()^</`$_xSnipName^>
..XPT
XPT _tagblock hidden " <$_xSnipName >\n .. \n</$_xSnipName>
<`$_xSnipName^>
`cursor^^
</`$_xSnipName^>
XPT _tagblockAttr hidden " <$_xSnipName >\n .. \n</$_xSnipName>
<`$_xSnipName^` `attr^>
`cursor^^
</`$_xSnipName^>
XPT _shorttag hidden " <$_xSnipName />
<`$_xSnipName^ />
XPT _shorttagAttr hidden " <$_xSnipName />
XSET att?=Echo('')
XSET att?|post=Echo(V()=~'\V\^ \$\|att?' ? '' : V())
<`$_xSnipName^` `att?^/>
..XPT
XPT doctype " <!DOCTYPE ***
XSET doctype=html_doctype_list()
XSET doctype|post=html_doctype_post( V() )
<!DOCTYPE `doctype^>
XPT html " <html><head>..<head><body>...
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
`:head:^
<body>
`cursor^
</body>
</html>
XPT head " <head>..</head>
<head>
`:contenttype:^
`:title:^
</head>
XPT contenttype " <meta http-equiv="Content-Type" content="...
<meta http-equiv="Content-Type" content="text/html; charset=`encoding^html_enc()^"/>
XPT title " <title>..</title>
<title>`title^expand('%:t:r')^</title>
XPT style " <style>..</style>
<style type="text/css" media="screen">
`cursor^
</style>
XPT meta " <meta ..>
<meta name="`meta_name^" content="`meta_content^" />
XPT link " <link rel=".." ..>
<link rel="`stylesheet^" type="`type^text/css^" href="`url^" />
XPT script " <script language="javascript"...
<script language="javascript" type="text/javascript">
`cursor^
</script>
..XPT
XPT scriptsrc " <script .. src=...
<script language="javascript" type="text/javascript" src="`js^"></script>
XPT body " <body>..</body>
<body>
`cursor^
</body>
XPT table alias=_tag
XPT tr alias=_tag
XPT td alias=_tag
XPT th alias=_tag
XPT fulltable hidden " create a full table
`createTable()^
XPT a wrap " <a href...
<a href="`href^">`cursor^</a>
..XPT
XPT div alias=_tag
XPT p alias=_tag
XPT ul alias=_tag
XPT ol alias=_tag
XPT li alias=_tag
XPT span alias=_tag
XPT br alias=_shorttag
XPT img alias=_shorttagAttr
XSET att?=Embed( 'src="`where^" alt="`alt^"' )
XPT h1 alias=_tag
XPT h2 alias=_tag
XPT h3 alias=_tag
XPT h4 alias=_tag
XPT h5 alias=_tag
XPT h6 alias=_tag
XPT iframe alias=_tagAttr
XSET att?=Embed( 'name="`name^"' )
" TODO enctype list : application/x-www-form-urlencoded
XPT form wrap " <form ..>..</form>
XSET method=ChooseStr( 'GET', 'POST' )
<form action="`action^" method="`method^" accept-charset="`html_enc()^" enctype="multipart/form-data">
`cursor^
</form>
XPT textarea alias=_tagAttr
XSET att?=Embed( 'name="`name^"' )
XPT input alias=_shorttagAttr
XSET att?=Embed( 'type="`type^" name="`name^" value="`value^"' )
XSET type=ChooseStr( 'text', 'password', 'checkbox', 'radio', 'submit', 'reset', 'file', 'hidden', 'image', 'button' )
" TODO other optional attribute like "checked", "readonly"
XPT _input_tmpl hidden " <input type=Echo($_xSnipName[1:]) ... />
<input type="`Echo($_xSnipName[1:])^" name="`name^" value="`value^" />
XPT itext alias=_input_tmpl
XPT ipassword alias=_input_tmpl
XPT icheckbox alias=_input_tmpl
XPT iradio alias=_input_tmpl
XPT isubmit alias=_input_tmpl
XPT ireset alias=_input_tmpl
XPT ifile alias=_input_tmpl
XPT ihidden alias=_input_tmpl
XPT iimage alias=_input_tmpl
XPT ibutton alias=_input_tmpl
XPT label alias=_tagAttr
XSET att?=Embed( 'for="`which^"' )
XPT select alias=_tagAttr
XSET att?=Embed( 'name="`name^"' )
XPT option alias=_tagAttr
XSET att?=Embed( 'value="`value^"' )
XPT fieldset " <fieldset ..
<fieldset>
<legend></legend>
`cursor^
</fieldset>
..XPT
" XPT sdiv alias=_t
" XPT diva " tips
" `:div( { 'content' : ':a:' } ):^
" html 5
" http://dev.w3.org/html5/html4-differences/Overview.html#character-encoding
" XPT section alias=_tag
" XPT article alias=_tag
" XPT aside alias=_tag
" XPT hgroup alias=_tag
" XPT header alias=_tag
" XPT footer alias=_tag
" XPT nav alias=_tag
" XPT figure alias=_tag
" XPT figcaption alias=_tag
" XPT video alias=_tag
" XPT audio alias=_tag
" XPT source alias=_tag
" XPT embed alias=_tag
" XPT mark alias=_tag
" XPT progress alias=_tag
" XPT meter alias=_tag
" XPT time alias=_tag
" XPT canvas alias=_tag
" XPT comand alias=_tag
" XPT details alias=_tag
" XPT datalist alias=_tag
" XPT keygen alias=_tag
" XPT output alias=_tag
" XPT ruby alias=_tag
" input type=
" tel
" search
" url
" email
" datetime
" date
" month
" week
" time
" datetime-local
" number
" range
" color