source: applications/nimpad/trunk/lib/HatenaSyntax/Factory.php @ 1490

SVN
Revision 1490, 1.3 KB checked in by anatoo, 10 months ago (diff)

0.2ブランチのリビジョン1489,1488の変更をtrunkに取り込んだ

Line 
1<?php
2/**
3 * @package HatenaSyntax
4 * @author anatoo<anatoo@nequal.jp>
5 * @license http://www.opensource.org/licenses/mit-license.php MIT License
6 * @version $Id: Factory.php 1159 2009-09-06 09:43:29Z anatoo $
7 */
8
9class HatenaSyntax_Factory
10{
11    protected $locator;
12   
13    function __construct(HatenaSyntax_Locator $locator)
14    {
15        $this->locator = $locator;
16    }
17   
18    public function __get($name)
19    {
20        return strtolower($name) === 'locator' ? $this->locator : $this->locator->$name;
21    }
22   
23    function createLineElement(PEG_IParser $cond_parser = null)
24    {
25        $locator = $this->locator;
26       
27        $item = PEG::choice($locator->bracket, $locator->footnote, $locator->lineChar); 
28        $parser = is_null($cond_parser) ? $item : PEG::secondSeq(PEG::lookaheadNot($cond_parser), $item);
29                                       
30        return $parser;
31    }
32   
33    function createLineSegment(PEG_IParser $cond_parser, $optional = false)
34    {
35        $elt = $this->createLineElement($cond_parser);
36        $parser = $optional ? PEG::many($elt) : PEG::many1($elt);
37        return HatenaSyntax_Util::segment($parser);
38    }
39   
40    function createNodeCreater($type, PEG_IParser $parser, Array $keys = array())
41    {
42        return new HatenaSyntax_NodeCreater($type, $parser, $keys);
43    }
44}
Note: See TracBrowser for help on using the repository browser.