Repository navigation
Home
An enigma2 skin is natively just a flat XML file: no includes, no macros, no relative positioning, no variables, no reuse. If you maintain more than one plugin and want a consistent look — or want to change a button style in one place instead of in every skin.xml that copy-pasted it — you're stuck hand-editing pixel coordinates in N files at once.
Modern enigma2 distributions add some more advanced features like includes, templates, panels. But those only provide limited support for hierarchical design with reusable building blocks. As those skin elements are rendered directly on the box on the fly, those shortcomings were probably required due to limited box processing power. This can be avoided by using an offline skin compiler.
SkinForge doesn't change what enigma2 itself understands — it compiles a richer source down to the plain, flat XML enigma2 actually loads.
- XML — the original flat XML language enigma2 itself understands; nothing to compile since it already is the target format.
-
XML+ — the enhanced hierarchical XML dialect (includes, variables, relative positioning, compile-time color/formula checking) compiled end-to-end to XML with
xmlcompile. See The XML+ compiler. -
YAML — a readable YAML dialect (
skin.yml/*.ymlinc) that losslessly round-trips to/from XML+, compiled end-to-end withymlcompile. Editors like Notepad++ allow to edit YAML sources conveniently. See Authoring in YAML. -
ZAML (Zenith Advanced Markup Language) — an optional thin layer on top of YAML that adds a
forloop, for the common case of a screen repeating the same block N times with an index. Its source expands to plain YAML before anything else runs, compiled end-to-end withzmlcompile. See Authoring in ZAML.
The latter three (XML+, YAML, ZAML) share the same compiler and the same Common directory of reusable building blocks (buttons, title bars, colors, ...) — ZAML expands to YAML, which is simply converted to XML+, then compiled the same way.
flowchart TD
ZML[".zml / .zmlinc<br/>ZAML source"] -->|zml2ymldomain| YML
YML[".yml / .ymlinc<br/>YAML source"] -->|"yml2xmldomain (.yml only)"| XMLP
YML -.->|"on demand, temp .xmlinc"| FLAT
HAND["hand-written XML+"] -.-> XMLP
XMLP[".xml / .xmlinc<br/>XML+ source"] -->|"xmlprettydomain, then xmlinc"| FLAT
COMMON[("Common/<br/>shared building blocks")] -.->|resolved by xmlinc| FLAT
FLAT["flat XML<br/>compiled, unformatted"] -->|xmlpretty| FINAL(["skin.xml<br/>what enigma2 loads"])
| Page | Content |
|---|---|
| Getting started | Installation, the zmlcompile command and how .xmlinc files are generated on demand |
| ZAML & YAML skin example | One complete screen in ZAML and YAML, and the layout graphic generated during compile |
| Authoring in YAML | The YAML dialect: tools, mapping from XML, the <convert> template notation and formatting conventions |
| Authoring in ZAML | The for loop and the zmlcompile command |
| The XML+ compiler |
xmlinc: includes, $vars, relative positioning, colors, defaults, formulas and checks |
| Other tools |
xmlscale, xmlmerge, xmlpretty, xmlsplit, svgscale, svgscaledir
|