From 8c074258bd29f0f5af32ba0aae4e9557690ab710 Mon Sep 17 00:00:00 2001 From: stefan Date: Wed, 17 Sep 2008 09:00:52 +0000 Subject: [PATCH] =?UTF-8?q?GetOspTestValues=20f=C3=BCr=20xmo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: https://vimsuite.svn.sourceforge.net/svnroot/vimsuite/trunk@169 eb2d0018-73a3-4aeb-bfe9-1def61c9ec69 --- vimfiles.damos/ftplugin/kgs.vim | 34 ++++++++++++++++ vimfiles.stefan/ftplugin/xml.vim | 69 ++++++++++++++++++++++++++++++++ 2 files changed, 103 insertions(+) create mode 100644 vimfiles.stefan/ftplugin/xml.vim diff --git a/vimfiles.damos/ftplugin/kgs.vim b/vimfiles.damos/ftplugin/kgs.vim index 88e0889..66a1e10 100644 --- a/vimfiles.damos/ftplugin/kgs.vim +++ b/vimfiles.damos/ftplugin/kgs.vim @@ -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('') + 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 diff --git a/vimfiles.stefan/ftplugin/xml.vim b/vimfiles.stefan/ftplugin/xml.vim new file mode 100644 index 0000000..649356c --- /dev/null +++ b/vimfiles.stefan/ftplugin/xml.vim @@ -0,0 +1,69 @@ +"let s:ElementRegex = '\s*\(.*\)<\(\w\+\)\%(\s\+\(\w\+\)="\(.\{-}\)"\)*>\([^<]\{-}\)\(.*\)\s*' +let s:TagRegex = '\s*<\(\w\+\)\%(\s\+\(\w\+\)="\(.\{-}\)"\)*>\(.\{-}\)\(.*\)\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 = '