Class: PointBlank::DOM::DOMObject

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/mmmd/blankshell.rb

Overview

DOM Object

Class Attribute Summary collapse

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeDOMObject

Returns a new instance of DOMObject.



1590
1591
1592
1593
1594
1595
# File 'lib/mmmd/blankshell.rb', line 1590

def initialize
  @children = []
  @temp_children = []
  @properties = {}
  @content = ""
end

Class Attribute Details

.parserObject

Returns the value of attribute parser.



1583
1584
1585
# File 'lib/mmmd/blankshell.rb', line 1583

def parser
  @parser
end

.scannerObject

Returns the value of attribute scanner.



1583
1584
1585
# File 'lib/mmmd/blankshell.rb', line 1583

def scanner
  @scanner
end

.unsorted_childrenObject

Returns the value of attribute unsorted_children.



1583
1584
1585
# File 'lib/mmmd/blankshell.rb', line 1583

def unsorted_children
  @unsorted_children
end

.unsorted_overlaysObject

Returns the value of attribute unsorted_overlays.



1583
1584
1585
# File 'lib/mmmd/blankshell.rb', line 1583

def unsorted_overlays
  @unsorted_overlays
end

Instance Attribute Details

#contentObject

Returns the value of attribute content.



1654
1655
1656
# File 'lib/mmmd/blankshell.rb', line 1654

def content
  @content
end

#parentObject

Returns the value of attribute parent.



1654
1655
1656
# File 'lib/mmmd/blankshell.rb', line 1654

def parent
  @parent
end

#parserObject

Returns the value of attribute parser.



1654
1655
1656
# File 'lib/mmmd/blankshell.rb', line 1654

def parser
  @parser
end

#positionObject

Returns the value of attribute position.



1654
1655
1656
# File 'lib/mmmd/blankshell.rb', line 1654

def position
  @position
end

#propertiesObject

Returns the value of attribute properties.



1654
1655
1656
# File 'lib/mmmd/blankshell.rb', line 1654

def properties
  @properties
end

#temp_childrenObject (readonly)

Returns the value of attribute temp_children.



1655
1656
1657
# File 'lib/mmmd/blankshell.rb', line 1655

def temp_children
  @temp_children
end

Class Method Details

.define_child(child, priority = 9999) ⇒ void

This method returns an undefined value.

Define valid child for this DOMObject class

Parameters:

  • child (Class)


1512
1513
1514
1515
# File 'lib/mmmd/blankshell.rb', line 1512

def define_child(child, priority = 9999)
  @unsorted_children ||= []
  @unsorted_children.append([child, priority])
end

.define_overlay(overlay, priority = 9999) ⇒ void

This method returns an undefined value.

Define an overlay - a parsing strategy that occurs once a block is closed. May transform block if #process method of the overlay class returns a class.

Parameters:



1537
1538
1539
1540
# File 'lib/mmmd/blankshell.rb', line 1537

def define_overlay(overlay, priority = 9999)
  @unsorted_overlays ||= []
  @unsorted_overlays.append([overlay, priority])
end

.define_parser(parser) ⇒ void

This method returns an undefined value.

Define self parser for this DOMObject class

Parameters:



1527
1528
1529
1530
# File 'lib/mmmd/blankshell.rb', line 1527

def define_parser(parser)
  parser.parser_for = self
  @parser = parser
end

.define_scanner(scanner) ⇒ void

This method returns an undefined value.

Define child element scanner for this DOMObject class

Parameters:

  • child (Class)


1520
1521
1522
# File 'lib/mmmd/blankshell.rb', line 1520

def define_scanner(scanner)
  @scanner = scanner
end

.inherited(subclass) ⇒ Object

Make subclasses inherit scanner and valid children



1495
1496
1497
1498
1499
1500
# File 'lib/mmmd/blankshell.rb', line 1495

def inherited(subclass)
  subclass.parser ||= @parser
  subclass.scanner ||= @scanner
  subclass.unsorted_children ||= @unsorted_children.dup || []
  super(subclass)
