Flutter Engine
The Flutter Engine
Public Member Functions | List of all members
scripts.emitter.Emitter Class Reference
Inheritance diagram for scripts.emitter.Emitter:

Public Member Functions

def __init__ (self, bindings=None)
 
def EmitRaw (self, item)
 
def Emit (self, template_source, **parameters)
 
def Fragments (self)
 
def Bind (self, var, template_source, **parameters)
 

Detailed Description

An Emitter collects string fragments to be assembled into a single string.

Definition at line 20 of file emitter.py.

Constructor & Destructor Documentation

◆ __init__()

def scripts.emitter.Emitter.__init__ (   self,
  bindings = None 
)

Definition at line 24 of file emitter.py.

24 def __init__(self, bindings=None):
25 self._items = [] # A new list
26 self._bindings = bindings or Emitter.Frame({}, None)
27

Member Function Documentation

◆ Bind()

def scripts.emitter.Emitter.Bind (   self,
  var,
  template_source,
**  parameters 
)
Adds a binding for var to this emitter.

Definition at line 131 of file emitter.py.

131 def Bind(self, var, template_source, **parameters):
132 """Adds a binding for var to this emitter."""
133 template = self._ParseTemplate(template_source)
134 if template._holes:
135 raise RuntimeError('Cannot have holes in Emitter.Bind')
136 bindings = self._bindings.Extend(parameters)
137 value = Emitter(bindings)
138 value._ApplyTemplate(template, bindings, self._items)
139 self._bindings = self._bindings.Extend({var: value._items})
140 return value
141
static bool Bind(PassBindingsCacheMTL &pass, ShaderStage stage, size_t bind_index, const BufferView &view)

◆ Emit()

def scripts.emitter.Emitter.Emit (   self,
  template_source,
**  parameters 
)
Emits a template, substituting named parameters and returning emitters to
fill the named holes.

Ordinary substitution occurs at $NAME or $(NAME).  If there is no parameter
called NAME, the text is left as-is. So long as you don't bind FOO as a
parameter, $FOO in the template will pass through to the generated text.

Substitution of $?NAME and $(?NAME) yields an empty string if NAME is not a
parameter.

Values passed as named parameters should be strings or simple integral
values (int or long).

Named holes are created at $!NAME or $(!NAME).  A hole marks a position in
the template that may be filled in later.  An Emitter is returned for each
named hole in the template.  The holes are filled by emitting to the
corresponding emitter.

Subtemplates can be created by using $#NAME(...), where text can be placed
inside of the parentheses and will conditionally expand depending on if
NAME is set to True or False. The text inside the parentheses may use
further $#NAME and $NAME substitutions, but is not permitted to create
holes.

Emit returns either a single Emitter if the template contains one hole or a
tuple of emitters for several holes, in the order that the holes occur in
the template.

The emitters for the holes remember the parameters passed to the initial
call to Emit.  Holes can be used to provide a binding context.

Definition at line 32 of file emitter.py.

32 def Emit(self, template_source, **parameters):
33 """Emits a template, substituting named parameters and returning emitters to
34 fill the named holes.
35
36 Ordinary substitution occurs at $NAME or $(NAME). If there is no parameter
37 called NAME, the text is left as-is. So long as you don't bind FOO as a
38 parameter, $FOO in the template will pass through to the generated text.
39
40 Substitution of $?NAME and $(?NAME) yields an empty string if NAME is not a
41 parameter.
42
43 Values passed as named parameters should be strings or simple integral
44 values (int or long).
45
46 Named holes are created at $!NAME or $(!NAME). A hole marks a position in
47 the template that may be filled in later. An Emitter is returned for each
48 named hole in the template. The holes are filled by emitting to the
49 corresponding emitter.
50
51 Subtemplates can be created by using $#NAME(...), where text can be placed
52 inside of the parentheses and will conditionally expand depending on if
53 NAME is set to True or False. The text inside the parentheses may use
54 further $#NAME and $NAME substitutions, but is not permitted to create
55 holes.
56
57 Emit returns either a single Emitter if the template contains one hole or a
58 tuple of emitters for several holes, in the order that the holes occur in
59 the template.
60
61 The emitters for the holes remember the parameters passed to the initial
62 call to Emit. Holes can be used to provide a binding context.
63 """
64 return self._Emit(template_source, parameters)
65

◆ EmitRaw()

def scripts.emitter.Emitter.EmitRaw (   self,
  item 
)
Emits literal string with no substitution.

Definition at line 28 of file emitter.py.

28 def EmitRaw(self, item):
29 """Emits literal string with no substitution."""
30 self._items.append(item)
31
static void append(char **dst, size_t *count, const char *src, size_t n)
Definition: editor.cpp:211

◆ Fragments()

def scripts.emitter.Emitter.Fragments (   self)
Returns a list of all the string fragments emitted.

Definition at line 94 of file emitter.py.

94 def Fragments(self):
95 """Returns a list of all the string fragments emitted."""
96
97 def _FlattenTo(item, output):
98 if isinstance(item, list):
99 for subitem in item:
100 _FlattenTo(subitem, output)
101 elif isinstance(item, Emitter.DeferredLookup):
102 value = item._environment.Lookup(item._lookup._name,
103 item._lookup._value_if_missing)
104 if item._lookup._subtemplate:
105 _FlattenSubtemplate(item, value, output)
106 else:
107 _FlattenTo(value, output)
108 else:
109 output.append(str(item))
110
111 def _FlattenSubtemplate(item, value, output):
112 """Handles subtemplates created by $#NAME(...)"""
113 if value is True:
114 # Expand items in subtemplate
115 _FlattenTo(item._lookup._subitems, output)
116 elif value is not False:
117 if value != item._lookup._value_if_missing:
118 raise RuntimeError(
119 'Value for NAME in $#NAME(...) syntax must be a boolean'
120 )
121 # Expand it into the string literal composed of $#NAME(,
122 # the values inside the parentheses, and ).
123 _FlattenTo(value, output)
124 _FlattenTo(item._lookup._subitems, output)
125 _FlattenTo(')', output)
126
127 output = []
128 _FlattenTo(self._items, output)
129 return output
130

The documentation for this class was generated from the following file: