In Python I have this class hierarchy:
_AbstractSection
_Section
_RepeatedSection
_PredicateSection
What's the best way to do this in JavaScript? The subclasses have to
call the superclass constructor, which I haven't done before.
I'm a little overwhelmed by all these options:
http://www.crockford.com/javascript/inheritance.html
http://stackoverflow.com/questions/1467710/call-base-method-in-javascript-using-douglas-crockfords-functional-inheritance
Or maybe there is a more JavaScript-y prototypal transcription of the
code below.
Andy
class _AbstractSection(object):
def __init__(self):
# Pairs of func, args, or a literal string
self.current_clause = []
def Append(self, statement):
"""Append a statement to this block."""
self.current_clause.append(statement)
def AlternatesWith(self):
raise TemplateSyntaxError(
'{.alternates with} can only appear with in {.repeated section ...}')
def NewOrClause(self):
raise NotImplementedError
class _Section(_AbstractSection):
"""Represents a (repeated) section."""
def __init__(self, section_name=None):
"""
Args:
section_name: name given as an argument to the section
token_type: The token type that created this section (e.g.
PREDICATE_TOKEN)
"""
_AbstractSection.__init__(self)
self.section_name = section_name
# Clauses is just a string and a list of statements.
self.statements = {'default': self.current_clause}
def __repr__(self):
return '<Section %s>' % self.section_name
def Statements(self, clause='default'):
return self.statements.get(clause, [])
def NewOrClause(self, pred):
if pred:
raise TemplateSyntaxError(
'{.or} clause only takes a predicate inside predicate blocks')
self.current_clause = []
self.statements['or'] = self.current_clause
class _RepeatedSection(_Section):
"""Repeated section is like section, but it supports {.alternates with}"""
def AlternatesWith(self):
self.current_clause = []
self.statements['alternates with'] = self.current_clause
class _PredicateSection(_AbstractSection):
"""Represents a sequence of predicate clauses."""
def __init__(self):
_AbstractSection.__init__(self)
# List of func, statements
self.clauses = []
def NewOrClause(self, pred):
# {.or} always executes if reached
pred = pred or (lambda x: True, None, SIMPLE_FUNC) # 3-tuple
self.current_clause = []
self.clauses.append((pred, self.current_clause))
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "JSON
Template" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/json-template?hl=en
-~----------~----~----~----~------~----~------~--~---