Use KWD instead of token.name.

pull/1/head
Yusuke Shinyama 2014-06-30 19:15:21 +09:00
parent 1ccfaff411
commit 137fc3a1ae
1 changed files with 34 additions and 17 deletions

View File

@ -26,6 +26,7 @@ from .psparser import PSSyntaxError
from .psparser import PSEOF from .psparser import PSEOF
from .psparser import PSLiteral from .psparser import PSLiteral
from .psparser import literal_name from .psparser import literal_name
from .psparser import KWD
from .encodingdb import name2unicode from .encodingdb import name2unicode
from .utils import choplist from .utils import choplist
from .utils import nunpack from .utils import nunpack
@ -286,19 +287,35 @@ class CMapParser(PSStackParser):
pass pass
return return
KEYWORD_BEGINCMAP = KWD(b'begincmap')
KEYWORD_ENDCMAP = KWD(b'endcmap')
KEYWORD_USECMAP = KWD(b'usecmap')
KEYWORD_DEF = KWD(b'def')
KEYWORD_BEGINCODESPACERANGE = KWD(b'begincodespacerange')
KEYWORD_ENDCODESPACERANGE = KWD(b'endcodespacerange')
KEYWORD_BEGINCIDRANGE = KWD(b'begincidrange')
KEYWORD_ENDCIDRANGE = KWD(b'endcidrange')
KEYWORD_BEGINCIDCHAR = KWD(b'begincidchar')
KEYWORD_ENDCIDCHAR = KWD(b'endcidchar')
KEYWORD_BEGINBFRANGE = KWD(b'beginbfrange')
KEYWORD_ENDBFRANGE = KWD(b'endbfrange')
KEYWORD_BEGINBFCHAR = KWD(b'beginbfchar')
KEYWORD_ENDBFCHAR = KWD(b'endbfchar')
KEYWORD_BEGINNOTDEFRANGE = KWD(b'beginnotdefrange')
KEYWORD_ENDNOTDEFRANGE = KWD(b'endnotdefrange')
def do_keyword(self, pos, token): def do_keyword(self, pos, token):
name = token.name if token is self.KEYWORD_BEGINCMAP:
if name == b'begincmap':
self._in_cmap = True self._in_cmap = True
self.popall() self.popall()
return return
elif name == b'endcmap': elif token is self.KEYWORD_ENDCMAP:
self._in_cmap = False self._in_cmap = False
return return
if not self._in_cmap: if not self._in_cmap:
return return
# #
if name == b'def': if token is self.KEYWORD_DEF:
try: try:
((_, k), (_, v)) = self.pop(2) ((_, k), (_, v)) = self.pop(2)
self.cmap.set_attr(literal_name(k), v) self.cmap.set_attr(literal_name(k), v)
@ -306,7 +323,7 @@ class CMapParser(PSStackParser):
pass pass
return return
if name == b'usecmap': if token is self.KEYWORD_USECMAP:
try: try:
((_, cmapname),) = self.pop(1) ((_, cmapname),) = self.pop(1)
self.cmap.use_cmap(CMapDB.get_cmap(literal_name(cmapname))) self.cmap.use_cmap(CMapDB.get_cmap(literal_name(cmapname)))
@ -316,17 +333,17 @@ class CMapParser(PSStackParser):
pass pass
return return
if name == b'begincodespacerange': if token is self.KEYWORD_BEGINCODESPACERANGE:
self.popall() self.popall()
return return
if name == b'endcodespacerange': if token is self.KEYWORD_ENDCODESPACERANGE:
self.popall() self.popall()
return return
if name == b'begincidrange': if token is self.KEYWORD_BEGINCIDRANGE:
self.popall() self.popall()
return return
if name == b'endcidrange': if token is self.KEYWORD_ENDCIDRANGE:
objs = [obj for (__, obj) in self.popall()] objs = [obj for (__, obj) in self.popall()]
for (s, e, cid) in choplist(3, objs): for (s, e, cid) in choplist(3, objs):
if (not isinstance(s, str) or not isinstance(e, str) or if (not isinstance(s, str) or not isinstance(e, str) or
@ -347,20 +364,20 @@ class CMapParser(PSStackParser):
self.cmap.add_code2cid(x, cid+i) self.cmap.add_code2cid(x, cid+i)
return return
if name == b'begincidchar': if token is self.KEYWORD_BEGINCIDCHAR:
self.popall() self.popall()
return return
if name == b'endcidchar': if token is self.KEYWORD_ENDCIDCHAR:
objs = [obj for (__, obj) in self.popall()] objs = [obj for (__, obj) in self.popall()]
for (cid, code) in choplist(2, objs): for (cid, code) in choplist(2, objs):
if isinstance(code, str) and isinstance(cid, str): if isinstance(code, str) and isinstance(cid, str):
self.cmap.add_code2cid(code, nunpack(cid)) self.cmap.add_code2cid(code, nunpack(cid))
return return
if name == b'beginbfrange': if token is self.KEYWORD_BEGINBFRANGE:
self.popall() self.popall()
return return
if name == b'endbfrange': if token is self.KEYWORD_ENDBFRANGE:
objs = [obj for (__, obj) in self.popall()] objs = [obj for (__, obj) in self.popall()]
for (s, e, code) in choplist(3, objs): for (s, e, code) in choplist(3, objs):
if (not isinstance(s, str) or not isinstance(e, str) or if (not isinstance(s, str) or not isinstance(e, str) or
@ -382,20 +399,20 @@ class CMapParser(PSStackParser):
self.cmap.add_cid2unichr(s1+i, x) self.cmap.add_cid2unichr(s1+i, x)
return return
if name == b'beginbfchar': if token is self.KEYWORD_BEGINBFCHAR:
self.popall() self.popall()
return return
if name == b'endbfchar': if token is self.KEYWORD_ENDBFCHAR:
objs = [obj for (__, obj) in self.popall()] objs = [obj for (__, obj) in self.popall()]
for (cid, code) in choplist(2, objs): for (cid, code) in choplist(2, objs):
if isinstance(cid, str) and isinstance(code, str): if isinstance(cid, str) and isinstance(code, str):
self.cmap.add_cid2unichr(nunpack(cid), code) self.cmap.add_cid2unichr(nunpack(cid), code)
return return
if name == b'beginnotdefrange': if token is self.KEYWORD_BEGINNOTDEFRANGE:
self.popall() self.popall()
return return
if name == b'endnotdefrange': if token is self.KEYWORD_ENDNOTDEFRANGE:
self.popall() self.popall()
return return