GetOspTestValues für xmo
git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@169 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69
This commit is contained in:
parent
645680c307
commit
8c074258bd
@ -211,6 +211,40 @@ function s:GetPolynom(umrechnung)
|
||||
let p += [s:GetOspPoly('5', OspLine)]
|
||||
let umr['Mas'] = s:GetOspMas(OspLine)
|
||||
endif
|
||||
elseif ext == 'xmo'
|
||||
" default Values
|
||||
let p += [0]
|
||||
let p += [0]
|
||||
let p += [0]
|
||||
let p += [0]
|
||||
let p += [0]
|
||||
let umr['Mas'] = '-'
|
||||
|
||||
call search('<obj n="' . a:umrechnung . '">')
|
||||
let XmlTags = XmlGetTag()
|
||||
" try
|
||||
let XmlTag = XmlTags[0]
|
||||
if XmlTag['Attributes']['Value'] == a:umrechnung
|
||||
let elements = XmlTag['Elements']
|
||||
for element in elements
|
||||
let name = element['Name']
|
||||
if name == 'Mas'
|
||||
let umr['Mas'] = element['Elements'][0]
|
||||
else
|
||||
let nr = substitute(name, 'P\(\d\)', '\1', '')
|
||||
if nr != name
|
||||
let p[str2nr(nr)] = element['Elements'][0]
|
||||
else
|
||||
echoerr 'Unknown attribute' name
|
||||
endif
|
||||
endif
|
||||
endfor
|
||||
else
|
||||
echoerr 'Error: Wrong conversion' XmlTag['Attributes']['n']
|
||||
endif
|
||||
" catch
|
||||
" echoerr 'Error: couldnt parse tag'
|
||||
" endtry
|
||||
else
|
||||
echoerr 'no OSP file: ' . ext
|
||||
endif
|
||||
|
69
vimfiles.stefan/ftplugin/xml.vim
Normal file
69
vimfiles.stefan/ftplugin/xml.vim
Normal file
@ -0,0 +1,69 @@
|
||||
"let s:ElementRegex = '\s*\(.*\)<\(\w\+\)\%(\s\+\(\w\+\)="\(.\{-}\)"\)*>\([^<]\{-}\)</\2>\(.*\)\s*'
|
||||
let s:TagRegex = '\s*<\(\w\+\)\%(\s\+\(\w\+\)="\(.\{-}\)"\)*>\(.\{-}\)</\1>\(.*\)\s*'
|
||||
|
||||
" ---------------------
|
||||
" Parse XML-Tag in Text
|
||||
" Return a dictionary
|
||||
" ---------------------
|
||||
function! XmlGetTags(Text)
|
||||
let Text = a:Text
|
||||
let Elements = []
|
||||
" get all elements
|
||||
while Text != ''
|
||||
let TagName = substitute(Text, s:TagRegex, '\1', '')
|
||||
if ((TagName != '') && (TagName != Text))
|
||||
" found outer tag
|
||||
let Tag = {}
|
||||
let Tag['Name'] = TagName
|
||||
let Tag['Attributes'] = {}
|
||||
let TagAttributeName = substitute(Text, s:TagRegex, '\2', '')
|
||||
if TagAttributeName != ''
|
||||
let Tag['Attributes']['Name'] = TagAttributeName
|
||||
let TagAttributeValue = substitute(Text, s:TagRegex, '\3', '')
|
||||
let Tag['Attributes']['Value'] = TagAttributeValue
|
||||
endif
|
||||
" check for inner tags
|
||||
let subText = substitute(Text, s:TagRegex, '\4', '')
|
||||
let Tag['Elements'] = XmlGetTags(subText)
|
||||
let Elements += [Tag]
|
||||
let Text = substitute(Text, s:TagRegex, '\5', '')
|
||||
elseif match(Text, '\s*[^<>]*\s*') >= 0
|
||||
" only text
|
||||
let Elements += [substitute(Text, '\s*\(.\{-}\)\s*', '\1', '')]
|
||||
let Text = ''
|
||||
else
|
||||
" Error in parser
|
||||
echo 'No Tag' Text
|
||||
return []
|
||||
endif
|
||||
endwhile
|
||||
return Elements
|
||||
endfunction
|
||||
|
||||
let s:OpenTagRegex = '<\(\w\+\)'
|
||||
let s:CloseTagRegex = '</\1'
|
||||
|
||||
" ---------------------------------------
|
||||
" Find tag pair under cursor and parse it
|
||||
" Returns a dictionary
|
||||
" ---------------------------------------
|
||||
function! XmlGetTag()
|
||||
" save cursor position
|
||||
let save_cursor = getpos('.')
|
||||
|
||||
" find tag pair
|
||||
let StartLine = line('.')
|
||||
let EndLine = searchpair(s:OpenTagRegex, '', s:CloseTagRegex)
|
||||
call setpos('.', save_cursor)
|
||||
|
||||
" store tag pair
|
||||
let Text = join(getline(StartLine, EndLine))
|
||||
|
||||
" parse tag pair
|
||||
let Tag = XmlGetTags(Text)
|
||||
" echo 'Tag' Tag
|
||||
|
||||
" reset position
|
||||
call setpos('.', save_cursor)
|
||||
return Tag
|
||||
endfunction
|
Loading…
x
Reference in New Issue
Block a user