Development with Code Generation

From OpenPetra Wiki
Revision as of 20:45, 11 May 2022 by Pokorra (talk | contribs) (→‎Documentation YML for OpenPetra Forms)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search


  • In csharp/ICT/PetraTools
  • uses NRefactory to parse existing C# files (used to be done with CSParser)
  • write code:
    • can comment generated code
    • can insert regions with name ManualCode (need endregion ManualCode as well)
  • TODO: write into Templates
  • Plugin writers for different output (Winforms, GTK,
  • See detailed documentation for developers: Developing the Forms generator


YAML is a text file format that is shorter and easier to write and read than XML, but you can get the same structure than XML. This is achieved by not having opening and closing tags, but by using identation to define the hierarchy of elements. It is more friedly to read than XML, since it is less technical (no markup!).

  • Overview
  • Official specification
  • Parsers
    • see a parser for YAML:
    • For openPETRA we have developed our own converter from yaml to xml: project Ict.Tools.CodeGeneration, Yml2Xml.cs, Ict.Tools.CodeGeneration.Yml2Xml
      • Advantage: we can write short yaml code, but can use the comfort of the XML parser in .Net to walk through the hierarchy
      • yml2xml maps the YAML into XML

The idea for generating forms from yaml files has been taken eg. from this page:

YAML Syntax Highlighting in Notepad++ Editor

The Notepad++ Editor has built-in support for syntax highlighting of YAML files. However, it switches this feature on only if a YAML file has the file extension '.yml', but in openPETRA we use the file extension '.yaml' and so the syntax highlighting is not on by default for openPETRA YAML files.

See this wiki page section for instructions to turn syntax highlighting for openPETRA YAML files on.

openPETRA YAML syntax

Specific syntax is used in openPETRA for

  • defining the navigation menu hierarchy
nant generateORMCachedTables