[kernel-team] 01/86: /people/waldi/utils/kconfigeditor2: Add finally.
debian-kernel at lists.debian.org
debian-kernel at lists.debian.org
Mon Dec 21 00:34:52 UTC 2015
This is an automated email from the git hooks/post-receive script.
benh pushed a commit to branch benh/kconfigeditor2
in repository kernel-team.
commit b45d341fb479c4dfbd2eb60be241d563786eaaa4
Author: Bastian Blank <waldi at debian.org>
Date: Tue Mar 11 13:14:19 2008 +0000
/people/waldi/utils/kconfigeditor2: Add finally.
svn path=/people/waldi/utils/kconfigeditor2/; revision=10783
---
utils/kconfigeditor2/kconfigeditor/__init__.py | 0
.../kconfigeditor/kconfig/__init__.py | 0
.../kconfigeditor/kconfig/menu/__init__.py | 0
.../kconfigeditor/kconfig/menu/file.py | 280 +++++++++++++++++++++
4 files changed, 280 insertions(+)
diff --git a/utils/kconfigeditor2/kconfigeditor/__init__.py b/utils/kconfigeditor2/kconfigeditor/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/utils/kconfigeditor2/kconfigeditor/kconfig/__init__.py b/utils/kconfigeditor2/kconfigeditor/kconfig/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/utils/kconfigeditor2/kconfigeditor/kconfig/menu/__init__.py b/utils/kconfigeditor2/kconfigeditor/kconfig/menu/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/utils/kconfigeditor2/kconfigeditor/kconfig/menu/file.py b/utils/kconfigeditor2/kconfigeditor/kconfig/menu/file.py
new file mode 100644
index 0000000..551d2ec
--- /dev/null
+++ b/utils/kconfigeditor2/kconfigeditor/kconfig/menu/file.py
@@ -0,0 +1,280 @@
+import re
+
+class File(object):
+ pass
+
+class _Parser(object):
+ def __call__(self, fd):
+ lineno = 0
+
+ stack = _Stack()
+ _BlockRoot(stack)
+
+ for line in fd:
+ line = line.rstrip()
+ if not line:
+ stack.top().process_line_empty()
+ elif line.lstrip()[0] == '#':
+ pass
+ else:
+ print stack._list
+ print line
+ stack.top().process_line(line)
+ lineno += 1
+ stack.top().stop(lineno, 0)
+
+class _Text(object):
+ __slots__ = "text", "lineno", "column"
+
+ def __init__(self, text, lineno, column):
+ self.text = text
+ self.lineno = lineno
+ self.column = column
+
+ def __getitem__(self, key):
+ if isinstance(key, slice):
+ return _text(self.text[key], self.lineno, self.column + key.start)
+ raise TypeError
+
+ def __len__(self):
+ return len(self.text)
+
+ def __str__(self):
+ raise Exception
+
+ def __unicode__(self):
+ return self.text
+
+class _Stack(object):
+ __slots__ = '_list'
+
+ def __init__(self, list = []):
+ self._list = list
+
+ def pop(self, check = None):
+ if check is not None and self._list[-1] != check:
+ raise Exception
+ return self._list.pop()
+
+ def push(self, item):
+ self._list.append(item)
+
+ def top(self):
+ return self._list[-1]
+
+class _Element(object):
+ def __init__(self, parent):
+ self.stack = parent.stack
+ self.stack.push(self)
+
+ def end(self):
+ pass
+
+ def pop(self):
+ self.end()
+ self.stack.pop(self)
+
+ def recurse(self, name, *args):
+ self.pop()
+ getattr(self.stack.top(), name)(*args)
+
+class _BlockContainer(object):
+ split_rules = r"""
+^
+ (?P<ind>\s*)
+ (---)?(?P<word>[a-z_]+)(---)?
+ (
+ \s+(?P<rest1>.+)
+ |
+ "(?P<rest2>.+)"
+ )?
+ \s*
+$"""
+ split_re = re.compile(split_rules, re.X)
+
+ def process_line(self, text):
+ match = self.split_re.match(text)
+ if not match:
+ raise Exception, "Can't parse: '%s'" % text
+ rest = match.group('rest1') or match.group('rest2')
+ print "rest:", rest
+ getattr(self, "process_%s" % match.group('word'))(rest, match.group('ind'))
+
+ def process_line_empty(self):
+ pass
+
+class _BlockContainerChoice(_BlockContainer):
+ def process_choice(self, text, ind):
+ _BlockChoice(self)
+
+class _BlockContainerCommon(_BlockContainer):
+ def process_comment(self, text, ind):
+ _BlockComment(self)
+
+ def process_config(self, text, ind):
+ _BlockConfig(self)
+
+ def process_if(self, text, ind):
+ _BlockIf(self)
+
+ def process_menuconfig(self, text, ind):
+ _BlockMenuconfig(self, ind)
+
+ def process_source(self, text, ind):
+ pass
+
+class _BlockContainerDepends(_BlockContainer):
+ def process_depends(self, text, ind):
+ _BlockDepends(self, ind)
+
+class _BlockContainerMenu(_BlockContainer):
+ def process_menu(self, text, ind):
+ _BlockMenu(self, text)
+
+class _BlockObject(_Element):
+ def __getattr__(self, name):
+ def ret(*args):
+ self.recurse(name, *args)
+ return ret
+
+class _BlockObjectIndentation(_BlockObject):
+ split_rules = r"^(?P<ind>\s+)(?P<rest>.*)$"
+ split_re = re.compile(split_rules)
+
+ def __init__(self, parent, ind):
+ super(_BlockObjectIndentation, self).__init__(parent)
+ self._indentation = ind
+
+ def process_line(self, text):
+ match = self.split_re.match(text)
+ if not match:
+ return self.recurse('process_line', text)
+ l = len(match.group('ind'))
+ if self._indentation < l:
+ return self.recurse('process_line', text)
+
+ def process_line_empty(self):
+ pass
+
+class _BlockRoot(
+ _BlockContainerChoice,
+ _BlockContainerCommon,
+ _BlockContainerMenu,
+ ):
+ def __init__(self, stack):
+ self.stack = stack
+ stack.push(self)
+
+ def __getattr__(self, name):
+ raise AttributeError, name
+
+ def process_mainmenu(self, text, ind):
+ pass
+
+ def stop(self, lineno, column):
+ self.stack.pop(self)
+
+class _BlockChoice(_BlockObject, _BlockContainerCommon):
+ def __init__(self, parent):
+ super(_BlockChoice, self).__init__(parent)
+ _BlockConfig(self)
+
+ def process_default(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_endchoice(self, text, ind):
+ self.pop()
+
+class _BlockComment(_BlockObject, _BlockContainerDepends):
+ pass
+
+class _BlockConfig(_BlockObject, _BlockContainerDepends):
+ def process_bool(self, text, ind):
+ _BlockType(self, text, ind)
+
+ process_boolean = process_bool
+
+ def process_default(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_def_bool(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_def_tristate(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_help(self, text, ind):
+ _BlockHelp(self, ind)
+
+ def process_hex(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_int(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_option(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_optional(self, text, ind):
+ pass
+
+ def process_prompt(self, text, ind):
+ pass
+
+ def process_range(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_select(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_string(self, text, ind):
+ _BlockType(self, text, ind)
+
+ def process_tristate(self, text, ind):
+ _BlockType(self, text, ind)
+
+class _BlockDepends(_BlockObjectIndentation):
+ pass
+
+class _BlockHelp(_BlockObjectIndentation):
+ pass
+
+class _BlockIf(_BlockObject,
+ _BlockContainerChoice,
+ _BlockContainerCommon,
+ _BlockContainerMenu,
+ ):
+
+ def process_endif(self, text, ind):
+ self.pop()
+
+class _BlockMenu(_BlockObject,
+ _BlockContainerChoice,
+ _BlockContainerCommon,
+ _BlockContainerMenu,
+ ):
+ def __init__(self, parent, text):
+ super(_BlockMenu, self).__init__(parent)
+ pass
+
+ def process_depends(self, text, ind):
+ pass
+
+ def process_endmenu(self, text, ind):
+ self.pop()
+
+class _BlockMenuconfig(_BlockConfig, _BlockMenu):
+ pass
+
+class _BlockType(_BlockObject):
+ def __init__(self, parent, text, ind):
+ super(_BlockType, self).__init__(parent)
+ self.nextline = True
+ self.process_line(text)
+
+ def process_line(self, text):
+ if self.nextline:
+ if not text or not text.endswith('\\'):
+ self.nextline = False
+ else:
+ return self.recurse('process_line', text)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/kernel/kernel-team.git
More information about the Kernel-svn-changes
mailing list