示例#1
0
文件: Parser.php 项目: jstewmc/rtf
 /**
  * Parses a group-open token
  *
  * @param  Jstewmc\Rtf\Token\Group\Open  $token  the group-open token
  * @param  SplStack                      $stack  the group stack
  * @param  Jstewmc\Rtf\Element\Group     $root   the root group (optional; if 
  *     omitted, defaults to null)
  * @return  void
  * @since  0.1.0
  */
 protected function parseGroupOpen(Token\Group\Open $token, \SplStack $stack)
 {
     $group = new Element\Group();
     // if the group is not the root
     if ($stack->count() > 0) {
         // set the parent-child and child-parent relationships
         $group->setParent($stack->top());
         $stack->top()->appendChild($group);
     }
     $stack->push($group);
     return;
 }
示例#2
0
 /**
  * parse() should parse a small document
  */
 public function testParse_parsesDocumentSmall()
 {
     $tokens = [new Token\Group\Open(), new Token\Control\Word('rtf', 1), new Token\Control\Word('ansi'), new Token\Control\Word('deff', 0), new Token\Group\Open(), new Token\Control\Word('fonttbl'), new Token\Group\Open(), new Token\Control\Word('f', 0), new Token\Control\Word('fnil'), new Token\Control\Word('fcharset', 0), new Token\Text('Courier New;'), new Token\Group\Close(), new Token\Group\Close(), new Token\Group\Open(), new Token\Control\Symbol('*'), new Token\Control\Word('generator'), new Token\Text('Msftedit 5.41.15.1516;'), new Token\Group\Close(), new Token\Control\Word('viewkind', 4), new Token\Control\Word('uc', 1), new Token\Control\Word('pard'), new Token\Control\Word('lang', 1033), new Token\Control\Word('f', 0), new Token\Control\Word('fs', 20), new Token\Text('My dog is not like other dogs.'), new Token\Control\Word('par'), new Token\Text('He doesn\'t care to walk, '), new Token\Control\Word('par'), new Token\Text('He doesn\'t bark, he doesn\'t howl.'), new Token\Control\Word('par'), new Token\Text('He goes "Tick, tock. Tick, tock."'), new Token\Control\Word('par'), new Token\Group\Close()];
     $parser = new Parser();
     $root = $parser->parse($tokens);
     // create the expected elements in order...
     $groupA = new Element\Group();
     $a_1 = new Element\Control\Word\Word();
     $a_1->setWord('rtf');
     $a_1->setParameter(1);
     $a_1->setParent($groupA);
     $a_2 = new Element\Control\Word\Word();
     $a_2->setWord('ansi');
     $a_2->setParent($groupA);
     $a_3 = new Element\Control\Word\Word();
     $a_3->setWord('deff');
     $a_3->setParameter(0);
     $a_3->setParent($groupA);
     $groupB = new Element\Group();
     $groupB->setParent($groupA);
     $b_1 = new Element\Control\Word\Word();
     $b_1->setWord('fonttbl');
     $b_1->setParent($groupB);
     $groupC = new Element\Group();
     $groupC->setParent($groupB);
     $c_1 = new Element\Control\Word\Word();
     $c_1->setWord('f');
     $c_1->setParameter(0);
     $c_1->setParent($groupC);
     $c_2 = new Element\Control\Word\Word();
     $c_2->setWord('fnil');
     $c_2->setParent($groupC);
     $c_3 = new Element\Control\Word\Word();
     $c_3->setWord('fcharset');
     $c_3->setParameter(0);
     $c_3->setParent($groupC);
     $c_4 = new Element\Text('Courier New;');
     $c_4->setParent($groupC);
     $groupD = new Element\Group();
     $groupD->setParent($groupA);
     $d_1 = new Element\Control\Symbol\Asterisk();
     $d_1->setParent($groupD);
     $d_2 = new Element\Control\Word\Word();
     $d_2->setWord('generator');
     $d_2->setParent($groupD);
     $d_3 = new Element\Text('Msftedit 5.41.15.1516;');
     $d_3->setParent($groupD);
     // back to a
     $a_4 = new Element\Control\Word\Word();
     $a_4->setWord('viewkind');
     $a_4->setParameter(4);
     $a_4->setParent($groupA);
     $a_5 = new Element\Control\Word\Word();
     $a_5->setWord('uc');
     $a_5->setParameter(1);
     $a_5->setParent($groupA);
     $a_6 = new Element\Control\Word\Pard();
     $a_6->setParent($groupA);
     $a_7 = new Element\Control\Word\Word();
     $a_7->setWord('lang');
     $a_7->setParameter(1033);
     $a_7->setParent($groupA);
     $a_8 = new Element\Control\Word\Word();
     $a_8->setWord('f');
     $a_8->setParameter(0);
     $a_8->setParent($groupA);
     $a_9 = new Element\Control\Word\Word();
     $a_9->setWord('fs');
     $a_9->setParameter(20);
     $a_9->setParent($groupA);
     $a_10 = new Element\Text('My dog is not like other dogs.');
     $a_10->setParent($groupA);
     $a_11 = new Element\Control\Word\Par();
     $a_11->setParent($groupA);
     $a_12 = new Element\Text('He doesn\'t care to walk, ');
     $a_12->setParent($groupA);
     $a_13 = new Element\Control\Word\Par();
     $a_13->setParent($groupA);
     $a_14 = new Element\Text('He doesn\'t bark, he doesn\'t howl.');
     $a_14->setParent($groupA);
     $a_15 = new Element\Control\Word\Par();
     $a_15->setParent($groupA);
     $a_16 = new Element\Text('He goes "Tick, tock. Tick, tock."');
     $a_16->setParent($groupA);
     $a_17 = new Element\Control\Word\Par();
     $a_17->setParent($groupA);
     // now, set the relationships...
     $groupD->appendChild($d_1)->appendChild($d_2)->appendChild($d_3);
     $groupC->appendChild($c_1)->appendChild($c_2)->appendChild($c_3)->appendChild($c_4);
     $groupB->appendChild($b_1)->appendChild($groupC);
     $groupA->appendChild($a_1)->appendChild($a_2)->appendChild($a_3)->appendChild($groupB)->appendChild($groupD)->appendChild($a_4)->appendChild($a_5)->appendChild($a_6)->appendChild($a_7)->appendChild($a_8)->appendChild($a_9)->appendChild($a_10)->appendChild($a_11)->appendChild($a_12)->appendChild($a_13)->appendChild($a_14)->appendChild($a_15)->appendChild($a_16)->appendChild($a_17);
     // phew!
     $this->assertEquals($groupA, $root);
     return;
 }