1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
"""
C.8 Definitions, Numbering, and Programming
"""
from plasTeX import Command, Environment
from plasTeX.Logging import getLogger
deflog = getLogger('parse.definitions')
#
# C.8.1 Defining Commands
#
class newcommand(Command):
""" \\newcommand """
args = '* name:cs [ nargs:int ] [ opt:nox ] definition:nox'
def invoke(self, tex):
self.parse(tex)
a = self.attributes
args = (a['name'], a['nargs'], a['definition'])
kwargs = {'opt':a['opt']}
deflog.debug('command %s %s %s', *args)
self.ownerDocument.context.newcommand(*args, **kwargs)
class renewcommand(newcommand):
pass
class providecommand(newcommand):
pass
class DeclareRobustCommand(newcommand):
pass
class DeclareTextCommandDefault(newcommand):
pass
#
# C.8.2 Defining Environments
#
class newenvironment(Command):
""" \\newenvironment """
args = '* name:str [ nargs:int ] [ opt:nox ] begin:nox end:nox'
def invoke(self, tex):
self.parse(tex)
a = self.attributes
args = (a['name'], a['nargs'], a['begin'], a['end'])
kwargs = {'opt':a['opt']}
deflog.debug('environment %s %s %s', *args)
self.ownerDocument.context.newenvironment(*args, **kwargs)
class renewenvironment(newenvironment):
pass
#
# C.8.3 Theorem-like Environments
#
class newtheorem(Command):
args = '* name:str [ counter:str ] caption [ within:str ]'
def invoke(self, tex):
self.parse(tex)
attrs = self.attributes
name = attrs['name']
counter = attrs['counter']
caption = attrs['caption']
within = attrs['within']
if not counter and not attrs['*modifier*']:
counter = name
if within:
self.ownerDocument.context.newcounter(counter,initial=0,resetby=within, format='${the%s}.${%s}' % (within, name))
else:
self.ownerDocument.context.newcounter(counter,initial=0)
deflog.debug('newtheorem %s', name)
# The nodeName key below ensure all theorem type will call the same
# rendering method, the type of theorem being retained in the thmName
# attribute
if attrs['*modifier*']:
newclass = type(str(name), (Environment,),
{'caption': caption, 'nodeName': 'thmenv', 'thmName': name,
'args': '[title]', 'forcePars': True, 'style': None})
else:
newclass = type(str(name), (Environment,),
{'caption': caption, 'nodeName': 'thmenv', 'thmName': name,
'counter': counter, 'args': '[title]', 'forcePars': True,
'style': None})
self.ownerDocument.context.addGlobal(name, newclass)
|