1. Go to this page and download the library: Download phug/reader library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
phug / reader example snippets
$code = 'someString = "some string"';
$reader = new Reader($code);
$identifier = $reader->readIdentifier();
if ($identifier === null) {
throw new Exception("Failed to read: Identifier expected");
}
var_dump($identifier); //`someString`
$reader->readSpaces();
if (!$reader->peekChar('=')) {
throw new Exception("Failed to read: Assignment expected");
}
//Consume the result, since we're `peek`ing, not `read`ing.
$reader->consume();
$reader->readSpaces();
$string = $reader->readString();
if ($string === null) {
throw new Exception("Failed to read: Expected string");
}
var_dump($string); //`some string`
echo "Set `$identifier` to `$string`"; //Set `someString` to `some string`
use Phug\Reader;
//Some C-style example code
$code = 'someVar = {a, "this is a string (really, it \"is\")", func(b, c), d}';
$reader = new Reader($code);
$tokens = [];
$blockLevel = 0;
$expressionLevel = 0;
while ($reader->hasLength()) {
//Skip spaces of any kind.
$reader->readSpaces();
//Scan for identifiers
if ($identifier = $reader->readIdentifier()) {
$tokens[] = ['type' => 'identifier', 'name' => $identifier];
continue;
}
//Scan for Assignments
if ($reader->peekChar('=')) {
$reader->consume();
$tokens[] = ['type' => 'assignment'];
continue;
}
//Scan for strings
if (($string = $reader->readString()) !== null) {
$tokens[] = ['type' => 'string', 'value' => $string];
continue;
}
//Scan block start
if ($reader->peekChar('{')) {
$reader->consume();
$blockLevel++;
$tokens[] = ['type' => 'blockStart'];
continue;
}
//Scan block end
if ($reader->peekChar('}')) {
$reader->consume();
$blockLevel--;
$tokens[] = ['type' => 'blockEnd'];
continue;
}
//Scan parenthesis start
if ($reader->peekChar('(')) {
$reader->consume();
$expressionLevel++;
$tokens[] = ['type' => 'listStart'];
continue;
}
//Scan parenthesis end
if ($reader->peekChar(')')) {
$reader->consume();
$expressionLevel--;
$tokens[] = ['type' => 'listEnd'];
continue;
}
//Scan comma
if ($reader->peekChar(',')) {
$reader->consume();
$tokens[] = ['type' => 'next'];
continue;
}
throw new \Exception(
"Unexpected ".$reader->peek(10)
);
}
if ($blockLevel || $expressionLevel)
throw new \Exception("Unclosed bracket encountered");
var_dump($tokens);
/* Output:
[
['type' => 'identifier', 'name' => 'someVar'],
['type' => 'assignment'],
['type' => 'blockStart'],
['type' => 'identifier', 'name' => 'a'],
['type' => 'next'],
['type' => 'string', 'value' => 'this is a string (really, it "is")'],
['type' => 'next'],
['type' => 'identifier', 'name' => 'func'],
['type' => 'listStart'],
['type' => 'identifier', 'name' => 'b'],
['type' => 'next'],
['type' => 'identifier', 'name' => 'c'],
['type' => 'listEnd'],
['type' => 'next'],
['type' => 'identifier', 'name' => 'd'],
['type' => 'blockEnd']
]
*/
//Scan Identifier ("a")
$identifier = $reader->readIdentifier();
$attributes = [];
//Enter an attribute block if available
if ($reader->peekChar('(')) {
$reader->consume();
while ($reader->hasLength()) {
//Ignore spaces
$reader->readSpaces();
//Scan the attribute name
if (!($name = $this->readIdentifier())) {
throw new \Exception("Attributes need a name!");
}
//Ignore spaces
$reader->readSpaces();
//Make sure there's a =-character
if (!$reader->peekChar('=')) {
throw new \Exception("Failed to read: Expected attribute value");
}
$reader->consume();
//Ignore spaces
$reader->readSpaces();
//Read the expression until , or ) is encountered
//It will ignore , and ) inside any kind of brackets and count brackets correctly until we actually
//reached the end-bracket
$value = $reader->readExpression([',', ')']);
//Add the attribute to our attribute array
$attributes[$name] = $value;
//If we don't encounter a , to go on, we break the loop
if (!$reader->peekChar(',')) {
break;
}
//Else we consume the , and continue our attribute parsing
$reader->consume();
}
//Now make sure we actually closed our attribute block correctly.
if (!$reader->peekChar(')')) {
throw new \Exception("Failed to read: Expected closing bracket");
}
}
$element = ['identifier' => $identifier, 'attributes' => $attributes];
var_dump($element);
/* Output:
[
'identifier' => 'a',
'attributes' => [
'href' => 'getUri(\'/abc\', true)',
'title' => '(title ? title : \'Sorry, no title.\')'
]
]
*/
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.