powered by nequal
Home » HatenaSyntax » Timeline » 1565

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;
}
-}
\ ファイルの末尾に改行がありません
+}