X7ROOT File Manager
Current Path:
/usr/share/vim/vim80/indent
usr
/
share
/
vim
/
vim80
/
indent
/
π
..
π
README.txt
(1.6 KB)
π
aap.vim
(265 B)
π
ada.vim
(10.97 KB)
π
ant.vim
(290 B)
π
automake.vim
(243 B)
π
awk.vim
(7.59 KB)
π
bib.vim
(346 B)
π
bst.vim
(1.89 KB)
π
bzl.vim
(2.43 KB)
π
c.vim
(325 B)
π
cdl.vim
(4.15 KB)
π
ch.vim
(470 B)
π
chaiscript.vim
(1.11 KB)
π
changelog.vim
(264 B)
π
clojure.vim
(10.2 KB)
π
cmake.vim
(2.62 KB)
π
cobol.vim
(8.11 KB)
π
config.vim
(2.13 KB)
π
context.vim
(752 B)
π
cpp.vim
(329 B)
π
cs.vim
(327 B)
π
css.vim
(1.75 KB)
π
cucumber.vim
(2.62 KB)
π
cuda.vim
(305 B)
π
d.vim
(510 B)
π
dictconf.vim
(337 B)
π
dictdconf.vim
(338 B)
π
docbk.vim
(336 B)
π
dtd.vim
(11.59 KB)
π
dtrace.vim
(451 B)
π
dylan.vim
(2.64 KB)
π
eiffel.vim
(3.24 KB)
π
erlang.vim
(45.29 KB)
π
eruby.vim
(2.74 KB)
π
eterm.vim
(668 B)
π
falcon.vim
(13.72 KB)
π
fortran.vim
(7.27 KB)
π
framescript.vim
(816 B)
π
gitconfig.vim
(841 B)
π
gitolite.vim
(1.25 KB)
π
go.vim
(1.63 KB)
π
haml.vim
(2.16 KB)
π
hamster.vim
(1.39 KB)
π
hog.vim
(1.85 KB)
π
html.vim
(32.47 KB)
π
htmldjango.vim
(273 B)
π
idlang.vim
(1.58 KB)
π
ishd.vim
(1.83 KB)
π
j.vim
(1.77 KB)
π
java.vim
(4.19 KB)
π
javascript.vim
(15 KB)
π
json.vim
(4.32 KB)
π
jsp.vim
(462 B)
π
ld.vim
(1.75 KB)
π
less.vim
(243 B)
π
lifelines.vim
(637 B)
π
liquid.vim
(1.85 KB)
π
lisp.vim
(353 B)
π
logtalk.vim
(1.7 KB)
π
lua.vim
(1.88 KB)
π
mail.vim
(308 B)
π
make.vim
(3.41 KB)
π
matlab.vim
(1.92 KB)
π
mf.vim
(156 B)
π
mma.vim
(2.18 KB)
π
mp.vim
(11.06 KB)
π
nsis.vim
(3.18 KB)
π
objc.vim
(1.61 KB)
π
ocaml.vim
(8.94 KB)
π
occam.vim
(4.53 KB)
π
pascal.vim
(5.52 KB)
π
perl.vim
(5.76 KB)
π
perl6.vim
(3.46 KB)
π
php.vim
(21.91 KB)
π
postscr.vim
(1.61 KB)
π
pov.vim
(2.6 KB)
π
prolog.vim
(1.46 KB)
π
pyrex.vim
(326 B)
π
python.vim
(5.61 KB)
π
r.vim
(13.58 KB)
π
readline.vim
(711 B)
π
rhelp.vim
(2.77 KB)
π
rmd.vim
(1.17 KB)
π
rnoweb.vim
(1.06 KB)
π
rpl.vim
(1.82 KB)
π
rrst.vim
(1.17 KB)
π
rst.vim
(1.37 KB)
π
ruby.vim
(22.43 KB)
π
rust.vim
(6.35 KB)
π
sas.vim
(5.01 KB)
π
sass.vim
(950 B)
π
scala.vim
(18.97 KB)
π
scheme.vim
(372 B)
π
scss.vim
(191 B)
π
sdl.vim
(2.73 KB)
π
sh.vim
(5.58 KB)
π
sml.vim
(6.33 KB)
π
sql.vim
(1.18 KB)
π
sqlanywhere.vim
(12.86 KB)
π
systemd.vim
(205 B)
π
systemverilog.vim
(8.38 KB)
π
tcl.vim
(1.59 KB)
π
tcsh.vim
(1.24 KB)
π
teraterm.vim
(1.33 KB)
π
tex.vim
(13.18 KB)
π
tf.vim
(1.51 KB)
π
tilde.vim
(1012 B)
π
treetop.vim
(707 B)
π
vb.vim
(2.04 KB)
π
verilog.vim
(7.97 KB)
π
vhdl.vim
(14.32 KB)
π
vim.vim
(2.92 KB)
π
vroom.vim
(379 B)
π
xf86conf.vim
(709 B)
π
xhtml.vim
(269 B)
π
xinetd.vim
(1.2 KB)
π
xml.vim
(2.78 KB)
π
xsd.vim
(253 B)
π
xslt.vim
(297 B)
π
yacc.vim
(781 B)
π
yaml.vim
(5.34 KB)
π
zimbu.vim
(3.84 KB)
π
zsh.vim
(411 B)
Editing: dtd.vim
" Vim indent file " Language: DTD (Document Type Definition for XML) " Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Latest Revision: 2011-07-08 let s:cpo_save = &cpo set cpo&vim setlocal indentexpr=GetDTDIndent() setlocal indentkeys=!^F,o,O,> setlocal nosmartindent if exists("*GetDTDIndent") finish endif " TODO: Needs to be adjusted to stop at [, <, and ]. let s:token_pattern = '^[^[:space:]]\+' function s:lex1(input, start, ...) let pattern = a:0 > 0 ? a:1 : s:token_pattern let start = matchend(a:input, '^\_s*', a:start) if start == -1 return ["", a:start] endif let end = matchend(a:input, pattern, start) if end == -1 return ["", a:start] endif let token = strpart(a:input, start, end - start) return [token, end] endfunction function s:lex(input, start, ...) let pattern = a:0 > 0 ? a:1 : s:token_pattern let info = s:lex1(a:input, a:start, pattern) while info[0] == '--' let info = s:lex1(a:input, info[1], pattern) while info[0] != "" && info[0] != '--' let info = s:lex1(a:input, info[1], pattern) endwhile if info[0] == "" return info endif let info = s:lex1(a:input, info[1], pattern) endwhile return info endfunction function s:indent_to_innermost_parentheses(line, end) let token = '(' let end = a:end let parentheses = [end - 1] while token != "" let [token, end] = s:lex(a:line, end, '^\%([(),|]\|[A-Za-z0-9_-]\+\|#P\=CDATA\|%[A-Za-z0-9_-]\+;\)[?*+]\=') if token[0] == '(' call add(parentheses, end - 1) elseif token[0] == ')' if len(parentheses) == 1 return [-1, end] endif call remove(parentheses, -1) endif endwhile return [parentheses[-1] - strridx(a:line, "\n", parentheses[-1]), end] endfunction " TODO: Line and end could be script global (think OO members). function GetDTDIndent() if v:lnum == 1 return 0 endif " Begin by searching back for a <! that isnβt inside a comment. " From here, depending on what follows immediately after, parse to " where weβre at to determine what to do. if search('<!', 'bceW') == 0 return indent(v:lnum - 1) endif let lnum = line('.') let col = col('.') let indent = indent('.') let line = lnum == v:lnum ? getline(lnum) : join(getline(lnum, v:lnum - 1), "\n") let [declaration, end] = s:lex1(line, col) if declaration == "" return indent + shiftwidth() elseif declaration == '--' " Weβre looking at a comment. Now, simply determine if the comment is " terminated or not. If it isnβt, let Vim take care of that using " 'comments' and 'autoindent'. Otherwise, indent to the first lines level. while declaration != "" let [declaration, end] = s:lex(line, end) if declaration == "-->" return indent endif endwhile return -1 elseif declaration == 'ELEMENT' " Check for element name. If none exists, indent one level. let [name, end] = s:lex(line, end) if name == "" return indent + shiftwidth() endif " Check for token following element name. This can be a specification of " whether the start or end tag may be omitted. If nothing is found, indent " one level. let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)') let n = 0 while token =~ '[-O]' && n < 2 let [token, end] = s:lex(line, end, '^\%([-O(]\|ANY\|EMPTY\)') let n += 1 endwhile if token == "" return indent + shiftwidth() endif " Next comes the content model. If the token weβve found isnβt a " parenthesis it must be either ANY, EMPTY or some random junk. Either " way, weβre done indenting this element, so set it to that of the first " line so that the terminating β>β winds up having the same indention. if token != '(' return indent endif " Now go through the content model. We need to keep track of the nesting " of parentheses. As soon as we hit 0 weβre done. If that happens we must " have a complete content model. Thus set indention to be the same as that " of the first line so that the terminating β>β winds up having the same " indention. Otherwise, weβll indent to the innermost parentheses not yet " matched. let [indent_of_innermost, end] = s:indent_to_innermost_parentheses(line, end) if indent_of_innermost != -1 return indent_of_innermost endif " Finally, look for any additions and/or exceptions to the content model. " This is defined by a β+β or β-β followed by another content model " declaration. " TODO: Can the β-β be separated by whitespace from the β(β? let seen = { '+(': 0, '-(': 0 } while 1 let [additions_exceptions, end] = s:lex(line, end, '^[+-](') if additions_exceptions != '+(' && additions_exceptions != '-(' let [token, end] = s:lex(line, end) if token == '>' return indent endif " TODO: Should use s:lex here on getline(v:lnum) and check for >. return getline(v:lnum) =~ '^\s*>' || count(values(seen), 0) == 0 ? indent : (indent + shiftwidth()) endif " If weβve seen an addition or exception already and this is of the same " kind, the user is writing a broken DTD. Time to bail. if seen[additions_exceptions] return indent endif let seen[additions_exceptions] = 1 let [indent_of_innermost, end] = s:indent_to_innermost_parentheses(line, end) if indent_of_innermost != -1 return indent_of_innermost endif endwhile elseif declaration == 'ATTLIST' " Check for element name. If none exists, indent one level. let [name, end] = s:lex(line, end) if name == "" return indent + shiftwidth() endif " Check for any number of attributes. while 1 " Check for attribute name. If none exists, indent one level, unless the " current line is a lone β>β, in which case we indent to the same level " as the first line. Otherwise, if the attribute name is β>β, we have " actually hit the end of the attribute list, in which case we indent to " the same level as the first line. let [name, end] = s:lex(line, end) if name == "" " TODO: Should use s:lex here on getline(v:lnum) and check for >. return getline(v:lnum) =~ '^\s*>' ? indent : (indent + shiftwidth()) elseif name == ">" return indent endif " Check for attribute value declaration. If none exists, indent two " levels. Otherwise, if itβs an enumerated value, check for nested " parentheses and indent to the innermost one if we donβt reach the end " of the listc. Otherwise, just continue with looking for the default " attribute value. " TODO: Do validation of keywords " (CDATA|NMTOKEN|NMTOKENS|ID|IDREF|IDREFS|ENTITY|ENTITIES)? let [value, end] = s:lex(line, end, '^\%((\|[^[:space:]]\+\)') if value == "" return indent + shiftwidth() * 2 elseif value == 'NOTATION' " If this is a enumerated value based on notations, read another token " for the actual value. If it doesnβt exist, indent three levels. " TODO: If validating according to above, value must be equal to '('. let [value, end] = s:lex(line, end, '^\%((\|[^[:space:]]\+\)') if value == "" return indent + shiftwidth() * 3 endif endif if value == '(' let [indent_of_innermost, end] = s:indent_to_innermost_parentheses(line, end) if indent_of_innermost != -1 return indent_of_innermost endif endif " Finally look for the attributeβs default value. If non exists, indent " two levels. let [default, end] = s:lex(line, end, '^\%("\_[^"]*"\|#\(REQUIRED\|IMPLIED\|FIXED\)\)') if default == "" return indent + shiftwidth() * 2 elseif default == '#FIXED' " We need to look for the fixed value. If non exists, indent three " levels. let [default, end] = s:lex(line, end, '^"\_[^"]*"') if default == "" return indent + shiftwidth() * 3 endif endif endwhile elseif declaration == 'ENTITY' " Check for entity name. If none exists, indent one level. Otherwise, if " the name actually turns out to be a percent sign, β%β, this is a " parameter entity. Read another token to determine the entity name and, " again, if none exists, indent one level. let [name, end] = s:lex(line, end) if name == "" return indent + shiftwidth() elseif name == '%' let [name, end] = s:lex(line, end) if name == "" return indent + shiftwidth() endif endif " Now check for the entity value. If none exists, indent one level. If it " does exist, indent to same level as first line, as weβre now done with " this entity. " " The entity value can be a string in single or double quotes (no escapes " to worry about, as entities are used instead). However, it can also be " that this is an external unparsed entity. In that case we have to look " further for (possibly) a public ID and an URI followed by the NDATA " keyword and the actual notation name. For the public ID and URI, indent " two levels, if they donβt exist. If the NDATA keyword doesnβt exist, " indent one level. Otherwise, if the actual notation name doesnβt exist, " indent two level. If it does, indent to same level as first line, as " weβre now done with this entity. let [value, end] = s:lex(line, end) if value == "" return indent + shiftwidth() elseif value == 'SYSTEM' || value == 'PUBLIC' let [quoted_string, end] = s:lex(line, end, '\%("[^"]\+"\|''[^'']\+''\)') if quoted_string == "" return indent + shiftwidth() * 2 endif if value == 'PUBLIC' let [quoted_string, end] = s:lex(line, end, '\%("[^"]\+"\|''[^'']\+''\)') if quoted_string == "" return indent + shiftwidth() * 2 endif endif let [ndata, end] = s:lex(line, end) if ndata == "" return indent + shiftwidth() endif let [name, end] = s:lex(line, end) return name == "" ? (indent + shiftwidth() * 2) : indent else return indent endif elseif declaration == 'NOTATION' " Check for notation name. If none exists, indent one level. let [name, end] = s:lex(line, end) if name == "" return indent + shiftwidth() endif " Now check for the external ID. If none exists, indent one level. let [id, end] = s:lex(line, end) if id == "" return indent + shiftwidth() elseif id == 'SYSTEM' || id == 'PUBLIC' let [quoted_string, end] = s:lex(line, end, '\%("[^"]\+"\|''[^'']\+''\)') if quoted_string == "" return indent + shiftwidth() * 2 endif if id == 'PUBLIC' let [quoted_string, end] = s:lex(line, end, '\%("[^"]\+"\|''[^'']\+''\|>\)') if quoted_string == "" " TODO: Should use s:lex here on getline(v:lnum) and check for >. return getline(v:lnum) =~ '^\s*>' ? indent : (indent + shiftwidth() * 2) elseif quoted_string == '>' return indent endif endif endif return indent endif " TODO: Processing directives could be indented I suppose. But perhaps itβs " just as well to let the user decide how to indent them (perhaps extending " this function to include proper support for whatever processing directive " language they want to use). " Conditional sections are simply passed along to let Vim decide what to do " (and hence the user). return -1 endfunction let &cpo = s:cpo_save unlet s:cpo_save
Upload File
Create Folder