summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
authorJasper St. Pierre <jstpierre@mecheye.net>2013-02-01 21:13:16 -0500
committerJasper St. Pierre <jstpierre@mecheye.net>2013-02-01 21:13:16 -0500
commit9871097019082c323b98cc752b568e614fce6d6e (patch)
tree160e7e2f627d35e8521cf4ecd0cded8c7bac746b /giscanner
parent911339b844bfe41b404f197924bb92a9060031ee (diff)
downloadgobject-introspection-9871097019082c323b98cc752b568e614fce6d6e.tar.gz
giscanner: Add a new quick hack module for scanning section files
This will be used to group symbols into documentation sections.
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/sectionparser.py78
1 files changed, 78 insertions, 0 deletions
diff --git a/giscanner/sectionparser.py b/giscanner/sectionparser.py
new file mode 100644
index 00000000..caf6bf2d
--- /dev/null
+++ b/giscanner/sectionparser.py
@@ -0,0 +1,78 @@
+# -*- Mode: Python -*-
+# Copyright (C) 2013 Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+#
+
+import re
+import sys
+
+class SectionFile(object):
+ def __init__(self, sections):
+ self.sections = sections
+
+class Section(object):
+ def __init__(self):
+ self.file = None
+ self.title = None
+ self.main_subsection = Subsection(None)
+ self.subsections = []
+
+class Subsection(object):
+ def __init__(self, name):
+ self.name = name
+ self.symbols = []
+
+def parse_sections_file(lines):
+ sections = []
+ current_section = None
+ current_subsection = None
+
+ for line in lines:
+ line = line.rstrip()
+
+ if not line or line.isspace():
+ continue
+
+ if line == "<SECTION>":
+ current_section = Section()
+ sections.append(current_section)
+ current_subsection = current_section.main_subsection
+ continue
+
+ if line == "</SECTION>":
+ current_section = None
+ continue
+
+ match = re.match(line, r"<FILE>(?P<contents>.*)</FILE>")
+ if match:
+ current_section.file = match.groupdict['contents']
+ continue
+
+ match = re.match(line, r"<TITLE>(?P<contents>.*)</TITLE>")
+ if match:
+ current_section.title = match.groupdict['contents']
+ continue
+
+ match = re.match(line, r"<SUBSECTION (?P<name>).*>")
+ if match:
+ current_subsection = Section(match.groupdict['name'])
+ current_section.subsections.append(current_subsection)
+ continue
+
+ current_subsection.symbols.append(line)
+
+ return SectionFile(sections)