| Artifact ID: | 1fcd17103c964e32d8ea62086e34348859a128f7433268799b7446ea57ca56fd |
|---|---|
| Page Name: | config |
| Date: | 2018-07-03 21:06:57 |
| Original User: | mario |
| Mimetype: | text/x-markdown |
| Parent: | ce43c2d73a795f090b4d40ac639aee519698d306eacde1c8e55f7a899ebcc00c (diff) |
| Next | 8ed4eaef0b3a15fb7a2781e1b2ce6e448b6617ea75084678796dc50b9fb8ddad |
# config: {…}
The config: field is a list of entries describing feature- and
application-level settings.
# config:
# { name: linky, type: bool, description: autolink urls }
# { name: xy.title, type: str, value: "blog title" }
# { name: perm, type: select, select: 3=USER|2=EX|1=SUP|0=KERN }
PMD is about uniform feature lookup. And plugin handling goes hand in hand with configuration management. However it requires a structured field to avoid bulky definitions, yet support enough variation.
Usually config: contains multiple indented lines, each being a
JSOL-dictionary.
{
name: |
associates some variable/constant/expression to a setting. | ||||||||
|---|---|---|---|---|---|---|---|---|---|
type: |
A few common types may cover 90% of configuration needs.
|
||||||||
select:
| * With select: "aaa┃bbb┃ccc" being the alternatives attribute for
combobox options. |
||||||||
description: |
holds some elaboration on the key name. | ||||||||
value: |
just sets a default |
}
Storage and key name:
Notably this scheme just defines a list of available options. It does not
prescribe if they're stored in an .ini, .json, xml or code file, or a database
perhaps.
Applications might utilize different stores even, and dispatch depending on
the name: syntax
- For example
name: ALL_UPPERCASEmight become a code constant, - While
name: sectioned.feature.optionindicated an INI setting, - Or
name: "$cfg.plugins[after][]"even a literal code target.
So names can be somewhat free-form. I'd avoid including the $ sigil
however, or spaces obviously. Mostly-alphunumeric and dotted keys are
certainly most versatile.
select: type and alternatives
The syntax for select: is
- preferrably
"alt|alt|alt" - or with optional title
"1=title|2=alternative|3=…". - Though implementations may allow to use
,comma and|dash. - Or
:like=again.
Other fields and types
Other per-config attributes migh encompass
category:andclass:for decoration or grouping.- Or
arg:andparam:for defining commandline args rather than global application settings.
Other types might be
textfor lengthy textarea-style strings),colorfor a color picker,filebringing up a file selection dialog- Or
table/csv/dictfor supporting more complex (Excel-style) setting lists.
Regex tokenizer
You can get by with a somewhat simple regex extractor for this config
scheme. It's simply finding {…} pairs, then splitting key-value pairs,
and handling optional quoting.
Which allows syntax alternatives
[:=>]+for key-value pairs.Same as shortened/aliased type names add some user-friendliness.
Of course a stringent JSON-parser could be used. But that's obstructing maintanability, and buys little performance-wise. (Plugin or option management is rarely done during runtime; but confined to some admin or installer UI.)
Purpose
Once config options are easily parseable, it quickly pays off to implement a centralized option/admin UI. And it sometimes can be combined with plugin configuration itself. Which is why plugin meta data defines this simple scheme.