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:
stefan 2008-09-17 09:00:52 +00:00
parent 645680c307
commit 8c074258bd
2 changed files with 103 additions and 0 deletions

View File

@ -211,6 +211,40 @@ function s:GetPolynom(umrechnung)
let p += [s:GetOspPoly('5', OspLine)] let p += [s:GetOspPoly('5', OspLine)]
let umr['Mas'] = s:GetOspMas(OspLine) let umr['Mas'] = s:GetOspMas(OspLine)
endif 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 else
echoerr 'no OSP file: ' . ext echoerr 'no OSP file: ' . ext
endif endif

View 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