lastwhitebird/lgml-parser
Composer 安装命令:
composer require lastwhitebird/lgml-parser
包简介
Configuration parser custom indented config file format (like YAML, python etc.)
README 文档
README
Configuration parser custom indented config file format (like YAML, python etc.)
Code Example
PHP:
use \LWB\LGMLParser\Tree as Tree; $tree = Tree::factoryFromFile('tree.lgml'); //serialization file_put_contents('tree.json', $tree->toJSON()); //accessing tree nodes if (isset($tree['domains'][0])) foreach ($tree['domains'][0] as $domain) $domains[$domain['@!element']] = $domain['@'];
tree.lgml
/*...config sample*/
domains
year, type dateTime,
validator "digits_between:4,4"
date, type dateTime
tables
admin_rights, timestamps, softdeletes,
section "user"
columns
key, type string, title "Key (in the form of: latin_letters)"
name, type string, title "Readable name"
rows
row
key. process_complain_cancel
name. Processing cancelling payment on customer complain
and more!
Motivation
This component is made just to make life better: tabs, dots and commas are more easy to type in. Even in Russian keyboard layout or whatever u want.
God bless Hamish Friedlander and SilverStripe Limited for the php-peg parser.
Installation
composer require lastwhitebird/lgml-parser
API Reference
The main class:
namespace LWB\LGMLParser; class Tree { use Tree\Quotes; /* 2 helper methods. dunno, they must be in the Basic class probably */ public static function textNode($text); public static function node($element, $attributes = []) /* serialize methods */ public function __toString() public function toXML($filename, $quote_function = false, $quote_attribute_function = false) public function toJSON() /* factory methods */ public static function factoryFromJSON($string, array $options = []) public static function factoryFromFile($filename, array $options = []) public static function factoryFromString($string, array $options = []) public function fromJSON($string) public function fromFile($filename) /* the basic "read" method. You may use it with the generator yielding each line with no \r\n-s * (working with sockets or whatever */ public function fromGenerator($generator)
Parent class:
namespace LWB\LGMLParser\Tree; class Configurable extends Basic { /* yes, it's public. you may use it directly */ public $options; /* all the methods are self-documenting */ public function __construct(array $options = []) {} public function setOption($name, $value) {} /* this 2 methods return $this */ public function setOptions(array $options) {} public function getOption($name) {} }
Helper functions:
namespace LWB\LGMLParser\Tree; trait Quotes { /* this un-escapes \" and \\ */ public static function unEscapeDoubleQuotes($string) {} /* this un-escapes \' and \\ */ public static function unEscapeSingleQuotes($string) {} /*this surrounds with proper quotes pair the 1st argument in k=>v pair of the * markup language, i.e. element's or attribute's name if needed */ public static function quoteProperly1($string) {} /* this surrounds with proper quotes pair the 2nd argument in k=>v pair of the * markup language, i.e. attribute's value if needed */ public static function quoteProperly2($string) {} /* adds indentation ($level spaces) to each every-but-1st line of the multiline string. * if $first===true adds the same spaces to the 1st line. * or $first*spaces if $first is not false */ public static function addIndent($level, $string, $first = false) {} /* converts tabs to spaces (by default tab=4*space. use ->setOption('tabs') method * to overrride */ private function normalizeTabs($string) {} }
Basic class. Implements \Iterator, \ArrayAccess, \Countable
namespace LWB\LGMLParser\Tree; class Basic { /* the tree data structure itself */ public $tree = null; /* this allows us to iterate only certain kind of nodes, i.e. "table" */ public $filter = false; /* "factory" method */ public static function factoryFromTree(array &$tree, $filter = false) {} /* Iterating in foreach operator section */ function rewind() {} function current() {} function key() {} function next() {} function valid() {} /* this allows us to get count($tree_instance) */ public function count() {} /* check if tree_as_array's offset exists e.g.: isset($tree_object['table']) */ public function offsetExists($offset) {} /* treating tree as array e.g.: $tree_object['table'][0] */ public function offsetGet($offset) {} }
Tests
cd vendor\lastwhitebird\lgml-parser\tests
php runtest.php
License
This library is licensed under LGPL v2.1
lastwhitebird/lgml-parser 适用场景与选型建议
lastwhitebird/lgml-parser 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 117 次下载、GitHub Stars 达 1, 最近一次更新时间为 2016 年 11 月 02 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 lastwhitebird/lgml-parser 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 lastwhitebird/lgml-parser 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 117
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: LGPL-2.1
- 更新时间: 2016-11-02