]> git.phdru.name Git - extfs.d.git/commitdiff
XML VFS version 1.1.0: show comment(s) before the root element
authorOleg Broytman <phd@phdru.name>
Tue, 26 Nov 2013 02:43:26 +0000 (06:43 +0400)
committerOleg Broytman <phd@phdru.name>
Tue, 26 Nov 2013 02:43:26 +0000 (06:43 +0400)
xml
xml-ANNOUNCE

diff --git a/xml b/xml
index 9a6db3e8efd1426b5b0a8d6b73c3b7fe549e441c..e8049dd146e85617042f90f364c0e2ca413bc73d 100755 (executable)
--- a/xml
+++ b/xml
@@ -40,7 +40,7 @@ The VFS was inspired by a FUSE xmlfs: https://github.com/halhen/xmlfs
 
 """
 
-__version__ = "1.0.1"
+__version__ = "1.1.0"
 __author__ = "Oleg Broytman <phd@phdru.name>"
 __copyright__ = "Copyright (C) 2013 PhiloSoft Design"
 __license__ = "GPL"
@@ -126,6 +126,9 @@ class XmlVfs(object):
         self.parse()
 
     def list(self):
+        root_comments = self.get_root_comments()
+        if root_comments:
+            print "-r--r--r-- 1 user group %d Jan 1 00:00 text" % (len(root_comments))
         self._list(self.getroot())
 
     def _list(self, node, path=''):
@@ -208,6 +211,9 @@ class MiniDOMXmlVfs(XmlVfs):
     def getroot(self):
         return self.document
 
+    def get_root_comments(self):
+        return self.collect_text(self.document)
+
     def getchildren(self, node):
         return node.childNodes
 
@@ -283,6 +289,14 @@ if use_elementtree:
         def getroot(self):
             return self.document.getroot()
 
+        def get_root_comments(self):
+            text_accumulator = []
+            for element in self.getroot():
+                if not self.istag(element):
+                    text = u"<!--%s-->" % element.text
+                    text_accumulator.append(text)
+            return '\n'.join(text_accumulator).encode(default_encoding, "replace")
+
         def getlocalname(self, name):
             if name.startswith('{'):
                 name = name.split('}', 1)[1]  # Remove XML namespace
@@ -299,6 +313,13 @@ if use_lxml:
         def getroot(self):
             return [self.document.getroot()]
 
+        def get_root_comments(self):
+            text_accumulator = []
+            for element in self.document.getroot().itersiblings(tag=etree.Comment, preceding=True):
+                text = u"<!--%s-->" % element.text
+                text_accumulator.append(text)
+            return '\n'.join(text_accumulator).encode(default_encoding, "replace")
+
         def getlocalname(self, name):
             return etree.QName(name).localname
 
@@ -379,7 +400,10 @@ def mcxml_copyout():
             xml_error('There are no namespaces')
 
     elif path_comp == 'text':
-        text = xmlvfs.collect_text(node)
+        if '/' in xml_filename:
+            text = xmlvfs.collect_text(node)
+        else:
+            text = xmlvfs.get_root_comments()
 
     else:
         xml_error('Unknown file')
index db4dadbc50ae367f20ec083603651bff55ef6303..9156e2f01600fc15bff6d908331e4ad08886151d 100644 (file)
@@ -5,6 +5,9 @@ WHAT IS IT
    View an XML file in Midnight Commander as a filesystem.
 
 
+WHAT'S NEW in version 1.1.0 (2013-11-26)
+   Show comment(s) before the root element.
+
 WHAT'S NEW in version 1.0.1 (2013-11-24)
    Fixed a few minor bugs.