28 |
__docformat__ = 'reStructuredText' |
__docformat__ = 'reStructuredText' |
29 |
|
|
30 |
#from __future__ import nested_scopes |
#from __future__ import nested_scopes |
31 |
import re, os, random, string |
import re, random, string |
32 |
|
|
33 |
import navidoc.mp, navidoc.link |
import navidoc.mp, navidoc.link |
|
from navidoc.mp.core import MetapostException |
|
34 |
|
|
35 |
import config |
import config |
36 |
|
|
37 |
dbg = config.dbg.shorthand('parser') |
dbg = config.dbg.shorthand('parser') |
38 |
|
|
39 |
element_typs = {} |
element_types = {} |
40 |
link_types = {} |
link_types = {} |
41 |
|
|
42 |
def __init__(): |
def __init__(): |
46 |
#XXX: Fix key-name conflicts |
#XXX: Fix key-name conflicts |
47 |
element_types.update(keys4classes(navidoc.mp)) |
element_types.update(keys4classes(navidoc.mp)) |
48 |
for module in dir(navidoc.mp): |
for module in dir(navidoc.mp): |
49 |
module = getattr(root_module, module) |
module = getattr(navidoc.mp, module) |
50 |
element_types.update(keys4classes(module)) |
element_types.update(keys4classes(module)) |
51 |
|
|
52 |
link_types.update(keys4classes(navidoc.link)) |
link_types.update(keys4classes(navidoc.link)) |
53 |
for module in dir(navidoc.link): |
for module in dir(navidoc.link): |
54 |
module = getattr(root_module, module) |
module = getattr(navidoc.link, module) |
55 |
link_types.update(keys4classes(module)) |
link_types.update(keys4classes(module)) |
56 |
|
|
57 |
def keys4classes(module): |
def keys4classes(module): |
63 |
for elements in dir(module): |
for elements in dir(module): |
64 |
for element in elements: |
for element in elements: |
65 |
element = getattr(module, element) |
element = getattr(module, element) |
66 |
if hassattr(element, "key") \ |
if hasattr(element, "key") \ |
67 |
and type(element.key) == type(''): |
and type(element.key) == type(''): |
68 |
d[element.key] = element |
d[element.key] = element |
69 |
return d |
return d |
70 |
|
|
71 |
class ParserException(Exception): |
class ParserException(Exception): |
72 |
def __init__(self, value): |
def __init__(self, value): |
73 |
|
Exception.__init__() |
74 |
self.value = value |
self.value = value |
75 |
def __str__(self): |
def __str__(self): |
76 |
return self.value |
return self.value |
137 |
""" |
""" |
138 |
def __init__(self, list): |
def __init__(self, list): |
139 |
self.list = list |
self.list = list |
|
self.link = None |
|
|
def get_key(self): |
|
|
return self.key |
|
140 |
|
|
141 |
class NamedElement (Element): |
class NamedElement (Element): |
142 |
""" |
""" |
152 |
if len(link): |
if len(link): |
153 |
self.link = link_types[el[0]](link[0][0]) |
self.link = link_types[el[0]](link[0][0]) |
154 |
else: |
else: |
155 |
self.link = self.defaultlink() |
self.link = self.defaultlink(link[0][0]) |
156 |
else: |
else: |
157 |
self.list.add_sub_element(self.name, el) |
self.list.add_sub_element(self.name, el) |
158 |
def defaultlink(self): |
def defaultlink(self, link): |
159 |
return navidoc.link.Link(link[0][0]) |
return navidoc.link.Link(link) |
160 |
|
|
161 |
class ElementList: |
class ElementList: |
162 |
""" |
""" |