From 5a6021599ad2d3f3bbc5ccef72535b3e5d6c1b81 Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Sun, 27 Jan 2008 18:50:36 +0000 Subject: [PATCH] [3.1.0] Add StringHashParser. git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1522 48356398-32a2-884e-a903-53898d9a118a --- extras/ConfigSchema/DirectiveParser.php | 10 --- extras/ConfigSchema/StringHashParser.php | 67 +++++++++++++++++++ tests/ConfigSchema/DirectiveParserTest.php | 7 -- .../StringHashParser/AppendMultiline.txt | 4 ++ .../ConfigSchema/StringHashParser/Default.txt | 1 + .../StringHashParser/OverrideSingle.txt | 2 + .../ConfigSchema/StringHashParser/Simple.txt | 5 ++ tests/ConfigSchema/StringHashParserTest.php | 53 +++++++++++++++ tests/test_files.php | 2 +- 9 files changed, 133 insertions(+), 18 deletions(-) delete mode 100644 extras/ConfigSchema/DirectiveParser.php create mode 100644 extras/ConfigSchema/StringHashParser.php delete mode 100644 tests/ConfigSchema/DirectiveParserTest.php create mode 100644 tests/ConfigSchema/StringHashParser/AppendMultiline.txt create mode 100644 tests/ConfigSchema/StringHashParser/Default.txt create mode 100644 tests/ConfigSchema/StringHashParser/OverrideSingle.txt create mode 100644 tests/ConfigSchema/StringHashParser/Simple.txt create mode 100644 tests/ConfigSchema/StringHashParserTest.php diff --git a/extras/ConfigSchema/DirectiveParser.php b/extras/ConfigSchema/DirectiveParser.php deleted file mode 100644 index 068c2bad..00000000 --- a/extras/ConfigSchema/DirectiveParser.php +++ /dev/null @@ -1,10 +0,0 @@ - 'DefaultKeyValue', + * 'KEY' => 'Value', + * 'KEY2' => 'Value2', + * 'MULTILINE-KEY' => "Multiline\nvalue.\n", + * ) + * + * We use this as an easy to use file-format for configuration schema + * files. + */ +class ConfigSchema_StringHashParser +{ + + public $default = 'ID'; + + public function parseFile($file) { + if (is_string($file)) $file = new FSTools_File($file); + if (!$file->exists()) throw new Exception('File does not exist'); + $file->open('r'); + $state = false; + $single = false; + $ret = array(); + while (($line = $file->getLine()) !== false) { + $line = rtrim($line, "\n\r"); + if (!$state && $line === '') continue; + if (strncmp('--', $line, 2) === 0) { + // Multiline declaration + $state = trim($line, '- '); + continue; + } elseif (!$state) { + $single = true; + if (strpos($line, ':') !== false) { + // Single-line declaration + list($state, $line) = explode(': ', $line, 2); + } else { + // Use default declaration + $state = $this->default; + } + } + if ($single) { + $ret[$state] = $line; + $single = false; + $state = false; + } else { + if (!isset($ret[$state])) $ret[$state] = ''; + $ret[$state] .= "$line\n"; + } + } + $file->close(); + return $ret; + } + +} diff --git a/tests/ConfigSchema/DirectiveParserTest.php b/tests/ConfigSchema/DirectiveParserTest.php deleted file mode 100644 index 933c123a..00000000 --- a/tests/ConfigSchema/DirectiveParserTest.php +++ /dev/null @@ -1,7 +0,0 @@ -parser = new ConfigSchema_StringHashParser(); + } + + /** + * Assert that $file gets parsed into the form of $expect + */ + function assertParse($file, $expect) { + $result = $this->parser->parseFile(dirname(__FILE__) . '/StringHashParser/' . $file); + $this->assertIdentical($result, $expect); + } + + function testSimple() { + $this->assertParse('Simple.txt', array( + 'ID' => 'Namespace.Directive', + 'TYPE' => 'string', + 'DESCRIPTION' => "Multiline\nstuff\n" + )); + } + + function testOverrideSingle() { + $this->assertParse('OverrideSingle.txt', array( + 'KEY' => 'New', + )); + } + + function testAppendMultiline() { + $this->assertParse('AppendMultiline.txt', array( + 'KEY' => "Line1\nLine2\n", + )); + } + + function testDefault() { + $this->parser->default = 'NEW-ID'; + $this->assertParse('Default.txt', array( + 'NEW-ID' => 'DefaultValue', + )); + } + +} diff --git a/tests/test_files.php b/tests/test_files.php index 91ccf672..dec38e1b 100644 --- a/tests/test_files.php +++ b/tests/test_files.php @@ -136,4 +136,4 @@ $test_files[] = 'FSTools/FileTest.php'; // ConfigSchema auxiliary library -$test_files[] = 'ConfigSchema/DirectiveParserTest.php'; +$test_files[] = 'ConfigSchema/StringHashParserTest.php';