@@ -29,6 +29,7 @@ def __init__(self, parent, child_index, settings):
2929 self .child_index = child_index
3030 self .raw = settings ['raw' ]
3131 self .type = settings .get ('type' , None )
32+ self .seed = settings .get ('seed' , None )
3233 self .is_expanded = False
3334
3435 def expand_children (self , child_rule , prevent_recursion = False ):
@@ -40,7 +41,7 @@ def expand_children(self, child_rule, prevent_recursion=False):
4041 sections , errors = parse (child_rule )
4142 self .errors .extend (errors )
4243 for i , section in enumerate (sections ):
43- node = Node (self , i , section )
44+ node = Node (self , i , { ** section , 'seed' : self . seed } )
4445 self .children .append (node )
4546 if not prevent_recursion :
4647 node .expand (prevent_recursion )
@@ -138,14 +139,14 @@ def activate(self):
138139 self .finished_rules = []
139140 self .rule_nodes = []
140141 for rule_section in self .rule_sections :
141- n = Node (grammar , 0 , {'type' : - 1 , 'raw' : rule_section })
142+ n = Node (grammar , 0 , {'type' : - 1 , 'raw' : rule_section , 'seed' : self . node . seed })
142143 n .expand ()
143144 self .finished_rules .append (n .finished_text )
144145 grammar .push_rules (self .target , self .finished_rules , self )
145146 elif self .type == 1 :
146147 grammar .pop_rules (self .target )
147148 elif self .type == 2 :
148- grammar .flatten (self .target , True )
149+ grammar .flatten (self .target , True , self . node . seed )
149150
150151 def to_text (self ): pass # FIXME
151152
@@ -230,19 +231,20 @@ def load_from_raw_obj(self, raw):
230231 self .symbols = dict (
231232 (k , Symbol (self , k , v )) for k , v in raw .items ())
232233
233- def create_root (self , rule ):
234- return Node (self , 0 , {'type' : - 1 , 'raw' : rule })
234+ def create_root (self , rule , seed = None ):
235+ return Node (self , 0 , {'type' : - 1 , 'raw' : rule , 'seed' : seed })
235236
236- def expand (self , rule , allow_escape_chars = False ):
237- root = self .create_root (rule )
237+ def expand (self , rule , allow_escape_chars = False , seed = None ):
238+ root = self .create_root (rule , seed )
238239 root .expand ()
239240 if not allow_escape_chars :
240241 root .clear_escape_chars ()
241242 self .errors .extend (root .errors )
242243 return root
243244
244- def flatten (self , rule , allow_escape_chars = False ):
245- root = self .expand (rule , allow_escape_chars )
245+ def flatten (self , rule , allow_escape_chars = False , seed = None ):
246+ random .seed (seed )
247+ root = self .expand (rule , allow_escape_chars , seed )
246248 return root .finished_text
247249
248250 def push_rules (self , key , raw_rules , source_action = None ):
0 commit comments