1bfd8fc05SBram Moolenaar" Vim completion script 213d5aeefSBram Moolenaar" Language: CSS 313d5aeefSBram Moolenaar" Based on MDN CSS Reference at 2016 Jan <https://developer.mozilla.org/en-US/docs/Web/CSS/Reference> 413d5aeefSBram Moolenaar" plus CSS Speech Module <http://www.w3.org/TR/css3-speech/> 513d5aeefSBram Moolenaar" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com ) 613d5aeefSBram Moolenaar" Original Author: Mikolaj Machowski ( mikmach AT wp DOT pl ) 7*34cc7d8cSBram Moolenaar" Last Change: 2021 Sep 21 8e34bd1f5SBram Moolenaar 913d5aeefSBram Moolenaarlet s:values = split("all additive-symbols align-content align-items align-self animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size block-size border border-block-end border-block-end-color border-block-end-style border-block-end-width border-block-start border-block-start-color border-block-start-style border-block-start-width border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-inline-end border-inline-end-color border-inline-end-style border-inline-end-width border-inline-start border-inline-start-color border-inline-start-style border-inline-start-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip clip-path color columns column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width content counter-increment counter-reset cue cue-before cue-after cursor direction display empty-cells fallback filter flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float font font-family font-feature-settings font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-position grid-auto-rows grid-column grid-column-start grid-column-end grid-row grid-row-start grid-row-end grid-template grid-template-areas grid-template-rows grid-template-columns height hyphens image-rendering image-resolution image-orientation ime-mode inline-size isolation justify-content left letter-spacing line-break line-height list-style list-style-image list-style-position list-style-type margin margin-block-end margin-block-start margin-bottom margin-inline-end margin-inline-start margin-left margin-right margin-top marks mask mask-type max-block-size max-height max-inline-size max-width max-zoom min-block-size min-height min-inline-size min-width min-zoom mix-blend-mode negative object-fit object-position offset-block-end offset-block-start offset-inline-end offset-inline-start opacity order orientation orphans outline outline-color outline-offset outline-style outline-width overflow overflow-wrap overflow-x overflow-y pad padding padding-block-end padding-block-start padding-bottom padding-inline-end padding-inline-start padding-left padding-right padding-top page-break-after page-break-before page-break-inside pause-before pause-after pause perspective perspective-origin pointer-events position prefix quotes range resize rest rest-before rest-after right ruby-align ruby-merge ruby-position scroll-behavior scroll-snap-coordinate scroll-snap-destination scroll-snap-points-x scroll-snap-points-y scroll-snap-type scroll-snap-type-x scroll-snap-type-y shape-image-threshold shape-margin shape-outside speak speak-as suffix symbols system table-layout tab-size text-align text-align-last text-combine-upright text-decoration text-decoration-color text-decoration-line text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-indent text-orientation text-overflow text-rendering text-shadow text-transform text-underline-position top touch-action transform transform-box transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi unicode-range user-zoom vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-rate voice-range voice-stress voice-volume white-space widows width will-change word-break word-spacing word-wrap writing-mode z-index zoom") 1013d5aeefSBram Moolenaar 11bfd8fc05SBram Moolenaar 12bfd8fc05SBram Moolenaarfunction! csscomplete#CompleteCSS(findstart, base) 139964e468SBram Moolenaar 14bfd8fc05SBram Moolenaar if a:findstart 15bfd8fc05SBram Moolenaar " We need whole line to proper checking 16d5cdbeb8SBram Moolenaar let line = getline('.') 17d5cdbeb8SBram Moolenaar let start = col('.') - 1 18d5cdbeb8SBram Moolenaar let compl_begin = col('.') - 2 199964e468SBram Moolenaar while start >= 0 && line[start - 1] =~ '\%(\k\|-\)' 20d5cdbeb8SBram Moolenaar let start -= 1 21d5cdbeb8SBram Moolenaar endwhile 22e34bd1f5SBram Moolenaar let b:compl_context = line[0:compl_begin] 23d5cdbeb8SBram Moolenaar return start 249964e468SBram Moolenaar endif 259964e468SBram Moolenaar 26bfd8fc05SBram Moolenaar " There are few chars important for context: 27bfd8fc05SBram Moolenaar " ^ ; : { } /* */ 28bfd8fc05SBram Moolenaar " Where ^ is start of line and /* */ are comment borders 299964e468SBram Moolenaar " Depending on their relative position to cursor we will know what should 30bfd8fc05SBram Moolenaar " be completed. 31bfd8fc05SBram Moolenaar " 1. if nearest are ^ or { or ; current word is property 32d5cdbeb8SBram Moolenaar " 2. if : it is value (with exception of pseudo things) 33bfd8fc05SBram Moolenaar " 3. if } we are outside of css definitions 34bfd8fc05SBram Moolenaar " 4. for comments ignoring is be the easiest but assume they are the same 35bfd8fc05SBram Moolenaar " as 1. 361e015460SBram Moolenaar " 5. if @ complete at-rule 371e015460SBram Moolenaar " 6. if ! complete important 388349fd7cSBram Moolenaar if exists("b:compl_context") 396dc819b1SBram Moolenaar let line = getline('.') 406dc819b1SBram Moolenaar let compl_begin = col('.') - 2 41*34cc7d8cSBram Moolenaar let b:after = line[compl_begin:] 42d5cdbeb8SBram Moolenaar let line = b:compl_context 43d5cdbeb8SBram Moolenaar unlet! b:compl_context 448349fd7cSBram Moolenaar else 458349fd7cSBram Moolenaar let line = a:base 46*34cc7d8cSBram Moolenaar let b:after = '' 478349fd7cSBram Moolenaar endif 48d5cdbeb8SBram Moolenaar 49bfd8fc05SBram Moolenaar let res = [] 50bfd8fc05SBram Moolenaar let res2 = [] 51bfd8fc05SBram Moolenaar let borders = {} 52bfd8fc05SBram Moolenaar 539964e468SBram Moolenaar " Check last occurrence of sequence 541e015460SBram Moolenaar 559964e468SBram Moolenaar let openbrace = strridx(line, '{') 569964e468SBram Moolenaar let closebrace = strridx(line, '}') 579964e468SBram Moolenaar let colon = strridx(line, ':') 589964e468SBram Moolenaar let semicolon = strridx(line, ';') 599964e468SBram Moolenaar let opencomm = strridx(line, '/*') 609964e468SBram Moolenaar let closecomm = strridx(line, '*/') 619964e468SBram Moolenaar let style = strridx(line, 'style\s*=') 629964e468SBram Moolenaar let atrule = strridx(line, '@') 639964e468SBram Moolenaar let exclam = strridx(line, '!') 64bfd8fc05SBram Moolenaar 65bfd8fc05SBram Moolenaar if openbrace > -1 66bfd8fc05SBram Moolenaar let borders[openbrace] = "openbrace" 67bfd8fc05SBram Moolenaar endif 68bfd8fc05SBram Moolenaar if closebrace > -1 69bfd8fc05SBram Moolenaar let borders[closebrace] = "closebrace" 70bfd8fc05SBram Moolenaar endif 71bfd8fc05SBram Moolenaar if colon > -1 72bfd8fc05SBram Moolenaar let borders[colon] = "colon" 73bfd8fc05SBram Moolenaar endif 74bfd8fc05SBram Moolenaar if semicolon > -1 75bfd8fc05SBram Moolenaar let borders[semicolon] = "semicolon" 76bfd8fc05SBram Moolenaar endif 77bfd8fc05SBram Moolenaar if opencomm > -1 78bfd8fc05SBram Moolenaar let borders[opencomm] = "opencomm" 79bfd8fc05SBram Moolenaar endif 80bfd8fc05SBram Moolenaar if closecomm > -1 81bfd8fc05SBram Moolenaar let borders[closecomm] = "closecomm" 82bfd8fc05SBram Moolenaar endif 83bfd8fc05SBram Moolenaar if style > -1 84bfd8fc05SBram Moolenaar let borders[style] = "style" 85bfd8fc05SBram Moolenaar endif 86bfd8fc05SBram Moolenaar if atrule > -1 87bfd8fc05SBram Moolenaar let borders[atrule] = "atrule" 88bfd8fc05SBram Moolenaar endif 891e015460SBram Moolenaar if exclam > -1 901e015460SBram Moolenaar let borders[exclam] = "exclam" 911e015460SBram Moolenaar endif 92bfd8fc05SBram Moolenaar 93d5cdbeb8SBram Moolenaar 949964e468SBram Moolenaar if len(borders) == 0 || borders[max(keys(borders))] =~ '^\%(openbrace\|semicolon\|opencomm\|closecomm\|style\)$' 95bfd8fc05SBram Moolenaar " Complete properties 96bfd8fc05SBram Moolenaar 97bfd8fc05SBram Moolenaar 98bfd8fc05SBram Moolenaar let entered_property = matchstr(line, '.\{-}\zs[a-zA-Z-]*$') 99bfd8fc05SBram Moolenaar 100e34bd1f5SBram Moolenaar for m in s:values 101bfd8fc05SBram Moolenaar if m =~? '^'.entered_property 102d5cdbeb8SBram Moolenaar call add(res, m . ':') 103bfd8fc05SBram Moolenaar elseif m =~? entered_property 104d5cdbeb8SBram Moolenaar call add(res2, m . ':') 105bfd8fc05SBram Moolenaar endif 106bfd8fc05SBram Moolenaar endfor 107bfd8fc05SBram Moolenaar 108bfd8fc05SBram Moolenaar return res + res2 109bfd8fc05SBram Moolenaar 1109964e468SBram Moolenaar elseif borders[max(keys(borders))] == 'colon' 111bfd8fc05SBram Moolenaar " Get name of property 112bfd8fc05SBram Moolenaar let prop = tolower(matchstr(line, '\zs[a-zA-Z-]*\ze\s*:[^:]\{-}$')) 113bfd8fc05SBram Moolenaar 11413d5aeefSBram Moolenaar let wide_keywords = ["initial", "inherit", "unset"] 11513d5aeefSBram Moolenaar let color_values = ["transparent", "rgb(", "rgba(", "hsl(", "hsla(", "#"] 11613d5aeefSBram Moolenaar let border_style_values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] 11713d5aeefSBram Moolenaar let border_width_values = ["thin", "thick", "medium"] 11813d5aeefSBram Moolenaar let list_style_type_values = ["decimal", "decimal-leading-zero", "arabic-indic", "armenian", "upper-armenian", "lower-armenian", "bengali", "cambodian", "khmer", "cjk-decimal", "devanagari", "georgian", "gujarati", "gurmukhi", "hebrew", "kannada", "lao", "malayalam", "mongolian", "myanmar", "oriya", "persian", "lower-roman", "upper-roman", "tamil", "telugu", "thai", "tibetan", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "cjk-earthly-branch", "cjk-heavenly-stem", "lower-greek", "hiragana", "hiragana-iroha", "katakana", "katakana-iroha", "disc", "circle", "square", "disclosure-open", "disclosure-closed"] 11913d5aeefSBram Moolenaar let timing_functions = ["cubic-bezier(", "steps(", "linear", "ease", "ease-in", "ease-in-out", "ease-out", "step-start", "step-end"] 12013d5aeefSBram Moolenaar 12113d5aeefSBram Moolenaar if prop == 'all' 12213d5aeefSBram Moolenaar let values = [] 12313d5aeefSBram Moolenaar elseif prop == 'additive-symbols' 12413d5aeefSBram Moolenaar let values = [] 12513d5aeefSBram Moolenaar elseif prop == 'align-content' 12613d5aeefSBram Moolenaar let values = ["flex-start", "flex-end", "center", "space-between", "space-around", "stretch"] 12713d5aeefSBram Moolenaar elseif prop == 'align-items' 12813d5aeefSBram Moolenaar let values = ["flex-start", "flex-end", "center", "baseline", "stretch"] 12913d5aeefSBram Moolenaar elseif prop == 'align-self' 13013d5aeefSBram Moolenaar let values = ["auto", "flex-start", "flex-end", "center", "baseline", "stretch"] 13113d5aeefSBram Moolenaar elseif prop == 'animation' 13213d5aeefSBram Moolenaar let values = timing_functions + ["normal", "reverse", "alternate", "alternate-reverse"] + ["none", "forwards", "backwards", "both"] + ["running", "paused"] 13313d5aeefSBram Moolenaar elseif prop == 'animation-delay' 13413d5aeefSBram Moolenaar let values = [] 13513d5aeefSBram Moolenaar elseif prop == 'animation-direction' 13613d5aeefSBram Moolenaar let values = ["normal", "reverse", "alternate", "alternate-reverse"] 13713d5aeefSBram Moolenaar elseif prop == 'animation-duration' 13813d5aeefSBram Moolenaar let values = [] 13913d5aeefSBram Moolenaar elseif prop == 'animation-fill-mode' 14013d5aeefSBram Moolenaar let values = ["none", "forwards", "backwards", "both"] 14113d5aeefSBram Moolenaar elseif prop == 'animation-iteration-count' 14213d5aeefSBram Moolenaar let values = [] 14313d5aeefSBram Moolenaar elseif prop == 'animation-name' 14413d5aeefSBram Moolenaar let values = [] 14513d5aeefSBram Moolenaar elseif prop == 'animation-play-state' 14613d5aeefSBram Moolenaar let values = ["running", "paused"] 14713d5aeefSBram Moolenaar elseif prop == 'animation-timing-function' 14813d5aeefSBram Moolenaar let values = timing_functions 149bfd8fc05SBram Moolenaar elseif prop == 'background-attachment' 150bfd8fc05SBram Moolenaar let values = ["scroll", "fixed"] 151bfd8fc05SBram Moolenaar elseif prop == 'background-color' 15213d5aeefSBram Moolenaar let values = color_values 153bfd8fc05SBram Moolenaar elseif prop == 'background-image' 154bfd8fc05SBram Moolenaar let values = ["url(", "none"] 155bfd8fc05SBram Moolenaar elseif prop == 'background-position' 156bfd8fc05SBram Moolenaar let vals = matchstr(line, '.*:\s*\zs.*') 1579964e468SBram Moolenaar if vals =~ '^\%([a-zA-Z]\+\)\?$' 158bfd8fc05SBram Moolenaar let values = ["top", "center", "bottom"] 1599964e468SBram Moolenaar elseif vals =~ '^[a-zA-Z]\+\s\+\%([a-zA-Z]\+\)\?$' 160bfd8fc05SBram Moolenaar let values = ["left", "center", "right"] 161bfd8fc05SBram Moolenaar else 162bfd8fc05SBram Moolenaar return [] 163bfd8fc05SBram Moolenaar endif 164bfd8fc05SBram Moolenaar elseif prop == 'background-repeat' 165bfd8fc05SBram Moolenaar let values = ["repeat", "repeat-x", "repeat-y", "no-repeat"] 16613d5aeefSBram Moolenaar elseif prop == 'background-size' 16713d5aeefSBram Moolenaar let values = ["auto", "contain", "cover"] 168bfd8fc05SBram Moolenaar elseif prop == 'background' 16913d5aeefSBram Moolenaar let values = ["scroll", "fixed"] + color_values + ["url(", "none"] + ["top", "center", "bottom", "left", "right"] + ["repeat", "repeat-x", "repeat-y", "no-repeat"] + ["auto", "contain", "cover"] 17013d5aeefSBram Moolenaar elseif prop =~ 'border\%(-top\|-right\|-bottom\|-left\|-block-start\|-block-end\)\?$' 17113d5aeefSBram Moolenaar let vals = matchstr(line, '.*:\s*\zs.*') 17213d5aeefSBram Moolenaar if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$' 17313d5aeefSBram Moolenaar let values = border_width_values 17413d5aeefSBram Moolenaar elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$' 17513d5aeefSBram Moolenaar let values = border_style_values 17613d5aeefSBram Moolenaar elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$' 17713d5aeefSBram Moolenaar let values = color_values 17813d5aeefSBram Moolenaar else 17913d5aeefSBram Moolenaar return [] 18013d5aeefSBram Moolenaar endif 18113d5aeefSBram Moolenaar elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-color' 18213d5aeefSBram Moolenaar let values = color_values 18313d5aeefSBram Moolenaar elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-style' 18413d5aeefSBram Moolenaar let values = border_style_values 18513d5aeefSBram Moolenaar elseif prop =~ 'border-\%(top\|right\|bottom\|left\|block-start\|block-end\)-width' 18613d5aeefSBram Moolenaar let values = border_width_values 187bfd8fc05SBram Moolenaar elseif prop == 'border-color' 18813d5aeefSBram Moolenaar let values = color_values 189bfd8fc05SBram Moolenaar elseif prop == 'border-style' 19013d5aeefSBram Moolenaar let values = border_style_values 191bfd8fc05SBram Moolenaar elseif prop == 'border-width' 19213d5aeefSBram Moolenaar let values = border_width_values 193bfd8fc05SBram Moolenaar elseif prop == 'bottom' 194bfd8fc05SBram Moolenaar let values = ["auto"] 19513d5aeefSBram Moolenaar elseif prop == 'box-decoration-break' 19613d5aeefSBram Moolenaar let values = ["slice", "clone"] 19713d5aeefSBram Moolenaar elseif prop == 'box-shadow' 19813d5aeefSBram Moolenaar let values = ["inset"] 19913d5aeefSBram Moolenaar elseif prop == 'box-sizing' 20013d5aeefSBram Moolenaar let values = ["border-box", "content-box"] 20113d5aeefSBram Moolenaar elseif prop =~ 'break-\%(before\|after\)' 20213d5aeefSBram Moolenaar let values = ["auto", "always", "avoid", "left", "right", "page", "column", "region", "recto", "verso", "avoid-page", "avoid-column", "avoid-region"] 20313d5aeefSBram Moolenaar elseif prop == 'break-inside' 20413d5aeefSBram Moolenaar let values = ["auto", "avoid", "avoid-page", "avoid-column", "avoid-region"] 205bfd8fc05SBram Moolenaar elseif prop == 'caption-side' 206bfd8fc05SBram Moolenaar let values = ["top", "bottom"] 207bfd8fc05SBram Moolenaar elseif prop == 'clear' 208bfd8fc05SBram Moolenaar let values = ["none", "left", "right", "both"] 209bfd8fc05SBram Moolenaar elseif prop == 'clip' 210bfd8fc05SBram Moolenaar let values = ["auto", "rect("] 21113d5aeefSBram Moolenaar elseif prop == 'clip-path' 21213d5aeefSBram Moolenaar let values = ["fill-box", "stroke-box", "view-box", "none"] 213bfd8fc05SBram Moolenaar elseif prop == 'color' 21413d5aeefSBram Moolenaar let values = color_values 21513d5aeefSBram Moolenaar elseif prop == 'columns' 21613d5aeefSBram Moolenaar let values = [] 21713d5aeefSBram Moolenaar elseif prop == 'column-count' 21813d5aeefSBram Moolenaar let values = ['auto'] 21913d5aeefSBram Moolenaar elseif prop == 'column-fill' 22013d5aeefSBram Moolenaar let values = ['auto', 'balance'] 22113d5aeefSBram Moolenaar elseif prop == 'column-rule-color' 22213d5aeefSBram Moolenaar let values = color_values 22313d5aeefSBram Moolenaar elseif prop == 'column-rule-style' 22413d5aeefSBram Moolenaar let values = border_style_values 22513d5aeefSBram Moolenaar elseif prop == 'column-rule-width' 22613d5aeefSBram Moolenaar let values = border_width_values 22713d5aeefSBram Moolenaar elseif prop == 'column-rule' 22813d5aeefSBram Moolenaar let vals = matchstr(line, '.*:\s*\zs.*') 22913d5aeefSBram Moolenaar if vals =~ '^\%([a-zA-Z0-9.]\+\)\?$' 23013d5aeefSBram Moolenaar let values = border_width_values 23113d5aeefSBram Moolenaar elseif vals =~ '^[a-zA-Z0-9.]\+\s\+\%([a-zA-Z]\+\)\?$' 23213d5aeefSBram Moolenaar let values = border_style_values 23313d5aeefSBram Moolenaar elseif vals =~ '^[a-zA-Z0-9.]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$' 23413d5aeefSBram Moolenaar let values = color_values 23513d5aeefSBram Moolenaar else 23613d5aeefSBram Moolenaar return [] 23713d5aeefSBram Moolenaar endif 23813d5aeefSBram Moolenaar elseif prop == 'column-span' 23913d5aeefSBram Moolenaar let values = ["none", "all"] 24013d5aeefSBram Moolenaar elseif prop == 'column-width' 24113d5aeefSBram Moolenaar let values = ["auto"] 242bfd8fc05SBram Moolenaar elseif prop == 'content' 243bfd8fc05SBram Moolenaar let values = ["normal", "attr(", "open-quote", "close-quote", "no-open-quote", "no-close-quote"] 2449964e468SBram Moolenaar elseif prop =~ 'counter-\%(increment\|reset\)$' 245bfd8fc05SBram Moolenaar let values = ["none"] 24613d5aeefSBram Moolenaar elseif prop =~ 'cue\%(-after\|-before\)\=$' 24713d5aeefSBram Moolenaar let values = ["url("] 248bfd8fc05SBram Moolenaar elseif prop == 'cursor' 249bfd8fc05SBram Moolenaar 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"] 250bfd8fc05SBram Moolenaar elseif prop == 'direction' 251bfd8fc05SBram Moolenaar let values = ["ltr", "rtl"] 252bfd8fc05SBram Moolenaar elseif prop == 'display' 25313d5aeefSBram Moolenaar let values = ["inline", "block", "list-item", "inline-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", "flex", "inline-flex", "grid", "inline-grid", "ruby", "ruby-base", "ruby-text", "ruby-base-container", "ruby-text-container", "contents"] 254bfd8fc05SBram Moolenaar elseif prop == 'elevation' 255bfd8fc05SBram Moolenaar let values = ["below", "level", "above", "higher", "lower"] 256bfd8fc05SBram Moolenaar elseif prop == 'empty-cells' 257bfd8fc05SBram Moolenaar let values = ["show", "hide"] 25813d5aeefSBram Moolenaar elseif prop == 'fallback' 25913d5aeefSBram Moolenaar let values = list_style_type_values 26013d5aeefSBram Moolenaar elseif prop == 'filter' 26113d5aeefSBram Moolenaar let values = ["blur(", "brightness(", "contrast(", "drop-shadow(", "grayscale(", "hue-rotate(", "invert(", "opacity(", "sepia(", "saturate("] 26213d5aeefSBram Moolenaar elseif prop == 'flex-basis' 26313d5aeefSBram Moolenaar let values = ["auto", "content"] 26413d5aeefSBram Moolenaar elseif prop == 'flex-flow' 26513d5aeefSBram Moolenaar let values = ["row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"] 26613d5aeefSBram Moolenaar elseif prop == 'flex-grow' 26713d5aeefSBram Moolenaar let values = [] 26813d5aeefSBram Moolenaar elseif prop == 'flex-shrink' 26913d5aeefSBram Moolenaar let values = [] 27013d5aeefSBram Moolenaar elseif prop == 'flex-wrap' 27113d5aeefSBram Moolenaar let values = ["nowrap", "wrap", "wrap-reverse"] 27213d5aeefSBram Moolenaar elseif prop == 'flex' 27313d5aeefSBram Moolenaar let values = ["nowrap", "wrap", "wrap-reverse"] + ["row", "row-reverse", "column", "column-reverse", "nowrap", "wrap", "wrap-reverse"] + ["auto", "content"] 274bfd8fc05SBram Moolenaar elseif prop == 'float' 275bfd8fc05SBram Moolenaar let values = ["left", "right", "none"] 276bfd8fc05SBram Moolenaar elseif prop == 'font-family' 277bfd8fc05SBram Moolenaar let values = ["sans-serif", "serif", "monospace", "cursive", "fantasy"] 27813d5aeefSBram Moolenaar elseif prop == 'font-feature-settings' 27913d5aeefSBram Moolenaar let values = ["normal", '"aalt"', '"abvf"', '"abvm"', '"abvs"', '"afrc"', '"akhn"', '"blwf"', '"blwm"', '"blws"', '"calt"', '"case"', '"ccmp"', '"cfar"', '"cjct"', '"clig"', '"cpct"', '"cpsp"', '"cswh"', '"curs"', '"cv', '"c2pc"', '"c2sc"', '"dist"', '"dlig"', '"dnom"', '"dtls"', '"expt"', '"falt"', '"fin2"', '"fin3"', '"fina"', '"flac"', '"frac"', '"fwid"', '"half"', '"haln"', '"halt"', '"hist"', '"hkna"', '"hlig"', '"hngl"', '"hojo"', '"hwid"', '"init"', '"isol"', '"ital"', '"jalt"', '"jp78"', '"jp83"', '"jp90"', '"jp04"', '"kern"', '"lfbd"', '"liga"', '"ljmo"', '"lnum"', '"locl"', '"ltra"', '"ltrm"', '"mark"', '"med2"', '"medi"', '"mgrk"', '"mkmk"', '"mset"', '"nalt"', '"nlck"', '"nukt"', '"numr"', '"onum"', '"opbd"', '"ordn"', '"ornm"', '"palt"', '"pcap"', '"pkna"', '"pnum"', '"pref"', '"pres"', '"pstf"', '"psts"', '"pwid"', '"qwid"', '"rand"', '"rclt"', '"rkrf"', '"rlig"', '"rphf"', '"rtbd"', '"rtla"', '"rtlm"', '"ruby"', '"salt"', '"sinf"', '"size"', '"smcp"', '"smpl"', '"ss01"', '"ss02"', '"ss03"', '"ss04"', '"ss05"', '"ss06"', '"ss07"', '"ss08"', '"ss09"', '"ss10"', '"ss11"', '"ss12"', '"ss13"', '"ss14"', '"ss15"', '"ss16"', '"ss17"', '"ss18"', '"ss19"', '"ss20"', '"ssty"', '"stch"', '"subs"', '"sups"', '"swsh"', '"titl"', '"tjmo"', '"tnam"', '"tnum"', '"trad"', '"twid"', '"unic"', '"valt"', '"vatu"', '"vert"', '"vhal"', '"vjmo"', '"vkna"', '"vkrn"', '"vpal"', '"vrt2"', '"zero"'] 28013d5aeefSBram Moolenaar elseif prop == 'font-kerning' 28113d5aeefSBram Moolenaar let values = ["auto", "normal", "none"] 28213d5aeefSBram Moolenaar elseif prop == 'font-language-override' 28313d5aeefSBram Moolenaar let values = ["normal"] 284bfd8fc05SBram Moolenaar elseif prop == 'font-size' 285bb15b658SBram Moolenaar let values = ["xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller"] 28613d5aeefSBram Moolenaar elseif prop == 'font-size-adjust' 28713d5aeefSBram Moolenaar let values = [] 28813d5aeefSBram Moolenaar elseif prop == 'font-stretch' 28913d5aeefSBram Moolenaar let values = ["normal", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed", "semi-expanded", "expanded", "extra-expanded", "ultra-expanded"] 290bfd8fc05SBram Moolenaar elseif prop == 'font-style' 291bfd8fc05SBram Moolenaar let values = ["normal", "italic", "oblique"] 29213d5aeefSBram Moolenaar elseif prop == 'font-synthesis' 29313d5aeefSBram Moolenaar let values = ["none", "weight", "style"] 29413d5aeefSBram Moolenaar elseif prop == 'font-variant-alternates' 29513d5aeefSBram Moolenaar let values = ["normal", "historical-forms", "stylistic(", "styleset(", "character-variant(", "swash(", "ornaments(", "annotation("] 29613d5aeefSBram Moolenaar elseif prop == 'font-variant-caps' 29713d5aeefSBram Moolenaar let values = ["normal", "small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps"] 29813d5aeefSBram Moolenaar elseif prop == 'font-variant-asian' 29913d5aeefSBram Moolenaar let values = ["normal", "ruby", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional"] 30013d5aeefSBram Moolenaar elseif prop == 'font-variant-ligatures' 30113d5aeefSBram Moolenaar let values = ["normal", "none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual"] 30213d5aeefSBram Moolenaar elseif prop == 'font-variant-numeric' 30313d5aeefSBram Moolenaar let values = ["normal", "ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"] 30413d5aeefSBram Moolenaar elseif prop == 'font-variant-position' 30513d5aeefSBram Moolenaar let values = ["normal", "sub", "super"] 306bfd8fc05SBram Moolenaar elseif prop == 'font-variant' 30713d5aeefSBram Moolenaar let values = ["normal", "historical-forms", "stylistic(", "styleset(", "character-variant(", "swash(", "ornaments(", "annotation("] + ["small-caps", "all-small-caps", "petite-caps", "all-petite-caps", "unicase", "titling-caps"] + ["ruby", "jis78", "jis83", "jis90", "jis04", "simplified", "traditional"] + ["none", "common-ligatures", "no-common-ligatures", "discretionary-ligatures", "no-discretionary-ligatures", "historical-ligatures", "no-historical-ligatures", "contextual", "no-contextual"] + ["ordinal", "slashed-zero", "lining-nums", "oldstyle-nums", "proportional-nums", "tabular-nums", "diagonal-fractions", "stacked-fractions"] + ["sub", "super"] 308bfd8fc05SBram Moolenaar elseif prop == 'font-weight' 309bfd8fc05SBram Moolenaar let values = ["normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"] 310bfd8fc05SBram Moolenaar elseif prop == 'font' 311bb15b658SBram Moolenaar let values = ["normal", "italic", "oblique", "small-caps", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "larger", "smaller", "sans-serif", "serif", "monospace", "cursive", "fantasy", "caption", "icon", "menu", "message-box", "small-caption", "status-bar"] 3129964e468SBram Moolenaar elseif prop =~ '^\%(height\|width\)$' 31313d5aeefSBram Moolenaar let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"] 3146c391a74SBram Moolenaar elseif prop =~ '^\%(left\|right\)$' 315bfd8fc05SBram Moolenaar let values = ["auto"] 31613d5aeefSBram Moolenaar elseif prop == 'image-rendering' 31713d5aeefSBram Moolenaar let values = ["auto", "crisp-edges", "pixelated"] 31813d5aeefSBram Moolenaar elseif prop == 'image-orientation' 31913d5aeefSBram Moolenaar let values = ["from-image", "flip"] 32013d5aeefSBram Moolenaar elseif prop == 'ime-mode' 32113d5aeefSBram Moolenaar let values = ["auto", "normal", "active", "inactive", "disabled"] 32213d5aeefSBram Moolenaar elseif prop == 'inline-size' 32313d5aeefSBram Moolenaar let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"] 32413d5aeefSBram Moolenaar elseif prop == 'isolation' 32513d5aeefSBram Moolenaar let values = ["auto", "isolate"] 32613d5aeefSBram Moolenaar elseif prop == 'justify-content' 32713d5aeefSBram Moolenaar let values = ["flex-start", "flex-end", "center", "space-between", "space-around"] 328bfd8fc05SBram Moolenaar elseif prop == 'letter-spacing' 329bfd8fc05SBram Moolenaar let values = ["normal"] 33013d5aeefSBram Moolenaar elseif prop == 'line-break' 33113d5aeefSBram Moolenaar let values = ["auto", "loose", "normal", "strict"] 332bfd8fc05SBram Moolenaar elseif prop == 'line-height' 333bfd8fc05SBram Moolenaar let values = ["normal"] 334bfd8fc05SBram Moolenaar elseif prop == 'list-style-image' 335bfd8fc05SBram Moolenaar let values = ["url(", "none"] 336bfd8fc05SBram Moolenaar elseif prop == 'list-style-position' 337bfd8fc05SBram Moolenaar let values = ["inside", "outside"] 338bfd8fc05SBram Moolenaar elseif prop == 'list-style-type' 33913d5aeefSBram Moolenaar let values = list_style_type_values 340bfd8fc05SBram Moolenaar elseif prop == 'list-style' 34113d5aeefSBram Moolenaar let values = list_style_type_values + ["inside", "outside"] + ["url(", "none"] 342bfd8fc05SBram Moolenaar elseif prop == 'margin' 343bfd8fc05SBram Moolenaar let values = ["auto"] 34413d5aeefSBram Moolenaar elseif prop =~ 'margin-\%(right\|left\|top\|bottom\|block-start\|block-end\|inline-start\|inline-end\)$' 345bfd8fc05SBram Moolenaar let values = ["auto"] 34613d5aeefSBram Moolenaar elseif prop == 'marks' 34713d5aeefSBram Moolenaar let values = ["crop", "cross", "none"] 34813d5aeefSBram Moolenaar elseif prop == 'mask' 34913d5aeefSBram Moolenaar let values = ["url("] 35013d5aeefSBram Moolenaar elseif prop == 'mask-type' 35113d5aeefSBram Moolenaar let values = ["luminance", "alpha"] 35213d5aeefSBram Moolenaar elseif prop == '\%(max\|min\)-\%(block\|inline\)-size' 35313d5aeefSBram Moolenaar let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"] 35413d5aeefSBram Moolenaar elseif prop == '\%(max\|min\)-\%(height\|width\)' 35513d5aeefSBram Moolenaar let values = ["auto", "border-box", "content-box", "max-content", "min-content", "available", "fit-content"] 35613d5aeefSBram Moolenaar elseif prop == '\%(max\|min\)-zoom' 357bfd8fc05SBram Moolenaar let values = ["auto"] 35813d5aeefSBram Moolenaar elseif prop == 'mix-blend-mode' 35913d5aeefSBram Moolenaar let values = ["normal", "multiply", "screen", "overlay", "darken", "lighten", "color-dodge", "color-burn", "hard-light", "soft-light", "difference", "exclusion", "hue", "saturation", "color", "luminosity"] 36013d5aeefSBram Moolenaar elseif prop == 'opacity' 36113d5aeefSBram Moolenaar let values = [] 36213d5aeefSBram Moolenaar elseif prop == 'orientation' 36313d5aeefSBram Moolenaar let values = ["auto", "portrait", "landscape"] 364bfd8fc05SBram Moolenaar elseif prop == 'orphans' 36513d5aeefSBram Moolenaar let values = [] 36613d5aeefSBram Moolenaar elseif prop == 'outline-offset' 36713d5aeefSBram Moolenaar let values = [] 368bfd8fc05SBram Moolenaar elseif prop == 'outline-color' 36913d5aeefSBram Moolenaar let values = color_values 370bfd8fc05SBram Moolenaar elseif prop == 'outline-style' 371bfd8fc05SBram Moolenaar let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] 372bfd8fc05SBram Moolenaar elseif prop == 'outline-width' 373bfd8fc05SBram Moolenaar let values = ["thin", "thick", "medium"] 374bfd8fc05SBram Moolenaar elseif prop == 'outline' 375bfd8fc05SBram Moolenaar let vals = matchstr(line, '.*:\s*\zs.*') 3769964e468SBram Moolenaar if vals =~ '^\%([a-zA-Z0-9,()#]\+\)\?$' 37713d5aeefSBram Moolenaar let values = color_values 3789964e468SBram Moolenaar elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+\%([a-zA-Z]\+\)\?$' 379bfd8fc05SBram Moolenaar let values = ["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"] 3809964e468SBram Moolenaar elseif vals =~ '^[a-zA-Z0-9,()#]\+\s\+[a-zA-Z]\+\s\+\%([a-zA-Z(]\+\)\?$' 381bfd8fc05SBram Moolenaar let values = ["thin", "thick", "medium"] 382bfd8fc05SBram Moolenaar else 383bfd8fc05SBram Moolenaar return [] 384bfd8fc05SBram Moolenaar endif 38513d5aeefSBram Moolenaar elseif prop == 'overflow-wrap' 38613d5aeefSBram Moolenaar let values = ["normal", "break-word"] 38713d5aeefSBram Moolenaar elseif prop =~ 'overflow\%(-x\|-y\)\=' 388bfd8fc05SBram Moolenaar let values = ["visible", "hidden", "scroll", "auto"] 38913d5aeefSBram Moolenaar elseif prop == 'pad' 39013d5aeefSBram Moolenaar let values = [] 391bfd8fc05SBram Moolenaar elseif prop == 'padding' 39213d5aeefSBram Moolenaar let values = [] 39313d5aeefSBram Moolenaar elseif prop =~ 'padding-\%(top\|right\|bottom\|left\|inline-start\|inline-end\|block-start\|block-end\)$' 39413d5aeefSBram Moolenaar let values = [] 3959964e468SBram Moolenaar elseif prop =~ 'page-break-\%(after\|before\)$' 39613d5aeefSBram Moolenaar let values = ["auto", "always", "avoid", "left", "right", "recto", "verso"] 397bfd8fc05SBram Moolenaar elseif prop == 'page-break-inside' 398bfd8fc05SBram Moolenaar let values = ["auto", "avoid"] 39913d5aeefSBram Moolenaar elseif prop =~ 'pause\%(-after\|-before\)\=$' 40013d5aeefSBram Moolenaar let values = ["none", "x-weak", "weak", "medium", "strong", "x-strong"] 40113d5aeefSBram Moolenaar elseif prop == 'perspective' 40213d5aeefSBram Moolenaar let values = ["none"] 40313d5aeefSBram Moolenaar elseif prop == 'perspective-origin' 40413d5aeefSBram Moolenaar let values = ["top", "bottom", "left", "center", " right"] 40513d5aeefSBram Moolenaar elseif prop == 'pointer-events' 40613d5aeefSBram Moolenaar let values = ["auto", "none", "visiblePainted", "visibleFill", "visibleStroke", "visible", "painted", "fill", "stroke", "all"] 407bfd8fc05SBram Moolenaar elseif prop == 'position' 40813d5aeefSBram Moolenaar let values = ["static", "relative", "absolute", "fixed", "sticky"] 40913d5aeefSBram Moolenaar elseif prop == 'prefix' 41013d5aeefSBram Moolenaar let values = [] 411bfd8fc05SBram Moolenaar elseif prop == 'quotes' 412bfd8fc05SBram Moolenaar let values = ["none"] 41313d5aeefSBram Moolenaar elseif prop == 'range' 41413d5aeefSBram Moolenaar let values = ["auto", "infinite"] 41513d5aeefSBram Moolenaar elseif prop == 'resize' 41613d5aeefSBram Moolenaar let values = ["none", "both", "horizontal", "vertical"] 41713d5aeefSBram Moolenaar elseif prop =~ 'rest\%(-after\|-before\)\=$' 41813d5aeefSBram Moolenaar let values = ["none", "x-weak", "weak", "medium", "strong", "x-strong"] 41913d5aeefSBram Moolenaar elseif prop == 'ruby-align' 42013d5aeefSBram Moolenaar let values = ["start", "center", "space-between", "space-around"] 42113d5aeefSBram Moolenaar elseif prop == 'ruby-merge' 42213d5aeefSBram Moolenaar let values = ["separate", "collapse", "auto"] 42313d5aeefSBram Moolenaar elseif prop == 'ruby-position' 42413d5aeefSBram Moolenaar let values = ["over", "under", "inter-character"] 42513d5aeefSBram Moolenaar elseif prop == 'scroll-behavior' 42613d5aeefSBram Moolenaar let values = ["auto", "smooth"] 42713d5aeefSBram Moolenaar elseif prop == 'scroll-snap-coordinate' 42813d5aeefSBram Moolenaar let values = ["none"] 42913d5aeefSBram Moolenaar elseif prop == 'scroll-snap-destination' 430bfd8fc05SBram Moolenaar return [] 43113d5aeefSBram Moolenaar elseif prop == 'scroll-snap-points-\%(x\|y\)$' 43213d5aeefSBram Moolenaar let values = ["none", "repeat("] 43313d5aeefSBram Moolenaar elseif prop == 'scroll-snap-type\%(-x\|-y\)\=$' 43413d5aeefSBram Moolenaar let values = ["none", "mandatory", "proximity"] 43513d5aeefSBram Moolenaar elseif prop == 'shape-image-threshold' 43613d5aeefSBram Moolenaar let values = [] 43713d5aeefSBram Moolenaar elseif prop == 'shape-margin' 43813d5aeefSBram Moolenaar let values = [] 43913d5aeefSBram Moolenaar elseif prop == 'shape-outside' 44013d5aeefSBram Moolenaar let values = ["margin-box", "border-box", "padding-box", "content-box", 'inset(', 'circle(', 'ellipse(', 'polygon(', 'url('] 441bfd8fc05SBram Moolenaar elseif prop == 'speak' 44213d5aeefSBram Moolenaar let values = ["auto", "none", "normal"] 44313d5aeefSBram Moolenaar elseif prop == 'speak-as' 44413d5aeefSBram Moolenaar let values = ["auto", "normal", "spell-out", "digits"] 44513d5aeefSBram Moolenaar elseif prop == 'src' 44613d5aeefSBram Moolenaar let values = ["url("] 44713d5aeefSBram Moolenaar elseif prop == 'suffix' 44813d5aeefSBram Moolenaar let values = [] 44913d5aeefSBram Moolenaar elseif prop == 'symbols' 45013d5aeefSBram Moolenaar let values = [] 45113d5aeefSBram Moolenaar elseif prop == 'system' 45213d5aeefSBram Moolenaar let vals = matchstr(line, '.*:\s*\zs.*') 45313d5aeefSBram Moolenaar if vals =~ '^extends' 45413d5aeefSBram Moolenaar let values = list_style_type_values 45513d5aeefSBram Moolenaar else 45613d5aeefSBram Moolenaar let values = ["cyclic", "numeric", "alphabetic", "symbolic", "additive", "fixed", "extends"] 45713d5aeefSBram Moolenaar endif 458bfd8fc05SBram Moolenaar elseif prop == 'table-layout' 459bfd8fc05SBram Moolenaar let values = ["auto", "fixed"] 46013d5aeefSBram Moolenaar elseif prop == 'tab-size' 46113d5aeefSBram Moolenaar let values = [] 462bfd8fc05SBram Moolenaar elseif prop == 'text-align' 46313d5aeefSBram Moolenaar let values = ["start", "end", "left", "right", "center", "justify", "match-parent"] 46413d5aeefSBram Moolenaar elseif prop == 'text-align-last' 46513d5aeefSBram Moolenaar let values = ["auto", "start", "end", "left", "right", "center", "justify"] 46613d5aeefSBram Moolenaar elseif prop == 'text-combine-upright' 46713d5aeefSBram Moolenaar let values = ["none", "all", "digits"] 46813d5aeefSBram Moolenaar elseif prop == 'text-decoration-line' 469bfd8fc05SBram Moolenaar let values = ["none", "underline", "overline", "line-through", "blink"] 47013d5aeefSBram Moolenaar elseif prop == 'text-decoration-color' 47113d5aeefSBram Moolenaar let values = color_values 47213d5aeefSBram Moolenaar elseif prop == 'text-decoration-style' 47313d5aeefSBram Moolenaar let values = ["solid", "double", "dotted", "dashed", "wavy"] 47413d5aeefSBram Moolenaar elseif prop == 'text-decoration' 47513d5aeefSBram Moolenaar let values = ["none", "underline", "overline", "line-through", "blink"] + ["solid", "double", "dotted", "dashed", "wavy"] + color_values 47613d5aeefSBram Moolenaar elseif prop == 'text-emphasis-color' 47713d5aeefSBram Moolenaar let values = color_values 47813d5aeefSBram Moolenaar elseif prop == 'text-emphasis-position' 47913d5aeefSBram Moolenaar let values = ["over", "under", "left", "right"] 48013d5aeefSBram Moolenaar elseif prop == 'text-emphasis-style' 48113d5aeefSBram Moolenaar let values = ["none", "filled", "open", "dot", "circle", "double-circle", "triangle", "sesame"] 48213d5aeefSBram Moolenaar elseif prop == 'text-emphasis' 48313d5aeefSBram Moolenaar let values = color_values + ["over", "under", "left", "right"] + ["none", "filled", "open", "dot", "circle", "double-circle", "triangle", "sesame"] 484bfd8fc05SBram Moolenaar elseif prop == 'text-indent' 48513d5aeefSBram Moolenaar let values = ["hanging", "each-line"] 48613d5aeefSBram Moolenaar elseif prop == 'text-orientation' 48713d5aeefSBram Moolenaar let values = ["mixed", "upright", "sideways", "sideways-right", "use-glyph-orientation"] 48813d5aeefSBram Moolenaar elseif prop == 'text-overflow' 48913d5aeefSBram Moolenaar let values = ["clip", "ellipsis"] 49013d5aeefSBram Moolenaar elseif prop == 'text-rendering' 49113d5aeefSBram Moolenaar let values = ["auto", "optimizeSpeed", "optimizeLegibility", "geometricPrecision"] 49213d5aeefSBram Moolenaar elseif prop == 'text-shadow' 49313d5aeefSBram Moolenaar let values = color_values 494bfd8fc05SBram Moolenaar elseif prop == 'text-transform' 49513d5aeefSBram Moolenaar let values = ["capitalize", "uppercase", "lowercase", "full-width", "none"] 49613d5aeefSBram Moolenaar elseif prop == 'text-underline-position' 49713d5aeefSBram Moolenaar let values = ["auto", "under", "left", "right"] 49813d5aeefSBram Moolenaar elseif prop == 'touch-action' 49913d5aeefSBram Moolenaar let values = ["auto", "none", "pan-x", "pan-y", "manipulation", "pan-left", "pan-right", "pan-top", "pan-down"] 50013d5aeefSBram Moolenaar elseif prop == 'transform' 50113d5aeefSBram Moolenaar let values = ["matrix(", "translate(", "translateX(", "translateY(", "scale(", "scaleX(", "scaleY(", "rotate(", "skew(", "skewX(", "skewY(", "matrix3d(", "translate3d(", "translateZ(", "scale3d(", "scaleZ(", "rotate3d(", "rotateX(", "rotateY(", "rotateZ(", "perspective("] 50213d5aeefSBram Moolenaar elseif prop == 'transform-box' 50313d5aeefSBram Moolenaar let values = ["border-box", "fill-box", "view-box"] 50413d5aeefSBram Moolenaar elseif prop == 'transform-origin' 50513d5aeefSBram Moolenaar let values = ["left", "center", "right", "top", "bottom"] 50613d5aeefSBram Moolenaar elseif prop == 'transform-style' 50713d5aeefSBram Moolenaar let values = ["flat", "preserve-3d"] 508bfd8fc05SBram Moolenaar elseif prop == 'top' 509bfd8fc05SBram Moolenaar let values = ["auto"] 51013d5aeefSBram Moolenaar elseif prop == 'transition-property' 51113d5aeefSBram Moolenaar let values = ["all", "none"] + s:values 51213d5aeefSBram Moolenaar elseif prop == 'transition-duration' 51313d5aeefSBram Moolenaar let values = [] 51413d5aeefSBram Moolenaar elseif prop == 'transition-delay' 51513d5aeefSBram Moolenaar let values = [] 51613d5aeefSBram Moolenaar elseif prop == 'transition-timing-function' 51713d5aeefSBram Moolenaar let values = timing_functions 51813d5aeefSBram Moolenaar elseif prop == 'transition' 51913d5aeefSBram Moolenaar let values = ["all", "none"] + s:values + timing_functions 520bfd8fc05SBram Moolenaar elseif prop == 'unicode-bidi' 52113d5aeefSBram Moolenaar let values = ["normal", "embed", "isolate", "bidi-override", "isolate-override", "plaintext"] 52213d5aeefSBram Moolenaar elseif prop == 'unicode-range' 52313d5aeefSBram Moolenaar let values = ["U+"] 52413d5aeefSBram Moolenaar elseif prop == 'user-zoom' 52513d5aeefSBram Moolenaar let values = ["zoom", "fixed"] 526bfd8fc05SBram Moolenaar elseif prop == 'vertical-align' 527bfd8fc05SBram Moolenaar let values = ["baseline", "sub", "super", "top", "text-top", "middle", "bottom", "text-bottom"] 528bfd8fc05SBram Moolenaar elseif prop == 'visibility' 529bfd8fc05SBram Moolenaar let values = ["visible", "hidden", "collapse"] 53013d5aeefSBram Moolenaar elseif prop == 'voice-volume' 531bfd8fc05SBram Moolenaar let values = ["silent", "x-soft", "soft", "medium", "loud", "x-loud"] 53213d5aeefSBram Moolenaar elseif prop == 'voice-balance' 53313d5aeefSBram Moolenaar let values = ["left", "center", "right", "leftwards", "rightwards"] 53413d5aeefSBram Moolenaar elseif prop == 'voice-family' 53513d5aeefSBram Moolenaar let values = [] 53613d5aeefSBram Moolenaar elseif prop == 'voice-rate' 53713d5aeefSBram Moolenaar let values = ["normal", "x-slow", "slow", "medium", "fast", "x-fast"] 53813d5aeefSBram Moolenaar elseif prop == 'voice-pitch' 53913d5aeefSBram Moolenaar let values = ["absolute", "x-low", "low", "medium", "high", "x-high"] 54013d5aeefSBram Moolenaar elseif prop == 'voice-range' 54113d5aeefSBram Moolenaar let values = ["absolute", "x-low", "low", "medium", "high", "x-high"] 54213d5aeefSBram Moolenaar elseif prop == 'voice-stress' 54313d5aeefSBram Moolenaar let values = ["normal", "strong", "moderate", "none", "reduced "] 54413d5aeefSBram Moolenaar elseif prop == 'voice-duration' 54513d5aeefSBram Moolenaar let values = ["auto"] 546bfd8fc05SBram Moolenaar elseif prop == 'white-space' 547bfd8fc05SBram Moolenaar let values = ["normal", "pre", "nowrap", "pre-wrap", "pre-line"] 548bfd8fc05SBram Moolenaar elseif prop == 'widows' 54913d5aeefSBram Moolenaar let values = [] 55013d5aeefSBram Moolenaar elseif prop == 'will-change' 55113d5aeefSBram Moolenaar let values = ["auto", "scroll-position", "contents"] + s:values 55213d5aeefSBram Moolenaar elseif prop == 'word-break' 55313d5aeefSBram Moolenaar let values = ["normal", "break-all", "keep-all"] 554bfd8fc05SBram Moolenaar elseif prop == 'word-spacing' 555bfd8fc05SBram Moolenaar let values = ["normal"] 55613d5aeefSBram Moolenaar elseif prop == 'word-wrap' 55713d5aeefSBram Moolenaar let values = ["normal", "break-word"] 55813d5aeefSBram Moolenaar elseif prop == 'writing-mode' 55913d5aeefSBram Moolenaar let values = ["horizontal-tb", "vertical-rl", "vertical-lr", "sideways-rl", "sideways-lr"] 560bfd8fc05SBram Moolenaar elseif prop == 'z-index' 561bfd8fc05SBram Moolenaar let values = ["auto"] 56213d5aeefSBram Moolenaar elseif prop == 'zoom' 56313d5aeefSBram Moolenaar let values = ["auto"] 564bfd8fc05SBram Moolenaar else 565482aaeb0SBram Moolenaar " If no property match it is possible we are outside of {} and 566482aaeb0SBram Moolenaar " trying to complete pseudo-(class|element) 567482aaeb0SBram Moolenaar let element = tolower(matchstr(line, '\zs[a-zA-Z1-6]*\ze:[^:[:space:]]\{-}$')) 56813d5aeefSBram Moolenaar if stridx('a,abbr,address,area,article,aside,audio,b,base,bdi,bdo,bgsound,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,main,map,mark,menu,menuitem,meta,meter,nav,nobr,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,pre,progress,q,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,span,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,u,ul,var,video,wbr', ','.element.',') > -1 56913d5aeefSBram Moolenaar let values = ["active", "any", "checked", "default", "dir(", "disabled", "empty", "enabled", "first", "first-child", "first-of-type", "fullscreen", "focus", "hover", "indeterminate", "in-range", "invalid", "lang(", "last-child", "last-of-type", "left", "link", "not(", "nth-child(", "nth-last-child(", "nth-last-of-type(", "nth-of-type(", "only-child", "only-of-type", "optional", "out-of-range", "read-only", "read-write", "required", "right", "root", "scope", "target", "valid", "visited", "first-line", "first-letter", "before", "after", "selection", "backdrop"] 570482aaeb0SBram Moolenaar else 571bfd8fc05SBram Moolenaar return [] 572bfd8fc05SBram Moolenaar endif 573482aaeb0SBram Moolenaar endif 574bfd8fc05SBram Moolenaar 57513d5aeefSBram Moolenaar let values = wide_keywords + values 576bfd8fc05SBram Moolenaar " Complete values 577bfd8fc05SBram Moolenaar let entered_value = matchstr(line, '.\{-}\zs[a-zA-Z0-9#,.(_-]*$') 578bfd8fc05SBram Moolenaar 579bfd8fc05SBram Moolenaar for m in values 580bfd8fc05SBram Moolenaar if m =~? '^'.entered_value 581d5cdbeb8SBram Moolenaar call add(res, m) 582bfd8fc05SBram Moolenaar elseif m =~? entered_value 583d5cdbeb8SBram Moolenaar call add(res2, m) 584bfd8fc05SBram Moolenaar endif 585bfd8fc05SBram Moolenaar endfor 586bfd8fc05SBram Moolenaar 587bfd8fc05SBram Moolenaar return res + res2 588bfd8fc05SBram Moolenaar 5899964e468SBram Moolenaar elseif borders[max(keys(borders))] == 'closebrace' 590bfd8fc05SBram Moolenaar 591bfd8fc05SBram Moolenaar return [] 592bfd8fc05SBram Moolenaar 5939964e468SBram Moolenaar elseif borders[max(keys(borders))] == 'exclam' 5941e015460SBram Moolenaar 5951e015460SBram Moolenaar " Complete values 5961e015460SBram Moolenaar let entered_imp = matchstr(line, '.\{-}!\s*\zs[a-zA-Z ]*$') 5971e015460SBram Moolenaar 5981e015460SBram Moolenaar let values = ["important"] 5991e015460SBram Moolenaar 6001e015460SBram Moolenaar for m in values 6011e015460SBram Moolenaar if m =~? '^'.entered_imp 602d5cdbeb8SBram Moolenaar call add(res, m) 6031e015460SBram Moolenaar endif 6041e015460SBram Moolenaar endfor 6051e015460SBram Moolenaar 6061e015460SBram Moolenaar return res 6071e015460SBram Moolenaar 6089964e468SBram Moolenaar elseif borders[max(keys(borders))] == 'atrule' 609bfd8fc05SBram Moolenaar 610bfd8fc05SBram Moolenaar let afterat = matchstr(line, '.*@\zs.*') 611bfd8fc05SBram Moolenaar 612bfd8fc05SBram Moolenaar if afterat =~ '\s' 613bfd8fc05SBram Moolenaar 614bfd8fc05SBram Moolenaar let atrulename = matchstr(line, '.*@\zs[a-zA-Z-]\+\ze') 615bfd8fc05SBram Moolenaar 616bfd8fc05SBram Moolenaar if atrulename == 'media' 617bfd8fc05SBram Moolenaar let entered_atruleafter = matchstr(line, '.*@media\s\+\zs.*$') 618bfd8fc05SBram Moolenaar 61913d5aeefSBram Moolenaar if entered_atruleafter =~ "([^)]*$" 62013d5aeefSBram Moolenaar let entered_atruleafter = matchstr(entered_atruleafter, '(\s*\zs[^)]*$') 62113d5aeefSBram Moolenaar let values = ["max-width", "min-width", "width", "max-height", "min-height", "height", "max-aspect-ration", "min-aspect-ration", "aspect-ratio", "orientation", "max-resolution", "min-resolution", "resolution", "scan", "grid", "update-frequency", "overflow-block", "overflow-inline", "max-color", "min-color", "color", "max-color-index", "min-color-index", "color-index", "monochrome", "inverted-colors", "pointer", "hover", "any-pointer", "any-hover", "light-level", "scripting"] 62213d5aeefSBram Moolenaar else 62313d5aeefSBram Moolenaar let values = ["screen", "print", "speech", "all", "not", "and", "("] 62413d5aeefSBram Moolenaar endif 62513d5aeefSBram Moolenaar 62613d5aeefSBram Moolenaar elseif atrulename == 'supports' 62713d5aeefSBram Moolenaar let entered_atruleafter = matchstr(line, '.*@supports\s\+\zs.*$') 62813d5aeefSBram Moolenaar 62913d5aeefSBram Moolenaar if entered_atruleafter =~ "([^)]*$" 63013d5aeefSBram Moolenaar let entered_atruleafter = matchstr(entered_atruleafter, '(\s*\zs.*$') 63113d5aeefSBram Moolenaar let values = s:values 63213d5aeefSBram Moolenaar else 63313d5aeefSBram Moolenaar let values = ["("] 63413d5aeefSBram Moolenaar endif 63513d5aeefSBram Moolenaar 63613d5aeefSBram Moolenaar elseif atrulename == 'charset' 63713d5aeefSBram Moolenaar let entered_atruleafter = matchstr(line, '.*@charset\s\+\zs.*$') 63813d5aeefSBram Moolenaar let values = [ 63913d5aeefSBram Moolenaar \ '"UTF-8";', '"ANSI_X3.4-1968";', '"ISO_8859-1:1987";', '"ISO_8859-2:1987";', '"ISO_8859-3:1988";', '"ISO_8859-4:1988";', '"ISO_8859-5:1988";', 64013d5aeefSBram Moolenaar \ '"ISO_8859-6:1987";', '"ISO_8859-7:1987";', '"ISO_8859-8:1988";', '"ISO_8859-9:1989";', '"ISO-8859-10";', '"ISO_6937-2-add";', '"JIS_X0201";', 64113d5aeefSBram Moolenaar \ '"JIS_Encoding";', '"Shift_JIS";', '"Extended_UNIX_Code_Packed_Format_for_Japanese";', '"Extended_UNIX_Code_Fixed_Width_for_Japanese";', 64213d5aeefSBram Moolenaar \ '"BS_4730";', '"SEN_850200_C";', '"IT";', '"ES";', '"DIN_66003";', '"NS_4551-1";', '"NF_Z_62-010";', '"ISO-10646-UTF-1";', '"ISO_646.basic:1983";', 64313d5aeefSBram Moolenaar \ '"INVARIANT";', '"ISO_646.irv:1983";', '"NATS-SEFI";', '"NATS-SEFI-ADD";', '"NATS-DANO";', '"NATS-DANO-ADD";', '"SEN_850200_B";', '"KS_C_5601-1987";', 64413d5aeefSBram Moolenaar \ '"ISO-2022-KR";', '"EUC-KR";', '"ISO-2022-JP";', '"ISO-2022-JP-2";', '"JIS_C6220-1969-jp";', '"JIS_C6220-1969-ro";', '"PT";', '"greek7-old";', 64513d5aeefSBram Moolenaar \ '"latin-greek";', '"NF_Z_62-010_(1973)";', '"Latin-greek-1";', '"ISO_5427";', '"JIS_C6226-1978";', '"BS_viewdata";', '"INIS";', '"INIS-8";', 64613d5aeefSBram Moolenaar \ '"INIS-cyrillic";', '"ISO_5427:1981";', '"ISO_5428:1980";', '"GB_1988-80";', '"GB_2312-80";', '"NS_4551-2";', '"videotex-suppl";', '"PT2";', 64713d5aeefSBram Moolenaar \ '"ES2";', '"MSZ_7795.3";', '"JIS_C6226-1983";', '"greek7";', '"ASMO_449";', '"iso-ir-90";', '"JIS_C6229-1984-a";', '"JIS_C6229-1984-b";', 64813d5aeefSBram Moolenaar \ '"JIS_C6229-1984-b-add";', '"JIS_C6229-1984-hand";', '"JIS_C6229-1984-hand-add";', '"JIS_C6229-1984-kana";', '"ISO_2033-1983";', 64913d5aeefSBram Moolenaar \ '"ANSI_X3.110-1983";', '"T.61-7bit";', '"T.61-8bit";', '"ECMA-cyrillic";', '"CSA_Z243.4-1985-1";', '"CSA_Z243.4-1985-2";', '"CSA_Z243.4-1985-gr";', 65013d5aeefSBram Moolenaar \ '"ISO_8859-6-E";', '"ISO_8859-6-I";', '"T.101-G2";', '"ISO_8859-8-E";', '"ISO_8859-8-I";', '"CSN_369103";', '"JUS_I.B1.002";', '"IEC_P27-1";', 65113d5aeefSBram Moolenaar \ '"JUS_I.B1.003-serb";', '"JUS_I.B1.003-mac";', '"greek-ccitt";', '"NC_NC00-10:81";', '"ISO_6937-2-25";', '"GOST_19768-74";', '"ISO_8859-supp";', 65213d5aeefSBram Moolenaar \ '"ISO_10367-box";', '"latin-lap";', '"JIS_X0212-1990";', '"DS_2089";', '"us-dk";', '"dk-us";', '"KSC5636";', '"UNICODE-1-1-UTF-7";', '"ISO-2022-CN";', 65313d5aeefSBram Moolenaar \ '"ISO-2022-CN-EXT";', '"ISO-8859-13";', '"ISO-8859-14";', '"ISO-8859-15";', '"ISO-8859-16";', '"GBK";', '"GB18030";', '"OSD_EBCDIC_DF04_15";', 65413d5aeefSBram Moolenaar \ '"OSD_EBCDIC_DF03_IRV";', '"OSD_EBCDIC_DF04_1";', '"ISO-11548-1";', '"KZ-1048";', '"ISO-10646-UCS-2";', '"ISO-10646-UCS-4";', '"ISO-10646-UCS-Basic";', 65513d5aeefSBram Moolenaar \ '"ISO-10646-Unicode-Latin1";', '"ISO-10646-J-1";', '"ISO-Unicode-IBM-1261";', '"ISO-Unicode-IBM-1268";', '"ISO-Unicode-IBM-1276";', 65613d5aeefSBram Moolenaar \ '"ISO-Unicode-IBM-1264";', '"ISO-Unicode-IBM-1265";', '"UNICODE-1-1";', '"SCSU";', '"UTF-7";', '"UTF-16BE";', '"UTF-16LE";', '"UTF-16";', '"CESU-8";', 65713d5aeefSBram Moolenaar \ '"UTF-32";', '"UTF-32BE";', '"UTF-32LE";', '"BOCU-1";', '"ISO-8859-1-Windows-3.0-Latin-1";', '"ISO-8859-1-Windows-3.1-Latin-1";', 65813d5aeefSBram Moolenaar \ '"ISO-8859-2-Windows-Latin-2";', '"ISO-8859-9-Windows-Latin-5";', '"hp-roman8";', '"Adobe-Standard-Encoding";', '"Ventura-US";', 65913d5aeefSBram Moolenaar \ '"Ventura-International";', '"DEC-MCS";', '"IBM850";', '"PC8-Danish-Norwegian";', '"IBM862";', '"PC8-Turkish";', '"IBM-Symbols";', '"IBM-Thai";', 66013d5aeefSBram Moolenaar \ '"HP-Legal";', '"HP-Pi-font";', '"HP-Math8";', '"Adobe-Symbol-Encoding";', '"HP-DeskTop";', '"Ventura-Math";', '"Microsoft-Publishing";', 66113d5aeefSBram Moolenaar \ '"Windows-31J";', '"GB2312";', '"Big5";', '"macintosh";', '"IBM037";', '"IBM038";', '"IBM273";', '"IBM274";', '"IBM275";', '"IBM277";', '"IBM278";', 66213d5aeefSBram Moolenaar \ '"IBM280";', '"IBM281";', '"IBM284";', '"IBM285";', '"IBM290";', '"IBM297";', '"IBM420";', '"IBM423";', '"IBM424";', '"IBM437";', '"IBM500";', '"IBM851";', 66313d5aeefSBram Moolenaar \ '"IBM852";', '"IBM855";', '"IBM857";', '"IBM860";', '"IBM861";', '"IBM863";', '"IBM864";', '"IBM865";', '"IBM868";', '"IBM869";', '"IBM870";', '"IBM871";', 66413d5aeefSBram Moolenaar \ '"IBM880";', '"IBM891";', '"IBM903";', '"IBM904";', '"IBM905";', '"IBM918";', '"IBM1026";', '"EBCDIC-AT-DE";', '"EBCDIC-AT-DE-A";', '"EBCDIC-CA-FR";', 66513d5aeefSBram Moolenaar \ '"EBCDIC-DK-NO";', '"EBCDIC-DK-NO-A";', '"EBCDIC-FI-SE";', '"EBCDIC-FI-SE-A";', '"EBCDIC-FR";', '"EBCDIC-IT";', '"EBCDIC-PT";', '"EBCDIC-ES";', 66613d5aeefSBram Moolenaar \ '"EBCDIC-ES-A";', '"EBCDIC-ES-S";', '"EBCDIC-UK";', '"EBCDIC-US";', '"UNKNOWN-8BIT";', '"MNEMONIC";', '"MNEM";', '"VISCII";', '"VIQR";', '"KOI8-R";', 66713d5aeefSBram Moolenaar \ '"HZ-GB-2312";', '"IBM866";', '"IBM775";', '"KOI8-U";', '"IBM00858";', '"IBM00924";', '"IBM01140";', '"IBM01141";', '"IBM01142";', '"IBM01143";', 66813d5aeefSBram Moolenaar \ '"IBM01144";', '"IBM01145";', '"IBM01146";', '"IBM01147";', '"IBM01148";', '"IBM01149";', '"Big5-HKSCS";', '"IBM1047";', '"PTCP154";', '"Amiga-1251";', 66913d5aeefSBram Moolenaar \ '"KOI7-switched";', '"BRF";', '"TSCII";', '"windows-1250";', '"windows-1251";', '"windows-1252";', '"windows-1253";', '"windows-1254";', '"windows-1255";', 67013d5aeefSBram Moolenaar \ '"windows-1256";', '"windows-1257";', '"windows-1258";', '"TIS-620";'] 67113d5aeefSBram Moolenaar 67213d5aeefSBram Moolenaar elseif atrulename == 'namespace' 67313d5aeefSBram Moolenaar let entered_atruleafter = matchstr(line, '.*@namespace\s\+\zs.*$') 67413d5aeefSBram Moolenaar let values = ["url("] 67513d5aeefSBram Moolenaar 67613d5aeefSBram Moolenaar elseif atrulename == 'document' 67713d5aeefSBram Moolenaar let entered_atruleafter = matchstr(line, '.*@document\s\+\zs.*$') 67813d5aeefSBram Moolenaar let values = ["url(", "url-prefix(", "domain(", "regexp("] 67913d5aeefSBram Moolenaar 680bfd8fc05SBram Moolenaar elseif atrulename == 'import' 681bfd8fc05SBram Moolenaar let entered_atruleafter = matchstr(line, '.*@import\s\+\zs.*$') 682bfd8fc05SBram Moolenaar 683bfd8fc05SBram Moolenaar if entered_atruleafter =~ "^[\"']" 684bfd8fc05SBram Moolenaar let filestart = matchstr(entered_atruleafter, '^.\zs.*') 685bfd8fc05SBram Moolenaar let files = split(glob(filestart.'*'), '\n') 686bfd8fc05SBram Moolenaar let values = map(copy(files), '"\"".v:val') 687bfd8fc05SBram Moolenaar 688bfd8fc05SBram Moolenaar elseif entered_atruleafter =~ "^url(" 689bfd8fc05SBram Moolenaar let filestart = matchstr(entered_atruleafter, "^url([\"']\\?\\zs.*") 690bfd8fc05SBram Moolenaar let files = split(glob(filestart.'*'), '\n') 691bfd8fc05SBram Moolenaar let values = map(copy(files), '"url(".v:val') 692bfd8fc05SBram Moolenaar 693bfd8fc05SBram Moolenaar else 694bfd8fc05SBram Moolenaar let values = ['"', 'url('] 695bfd8fc05SBram Moolenaar 696bfd8fc05SBram Moolenaar endif 697bfd8fc05SBram Moolenaar 698bfd8fc05SBram Moolenaar else 699bfd8fc05SBram Moolenaar return [] 700bfd8fc05SBram Moolenaar 701bfd8fc05SBram Moolenaar endif 702bfd8fc05SBram Moolenaar 703bfd8fc05SBram Moolenaar for m in values 704bfd8fc05SBram Moolenaar if m =~? '^'.entered_atruleafter 70513d5aeefSBram Moolenaar if entered_atruleafter =~? '^"' && m =~? '^"' 70613d5aeefSBram Moolenaar let m = m[1:] 70713d5aeefSBram Moolenaar endif 70813d5aeefSBram Moolenaar if b:after =~? '"' && stridx(m, '"') > -1 70913d5aeefSBram Moolenaar let m = m[0:stridx(m, '"')-1] 71013d5aeefSBram Moolenaar endif 711d5cdbeb8SBram Moolenaar call add(res, m) 712bfd8fc05SBram Moolenaar elseif m =~? entered_atruleafter 71313d5aeefSBram Moolenaar if m =~? '^"' 71413d5aeefSBram Moolenaar let m = m[1:] 71513d5aeefSBram Moolenaar endif 716d5cdbeb8SBram Moolenaar call add(res2, m) 717bfd8fc05SBram Moolenaar endif 718bfd8fc05SBram Moolenaar endfor 719bfd8fc05SBram Moolenaar 720bfd8fc05SBram Moolenaar return res + res2 721bfd8fc05SBram Moolenaar 722bfd8fc05SBram Moolenaar endif 723bfd8fc05SBram Moolenaar 72413d5aeefSBram Moolenaar let values = ["charset", "page", "media", "import", "font-face", "namespace", "supports", "keyframes", "viewport", "document"] 725bfd8fc05SBram Moolenaar 726bfd8fc05SBram Moolenaar let entered_atrule = matchstr(line, '.*@\zs[a-zA-Z-]*$') 727bfd8fc05SBram Moolenaar 728bfd8fc05SBram Moolenaar for m in values 729bfd8fc05SBram Moolenaar if m =~? '^'.entered_atrule 730d5cdbeb8SBram Moolenaar call add(res, m .' ') 731bfd8fc05SBram Moolenaar elseif m =~? entered_atrule 732d5cdbeb8SBram Moolenaar call add(res2, m .' ') 733bfd8fc05SBram Moolenaar endif 734bfd8fc05SBram Moolenaar endfor 735bfd8fc05SBram Moolenaar 736bfd8fc05SBram Moolenaar return res + res2 737bfd8fc05SBram Moolenaar 738bfd8fc05SBram Moolenaar endif 739bfd8fc05SBram Moolenaar 740bfd8fc05SBram Moolenaar return [] 741bfd8fc05SBram Moolenaar 742bfd8fc05SBram Moolenaarendfunction 743