Author | Manuela Ruiz (mruiz@lcc.uma.es) |
Abstract representation of a grammar, that is, a set of rules
rule | a Rule object to add |
Adds a rule to the grammar
# File lib/main-structures.rb, line 231 231: def add_rule(rule) 232: @rules.push(rule) 233: end
shape | a LabelledShape that will be the axiom of the grammar |
Sets the axiom to the specified shape
# File lib/main-structures.rb, line 248 248: def axiom=(shape) 249: @axiom = shape 250: end
rule | a Rule object, representing one of the grammar rules |
returns | the index of the rule (not the ID) |
# File lib/main-structures.rb, line 255 255: def get_rule_index(rule) 256: result = nil 257: i = 0 258: while ((i < @rules.size) && !result) 259: if @rules[i].rule_id == rule.rule_id 260: result = i 261: end 262: i+=1 263: end 264: return result 265: end
path | the path to load the shape from |
Loads the shape from the specified path
# File lib/main-structures.rb, line 341 341: def load(path) 342: 343: #the path is a .gr2 file 344: #we need the directory 345: directory = ShadeUtils.get_directory_from_path(path) 346: 347: size = @rules.size 348: i = 0 349: while i < size 350: remove_rule(size-i-1) 351: i += 1 352: end 353: @rules = Array.new 354: 355: Shade.project.execution.file_axiom = false 356: 357: filename = path.strip 358: 359: File.open(filename, 'r') do |f| 360: while line = f.gets 361: line_a = line.split 362: if line_a[0] == "AXIOM:" 363: Shade.project.execution.file_axiom = true 364: @axiom = LabelledShape.new(Array.new, Array.new) 365: @axiom.load("#{directory}#{line_a[1]}") 366: else 367: alpha_title = line_a[0] 368: beta_title = line_a[1] 369: alpha = RuleLabelledShape.new(Array.new, Array.new, nil, nil) 370: alpha.load("#{directory}#{alpha_title}") 371: 372: beta = RuleLabelledShape.new(Array.new, Array.new, nil, nil) 373: beta.load("#{directory}#{beta_title}") 374: if @rules.empty? 375: last_id = 0 376: else 377: last_id = @rules.last.rule_id 378: end 379: rule = ShadeUtils.paint_rule(last_id+1, alpha, beta) 380: @rules.push rule 381: end 382: end 383: end 384: 385: if !Shade.project.execution.file_axiom 386: new_axiom = LabelledShape.new(Array.new, Array.new) 387: @rules[0].left.p.each_key {|layer_name| 388: new_axiom.p[layer_name] = @rules[0].left.p[layer_name].clone 389: } 390: @rules[0].left.s.each_key {|layer_name| 391: new_axiom.s[layer_name] = @rules[0].left.s[layer_name].clone 392: } 393: Shade.project.execution.grammar.axiom = new_axiom 394: end 395: 396: Shade.project.execution.reset 397: end
i | index of the rule to remove |
Removes the rule in the grammar with the index i
# File lib/main-structures.rb, line 238 238: def remove_rule(i) 239: rule = @rules[i] 240: rule.erase 241: #Delete from the array 242: @rules.delete_at(i) 243: end
path | the path to save the shape in |
Saves the shape in the specified path
# File lib/main-structures.rb, line 311 311: def save(path, text = false) 312: #the path is a .gr2 file 313: #we need the directory 314: directory = ShadeUtils.get_directory_from_path(path) 315: title = ShadeUtils.get_title_from_path(path) 316: 317: if text 318: extension = "txt" 319: else 320: extension = "skp" 321: end 322: 323: File.open(path.strip, 'w') do |f| 324: @rules.each { |rule| 325: f.write("alpha#{rule.rule_id}#{title}.#{extension} beta#{rule.rule_id}#{title}.#{extension}\n") 326: rule.alpha.save("#{directory}alpha#{rule.rule_id}#{title}.#{extension}") 327: rule.beta.save("#{directory}beta#{rule.rule_id}#{title}.#{extension}") 328: } 329: if Shade.project.execution.file_axiom 330: f.write("AXIOM: axiom#{title}.#{extension}\n") 331: @axiom.save("#{directory}axiom#{title}.#{extension}") 332: end 333: end 334: 335: 336: end
rule_id | an id |
returns the rule with the internal id rule_id. In case it does not exist, returns nil
# File lib/main-structures.rb, line 270 270: def search_rule_by_id(rule_id) 271: i = 0 272: found = false 273: size = @rules.size 274: rule = nil 275: 276: while i < size and !found 277: if @rules[i].rule_id == rule_id 278: rule = @rules[i] 279: found = true 280: end 281: i +=1 282: end 283: return rule 284: end
shape_id | an id |
returns the shape with the internal id shape_id. In case it does not exist, returns nil
# File lib/main-structures.rb, line 289 289: def search_shape_by_id(shape_id) 290: i = 0 291: found = false 292: size = @rules.size 293: shape = nil 294: 295: while i < size and !found 296: if @rules[i].left.shape_id == shape_id 297: shape = @rules[i].left 298: found = true 299: elsif @rules[i].right.shape_id == shape_id 300: shape = @rules[i].right 301: found = true 302: end 303: i +=1 304: end 305: return shape 306: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.