Link do repozytorium: https://github.com/spartanPAGE/TreeStructInfoDSL
Słowem wstępu: uznałem, nie mając na koncie właściwie żadnego opensourcowego projektu, że warto sięgnąć po coś z forumowej półki - tak oto po drodze powstał TreeStructInfoDSL, jako swoisty dodatek do http://4programmers.net/Forum/Spolecznosc/Projekty/236454-treestructinfo_-_format_tekstowych_i_binarnych_plikow_konfiguracyjnych.
Na wstępie zaznaczając: na tyle DSL
, na ile pozwala na to pascal - koniec końców to tylko garstka funkcji
Po co DSL? Dokładnie mówiąc, na wypadek potrzeby tworzenia drzewek konfiguracyjnych z poziomu kodu.
Przykładowe drzewko:
Vanilla TreeStructInfo:
with TTSInfoTree.Create do
try
RenameTree('example');
WriteTreeComment('Example tree', '');
CreateAttribute('', False, 'attribute');
WriteString('attribute', 'normal attribute value');
WriteAttributeComment('attribute', 'normal comment', '', ctDeclaration);
CreateAttribute('', True, 'referenced attribute');
WriteString('referenced attribute', 'referenced attribute value');
WriteAttributeComment('referenced attribute', 'declaration comment', '', ctDeclaration);
WriteAttributeComment('referenced attribute', 'definition comment', '', ctDefinition);
CreateChildNode('', False, 'normal-node');
WriteChildNodeComment('normal-node', 'normal comment', '', ctDeclaration);
CreateChildNode('', True, 'referenced-node');
WriteChildNodeComment('referenced-node', 'declaration comment', '', ctDeclaration);
WriteChildNodeComment('referenced-node', 'definition comment', '', ctDefinition);
finally
ExportTreeToFile('vanilla-tsi.tsinfo');
Free;
end;
TreeStructInfoDSL:
with TreeStructInfo(
Name('example'),
Comment('Example tree'),
Nodes([
Node(
Name('normal-node'),
Comment('normal comment')),
RefNode(
Name('referenced-node'),
DeclarationComment('declaration comment'),
DefinitionComment('definition comment'))
]),
Attributes([
Attribute(
Name('attribute'),
Comment('normal comment'),
Content('normal attribute value')),
RefAttribute(
Name('referenced attribute'),
DeclarationComment('declaration comment'),
DefinitionComment('definition comment'),
Content('referenced attribute value'))
])
) do
begin
ExportTreeToFile('tsidsl.tsinfo');
Free;
end;
Plany na przyszłość (tj. jutro bądź kiedyśtam):
- zniesienie musu grupowania atrybutów i węzłów,
- użycie
OpenChildNode/CloseChildNode
do uzupełniania drzewa danymi (na ten moment używane są klejone ścieżki), - uzupełnienie docósw.
Z pascalem i jego ekosystemem mam małą styczność, dlatego jeżeli widzisz jakiś błąd w ogranizacji plików, formalnych wymagań czy czegokolwiek: powiedz :)
Po więcej zapraszam do samego repo.