summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile-giscanner.am1
-rw-r--r--giscanner/sectionparser.py78
2 files changed, 79 insertions, 0 deletions
diff --git a/Makefile-giscanner.am b/Makefile-giscanner.am
index 728ff10d..02bb3ec6 100644
--- a/Makefile-giscanner.am
+++ b/Makefile-giscanner.am
@@ -46,6 +46,7 @@ pkgpyexec_PYTHON = \
giscanner/message.py \
giscanner/shlibs.py \
giscanner/scannermain.py \
+ giscanner/sectionparser.py \
giscanner/sourcescanner.py \
giscanner/testcodegen.py \
giscanner/transformer.py \
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)