Diffs
HatenaSyntax/branches/fast/test/lib/HatenaSyntax/LineElement.php
@@ -0,0 +1,10 @@
+<?php
+include_once dirname(__FILE__) . '/../../t.php';
+
+$t = new lime_test;
+
+$p = HatenaSyntax_Locator::it()->lineElement;
+
+$c = PEG::context('a');
+
+$t->is($p->parse($c), 'a');
HatenaSyntax/branches/fast/test/lib/HatenaSyntax/Table.php
@@ -4,28 +4,28 @@
$t = new lime_test;
$p = new HatenaSyntax_Table(PEG::anything());
+
$c = PEG::context(array(
- '|a|b|',
+ '|*a|*b|',
'|c|d|'
));
$t->is(
$p->parse($c),
array(
- array(array(false, array('a')), array(false, array('b'))),
+ array(array('*', array('a')), array('*', array('b'))),
array(array(false, array('c')), array(false, array('d')))
)
);
$c = PEG::context(array(
- '|*a|*b|',
- '|c|d|'
+ '|a|'
));
$t->is(
$p->parse($c),
array(
- array(array('*', array('a')), array('*', array('b'))),
- array(array(false, array('c')), array(false, array('d')))
+ array(array(false, array('a')))
)
);
+
HatenaSyntax/branches/fast/lib/HatenaSyntax/LineElement.php
@@ -8,11 +8,14 @@
class HatenaSyntax_LineElement implements PEG_IParser
{
- protected $bracket, $footnote;
+ protected $table;
function __construct(PEG_IParser $bracket, PEG_IParser $footnote)
{
- list($this->bracket, $this->footnote) = func_get_args();
+ $this->table = array(
+ '[' => PEG::choice($bracket, PEG::anything()),
+ '(' => PEG::choice($footnote, PEG::anything())
+ );
}
function parse(PEG_IContext $context)
@@ -23,11 +26,11 @@
$char = $context->readElement();
- if ($char === '[') {
+ if ($char === '[' || $char === '(') {
$offset = $context->tell() - 1;
$context->seek($offset);
- $result = $this->bracket->parse($context);
+ $result = $this->table[$char]->parse($context);
if ($result instanceof PEG_Failure) {
$context->seek($offset + 1);
@@ -37,27 +40,6 @@
return $result;
}
- if ($context->eos()) {
- return $char;
- }
-
- $char .= $context->readElement();
-
- if ($char === '((') {
-
- $oldoffset = $context->tell() - 2;
- $context->seek($oldoffset);
-
- $result = $this->footnote->parse($context);
-
- if ($result instanceof PEG_Failure) {
- $context->seek($oldoffset + 2);
- return $char;
- }
-
- return $result;
- }
-
return $char;
}
}
HatenaSyntax/branches/fast/lib/HatenaSyntax/Locator.php
@@ -188,7 +188,9 @@
protected function createEmptyParagraph()
{
- return $this->nodeCreater('emptyparagraph', PEG::token(''));
+ $parser = PEG::count(PEG::many1(PEG::token('')));
+
+ return $this->nodeCreater('emptyparagraph', $parser);
}
protected function createBlock()
HatenaSyntax/branches/fast/lib/HatenaSyntax/Renderer.php
@@ -96,7 +96,7 @@
$level = $data['level'] + $this->config['headerlevel'];
$name = md5($this->config['id']) . '_header_' . $this->headerCount++;
$anchor = '<a name="' . $name . '" id="' . $name . '"></a>';
- return "<h{$level}>" . $anchor . $this->renderLineSegment($data['body']) . "</h{$level}>";
+ return "<h{$level}>" . $this->renderLineSegment($data['body']) . $anchor . "</h{$level}>";
}
protected function renderLineSegment(Array $data)
HatenaSyntax/branches/fast/lib/HatenaSyntax/TreeRenderer.php
@@ -62,7 +62,7 @@
$ret = '<li>' . PHP_EOL;
if ($node->hasValue()) $ret .= $this->renderValue($node->getValue());
$ordered = $this->isOrdered($node);
- $ret .= $this->listOpenTag($ordered);
+ $ret .= PHP_EOL . $this->listOpenTag($ordered);
foreach ($node->getChildren() as $child) {
$ret .= $this->_render($child);
}
@@ -73,6 +73,6 @@
protected function renderLeaf($node)
{
- return '<li>' . $this->renderValue($node->getValue()) . '</li>';
+ return '<li>' . $this->renderValue($node->getValue()) . '</li>' . PHP_EOL;
}
-}
\ ファイルの末尾に改行がありません
+}