changeset 112:e85298a35998

add a simpleini parser
author Jeff Hammel <jhammel@mozilla.com>
date Thu, 02 Dec 2010 09:53:29 -0800
parents 2db73718f645
children 44534594f402
files python/simpleini.py
diffstat 1 files changed, 60 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/python/simpleini.py	Thu Dec 02 09:53:29 2010 -0800
@@ -0,0 +1,60 @@
+#!/usr/bin/env python
+
+import os
+
+def read(fp, comments=';#', separators=('=', ':')):
+
+  if isinstance(fp, basestring):
+    fp = file(fp)
+
+  sections = []
+  key = value = None
+  
+  for line in fp.readlines():
+
+    stripped = line.strip()
+
+    # ignore blank lines
+    if not stripped:
+      continue
+
+    # ignore comment lines
+    if stripped[0] in comments:
+      continue
+
+    # check for a new section
+    if len(stripped) > 2 and stripped[0] == '[' and stripped[-1] == ']':
+      section = stripped[1:-1].strip()
+      sections.append((section, {}))
+      key = value = None
+      # TODO: should probably make sure this section doesn't already exist
+      continue
+
+    # if there aren't any sections yet, something bad happen
+    if not sections:
+      raise Exception('No sections yet :(')
+
+    # (key, value) pair
+    for separator in separators:
+      if separator in stripped:
+        key, value = stripped.split(separator, 1)
+        key = key.strip()
+        value = value.strip()
+        sections[-1][1][key] = value
+        # TODO: should probably make sure this key isn't already in the section
+        break
+    else:
+      # continuation line ?
+      if line[0].isspace() and key:
+        value = '%s%s%s' % (value, os.linesep, stripped)
+        sections[-1][1][key] = value
+      else:
+        # something bad happen!
+        raise Exception("Not sure what you're trying to do")
+
+  return sections
+
+if __name__ == '__main__':
+  import sys
+  for i in sys.argv[1:]:
+    print read(i)