[gedit-latex/doc-prefs: 3/3] drop gross xml document properties



commit cf190976136c49ebcf91b0ee560fb4b028993fe9
Author: John Stowers <john stowers gmail com>
Date:   Tue Aug 16 12:27:09 2011 +1200

    drop gross xml document properties

 latex/latex/editor.py         |    8 +--
 latex/preferences/__init__.py |   94 +++++++++++------------------------------
 2 files changed, 28 insertions(+), 74 deletions(-)
---
diff --git a/latex/latex/editor.py b/latex/latex/editor.py
index 2673895..3740251 100644
--- a/latex/latex/editor.py
+++ b/latex/latex/editor.py
@@ -336,23 +336,21 @@ class LaTeXEditor(Editor, IIssueHandler):
         return master_filename
 
     @property
-    # returns(File)
     def __master_file(self):
         """
         Find the LaTeX master of this child
 
         @return: base.File
         """
-        try:
-            path = self._preferences.get("document-master-filename")
-            # the property file may contain absolute and relative paths
+        path = self._preferences.get("document-master-filename")
+        if path != None:
             if File.is_absolute(path):
                 self._log.debug("Path is absolute")
                 return File(path)
             else:
                 self._log.debug("Path is relative")
                 return File.create_from_relative_path(path, self._file.dirname)
-        except KeyError:
+        else:
             # master filename not found, ask user
             master_filename = self.choose_master_file()
             if master_filename:
diff --git a/latex/preferences/__init__.py b/latex/preferences/__init__.py
index e380380..c146f34 100644
--- a/latex/preferences/__init__.py
+++ b/latex/preferences/__init__.py
@@ -26,83 +26,38 @@ from gi.repository import GObject, Gio, GLib
 
 import os.path
 import logging
+import ConfigParser
 
 from ..util import singleton
 
-# TODO: use ElementTree
-from xml.dom import minidom
-from xml.parsers.expat import ExpatError
-
-from ..base.file import File
-
 LOG = logging.getLogger(__name__)
 
-class _PropertyFile(dict):
-    """
-    A property file is a hidden XML file that holds meta data for exactly one file.
-    It can be used to store the master file of a LaTeX document fragment.
-    """
-
-    __log = logging.getLogger("PropertyFile")
+class _LatexConfigParser(ConfigParser.RawConfigParser):
 
-    # TODO: insert value as TEXT node
-
-    def __init__(self, file):
-        """
-        Create or load the property file for a given File
-        """
-        self.__file = File("%s/.%s.properties.xml" % (file.dirname, file.basename))
+    SECTION = "LATEX"
 
+    def __init__(self, filename):
+        ConfigParser.RawConfigParser.__init__(self)
+        self._filename = filename
+        self.read(filename)
         try:
-            self.__dom = minidom.parse(self.__file.path)
-
-            for property_node in self.__dom.getElementsByTagName("property"):
-                k = property_node.getAttribute("key")
-                v = property_node.getAttribute("value")
-                self.__setitem__(k, v)
-
-        except IOError:
-            self.__log.debug("File %s not found, creating empty one" % self.__file)
-
-            self.__dom = minidom.getDOMImplementation().createDocument(None, "properties", None)
+            self.add_section(self.SECTION)
+        except ConfigParser.DuplicateSectionError:
+            pass
 
-        except ExpatError, e:
-            self.__log.error("Error parsing %s: %s" % (self.__file, e))
-
-
-    def __find_node(self, k):
-        for node in self.__dom.getElementsByTagName("property"):
-            if node.getAttribute("key") == str(k):
-                return node
-        raise KeyError
-
-    def __getitem__(self, k):
-        return self.__find_node(k).getAttribute("value")
-
-    def __setitem__(self, k, v):
+    def get(self, key):
         try:
-            self.__find_node(k).setAttribute("value", str(v))
-        except KeyError:
-            node = self.__dom.createElement("property")
-            node.setAttribute("key", str(k))
-            node.setAttribute("value", str(v))
-            self.__dom.documentElement.appendChild(node)
+            return ConfigParser.RawConfigParser.get(self,self.SECTION, key)
+        except ConfigParser.NoOptionError:
+            return None
 
-    def save(self):
-        filename = self.__file.path
-
-        if self.__file.exists:
-            mode = "w"
-        else:
-            mode = "a"
+    def set(self,key,value):
+        ConfigParser.RawConfigParser.set(self, self.SECTION, key, value)
 
-        try:
-            f = open(filename, mode)
-            f.write(self.__dom.toxml())
-            f.close()
-            self.__log.debug("Saved to %s" % filename)
-        except IOError, e:
-            self.__log.error("Error saving %s: %s" % (filename, e))
+    def save(self):
+        f = open(self._filename,'w')
+        self.write(f)
+        f.close()
 
 class _Preferences(GObject.GObject):
 
@@ -155,7 +110,8 @@ class DocumentPreferences(_Preferences):
         self._sysprefs = Preferences()
         self._sysprefs.connect("preferences-changed", self._on_prefs_changed)
         self._file = file
-        self._pf = _PropertyFile(file)
+        self._cp = _LatexConfigParser(
+                        "%s/.%s.ini" % (file.dirname, file.basename))
 
     def _on_prefs_changed(self, p, key, value):
         self.emit("preferences-changed", key, value)
@@ -166,15 +122,15 @@ class DocumentPreferences(_Preferences):
     def get(self, key):
         if self._is_docpref(key):
             LOG.debug("Get document pref")
-            return self._pf[key]
+            return self._cp.get(key)
         else:
             return self._sysprefs.get(key)
 
     def set(self, key, value):
         if self._is_docpref(key):
             LOG.debug("Set document pref")
-            self._pf[key] = value
-            self._pf.save()
+            self._cp.set(key,value)
+            self._cp.save()
             self.emit("preferences-changed", key, value)
         else:
             self._sysprefs.set(key, value)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]