end

.parse(doc) ⇒ self

Parse a document

Returns:

  • (self)


1551
1552
1553
1554
1555
1556
# File 'lib/mmmd/blankshell.rb', line 1551

def parse(doc)
  newdoc = new
  newdoc.parser = parser.new
  scan = @scanner.new(doc, newdoc)
  scan.scan
end

.sort_childrenvoid

This method returns an undefined value.

Sort children by priority



1504
1505
1506
1507
# File 'lib/mmmd/blankshell.rb', line 1504

def sort_children
  @valid_children = @unsorted_children&.sort_by(&:last)&.map(&:first) ||
                    []
end

.sort_overlaysvoid

This method returns an undefined value.

Sort overlays by priority



1544
1545
1546
1547
# File 'lib/mmmd/blankshell.rb', line 1544

def sort_overlays
  @valid_overlays = @unsorted_overlays&.sort_by(&:last)&.map(&:first) ||
                    []
end

.upsourceObject

Source parameters from parent (fixes recursive dependency)



1559
1560
1561
1562
1563
1564
1565
1566
1567
# File 'lib/mmmd/blankshell.rb', line 1559

def upsource
  superclass&.tap do |sc|
    @scanner = sc.scanner
    @parser = sc.parser
    @unsorted_children = sc.unsorted_children.dup
    @unsorted_overlays = sc.unsorted_overlays.dup
  end
  sort_children
end

.valid_childrenArray<Class>

Get array of valid children sorted by priority

Returns:

  • (Array<Class>)


1578
1579
1580
1581
# File 'lib/mmmd/blankshell.rb', line 1578

def valid_children
  sort_children unless @valid_children
  @valid_children
end

.valid_overlaysArray<::PointBlank::Parsing::NullOverlay>

Get array of valid overlays sorted by priority



1571
1572
1573
1574
# File 'lib/mmmd/blankshell.rb', line 1571

def valid_overlays
  sort_overlays unless @valid_overlays
  @valid_overlays
end

Instance Method Details

#[](index) ⇒ DOMObject

Get element at position

Parameters:

  • index (Integer)

Returns:



1612
1613
1614
# File 'lib/mmmd/blankshell.rb', line 1612

def [](index)
  @children[index]
end

#[]=(index, element) ⇒ DOMObject

Set element at position

Parameters:

Returns:



1601
1602
1603
1604
1605
1606
1607
# File 'lib/mmmd/blankshell.rb', line 1601

def []=(index, element)
  unless element.is_a? ::PointBlank::DOM::DOMObject
    raise DOMError, "invalid DOM class #{element.class}"
  end

  @children[index] = element
end

#append_child(child) ⇒ Object

Append child

Parameters:



1638
1639
1640
1641
1642
1643
1644
1645
1646
# File 'lib/mmmd/blankshell.rb', line 1638

def append_child(child)
  unless child.is_a? ::PointBlank::DOM::DOMObject
    raise DOMError, "invalid DOM class #{child.class}"
  end

  child.parent = self
  child.position = @children.length
  @children.append(child)
end

#append_temp_child(child) ⇒ Object

Append temp child

Parameters:



1650
1651
1652
# File 'lib/mmmd/blankshell.rb', line 1650

def append_temp_child(child)
  @temp_children.append(child)
end

#childrenArray<DOMObject>

Return an array duplicate of all children

Returns:



1624
1625
1626
# File 'lib/mmmd/blankshell.rb', line 1624

def children
  @children.dup
end

#each(&block) ⇒ Object

Iterate over each child of DOMObject

Parameters:

  • block (#call)


1618
1619
1620
# File 'lib/mmmd/blankshell.rb', line 1618

def each(&block)
  @children.each(&block)
end

#root::PointBlank::DOM::DOMObject

Get root element containing this child



1630
1631
1632
1633
1634
# File 'lib/mmmd/blankshell.rb', line 1630

def root
  current_root = self
  current_root = current_root.parent while current_root.parent
  current_root
end