/[navidoc]/navidoc/navidoc/parser.py
ViewVC logotype

Diff of /navidoc/navidoc/parser.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.7 by humppake, Mon Mar 31 15:24:19 2003 UTC revision 1.8 by humppake, Tue Apr 1 09:30:28 2003 UTC
# Line 34  from utils.parser import * Line 34  from utils.parser import *
34    
35  dbg = config.dbg.shorthand('parser')  dbg = config.dbg.shorthand('parser')
36    
37  class Factor:  class ElementFactor:
38      """      """
39      Gather available linktypes from modules.      Gather available linktypes from modules.
40      """      """
41    
42      types = {}      top_class = navidoc.Element
43    
44      def __init__(self, element_list, module_paths, top_class):      def __init__(self, module_paths):
45          self.types.clear()          self.types = {}
         self.element_list = element_list  
46          for module_path in module_paths:          for module_path in module_paths:
47              dbg ("Checking  module: "+str(module_path))              dbg ("Checking module: "+str(module_path))
48              self.types.update(keys_for_classes(module_path, top_class))              self.types.update(keys_for_classes(module_path, self.top_class))
49              for module in dir(module_path):              for module in dir(module_path):
50                  module = getattr(module_path, module)                  module = getattr(module_path, module)
51                  if type(module) == type(navidoc):                  if type(module) == type(navidoc):
52                      dbg ("Checking  module: "+str(module))                      dbg ("Checking module: "+str(module))
53                      self.types.update(keys_for_classes(module, top_class))                      # XXX Needs check and exception for conflicting element types
54                        self.types.update(keys_for_classes(module, self.top_class))
55          dbg("Collected: "+str(self.types))          dbg("Collected: "+str(self.types))
56    
57      def is_type(self, key): return self.types.has_key(key)      def is_type(self, key): return self.types.has_key(key)
# Line 61  class Factor: Line 61  class Factor:
61          Return an element type class reference for key.          Return an element type class reference for key.
62          """          """
63          if self.types.has_key(key):          if self.types.has_key(key):
             dbg("Internal: "+self.types[key])  
64              return self.types[key]              return self.types[key]
65          else: raise ParserException("Unknown element key: "+key)          else: raise ParserException("Unknown element key: "+key)
66    
 class LinkFactor(Factor):  
     """  
     """  
     def create_new(self, key, target):  
         type = self.get_type(key)  
         new = type(target)  
         return new  
   
 class ElementFactor(Factor):  
     """  
     """  
67      def create_new(self, key, var, s, list):      def create_new(self, key, var, s, list):
68          type = self.get_type(key)          type = self.get_type(key)
69            dbg("Found element: "+str(type))
70          new = type(var, s, list)          new = type(var, s, list)
         new.list = self.element_list  
71          return new          return new
72    
73  class ElementList:  class ElementList:
# Line 91  class ElementList: Line 79  class ElementList:
79          """          """
80          Initializes ElementList by parsing all elements in list.          Initializes ElementList by parsing all elements in list.
81          """          """
82          self.element_factor = ElementFactor(self, [mp], navidoc.Element)          dbg("List: "+str(list))
83          self.link_factor = LinkFactor(self, [link], link.Link)          config.element_list = self # XXX
84          self.linkpackage = None          self.factor = ElementFactor([mp, link])
85          self.extras = []          self.extras = []
86          self.list = [self.parse_element(element) for element in list]          self.list = [self.parse_element(element) for element in list]
87          self.list.extend(self.extras)          self.list.extend(self.extras)
88    
89      def add_sub_element(self, super_name, element):      def add_contained_element(self, super_name, element):
90          """          """
91          Add a subelement.          Add a subelement.
92          """          """
93          s = element[0]          s = element[0]
94          (w,s) = match_remove("^\s*(\w+)\s*", s)          (w,s) = match_remove("^\s*(\w+)\s*", s)
95          key = w.group(1)          key = w.group(1)
96          element = self.element_factor.create_new(key, None, super_name + " " + s, element[1:])          element = self.factor.create_new(key, None, super_name + " " + s, element[1:])
97          self.extras.append(element)          self.extras.append(element)
98    
99      def parse_element(self, element):      def parse_element(self, element):
100          """          """
# Line 118  class ElementList: Line 106  class ElementList:
106          if m: name = m.group(1)          if m: name = m.group(1)
107          (w,s) = match_remove("^\s*(\w+)\s*", s)          (w,s) = match_remove("^\s*(\w+)\s*", s)
108          key = w.group(1)          key = w.group(1)
         if key == "linkpackage":  
             self.linkpackage = s  
             return None  
109          dbg('Creating %s %s %s %s.' % (key, name, s, element[1:]))          dbg('Creating %s %s %s %s.' % (key, name, s, element[1:]))
110          element = self.element_factor.create_new(key, name, s, element[1:])          element = self.factor.create_new(key, name, s, element[1:])
111          return element          return element
112    
113      def setup_code(self):      def setup_code(self):

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.8

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26