summaryrefslogtreecommitdiff
path: root/runtime
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-09-20 23:22:24 +0000
committerBram Moolenaar <Bram@vim.org>2005-09-20 23:22:24 +0000
commitbfd8fc0529f46612f7b3efca6c7b3305e70ac374 (patch)
treef6b8a9bdb8bf573cea7862b3ab5ad41dfb5d1b46 /runtime
parent60a795aad6ade281146a5343b416f21825af5364 (diff)
downloadvim-git-bfd8fc0529f46612f7b3efca6c7b3305e70ac374.tar.gz
updated for version 7.0149v7.0149
Diffstat (limited to 'runtime')
-rw-r--r--runtime/autoload/csscomplete.vim391
-rw-r--r--runtime/autoload/htmlcomplete.vim390
-rw-r--r--runtime/doc/cmdline.txt10
-rw-r--r--runtime/doc/eval.txt68
-rw-r--r--runtime/doc/insert.txt11
-rw-r--r--runtime/doc/tags10
-rw-r--r--runtime/doc/todo.txt17
-rw-r--r--runtime/doc/version7.txt5
-rw-r--r--runtime/filetype.vim5
-rw-r--r--runtime/scripts.vim3
-rw-r--r--runtime/spell/en.ascii.splbin566617 -> 566661 bytes
-rw-r--r--runtime/spell/en.latin1.splbin568721 -> 568765 bytes
-rw-r--r--runtime/spell/en.utf-8.splbin569152 -> 569196 bytes
-rw-r--r--runtime/spell/en/en_US.diff25
-rw-r--r--runtime/spell/nl/nl_NL.diff7
-rw-r--r--runtime/syntax/asterisk.vim73
16 files changed, 844 insertions, 171 deletions
diff --git a/runtime/autoload/csscomplete.vim b/runtime/autoload/csscomplete.vim
new file mode 100644
index 000000000..8ac360061
--- /dev/null
+++ b/runtime/autoload/csscomplete.vim
@@ -0,0 +1,391 @@
+" Vim completion script
+" Language: CSS 2.1
+" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
+" Last Change: 2005 Sep 19
+
+function! csscomplete#CompleteCSS(findstart, base)
+if a:findstart
+ " We need whole line to proper checking
+ return 0
+else
+ " There are few chars important for context:
+ " ^ ; : { } /* */
+ " Where ^ is start of line and /* */ are comment borders
+ " Depending on their relative position to cursor we will now what should
+ " be completed.
+ " 1. if nearest are ^ or { or ; current word is property
+ " 2. if : it is value
+ " 3. if } we are outside of css definitions
+ " 4. for comments ignoring is be the easiest but assume they are the same
+ " as 1.
+
+ let line = a:base
+ let res = []
+ let res2 = []
+ let borders = {}
+
+ " We need the last occurrence of char so reverse line
+ let revline = join(reverse(split(line, '.\zs')), '')
+ let openbrace = stridx(revline, '{')
+ let closebrace = stridx(revline, '}')
+ let colon = stridx(revline, ':')
+ let semicolon = stridx(revline, ';')
+ let opencomm = stridx(revline, '*/') " Line was reversed
+ let closecomm = stridx(revline, '/*') " Line was reversed
+ let style = stridx(revline, '=\s*elyts') " Line was reversed
+ let atrule = stridx(revline, '@')
+
+ if openbrace > -1
+ let borders[openbrace] = "openbrace"
+ endif
+ if closebrace > -1
+ let borders[closebrace] = "closebrace"
+ endif
+ if colon > -1
+ let borders[colon] = "colon"
+ endif
+ if semicolon > -1
+ let borders[semicolon] = "semicolon"
+ endif
+ if opencomm > -1
+ let borders[opencomm] = "opencomm"
+ endif
+ if closecomm > -1
+ let borders[closecomm] = "closecomm"
+ endif
+ if style > -1
+ let borders[style] = "style"
+ endif
+ if atrule > -1
+ let borders[atrule] = "atrule"
+ endif
+
+ if len(borders) == 0 || borders[min(keys(borders))] =~ '^\(openbrace\|semicolon\|opencomm\|closecomm\|style\)$'
+ " Complete properties
+
+ let values = split("azimuth background-attachment background-color background-image background-position background-repeat background border-collapse border-color border-spacing border-style border-top border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width border-bottom-width border-left-width border-width border bottom caption-side clear clip color content counter-increment counter-reset cue-after cue-before cue cursor direction display elevation empty-cells float font-family font-size font-style font-variant font-weight font height left letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-right margin-left margin-top margin-bottom max-height max-width min-height min-width orphans outline-color outline-style outline-width outline overflow padding-top padding-right padding-bottom padding-left padding page-break-after page-break-before page-break-inside pause-after pause-before pause pitch-range pitch play-during position quotes richness right speak-header speak-numeral speak-punctuation speak speech-rate stress table-layout text-align text-decoration text-indent text-transform top unicode-bidi vertical-align visibility voice-family volume white-space widows width word-spacing z-index")
+
+ let propbase = matchstr(line, '.\{-}\ze[a-zA-Z-]*$')
+ let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$')
+
+ for m in values
+ if m =~? '^'.entered_property
+ call add(res, propbase . m.': ')
+ elseif m =~? entered_property
+ call add(res2, propbase . m.': ')
+ endif
+ endfor
+
+ return res + res2
+
+ elseif borders[min(keys(borders))] == 'colon'
+ " Get name of property
+ let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$'))
+
+ if prop == 'azimuth'
+ let values = ["left-side", "far-left", "left", "center-left", "center", "center-right", "right", "far-right", "right-side", "behind", "leftwards", "rightwards"]
+ elseif prop == 'background-attachment'
+ let values = ["scroll", "fixed"]
+ elseif prop == 'background-color'
+ let values = ["transparent", "rgb(", "#"]
+ elseif prop == 'background-image'
+ let values = ["url(", "none"]
+ elseif prop == 'background-position'
+ let vals = matchstr(line, '.*:\s*\zs.*')
+ if vals =~ '^\([a-zA-Z]\+\)\?$'
+ let values = ["top", "center", "bottom"]
+ elseif vals =~ '^[a-zA-Z]\+\s\+\([a-zA-Z]\+\)\?$'
+ let values = ["left", "center", "right"]
+ else
+ return []
+ endif
+ elseif prop == 'background-repeat'
+ let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"]
+ elseif prop == 'background'
+ let values = ["url(", "scroll", "fixed", "transparent", "rgb(", "#", "none", "top", "center", "bottom" , "left", "right", "repeat", "repeat-x", "repeat-y", "no-repeat"]
+ elseif prop == 'border-collapse'
+ let values = ["collapse", "separate"]
+ elseif prop == 'border-color'
+ let values = ["rgb(", "#", "transparent"]
+ elseif prop == 'border-spacing'
+ return []
+ elseif prop == 'border-style'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif prop =~ 'border-\(top\|right\|bottom\|left\)$'
+ let vals = matchstr(line, '.*:\s*\zs.*')
+ if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
+ let values = ["thin", "thick", "medium"]
+ elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
+ let values = ["rgb(", "#", "transparent"]
+ else
+ return []
+ endif
+ elseif prop =~ 'border-\(top\|right\|bottom\|left\)-color'
+ let values = ["rgb(", "#", "transparent"]
+ elseif prop =~ 'border-\(top\|right\|bottom\|left\)-style'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif prop =~ 'border-\(top\|right\|bottom\|left\)-width'
+ let values = ["thin", "thick", "medium"]
+ elseif prop == 'border-width'
+ let values = ["thin", "thick", "medium"]
+ elseif prop == 'border'
+ let vals = matchstr(line, '.*:\s*\zs.*')
+ if vals =~ '^\([a-zA-Z0-9.]\+\)\?$'
+ let values = ["thin", "thick", "medium"]
+ elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\([a-zA-Z]\+\)\?$'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
+ let values = ["rgb(", "#", "transparent"]
+ else
+ return []
+ endif
+ elseif prop == 'bottom'
+ let values = ["auto"]
+ elseif prop == 'caption-side'
+ let values = ["top", "bottom"]
+ elseif prop == 'clear'
+ let values = ["none", "left", "right", "both"]
+ elseif prop == 'clip'
+ let values = ["auto", "rect("]
+ elseif prop == 'color'
+ let values = ["rgb(", "#"]
+ elseif prop == 'content'
+ let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"]
+ elseif prop =~ 'counter-\(increment\|reset\)$'
+ let values = ["none"]
+ elseif prop =~ '^\(cue-after\|cue-before\|cue\)$'
+ let values = ["url(", "none"]
+ elseif prop == 'cursor'
+ let values = ["url(", "auto", "crosshair", "default", "pointer", "move", "e-resize", "ne-resize", "nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "text", "wait", "help", "progress"]
+ elseif prop == 'direction'
+ let values = ["ltr", "rtl"]
+ elseif prop == 'display'
+ let values = ["inline", "block", "list-item", "run-in", "inline-block", "table", "inline-table", "table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group", "table-column", "table-cell", "table-caption", "none"]
+ elseif prop == 'elevation'
+ let values = ["below", "level", "above", "higher", "lower"]
+ elseif prop == 'empty-cells'
+ let values = ["show", "hide"]
+ elseif prop == 'float'
+ let values = ["left", "right", "none"]
+ elseif prop == 'font-family'
+ let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"]
+ elseif prop == 'font-size'
+ return []
+ elseif prop == 'font-style'
+ let values = ["normal", "italic", "oblique"]
+ elseif prop == 'font-variant'
+ let values = ["normal", "small-caps"]
+ elseif prop == 'font-weight'
+ let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"]
+ elseif prop == 'font'
+ let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"]
+ elseif prop =~ '^\(height\|width\)$'
+ let values = ["auto"]
+ elseif prop =~ '^\(left\|rigth\)$'
+ let values = ["auto"]
+ elseif prop == 'letter-spacing'
+ let values = ["normal"]
+ elseif prop == 'line-height'
+ let values = ["normal"]
+ elseif prop == 'list-style-image'
+ let values = ["url(", "none"]
+ elseif prop == 'list-style-position'
+ let values = ["inside", "outside"]
+ elseif prop == 'list-style-type'
+ let values = ["disc", "circle", "square", "decimal", "decimal-leading-zero", "lower-roman", "upper-roman", "lower-latin", "upper-latin", "none"]
+ elseif prop == 'list-style'
+ return []
+ elseif prop == 'margin'
+ let values = ["auto"]
+ elseif prop =~ 'margin-\(right\|left\|top\|bottom\)$'
+ let values = ["auto"]
+ elseif prop == 'max-height'
+ let values = ["auto"]
+ elseif prop == 'max-width'
+ let values = ["none"]
+ elseif prop == 'min-height'
+ let values = ["none"]
+ elseif prop == 'min-width'
+ let values = ["none"]
+ elseif prop == 'orphans'
+ return []
+ elseif prop == 'outline-color'
+ let values = ["rgb(", "#"]
+ elseif prop == 'outline-style'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif prop == 'outline-width'
+ let values = ["thin", "thick", "medium"]
+ elseif prop == 'outline'
+ let vals = matchstr(line, '.*:\s*\zs.*')
+ if vals =~ '^\([a-zA-Z0-9,()#]\+\)\?$'
+ let values = ["rgb(", "#"]
+ elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\([a-zA-Z]\+\)\?$'
+ let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]
+ elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\([a-zA-Z(]\+\)\?$'
+ let values = ["thin", "thick", "medium"]
+ else
+ return []
+ endif
+ elseif prop == 'overflow'
+ let values = ["visible", "hidden", "scroll", "auto"]
+ elseif prop == 'padding'
+ return []
+ elseif prop =~ 'padding-\(top\|right\|bottom\|left\)$'
+ return []
+ elseif prop =~ 'page-break-\(after\|before\)$'
+ let values = ["auto", "always", "avoid", "left", "right"]
+ elseif prop == 'page-break-inside'
+ let values = ["auto", "avoid"]
+ elseif prop =~ 'pause-\(after\|before\)$'
+ return []
+ elseif prop == 'pause'
+ return []
+ elseif prop == 'pitch-range'
+ return []
+ elseif prop == 'pitch'
+ let values = ["x-low", "low", "medium", "high", "x-high"]
+ elseif prop == 'play-during'
+ let values = ["url(", "mix", "repeat", "auto", "none"]
+ elseif prop == 'position'
+ let values = ["static", "relative", "absolute", "fixed"]
+ elseif prop == 'quotes'
+ let values = ["none"]
+ elseif prop == 'richness'
+ return []
+ elseif prop == 'speak-header'
+ let values = ["once", "always"]
+ elseif prop == 'speak-numeral'
+ let values = ["digits", "continuous"]
+ elseif prop == 'speak-punctuation'
+ let values = ["code", "none"]
+ elseif prop == 'speak'
+ let values = ["normal", "none", "spell-out"]
+ elseif prop == 'speech-rate'
+ let values = ["x-slow", "slow", "medium", "fast", "x-fast", "faster", "slower"]
+ elseif prop == 'stress'
+ return []
+ elseif prop == 'table-layout'
+ let values = ["auto", "fixed"]
+ elseif prop == 'text-align'
+ let values = ["left", "right", "center", "justify"]
+ elseif prop == 'text-decoration'
+ let values = ["none", "underline", "overline", "line-through", "blink"]
+ elseif prop == 'text-indent'
+ return []
+ elseif prop == 'text-transform'
+ let values = ["capitalize", "uppercase", "lowercase", "none"]
+ elseif prop == 'top'
+ let values = ["auto"]
+ elseif prop == 'unicode-bidi'
+ let values = ["normal", "embed", "bidi-override"]
+ elseif prop == 'vertical-align'
+ let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"]
+ elseif prop == 'visibility'
+ let values = ["visible", "hidden", "collapse"]
+ elseif prop == 'voice-family'
+ return []
+ elseif prop == 'volume'
+ let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"]
+ elseif prop == 'white-space'
+ let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"]
+ elseif prop == 'widows'
+ return []
+ elseif prop == 'word-spacing'
+ let values = ["normal"]
+ elseif prop == 'z-index'
+ let values = ["auto"]
+ else
+ return []
+ endif
+
+ " Complete values
+ let valbase = matchstr(line, '.\{-}\ze[a-zA-Z0-9#,.(_-]*$')
+ let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$')
+
+ for m in values
+ if m =~? '^'.entered_value
+ call add(res, valbase . m)
+ elseif m =~? entered_value
+ call add(res2, valbase . m)
+ endif
+ endfor
+
+ return res + res2
+
+ elseif borders[min(keys(borders))] == 'closebrace'
+
+ return []
+
+ elseif borders[min(keys(borders))] == 'atrule'
+
+ let afterat = matchstr(line, '.*@\zs.*')
+
+ if afterat =~ '\s'
+
+ let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze')
+
+ if atrulename == 'media'
+ let values = ["screen", "tty", "tv", "projection", "handheld", "print", "braille", "aural", "all"]
+
+ let atruleafterbase = matchstr(line, '.*@media\s\+\ze.*$')
+ let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$')
+
+ elseif atrulename == 'import'
+ let atruleafterbase = matchstr(line, '.*@import\s\+\ze.*$')
+ let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$')
+
+ if entered_atruleafter =~ "^[\"']"
+ let filestart = matchstr(entered_atruleafter, '^.\zs.*')
+ let files = split(glob(filestart.'*'), '\n')
+ let values = map(copy(files), '"\"".v:val')
+
+ elseif entered_atruleafter =~ "^url("
+ let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*")
+ let files = split(glob(filestart.'*'), '\n')
+ let values = map(copy(files), '"url(".v:val')
+
+ else
+ let values = ['"', 'url(']
+
+ endif
+
+ else
+ return []
+
+ endif
+
+ for m in values
+ if m =~? '^'.entered_atruleafter
+ call add(res, atruleafterbase . m)
+ elseif m =~? entered_atruleafter
+ call add(res2, atruleafterbase . m)
+ endif
+ endfor
+
+ return res + res2
+
+ endif
+
+ let values = ["charset", "page", "media", "import"]
+
+ let atrulebase = matchstr(line, '.*@\ze[a-zA-Z -]*$')
+ let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$')
+
+ for m in values
+ if m =~? '^'.entered_atrule
+ call add(res, atrulebase . m.' ')
+ elseif m =~? entered_atrule
+ call add(res2, atrulebase . m.' ')
+ endif
+ endfor
+
+ return res + res2
+
+ endif
+
+ return []
+
+ endif
+endfunction
diff --git a/runtime/autoload/htmlcomplete.vim b/runtime/autoload/htmlcomplete.vim
index a9791451f..ab5095243 100644
--- a/runtime/autoload/htmlcomplete.vim
+++ b/runtime/autoload/htmlcomplete.vim
@@ -1,7 +1,7 @@
" Vim completion script
" Language: XHTML 1.0 Strict
" Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
-" Last Change: 2005 Sep 15
+" Last Change: 2005 Sep 19
function! htmlcomplete#CompleteTags(findstart, base)
if a:findstart
@@ -11,26 +11,53 @@ function! htmlcomplete#CompleteTags(findstart, base)
while start >= 0 && line[start - 1] !~ '<'
let start -= 1
endwhile
+ if start < 0
+ let curpos = line('.')
+ let stylestart = searchpair('<style\>', '', '<\/style\>', "bnW")
+ let styleend = searchpair('<style\>', '', '<\/style\>', "nW")
+ if stylestart != 0 && styleend != 0
+ if stylestart <= curpos && styleend >= curpos
+ let b:csscompl = 1
+ let start = 0
+ endif
+ endif
+ endif
return start
else
+ " Check if we should do CSS completion inside of <style> tag
+ if exists("b:csscompl")
+ unlet! b:csscompl
+ return csscomplete#CompleteCSS(0, a:base)
+ endif
+ if a:base =~ '>'
+ " Generally if a:base contains > it means we are outside of tag and
+ " should abandon action - with one exception: <style> span { bo
+ if a:base =~ 'style[^>]\{-}>[^<]\{-}$'
+ return csscomplete#CompleteCSS(0, a:base)
+ else
+ return []
+ endif
+ endif
+
" Set attribute groups
- let g:coreattrs = ["id", "class", "style", "title"]
- let g:i18n = ["lang", "xml:lang", "dir"]
- let g:events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
+ let coreattrs = ["id", "class", "style", "title"]
+ let i18n = ["lang", "xml:lang", "dir=\"ltr\" ", "dir=\"rtl\" "]
+ let events = ["onclick", "ondblclick", "onmousedown", "onmouseup", "onmousemove",
\ "onmouseout", "onkeypress", "onkeydown", "onkeyup"]
- let g:focus = ["accesskey", "tabindex", "onfocus", "onblur"]
- let g:coregroup = g:coreattrs
- let g:coregroup = extend(g:coregroup, g:i18n)
- let g:coregroup = extend(g:coregroup, g:events)
- " find tags matching with "a:base"
+ let focus = ["accesskey", "tabindex", "onfocus", "onblur"]
+ let coregroup = coreattrs + i18n + events
let res = []
+ let res2 = []
+ " find tags matching with "a:base"
" If a:base contains > it means we are already outside of tag and we
" should abandon action
- if a:base =~ '>'
- return []
- endif
" If a:base contains white space it is attribute.
" It could be also value of attribute...
+ " We have to get first word to offer
+ " proper completions
+ let tag = split(a:base)[0]
+ " Get last word, it should be attr name
+ let attr = matchstr(a:base, '.*\s\zs.*')
" Possible situations where any prediction would be difficult:
" 1. Events attributes
if a:base =~ '\s'
@@ -40,6 +67,113 @@ function! htmlcomplete#CompleteTags(findstart, base)
" Also retrieving class names from current file and linked
" stylesheets.
if a:base =~ "\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']"
+ if a:base =~ "class\\s*=\\s*[\"'][a-zA-Z0-9_ -]*$"
+ " Handle class name completion
+ " 1. Find lines of <link stylesheet>
+ " 1a. Check file for @import
+ " 2. Extract filename(s?) of stylesheet,
+ call cursor(1,1)
+ let head = getline(search('<head\>'), search('<\/head>'))
+ let headjoined = join(copy(head), ' ')
+ if headjoined =~ '<style'
+ let stylehead = substitute(headjoined, '+>\*[', ' ', 'g')
+ let styleheadlines = split(stylehead)
+ let headclasslines = filter(copy(styleheadlines), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+ let internal = 1
+ else
+ let internal = 0
+ endif
+ let styletable = []
+ let secimportfiles = []
+ let filestable = filter(copy(head), "v:val =~ '\\(@import\\|link.*stylesheet\\)'")
+ for line in filestable
+ if line =~ "@import"
+ let styletable += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
+ elseif line =~ "<link"
+ let styletable += [matchstr(line, "href\\s*=\\s*[\"']\\zs\\f\\+\\ze")]
+ endif
+ endfor
+ for file in filestable
+ if filereadable(file)
+ let stylesheet = readfile(file)
+ let secimport = filter(copy(stylesheet), "v:val =~ '@import'")
+ if len(secimport) > 0
+ for line in secimport
+ let secimportfiles += [matchstr(line, "import\\s\\+\\(url(\\)\\?[\"']\\?\\zs\\f\\+\\ze")]
+ endfor
+ endif
+ endif
+ endfor
+ let cssfiles = styletable + secimportfiles
+ let classes = []
+ for file in cssfiles
+ if filereadable(file)
+ let stylesheet = readfile(file)
+ let stylefile = join(stylesheet)
+ let stylefile = substitute(stylefile, '+>\*[', ' ', 'g')
+ let stylesheet = split(stylefile)
+ let classlines = filter(copy(stylesheet), "v:val =~ '\\([a-zA-Z0-9:]\\+\\)\\?\\.[a-zA-Z0-9_-]\\+'")
+ endif
+ " We gathered classes definitions from all external files
+ let classes += classlines
+ endfor
+ if internal == 1
+ let classes += headclasslines
+ endif
+ let elements = {}
+ for element in classes
+ if element =~ '^\.'
+ let class = matchstr(element, '^\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+ let class = substitute(class, ':.*', '', '')
+ if has_key(elements, "common")
+ let elements["common"] .= " ".class
+ else
+ let elements["common"] = class
+ endif
+ else
+ let class = matchstr(element, '[a-zA-Z1-6]*\.\zs[a-zA-Z][a-zA-Z0-9_-]*\ze')
+ let tagname = tolower(matchstr(element, '[a-zA-Z1-6]*\ze.'))
+ if tagname != ''
+ if has_key(elements, tagname)
+ let elements[tagname] .= " ".class
+ else
+ let elements[tagname] = class
+ endif
+ endif
+ endif
+ endfor
+
+ if has_key(elements, tag) && has_key(elements, "common")
+ let values = split(elements[tag]." ".elements["common"])
+ elseif has_key(elements, tag) && !has_key(elements, "common")
+ let values = split(elements[tag])
+ elseif !has_key(elements, tag) && has_key(elements, "common")
+ let values = split(elements["common"])
+ else
+ return []
+ endif
+
+ " We need special version of sbase
+ let classbase = matchstr(a:base, ".*[\"']")
+ let classquote = matchstr(classbase, '.$')
+
+
+ let entered_class = matchstr(attr, ".*=\\s*[\"']\\zs.*")
+
+ for m in sort(values)
+ if m =~? '^'.entered_class
+ call add(res, classbase . m . classquote . ' ')
+ elseif m =~? entered_class
+ call add(res2, classbase . m . classquote . ' ')
+ endif
+ endfor
+
+ return res + res2
+
+ elseif a:base =~ "style\\s*=\\s*[\"'][^\"']*$"
+ return csscomplete#CompleteCSS(0, a:base)
+
+ endif
let stripbase = matchstr(a:base, ".*\\(on[a-z]*\\|style\\|class\\)\\s*=\\s*[\"']\\zs.*")
" Now we have a:base stripped from all chars up to style/class.
" It may fail with some strange style value combinations.
@@ -47,11 +181,6 @@ function! htmlcomplete#CompleteTags(findstart, base)
return []
endif
endif
- " We have to get first word to offer
- " proper attributes.
- let tag = split(a:base)[0]
- " Get last word, it should be attr name
- let attr = matchstr(a:base, '.*\s\zs.*')
" If attr contains =\s*[\"'] we catched value of attribute
if attr =~ "=\s*[\"']"
" Let do attribute specific completion
@@ -97,7 +226,7 @@ function! htmlcomplete#CompleteTags(findstart, base)
endif
elseif attrname == 'type'
if a:base =~ '^input'
- let values = ["input-text", "password", "checkbox", "radio", "submit", "reset", "input-file", "hidden", "input-image", "input-button"]
+ let values = ["text", "password", "checkbox", "radio", "submit", "reset", "file", "hidden", "image", "button"]
elseif a:base =~ '^button'
let values = ["button", "submit", "reset"]
endif
@@ -111,128 +240,114 @@ function! htmlcomplete#CompleteTags(findstart, base)
" We need special version of sbase
let attrbase = matchstr(a:base, ".*[\"']")
+ let attrquote = matchstr(attrbase, '.$')
for m in values
- if m =~ entered_value
- call add(res, attrbase . m . '" ')
+ " This if is needed to not offer all completions as-is
+ " alphabetically but sort them. Those beginning with entered
+ " part will be as first choices
+ if m =~ '^'.entered_value
+ call add(res, attrbase . m . attrquote.' ')
+ elseif m =~ entered_value
+ call add(res2, attrbase . m . attrquote.' ')
endif
endfor
+
+ return res + res2
+
endif
" Shorten a:base to not include last word
let sbase = matchstr(a:base, '.*\ze\s.*')
if tag =~ '^\(abbr\|acronym\|b\|bdo\|big\|caption\|cite\|code\|dd\|dfn\|div\|dl\|dt\|em\|fieldset\|h\d\|kbd\|li\|noscript\|ol\|p\|samp\|small\|span\|strong\|sub\|sup\|tt\|ul\|var\)$'
- let attrs = g:coregroup
+ let attrs = coregroup
elseif tag == 'a'
- let tagspec = ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
- let attrs = extend(tagspec, g:coregroup)
- let attrs = extend(attrs, g:focus)
+ let attrs = coregroup + focus + ["charset", "type", "name", "href", "hreflang", "rel", "rev", "shape", "coords"]
elseif tag == 'area'
- let attrs = g:coregroup
+ let attrs = coregroup
elseif tag == 'base'
let attrs = ["href", "id"]
elseif tag == 'blockquote'
- let attrs = g:coregroup
- let attrs = extend(attrs, ["cite"])
+ let attrs = coregroup + ["cite"]
elseif tag == 'body'
- let attrs = g:coregroup
- let attrs = extend(attrs, ["onload", "onunload"])
+ let attrs = coregroup + ["onload", "onunload"]
elseif tag == 'br'
- let attrs = g:coreattrs
+ let attrs = coreattrs
elseif tag == 'button'
- let attrs = g:coreattrs
- let attrs = extend(attrs, g:focus)
- let attrs = extend(attrs, ["name", "value", "type"])
+ let attrs = coreattrs + focus + ["name", "value", "type"]
elseif tag == '^\(col\|colgroup\)$'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["span", "width", "align", "char", "charoff", "valign"])
+ let attrs = coreattrs + ["span", "width", "align", "char", "charoff", "valign"]
elseif tag =~ '^\(del\|ins\)$'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["cite", "datetime"])
+ let attrs = coreattrs + ["cite", "datetime"]
elseif tag == 'form'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["action", "method", "enctype", "onsubmit", "onreset", "accept", "accept-charset"])
+ let attrs = coreattrs + ["action", "method=\"get\" ", "method=\"post\" ", "enctype", "onsubmit", "onreset", "accept", "accept-charset"]
elseif tag == 'head'
- let attrs = g:i18n
- let attrs = extend(attrs, ["id", "profile"])
+ let attrs = i18n + ["id", "profile"]
elseif tag == 'html'
- let attrs = g:i18n
- let attrs = extend(attrs, ["id", "xmlns"])
+ let attrs = i18n + ["id", "xmlns"]
elseif tag == 'img'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"])
+ let attrs = coreattrs + ["src", "alt", "longdesc", "height", "width", "usemap", "ismap"]
elseif tag == 'input'
- let attrs = g:coreattrs
- let attrs = extend(attrs, g:focus)
- let attrs = extend(attrs, ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"])
+ let attrs = coreattrs + focus + ["type", "name", "value", "checked", "disabled", "readonly", "size", "maxlength", "src", "alt", "usemap", "onselect", "onchange", "accept"]
elseif tag == 'label'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["for", "accesskey", "onfocus", "onblur"])
+ let attrs = coreattrs + ["for", "accesskey", "onfocus", "onblur"]
elseif tag == 'legend'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["accesskey"])
+ let attrs = coreattrs + ["accesskey"]
elseif tag == 'link'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["charset", "href", "hreflang", "type", "rel", "rev", "media"])
+ let attrs = coreattrs + ["charset", "href", "hreflang", "type", "rel", "rev", "media"]
elseif tag == 'map'
- let attrs = g:i18n
- let attrs = extend(attrs, g:events)
- let attrs = extend(attrs, ["id", "class", "style", "title", "name"])
+ let attrs = i18n + events + ["id", "class", "style", "title", "name"]
elseif tag == 'meta'
- let attrs = g:i18n
- let attrs = extend(attrs, ["id", "http-equiv", "content", "scheme", "name"])
+ let attrs = i18n + ["id", "http-equiv", "content", "scheme", "name"]
elseif tag == 'title'
- let attrs = g:i18n
- let attrs = extend(attrs, ["id"])
+ let attrs = i18n + ["id"]
elseif tag == 'object'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"])
+ let attrs = coreattrs + ["declare", "classid", "codebase", "data", "type", "codetype", "archive", "standby", "height", "width", "usemap", "name", "tabindex"]
elseif tag == 'optgroup'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["disbled", "label"])
+ let attrs = coreattrs + ["disbled", "label"]
elseif tag == 'option'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["disbled", "selected", "value", "label"])
+ let attrs = coreattrs + ["disbled", "selected", "value", "label"]
elseif tag == 'param'
let attrs = ["id", "name", "value", "valuetype", "type"]
elseif tag == 'pre'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["xml:space"])
+ let attrs = coreattrs + ["xml:space"]
elseif tag == 'q'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["cite"])
+ let attrs = coreattrs + ["cite"]
elseif tag == 'script'
let attrs = ["id", "charset", "type", "src", "defer", "xml:space"]
elseif tag == 'select'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"])
+ let attrs = coreattrs + ["name", "size", "multiple", "disabled", "tabindex", "onfocus", "onblur", "onchange"]
elseif tag == 'style'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["id", "type", "media", "title", "xml:space"])
+ let attrs = coreattrs + ["id", "type", "media", "title", "xml:space"]
elseif tag == 'table'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["summary", "width", "border", "frame", "rules" "cellspacing", "cellpadding"])
+ let attrs = coreattrs + ["summary", "width", "border", "frame", "rules", "cellspacing", "cellpadding"]
elseif tag =~ '^\(thead\|tfoot\|tbody\|tr\)$'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["align", "char", "charoff", "valign"])
+ let attrs = coreattrs + ["align", "char", "charoff", "valign"]
elseif tag == 'textarea'
- let attrs = g:coreattrs
- let attrs = extend(attrs, g:focus)
- let attrs = extend(attrs, ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"])
+ let attrs = coreattrs + focus + ["name", "rows", "cols", "disabled", "readonly", "onselect", "onchange"]
elseif tag =~ '^\(th\|td\)$'
- let attrs = g:coreattrs
- let attrs = extend(attrs, ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"])
+ let attrs = coreattrs + ["abbr", "headers", "scope", "rowspan", "colspan", "align", "char", "charoff", "valign"]
+ else
+ return []
endif
for m in sort(attrs)
- if m =~ attr
- if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$'
+ if m =~ '^'.attr
+ if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
call add(res, sbase.' '.m)
else
call add(res, sbase.' '.m.'="')
endif
+ elseif m =~ attr
+ if m =~ '^\(ismap\|defer\|declare\|nohref\|checked\|disabled\|selected\|readonly\)$' || m =~ '='
+ call add(res2, sbase.' '.m)
+ else
+ call add(res2, sbase.' '.m.'="')
+ endif
endif
endfor
- return res
+
+ return res + res2
+
endif
" Close tag
let b:unaryTagsStack = "base meta link hr br param img area input col"
@@ -258,17 +373,17 @@ function! htmlcomplete#CompleteTags(findstart, base)
elseif opentag == 'pre'
let tags = split("a tt i b big small br span bdo map ".phrase." ".miscinline." ".inlineforms)
elseif opentag == 'html'
- let tags = split("head body")
+ let tags = ["head", "body"]
elseif opentag == 'legend'
let tags = split(inline." ".miscinline)
elseif opentag == 'head'
- let tags = split("title base scipt style meta link object")
+ let tags = ["title", "base", "scipt", "style", "meta", "link", "object"]
elseif opentag =~ '^\(noscript\|body\|blockquote\)$'
let tags = split("form ".block." ".misc)
elseif opentag =~ '^\(ul\|ol\)$'
let tags = ["li"]
elseif opentag == 'dl'
- let tags = split("dt dd")
+ let tags = ["dt", "dd"]
elseif opentag =~ '^\(ins\|del\|th\|td\|dd\|div\|li\)$'
let tags = split("form ".block." ".inline." ".misc)
elseif opentag == 'object'
@@ -280,30 +395,34 @@ function! htmlcomplete#CompleteTags(findstart, base)
elseif opentag == 'form'
let tags = split(block." ".misc)
elseif opentag == 'select'
- let tags = split("optgroup option")
+ let tags = ["optgroup", "option"]
elseif opentag == 'optgroup'
let tags = ["option"]
elseif opentag == 'colgroup'
let tags = ["col"]
elseif opentag == '^\(textarea\|option\|script\|style\|title\)$'
- let tags = []
+ let tags = ['empty']
elseif opentag == 'button'
- let tags = split("p h1 h2 h3 h4 h5 h6 div ul ol dl table")
- elseif opentag =~ '^\(thead\|tfoot\|tbody)$'
+ let tags = ["p", "h1", "h2", "h3", "h4", "h5", "h6", "div", "ul", "ol", "dl", "table"]
+ elseif opentag =~ '^\(thead\|tfoot\|tbody\)$'
let tags = ["tr"]
elseif opentag == 'tr'
- let tags = split("th td")
+ let tags = ["th", "td"]
elseif opentag == 'table'
- let tags = split("caption col colgroup thead tfoot tbody tr")
+ let tags = ["caption", "col", "colgroup", "thead", "tfoot", "tbody", "tr"]
+ else
+ return []
endif
for m in tags
- if m =~ a:base
+ if m =~ '^'.a:base
call add(res, m)
+ elseif m =~ a:base
+ call add(res2, m)
endif
endfor
- return res
+ return res + res2
endif
endfunction
@@ -316,10 +435,10 @@ endfunction
" Version: 0.9.1
function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
- let linenum=line(".")
- let lineend=col(".") - 1 " start: cursor position
+ let linenum=line('.')
+ let lineend=col('.') - 1 " start: cursor position
let first=1 " flag for first line searched
- let b:TagStack="" " main stack of tags
+ let b:TagStack='' " main stack of tags
let startInComment=s:InComment()
let tagpat='</\=\(\k\|[-:]\)\+\|/>'
@@ -330,7 +449,7 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
else
let lineend=strlen(line)
endif
- let b:lineTagStack=""
+ let b:lineTagStack=''
let mpos=0
let b:TagCol=0
while (mpos > -1)
@@ -339,46 +458,45 @@ function! htmlcomplete#GetLastOpenTag(unaryTagsStack)
let b:TagCol=b:TagCol+mpos
let tag=matchstr(line,tagpat)
- if exists("b:closetag_disable_synID") || startInComment==s:InCommentAt(linenum, b:TagCol)
+ if exists('b:closetag_disable_synID') || startInComment==s:InCommentAt(linenum, b:TagCol)
let b:TagLine=linenum
- call s:Push(matchstr(tag,'[^<>]\+'),"b:lineTagStack")
+ call s:Push(matchstr(tag,'[^<>]\+'),'b:lineTagStack')
endif
let lineend=lineend-mpos
let line=strpart(line,mpos,lineend)
endif
endwhile
- while (!s:EmptystackP("b:lineTagStack"))
- let tag=s:Pop("b:lineTagStack")
- if match(tag, "^/") == 0 "found end tag
- call s:Push(tag,"b:TagStack")
- elseif s:EmptystackP("b:TagStack") && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
+ while (!s:EmptystackP('b:lineTagStack'))
+ let tag=s:Pop('b:lineTagStack')
+ if match(tag, '^/') == 0 "found end tag
+ call s:Push(tag,'b:TagStack')
+ elseif s:EmptystackP('b:TagStack') && !s:Instack(tag, a:unaryTagsStack) "found unclosed tag
return tag
else
- let endtag=s:Peekstack("b:TagStack")
- if endtag == "/".tag || endtag == "/"
- call s:Pop("b:TagStack") "found a open/close tag pair
- elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
- return ""
+ let endtag=s:Peekstack('b:TagStack')
+ if endtag == '/'.tag || endtag == '/'
+ call s:Pop('b:TagStack') "found a open/close tag pair
+ elseif !s:Instack(tag, a:unaryTagsStack) "we have a mismatch error
+ return ''
+ endif
endif
- endif
+ endwhile
+ let linenum=linenum-1 | let first=0
endwhile
- let linenum=linenum-1 | let first=0
-endwhile
-return ""
+return ''
endfunction
function! s:InComment()
- return synIDattr(synID(line("."), col("."), 0), "name") =~ 'Comment'
+ return synIDattr(synID(line('.'), col('.'), 0), 'name') =~ 'Comment'
endfunction
function! s:InCommentAt(line, col)
- return synIDattr(synID(a:line, a:col, 0), "name") =~ 'Comment'
+ return synIDattr(synID(a:line, a:col, 0), 'name') =~ 'Comment'
endfunction
-
function! s:SetKeywords()
let g:IsKeywordBak=&iskeyword
- let &iskeyword="33-255"
+ let &iskeyword='33-255'
endfunction
function! s:RestoreKeywords()
@@ -387,15 +505,15 @@ endfunction
function! s:Push(el, sname)
if !s:EmptystackP(a:sname)
- exe "let ".a:sname."=a:el.' '.".a:sname
+ exe 'let '.a:sname."=a:el.' '.".a:sname
else
- exe "let ".a:sname."=a:el"
+ exe 'let '.a:sname.'=a:el'
endif
endfunction
function! s:EmptystackP(sname)
- exe "let stack=".a:sname
- if match(stack,"^ *$") == 0
+ exe 'let stack='.a:sname
+ if match(stack,'^ *$') == 0
return 1
else
return 0
@@ -403,9 +521,9 @@ function! s:EmptystackP(sname)
endfunction
function! s:Instack(el, sname)
- exe "let stack=".a:sname
+ exe 'let stack='.a:sname
call s:SetKeywords()
- let m=match(stack, "\\<".a:el."\\>")
+ let m=match(stack, '\<'.a:el.'\>')
call s:RestoreKeywords()
if m < 0
return 0
@@ -416,25 +534,25 @@ endfunction
function! s:Peekstack(sname)
call s:SetKeywords()
- exe "let stack=".a:sname
- let top=matchstr(stack, "\\<.\\{-1,}\\>")
+ exe 'let stack='.a:sname
+ let top=matchstr(stack, '\<.\{-1,}\>')
call s:RestoreKeywords()
return top
endfunction
function! s:Pop(sname)
if s:EmptystackP(a:sname)
- return ""
+ return ''
endif
- exe "let stack=".a:sname
+ exe 'let stack='.a:sname
call s:SetKeywords()
- let loc=matchend(stack,"\\<.\\{-1,}\\>")
- exe "let ".a:sname."=strpart(stack, loc+1, strlen(stack))"
- let top=strpart(stack, match(stack, "\\<"), loc)
+ let loc=matchend(stack,'\<.\{-1,}\>')
+ exe 'let '.a:sname.'=strpart(stack, loc+1, strlen(stack))'
+ let top=strpart(stack, match(stack, '\<'), loc)
call s:RestoreKeywords()
return top
endfunction
function! s:Clearstack(sname)
- exe "let ".a:sname."=''"
+ exe 'let '.a:sname."=''"
endfunction
diff --git a/runtime/doc/cmdline.txt b/runtime/doc/cmdline.txt
index d1764affb..1ea512e60 100644
--- a/runtime/doc/cmdline.txt
+++ b/runtime/doc/cmdline.txt
@@ -1,4 +1,4 @@
-*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Jul 05
+*cmdline.txt* For Vim version 7.0aa. Last change: 2005 Sep 17
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -153,6 +153,7 @@ CTRL-R {0-9a-z"%#:-=.} *c_CTRL-R* *c_<C-R>*
*c_CTRL-R_=*
'=' the expression register: you are prompted to
enter an expression (see |expression|)
+ (doesn't work at the expression prompt)
See |registers| about registers. {not in Vi}
Implementation detail: When using the |expression| register
and invoking setcmdpos(), this sets the position before
@@ -191,7 +192,8 @@ CTRL-\ e {expr} *c_CTRL-\_e*
to finish it. It's most useful in mappings though. See
|expression|.
See |c_CTRL-R_=| for inserting the result of an expression.
- Useful functions are |getcmdline()| and |getcmdpos()|.
+ Useful functions are |getcmdtype()|, |getcmdline()| and
+ |getcmdpos()|.
The cursor position is unchanged, except when the cursor was
at the end of the line, then it stays at the end.
|setcmdpos()| can be used to set the cursor position.
@@ -203,7 +205,9 @@ CTRL-\ e {expr} *c_CTRL-\_e*
:call setcmdpos(strlen(cmd))
:return cmd
:endfunc
-<
+< This doesn't work recursively, thus not when already editing
+ an expression.
+
*c_CTRL-Y*
CTRL-Y When there is a modeless selection, copy the selection into
the clipboard. |modeless-selection|
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index 368b44474..ed6ee899a 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
+*eval.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -1520,6 +1520,7 @@ getcharmod( ) Number modifiers for the last typed character
getbufvar( {expr}, {varname}) variable {varname} in buffer {expr}
getcmdline() String return the current command-line
getcmdpos() Number return cursor position in command-line
+getcmdtype() String return the current command-line type
getcwd() String the current working directory
getfperm( {fname}) String file permissions of file {fname}
getfsize( {fname}) Number size in bytes of file {fname}
@@ -1550,7 +1551,8 @@ iconv( {expr}, {from}, {to}) String convert encoding of {expr}
indent( {lnum}) Number indent of line {lnum}
index( {list}, {expr} [, {start} [, {ic}]])
Number index in {list} where {expr} appears
-input( {prompt} [, {text}]) String get input from the user
+input( {prompt} [, {text} [, {completion}]])
+ String get input from the user
inputdialog( {p} [, {t} [, {c}]]) String like input() but in a GUI dialog
inputrestore() Number restore typeahead
inputsave() Number save and clear typeahead
@@ -2533,14 +2535,27 @@ getcmdline() *getcmdline()*
|c_CTRL-R_=|.
Example: >
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
-< Also see |getcmdpos()| and |setcmdpos()|.
+< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
getcmdpos() *getcmdpos()*
Return the position of the cursor in the command line as a
byte count. The first column is 1.
Only works when editing the command line, thus requires use of
|c_CTRL-\_e| or |c_CTRL-R_=|. Returns 0 otherwise.
- Also see |setcmdpos()| and |getcmdline()|.
+ Also see |getcmdtype()|, |setcmdpos()| and |getcmdline()|.
+
+getcmdtype() *getcmdtype()*
+ Return the current command-line type. Possible return values
+ are:
+ / Search forward command
+ ? Search backward command
+ : Ex-command mode
+ @ Input mode
+ > Debug mode
+ Only works when editing the command line, thus requires use of
+ |c_CTRL-\_e| or |c_CTRL-R_=|. Returns an empty string
+ otherwise.
+ Also see |getcmdpos()|, |setcmdpos()| and |getcmdline()|.
*getcwd()*
getcwd() The result is a String, which is the name of the current
@@ -2910,19 +2925,34 @@ index({list}, {expr} [, {start} [, {ic}]]) *index()*
:if index(numbers, 123) >= 0
-input({prompt} [, {text}]) *input()*
+input({prompt} [, {text} [, {completion}]]) *input()*
The result is a String, which is whatever the user typed on
the command-line. The parameter is either a prompt string, or
a blank string (for no prompt). A '\n' can be used in the
- prompt to start a new line. The highlighting set with
- |:echohl| is used for the prompt. The input is entered just
- like a command-line, with the same editing commands and
- mappings. There is a separate history for lines typed for
- input().
+ prompt to start a new line.
+ The highlighting set with |:echohl| is used for the prompt.
+ The input is entered just like a command-line, with the same
+ editing commands and mappings. There is a separate history
+ for lines typed for input().
+ Example: >
+ :if input("Coffee or beer? ") == "beer"
+ : echo "Cheers!"
+ :endif
+<
If the optional {text} is present, this is used for the
- default reply, as if the user typed this.
- NOTE: This must not be used in a startup file, for the
- versions that only run in GUI mode (e.g., the Win32 GUI).
+ default reply, as if the user typed this. Example: >
+ :let color = input("Color? ", "white")
+
+< The optional {completion} argument specifies the type of
+ completion supported for the input. Without it completion is
+ not performed. The supported completion types are the same as
+ that can be supplied to a user-defined command using the
+ "-complete=" argument. Refer to |:command-completion| for
+ more information. Example: >
+ let fname = input("File: ", "", "file")
+<
+ NOTE: This function must not be used in a startup file, for
+ the versions that only run in GUI mode (e.g., the Win32 GUI).
Note: When input() is called from within a mapping it will
consume remaining characters from that mapping, because a
mapping is handled like the characters were typed.
@@ -2931,13 +2961,7 @@ input({prompt} [, {text}]) *input()*
that further characters follow in the mapping, e.g., by using
|:execute| or |:normal|.
- Example: >
- :if input("Coffee or beer? ") == "beer"
- : echo "Cheers!"
- :endif
-< Example with default text: >
- :let color = input("Color? ", "white")
-< Example with a mapping: >
+ Example with a mapping: >
:nmap \x :call GetFoo()<CR>:exe "/" . Foo<CR>
:function GetFoo()
: call inputsave()
@@ -2957,6 +2981,7 @@ inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
omitted an empty string is returned.
Hitting <Enter> works like pressing the OK button. Hitting
<Esc> works like pressing the Cancel button.
+ NOTE: Command-line completion is not supported.
inputlist({textlist}) *inputlist()*
{textlist} must be a list of strings. This list is displayed,
@@ -2996,6 +3021,7 @@ inputsecret({prompt} [, {text}]) *inputsecret()*
|history| stack.
The result is a String, which is whatever the user actually
typed on the command-line in response to the issued prompt.
+ NOTE: Command-line completion is not supported.
insert({list}, {item} [, {idx}]) *insert()*
Insert {item} at the start of List {list}.
@@ -4450,6 +4476,8 @@ winheight({nr}) *winheight()*
winline() The result is a Number, which is the screen line of the cursor
in the window. This is counting screen lines from the top of
the window. The first line is one.
+ If the cursor was moved the view on the file will be updated
+ first, this may cause a scroll.
*winnr()*
winnr([{arg}]) The result is a Number, which is the number of the current
diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt
index ffbb7a3da..30fe2d4f1 100644
--- a/runtime/doc/insert.txt
+++ b/runtime/doc/insert.txt
@@ -1,4 +1,4 @@
-*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 15
+*insert.txt* For Vim version 7.0aa. Last change: 2005 Sep 18
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -990,16 +990,17 @@ are included.
When using after CTRL-X CTRL-O after "<" it is completed with tag name
available in current context. Inside of tag completion aids to choose
-proper attributes, and when possible choose appropriate attribute value.
+proper attributes, and when possible choose appropriate attribute value
+including class names for CSS styles.
When used after "</" CTRL-X CTRL-O will close the last opened tag.
-File htmlcompletion.vim provides through autoload mechanism
+File htmlcomplete.vim provides through |autoload| mechanism
GetLastOpenTag function which can be used in XML files to get name of
last open tag with: >
- :echo htmlcompletion#GetLastOpenTag("b:unaryTagsStack")
-<
+ :echo htmlcomplete#GetLastOpenTag("b:unaryTagsStack")
+
==============================================================================
8. Insert mode commands *inserting*
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 451212233..cc4d2a8a7 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -4992,6 +4992,7 @@ ft-fvwm-syntax syntax.txt /*ft-fvwm-syntax*
ft-groff-syntax syntax.txt /*ft-groff-syntax*
ft-gsp-syntax syntax.txt /*ft-gsp-syntax*
ft-haskell-syntax syntax.txt /*ft-haskell-syntax*
+ft-html-omni insert.txt /*ft-html-omni*
ft-html-syntax syntax.txt /*ft-html-syntax*
ft-htmlos-syntax syntax.txt /*ft-htmlos-syntax*
ft-ia64-syntax syntax.txt /*ft-ia64-syntax*
@@ -5163,6 +5164,7 @@ getchar() eval.txt /*getchar()*
getcharmod() eval.txt /*getcharmod()*
getcmdline() eval.txt /*getcmdline()*
getcmdpos() eval.txt /*getcmdpos()*
+getcmdtype() eval.txt /*getcmdtype()*
getcwd() eval.txt /*getcwd()*
getfontname() eval.txt /*getfontname()*
getfperm() eval.txt /*getfperm()*
@@ -5294,6 +5296,7 @@ hebrew hebrew.txt /*hebrew*
hebrew.txt hebrew.txt /*hebrew.txt*
help various.txt /*help*
help-context help.txt /*help-context*
+help-tags tags 1
help-translated various.txt /*help-translated*
help-xterm-window various.txt /*help-xterm-window*
help.txt help.txt /*help.txt*
@@ -7319,6 +7322,13 @@ zf fold.txt /*zf*
zg spell.txt /*zg*
zh scroll.txt /*zh*
zi fold.txt /*zi*
+zip zip.txt /*zip*
+zip-contents zip.txt /*zip-contents*
+zip-copyright zip.txt /*zip-copyright*
+zip-history zip.txt /*zip-history*
+zip-manual zip.txt /*zip-manual*
+zip-usage zip.txt /*zip-usage*
+zip.txt zip.txt /*zip.txt*
zj fold.txt /*zj*
zk fold.txt /*zk*
zl scroll.txt /*zl*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index cbd77d0ae..6f353bc71 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 16
+*todo.txt* For Vim version 7.0aa. Last change: 2005 Sep 20
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -32,6 +32,20 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
Test11 fails sometimes. (athena, huge features)
+ml_get errors: :%s/^\_s\+$//gc
+And: Insert mode in one window, long file, click in other window, short file.
+
+'scrolljump' negative used as a percentage, e.g. -50 is 50% of window height?
+
+Spelling:
+- suggestion for "a an" includes "an an", which is marked bad. Check
+ suggestions for not being a bad word (when split)?
+- CTRL-X s doesn't consider 'spellcapcheck'.
+- Have spellbadword() return a list with bad word and reason it's bad?
+ (rare/local/bad/caps)
+- spellsuggest() needs a way to require a capital. A flag or context?
+- Underscore in REP items stands for space.
+
ccomplete:
- How to use a popup menu?
- When a typedef or struct is local to a file only use it in that file?
@@ -1726,7 +1740,6 @@ Built-in script language:
filecopy(from, to) Copy a file
shorten(fname) shorten a file name, like home_replace()
perl(cmd) call Perl and return string
- input(prompt, complete) like input() but do specified completion
inputrl() like input() but right-to-left
virtualmode() add argument to obtain whether "$" was used in
Visual block mode.
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index e4e981bb6..d9845715e 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -447,6 +447,8 @@ New functions: ~
|get()| get an item from a List or Dictionary
|getbufline()| get a list of lines from a specified buffer
(Yegappan Lakshmanan)
+|getcmdtype()| return the current command-line type
+ (Yegappan Lakshmanan)
|getfontname()| get actual font name being used
|getfperm()| get file permission string (Nikolai Weibull)
|getftype()| get type of file (Nikolai Weibull)
@@ -812,6 +814,9 @@ Also support t_SI and t_EI on Unix with normal features. (Ciaran McCreesh)
When 'foldcolumn' is one then put as much info in it as possible. This allows
closing a fold with the mouse by clicking on the '-'.
+input() takes an optional completion argument to specify the type of
+completion supported for the input. (Yegappan Lakshmanan)
+
==============================================================================
COMPILE TIME CHANGES *compile-changes-7*
diff --git a/runtime/filetype.vim b/runtime/filetype.vim
index 33f312a92..a09f89548 100644
--- a/runtime/filetype.vim
+++ b/runtime/filetype.vim
@@ -1,7 +1,7 @@
" Vim support file to detect file types
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last Change: 2005 Aug 29
+" Last Change: 2005 Sep 19
" Listen very carefully, I will say this only once
if exists("did_load_filetypes")
@@ -1882,6 +1882,9 @@ au StdinReadPost * if !did_filetype() | runtime! scripts.vim | endif
" Most of these should call s:StarSetf() to avoid names ending in .gz and the
" like are used.
+" Asterisk config file
+au BufNewFile,BufRead *asterisk/*.conf* call s:StarSetf('asterisk')
+
" BIND zone
au BufNewFile,BufRead /var/named/* call s:StarSetf('bindzone')
diff --git a/runtime/scripts.vim b/runtime/scripts.vim
index dd439efdd..06a6d3619 100644
--- a/runtime/scripts.vim
+++ b/runtime/scripts.vim
@@ -1,7 +1,7 @@
" Vim support file to detect file types in scripts
"
" Maintainer: Bram Moolenaar <Bram@vim.org>
-" Last change: 2005 May 20
+" Last change: 2005 Sep 20
" This file is called by an autocommand for every file that has just been
" loaded into a buffer. It checks if the type of file can be recognized by
@@ -182,6 +182,7 @@ else
" - "Index: <filename>" in the first line (CVS file)
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\)'
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
+ \ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
set ft=diff
diff --git a/runtime/spell/en.ascii.spl b/runtime/spell/en.ascii.spl
index 0bbe6998f..c6ebea958 100644
--- a/runtime/spell/en.ascii.spl
+++ b/runtime/spell/en.ascii.spl
Binary files differ
diff --git a/runtime/spell/en.latin1.spl b/runtime/spell/en.latin1.spl
index 4d6f5ae62..fe6b90e7d 100644
--- a/runtime/spell/en.latin1.spl
+++ b/runtime/spell/en.latin1.spl
Binary files differ
diff --git a/runtime/spell/en.utf-8.spl b/runtime/spell/en.utf-8.spl
index d630a7663..46ef9a5c8 100644
--- a/runtime/spell/en.utf-8.spl
+++ b/runtime/spell/en.utf-8.spl
Binary files differ
diff --git a/runtime/spell/en/en_US.diff b/runtime/spell/en/en_US.diff
index 17051dcf8..f947be92a 100644
--- a/runtime/spell/en/en_US.diff
+++ b/runtime/spell/en/en_US.diff
@@ -1,5 +1,5 @@
*** en_US.orig.aff Fri Apr 15 13:20:36 2005
---- en_US.aff Sun Jul 31 22:17:40 2005
+--- en_US.aff Tue Sep 20 19:41:00 2005
***************
*** 3,4 ****
--- 3,134 ----
@@ -165,12 +165,35 @@
! SFX G 0 ing [^e]
***************
+*** 99,101 ****
+
+! REP 88
+ REP a ei
+--- 229,231 ----
+
+! REP 91
+ REP a ei
+***************
*** 137,138 ****
--- 267,270 ----
REP uy i
+ REP y ie
+ REP ie y
REP i ee
+***************
+*** 174,175 ****
+--- 306,308 ----
+ REP ew ue
++ REP uf ough
+ REP uff ough
+***************
+*** 188 ****
+--- 321,325 ----
+ REP shun cion
++ REP the_the the
++ REP an_an an
++ REP an_a a
++ REP a_an an
*** en_US.orig.dic Fri Apr 15 13:20:36 2005
--- en_US.dic Tue Aug 16 17:03:31 2005
***************
diff --git a/runtime/spell/nl/nl_NL.diff b/runtime/spell/nl/nl_NL.diff
index d66d76dbf..bc068fd89 100644
--- a/runtime/spell/nl/nl_NL.diff
+++ b/runtime/spell/nl/nl_NL.diff
@@ -141,7 +141,7 @@
+ REP zoz z.o.z.
+
*** nl_NL.orig.dic Sun Jul 3 18:24:07 2005
---- nl_NL.dic Sat Aug 13 14:10:15 2005
+--- nl_NL.dic Mon Sep 19 20:25:09 2005
***************
*** 1,3 ****
119937
@@ -259,7 +259,7 @@
voorjaarsmoeheid
***************
*** 119938 ****
---- 119963,120139 ----
+--- 119963,120142 ----
überhaupt
+ Christiaan/X
+ Fred/X
@@ -436,4 +436,7 @@
+ bijv.
+ Gerard
+ Google
++ Luc
+ Luuk
++ Gert
++ Marion
diff --git a/runtime/syntax/asterisk.vim b/runtime/syntax/asterisk.vim
new file mode 100644
index 000000000..c4e2b15f4
--- /dev/null
+++ b/runtime/syntax/asterisk.vim
@@ -0,0 +1,73 @@
+" Vim syntax file
+" Language: Asterisk config file
+" Maintainer: brc007
+" Last Change: 2005 Sep 19
+" version 0.2
+"
+" Additional changes made 2005 Mar 7 by Corydon76
+" * CVS priority, including n and s, and new label definitions
+" * ENV( and LEN( support
+" * Class patterns in extensions now match only the class pattern (instead of to a following expression)
+" * anthm's functions are matched
+" * Variables now appear in their own colors inside expressions
+
+" For version 5.x: Clear all syntax items
+" For version 6.x: Quit when a syntax file was already loaded
+if version < 600
+ syntax clear
+elseif exists("b:current_syntax")
+ finish
+endif
+
+"testing only
+syn sync clear
+syn sync fromstart
+
+
+syn keyword asteriskTodo TODO contained
+syn match asteriskComment ";.*" contains=asteriskTodo
+syn match asteriskContext "\[.\{-}\]"
+syn match asteriskExten "^\s*exten\s*=>"
+syn match asteriskApp "\s*,\s*\zs[a-zA-Z]*\ze"
+" Digits plus oldlabel (newlabel)
+syn match asteriskPriority ",[[:digit:]]\+\(+[[:alpha:]][[:alnum:]_]*\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
+" s or n plus digits (newlabel)
+syn match asteriskPriority ",[sn]\(+[[:digit:]]\+\)\?\(([[:alpha:]][[:alnum:]_]*)\)\?,"
+syn match asteriskIncludeBad "^\s*#\s*[[:alnum:]]*"
+syn match asteriskInclude "^\s#\sinclude\s.*"
+syn match asteriskVar "\${_\{0,2}[[:alpha:]][[:alnum:]_]*\(:[[:digit:]]\+\)\{0,2}}"
+syn match asteriskVarLen "\${_\{0,2}[[:alpha:]][[:alnum:]_]*(.\{-})}" contains=asteriskVar,asteriskVarLen,asteriskExp
+syn match asteriskExp "\$\[.\{-}\]" contains=asteriskVar,asteriskVarLen,asteriskExp
+syn match asteriskFunc "\$([[:alpha:]][[:alnum:]_]*.*)" contains=asteriskVar,asteriskVarLen,asteriskExp
+
+" Define the default highlighting.
+" For version 5.7 and earlier: only when not done already
+" For version 5.8 and later: only when an item doesn't have highlighting yet
+:if version >= 508 || !exists("did_conf_syntax_inits")
+ if version < 508
+ let did_conf_syntax_inits = 1
+ command -nargs=+ HiLink hi link <args>
+ else
+ command -nargs=+ HiLink hi def link <args>
+ endif
+
+
+ HiLink asteriskComment Comment
+" not sure what type this should be, using String for testing.
+ HiLink asteriskExten String
+" same here
+ HiLink asteriskContext Identifier
+ HiLink asteriskApplication Statement
+ HiLink asteriskInclude Preproc
+ HiLink asteriskIncludeBad Error
+ HiLink asteriskPriority Preproc
+ HiLink asteriskVar String
+ HiLink asteriskVarLen Function
+ HiLink asteriskExp Type
+ delcommand HiLink
+endif
+
+
+let b:current_syntax = "asterisk"
+
+" vim: ts=8 sw=2