Class: Stupidedi::Parser::TableState

Inherits:
AbstractState show all
Defined in:
lib/stupidedi/parser/states/table_state.rb

Instance Attribute Summary collapse

Constructors collapse

Instance Method Summary collapse

Methods inherited from AbstractState

#leaf?, lsequence, mkcomposite, mkelement, mkrepeated, mksegment, mksimple, #pretty_print, sequence, tsequence

Methods included from Inspect

#inspect

Constructor Details

#initialize(separators, segment_dict, instructions, zipper, children) ⇒ TableState

Returns a new instance of TableState.


22
23
24
25
# File 'lib/stupidedi/parser/states/table_state.rb', line 22

def initialize(separators, segment_dict, instructions, zipper, children)
  @separators, @segment_dict, @instructions, @zipper, @children =
    separators, segment_dict, instructions, zipper, children
end

Instance Attribute Details

#childrenArray<AbstractState> (readonly)

Returns:


20
21
22
# File 'lib/stupidedi/parser/states/table_state.rb', line 20

def children
  @children
end

#instructionsInstructionTable (readonly)

Returns:


14
15
16
# File 'lib/stupidedi/parser/states/table_state.rb', line 14

def instructions
  @instructions
end

#segment_dictReader::SegmentDict (readonly)

Returns:


11
12
13
# File 'lib/stupidedi/parser/states/table_state.rb', line 11

def segment_dict
  @segment_dict
end

#separatorsReader::Separators (readonly)

Returns:


8
9
10
# File 'lib/stupidedi/parser/states/table_state.rb', line 8

def separators
  @separators
end

#zipperZipper::AbstractCursor (readonly)


17
18
19
# File 'lib/stupidedi/parser/states/table_state.rb', line 17

def zipper
  @zipper
end

Class Method Details

.push(zipper, parent, segment_tok, segment_use, config) ⇒ Zipper::AbstractCursor


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
# File 'lib/stupidedi/parser/states/table_state.rb', line 43

def push(zipper, parent, segment_tok, segment_use, config)
  case segment_use.parent
  when Schema::TableDef
    table_def   = segment_use.parent
    table_val   = table_def.empty
    segment_val = mksegment(segment_tok, segment_use)

    itable = InstructionTable.build(instructions(table_def))
    itable = itable.drop(itable.at(segment_use).drop_count)

    zipper.append_child new(
      parent.separators,
      parent.segment_dict,
      parent.instructions.push(itable.instructions),
      parent.zipper.append(table_val).append_child(segment_val),
      [])

  when Schema::LoopDef
    table_def = segment_use.parent.parent
    table_val = table_def.empty

    itable = InstructionTable.build(instructions(table_def))
    itable = itable.drop(itable.at(segment_use).drop_count)

    zipper = zipper.append_child new(
      parent.separators,
      parent.segment_dict,
      parent.instructions.push(itable.instructions),
      parent.zipper.append(table_val).dangle.last,
      [])

    LoopState.push(zipper, zipper.node, segment_tok, segment_use, config)
  end
end

Instance Method Details

#copy(changes = {}) ⇒ TableState

Returns:


28
29
30
31
32
33
34
35
# File 'lib/stupidedi/parser/states/table_state.rb', line 28

def copy(changes = {})
  TableState.new \
    changes.fetch(:separators, @separators),
    changes.fetch(:segment_dict, @segment_dict),
    changes.fetch(:instructions, @instructions),
    changes.fetch(:zipper, @zipper),
    changes.fetch(:children, @children)
end