puml2php / puml-parser
This package is abandoned and no longer maintained.
No replacement package was suggested.
This is a php parser for plantuml file.
v3.2.1
2022-04-30 02:54 UTC
Requires
- php: >=8
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^9.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Overview
This package builds AST of class definitions from plantuml files. This package works only with php.
Installation
Via Composer
composer require puml2php/puml-parser
Usage
sample PlantUML source file.
@startuml package Lexer { interface Tokenizeable package Lexer/Arrow { abstract class ArrowTokenizer implements Tokenizeable class LeftArrowTokenizer { + publicProperty : array # protectedProperty : string - privateProperty } } enum Enum { CASE1 CASE2 CASE3 } LeftArrowTokenizer--|>ArrowTokenizer NoneDefinitionClass ..|> Tokenizeable } @enduml
Basically, it is assumed that each class definition will be manipulated after it is converted to DTO.
<?php require_once __DIR__ . '/vendor/autoload.php'; use PumlParser\Lexer\Lexer; use PumlParser\Lexer\PumlTokenizer; use PumlParser\Parser\Parser; $lexer = new Lexer(PumlTokenizer::newInstance()); $parser = new Parser($lexer); $ast = $parser->parse(__DIR__ . '/sample.puml'); foreach ($ast->toDtos() as $definition) { echo "----------\n"; echo "name: " . $definition->getName() . "\n"; echo "package: " . $definition->getPackage() . "\n"; if ($definition->getType() === 'enum') { foreach ($definition->getCases() as $case) { echo "case: " . $case . "\n"; } } else { foreach ($definition->getProperties() as $property) { $propertyResult = "property name: " . $property->getName(); $propertyResult .= " , visibility: " . $property->getVisibility(); $propertyResult .= " , type: " . $property->getType(); echo $propertyResult . "\n"; } } }
$ php sample.php ---------- name: Tokenizeable package: Lexer ---------- name: ArrowTokenizer package: Lexer\Arrow ---------- name: LeftArrowTokenizer package: Lexer\Arrow property name: publicProperty , visibility: public , type: array property name: protectedProperty , visibility: protected , type: string property name: privateProperty , visibility: private , type: ---------- name: Enum package: Lexer case: CASE1 case: CASE2 case: CASE3 ---------- name: NoneDefinitionClass package: Lexer
Support for three parsing results. They are json, array, and Dto.
<?php use PumlParser\Lexer\Lexer; use PumlParser\Lexer\PumlTokenizer; use PumlParser\Parser\Parser; $lexer = new Lexer(PumlTokenizer::newInstance()); $parser = new Parser($lexer); $ast = $parser->parse(__DIR__ . '/sample.puml');
dump $ast->toDtos()
array(5) {
[0]=>
object(PumlParser\Dto\Definition)#69 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(12) "Tokenizeable"
["type":"PumlParser\Dto\Definition":private]=>
string(9) "interface"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
[1]=>
object(PumlParser\Dto\Definition)#72 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(14) "ArrowTokenizer"
["type":"PumlParser\Dto\Definition":private]=>
string(14) "abstract class"
["package":"PumlParser\Dto\Definition":private]=>
string(11) "Lexer\Arrow"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(1) {
[0]=>
object(PumlParser\Dto\Definition)#53 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(12) "Tokenizeable"
["type":"PumlParser\Dto\Definition":private]=>
string(9) "interface"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
}
}
[2]=>
object(PumlParser\Dto\Definition)#71 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(18) "LeftArrowTokenizer"
["type":"PumlParser\Dto\Definition":private]=>
string(5) "class"
["package":"PumlParser\Dto\Definition":private]=>
string(11) "Lexer\Arrow"
["properties":"PumlParser\Dto\Definition":private]=>
array(3) {
[0]=>
object(PumlParser\Dto\PropertyDefinition)#47 (3) {
["name":"PumlParser\Dto\PropertyDefinition":private]=>
string(14) "publicProperty"
["visibility":"PumlParser\Dto\PropertyDefinition":private]=>
string(6) "public"
["type":"PumlParser\Dto\PropertyDefinition":private]=>
string(5) "array"
}
[1]=>
object(PumlParser\Dto\PropertyDefinition)#9 (3) {
["name":"PumlParser\Dto\PropertyDefinition":private]=>
string(17) "protectedProperty"
["visibility":"PumlParser\Dto\PropertyDefinition":private]=>
string(9) "protected"
["type":"PumlParser\Dto\PropertyDefinition":private]=>
string(6) "string"
}
[2]=>
object(PumlParser\Dto\PropertyDefinition)#70 (3) {
["name":"PumlParser\Dto\PropertyDefinition":private]=>
string(15) "privateProperty"
["visibility":"PumlParser\Dto\PropertyDefinition":private]=>
string(7) "private"
["type":"PumlParser\Dto\PropertyDefinition":private]=>
string(0) ""
}
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(1) {
[0]=>
object(PumlParser\Dto\Definition)#65 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(14) "ArrowTokenizer"
["type":"PumlParser\Dto\Definition":private]=>
string(14) "abstract class"
["package":"PumlParser\Dto\Definition":private]=>
string(11) "Lexer\Arrow"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(1) {
[0]=>
object(PumlParser\Dto\Definition)#66 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(12) "Tokenizeable"
["type":"PumlParser\Dto\Definition":private]=>
string(9) "interface"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
}
}
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
[3]=>
object(PumlParser\Dto\Definition)#39 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(4) "Enum"
["type":"PumlParser\Dto\Definition":private]=>
string(4) "enum"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(3) {
[0]=>
string(5) "CASE1"
[1]=>
string(5) "CASE2"
[2]=>
string(5) "CASE3"
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
[4]=>
object(PumlParser\Dto\Definition)#67 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(19) "NoneDefinitionClass"
["type":"PumlParser\Dto\Definition":private]=>
string(5) "class"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(1) {
[0]=>
object(PumlParser\Dto\Definition)#61 (7) {
["name":"PumlParser\Dto\Definition":private]=>
string(12) "Tokenizeable"
["type":"PumlParser\Dto\Definition":private]=>
string(9) "interface"
["package":"PumlParser\Dto\Definition":private]=>
string(5) "Lexer"
["properties":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["cases":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["parents":"PumlParser\Dto\Definition":private]=>
array(0) {
}
["interfaces":"PumlParser\Dto\Definition":private]=>
array(0) {
}
}
}
}
}
dump $ast->toJson()
[
{
"interface": {
"Name": "Tokenizeable",
"Package": "Lexer",
"Propaties": [],
"Parents": [],
"Interfaces": []
}
},
{
"abstract class": {
"Name": "ArrowTokenizer",
"Package": "Lexer/Arrow",
"Propaties": [],
"Parents": [],
"Interfaces": [
{
"interface": {
"Name": "Tokenizeable",
"Package": "Lexer",
"Propaties": [],
"Parents": [],
"Interfaces": []
}
}
]
}
},
{
"class": {
"Name": "LeftArrowTokenizer",
"Package": "Lexer/Arrow",
"Propaties": [
{
"name": "publicProperty",
"visibility": "public",
"type": "array"
},
{
"name": "protectedProperty",
"visibility": "protected",
"type": "string"
},
{
"name": "privateProperty",
"visibility": "private",
"type": ""
}
],
"Parents": [
{
"abstract class": {
"Name": "ArrowTokenizer",
"Package": "Lexer/Arrow",
"Propaties": [],
"Parents": [],
"Interfaces": [
{
"interface": {
"Name": "Tokenizeable",
"Package": "Lexer",
"Propaties": [],
"Parents": [],
"Interfaces": []
}
}
]
}
}
],
"Interfaces": []
}
},
{
"enum": {
"Name": "Enum",
"Package": "Lexer",
"Cases": [
"CASE1",
"CASE2",
"CASE3"
],
"Parents": [],
"Interfaces": []
}
},
{
"class": {
"Name": "NoneDefinitionClass",
"Package": "Lexer",
"Propaties": [],
"Parents": [],
"Interfaces": [
{
"interface": {
"Name": "Tokenizeable",
"Package": "Lexer",
"Propaties": [],
"Parents": [],
"Interfaces": []
}
}
]
}
}
]
dump $ast->toArray()
array(5) {
[0]=>
array(1) {
["interface"]=>
array(5) {
["Name"]=>
string(12) "Tokenizeable"
["Package"]=>
string(5) "Lexer"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(0) {
}
}
}
[1]=>
array(1) {
["abstract class"]=>
array(5) {
["Name"]=>
string(14) "ArrowTokenizer"
["Package"]=>
string(11) "Lexer/Arrow"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(1) {
[0]=>
array(1) {
["interface"]=>
array(5) {
["Name"]=>
string(12) "Tokenizeable"
["Package"]=>
string(5) "Lexer"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(0) {
}
}
}
}
}
}
[2]=>
array(1) {
["class"]=>
array(5) {
["Name"]=>
string(18) "LeftArrowTokenizer"
["Package"]=>
string(11) "Lexer/Arrow"
["Propaties"]=>
array(3) {
[0]=>
array(3) {
["name"]=>
string(14) "publicProperty"
["visibility"]=>
string(6) "public"
["type"]=>
string(5) "array"
}
[1]=>
array(3) {
["name"]=>
string(17) "protectedProperty"
["visibility"]=>
string(9) "protected"
["type"]=>
string(6) "string"
}
[2]=>
array(3) {
["name"]=>
string(15) "privateProperty"
["visibility"]=>
string(7) "private"
["type"]=>
string(0) ""
}
}
["Parents"]=>
array(1) {
[0]=>
array(1) {
["abstract class"]=>
array(5) {
["Name"]=>
string(14) "ArrowTokenizer"
["Package"]=>
string(11) "Lexer/Arrow"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(1) {
[0]=>
array(1) {
["interface"]=>
array(5) {
["Name"]=>
string(12) "Tokenizeable"
["Package"]=>
string(5) "Lexer"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(0) {
}
}
}
}
}
}
}
["Interfaces"]=>
array(0) {
}
}
}
[3]=>
array(1) {
["enum"]=>
array(5) {
["Name"]=>
string(4) "Enum"
["Package"]=>
string(5) "Lexer"
["Cases"]=>
array(3) {
[0]=>
string(5) "CASE1"
[1]=>
string(5) "CASE2"
[2]=>
string(5) "CASE3"
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(0) {
}
}
}
[4]=>
array(1) {
["class"]=>
array(5) {
["Name"]=>
string(19) "NoneDefinitionClass"
["Package"]=>
string(5) "Lexer"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(1) {
[0]=>
array(1) {
["interface"]=>
array(5) {
["Name"]=>
string(12) "Tokenizeable"
["Package"]=>
string(5) "Lexer"
["Propaties"]=>
array(0) {
}
["Parents"]=>
array(0) {
}
["Interfaces"]=>
array(0) {
}
}
}
}
}
}
}
License
The MIT License (MIT). Please see LICENSE for more information.