classDiagram
direction LR
class ObjText{
}
class ObjTextDataimageObjProcessText{
}
ObjText <.. ObjTextDataimageObjProcessText :Composition
class ObjTextHighlightScriptObjProcessText{
}
ObjText <.. ObjTextHighlightScriptObjProcessText :Composition
class ObjTextReportshotObjProcessText{
}
ObjText <.. ObjTextReportshotObjProcessText :Composition
class ObjTextTimeagoObjProcessText{
}
ObjText <.. ObjTextTimeagoObjProcessText :Composition
class ObjTextDownloadXlsxObjProcessText{
}
ObjText <.. ObjTextDownloadXlsxObjProcessText :Composition
class ObjTextQRImageObjProcessText{
}
ObjText <.. ObjTextQRImageObjProcessText :Composition
class PackageHomechoice{
<<Interface>> PackageHomechoice
+factory()
}
ObjText <|-- PackageHomechoice : Inheritance
class ObjTextTimeagoPyObjProcessText{
}
ObjText <.. ObjTextTimeagoPyObjProcessText :Composition
class ObjTextDictObjProcessText{
}
ObjText <.. ObjTextDictObjProcessText :Composition
class ObjTextNPERObjProcessText{
}
ObjText <.. ObjTextNPERObjProcessText :Composition
class ObjTextEncryptObjProcessText{
}
ObjText <.. ObjTextEncryptObjProcessText :Composition
class ObjTextLinkObjProcessText{
}
ObjText <.. ObjTextLinkObjProcessText :Composition
class ObjTextPVObjProcessText{
}
ObjText <.. ObjTextPVObjProcessText :Composition
class ObjTextImageObjProcessText{
}
ObjText <.. ObjTextImageObjProcessText :Composition
class ObjTextReportpdfObjProcessText{
}
ObjText <.. ObjTextReportpdfObjProcessText :Composition
class ObjTextIframeObjProcessText{
}
ObjText <.. ObjTextIframeObjProcessText :Composition
class ObjTextDecryptObjProcessText{
}
ObjText <.. ObjTextDecryptObjProcessText :Composition
class ObjTextModalObjProcessText{
}
ObjText <.. ObjTextModalObjProcessText :Composition
class ObjTextRATEObjProcessText{
}
ObjText <.. ObjTextRATEObjProcessText :Composition
class ObjTextXmlToSqlObjProcessText{
}
ObjText <.. ObjTextXmlToSqlObjProcessText :Composition
class ObjTextPrintcurrencyObjProcessText{
}
ObjText <.. ObjTextPrintcurrencyObjProcessText :Composition
class ObjTextCode128ObjProcessText{
}
ObjText <.. ObjTextCode128ObjProcessText :Composition
class PackageIntelect{
<<Interface>> PackageIntelect
+factory()
}
ObjText <|-- PackageIntelect : Inheritance
class ObjTextFixmobileObjProcessText{
}
PackageIntelect <.. ObjTextFixmobileObjProcessText :Composition
class ObjTextDocimageObjProcessText{
}
ObjText <.. ObjTextDocimageObjProcessText :Composition
class ObjTextTimeListToHumanObjProcessText{
}
ObjText <.. ObjTextTimeListToHumanObjProcessText :Composition
class ObjTextPanelObjProcessText{
}
ObjText <.. ObjTextPanelObjProcessText :Composition
class ObjTextQuerybuilderObjProcessText{
}
ObjText <.. ObjTextQuerybuilderObjProcessText :Composition
class ObjTextHighlightSqlObjProcessText{
}
ObjText <.. ObjTextHighlightSqlObjProcessText :Composition
class ObjTextKnobObjProcessText{
}
ObjText <.. ObjTextKnobObjProcessText :Composition
class ObjTextProductObjProcessText{
}
ObjText <.. ObjTextProductObjProcessText :Composition
class ObjTextNotationObjProcessText{
}
ObjText <.. ObjTextNotationObjProcessText :Composition
class ObjTextLookupObjProcessText{
}
ObjText <.. ObjTextLookupObjProcessText :Composition
class ObjTextEmojiObjProcessText{
}
ObjText <.. ObjTextEmojiObjProcessText :Composition
class PackageSystem{
<<Interface>> PackageSystem
+factory()
}
ObjText <|-- PackageSystem : Inheritance
class ObjTextAvatarObjProcessText{
}
PackageSystem <.. ObjTextAvatarObjProcessText :Composition
class ObjTextEscapeObjProcessText{
}
ObjText <.. ObjTextEscapeObjProcessText :Composition
class ObjTextSplittextObjProcessText{
}
ObjText <.. ObjTextSplittextObjProcessText :Composition
class ObjTextListObjProcessText{
}
ObjText <.. ObjTextListObjProcessText :Composition
class PackageFullhouse{
<<Interface>> PackageFullhouse
+factory()
}
ObjText <|-- PackageFullhouse : Inheritance
class ObjTextFHInstalmentObjProcessText{
}
PackageFullhouse <.. ObjTextFHInstalmentObjProcessText :Composition
class ObjTextPaymentlinkObjProcessText{
}
PackageFullhouse <.. ObjTextPaymentlinkObjProcessText :Composition
class ObjTextFHFeaturesObjProcessText{
}
PackageFullhouse <.. ObjTextFHFeaturesObjProcessText :Composition
class ObjTextFHDescriptionObjProcessText{
}
PackageFullhouse <.. ObjTextFHDescriptionObjProcessText :Composition
class ObjTextTUPdfDecodeObjProcessText{
}
PackageFullhouse <.. ObjTextTUPdfDecodeObjProcessText :Composition
class ObjTextFHDeletePimsImageObjProcessText{
}
PackageFullhouse <.. ObjTextFHDeletePimsImageObjProcessText :Composition
class ObjTextQueryfullObjProcessText{
}
ObjText <.. ObjTextQueryfullObjProcessText :Composition
class ObjTextJsonObjProcessText{
}
ObjText <.. ObjTextJsonObjProcessText :Composition
class ObjTextGaugeObjProcessText{
}
ObjText <.. ObjTextGaugeObjProcessText :Composition
class ObjTextHighlight64ObjProcessText{
}
ObjText <.. ObjTextHighlight64ObjProcessText :Composition
class ObjTextFacebookObjProcessText{
}
ObjText <.. ObjTextFacebookObjProcessText :Composition
class PackageCore{
<<Interface>> PackageCore
+factory()
}
ObjText <|-- PackageCore : Inheritance
class ObjTextMultiplyObjProcessText{
}
PackageCore <.. ObjTextMultiplyObjProcessText :Composition
class ObjTextCalloutObjProcessText{
}
PackageCore <.. ObjTextCalloutObjProcessText :Composition
class ObjTextTelObjProcessText{
}
PackageCore <.. ObjTextTelObjProcessText :Composition
class ObjTextEmailObjProcessText{
}
PackageCore <.. ObjTextEmailObjProcessText :Composition
class ObjTextIfObjProcessText{
}
PackageCore <.. ObjTextIfObjProcessText :Composition
class ObjTextBadgeObjProcessText{
}
PackageCore <.. ObjTextBadgeObjProcessText :Composition
class ObjTextCurrencyObjProcessText{
}
PackageCore <.. ObjTextCurrencyObjProcessText :Composition
class ObjTextGitdateObjProcessText{
}
PackageCore <.. ObjTextGitdateObjProcessText :Composition
class ObjTextReportObjProcessText{
}
PackageCore <.. ObjTextReportObjProcessText :Composition
class ObjTextCalculationObjProcessText{
}
PackageCore <.. ObjTextCalculationObjProcessText :Composition
class ObjTextBigavatarObjProcessText{
}
PackageCore <.. ObjTextBigavatarObjProcessText :Composition
class ObjTextGitbranchObjProcessText{
}
PackageCore <.. ObjTextGitbranchObjProcessText :Composition
class ObjTextButtonObjProcessText{
}
PackageCore <.. ObjTextButtonObjProcessText :Composition
class ObjTextPriceObjProcessText{
}
ObjText <.. ObjTextPriceObjProcessText :Composition
class ObjTextQRObjProcessText{
}
ObjText <.. ObjTextQRObjProcessText :Composition
class ObjTextQueryObjProcessText{
}
ObjText <.. ObjTextQueryObjProcessText :Composition
class ObjTextGitdateObjProcessText{
}
ObjText <.. ObjTextGitdateObjProcessText :Composition
class ObjTextReportpdfLocalObjProcessText{
}
ObjText <.. ObjTextReportpdfLocalObjProcessText :Composition
class ObjTextRenderJsonObjProcessText{
}
ObjText <.. ObjTextRenderJsonObjProcessText :Composition
class ObjTextScreenshotObjProcessText{
}
ObjText <.. ObjTextScreenshotObjProcessText :Composition
class ObjTextInitialsObjProcessText{
}
ObjText <.. ObjTextInitialsObjProcessText :Composition
class ObjTextTexttosqlinObjProcessText{
}
ObjText <.. ObjTextTexttosqlinObjProcessText :Composition
class PackageReference{
<<Interface>> PackageReference
+factory()
}
ObjText <|-- PackageReference : Inheritance
class ObjTextShowPdfObjProcessText{
}
ObjText <.. ObjTextShowPdfObjProcessText :Composition
class ObjTextProperObjProcessText{
}
ObjText <.. ObjTextProperObjProcessText :Composition
class ObjTextBannerObjProcessText{
}
ObjText <.. ObjTextBannerObjProcessText :Composition
class ObjTextUserObjProcessText{
}
ObjText <.. ObjTextUserObjProcessText :Composition
class ObjTextMermaidObjProcessText{
}
ObjText <.. ObjTextMermaidObjProcessText :Composition
class ObjTextTiltObjProcessText{
}
ObjText <.. ObjTextTiltObjProcessText :Composition
class ObjTextMapsObjProcessText{
}
ObjText <.. ObjTextMapsObjProcessText :Composition
class ObjTextCalculationObjProcessText{
}
ObjText <.. ObjTextCalculationObjProcessText :Composition
class ObjTextSqlHighlightObjProcessText{
}
ObjText <.. ObjTextSqlHighlightObjProcessText :Composition
class ObjTextDociconObjProcessText{
}
ObjText <.. ObjTextDociconObjProcessText :Composition
class ObjTextMp3PlayerObjProcessText{
}
ObjText <.. ObjTextMp3PlayerObjProcessText :Composition
class ObjTextYoutubeObjProcessText{
}
ObjText <.. ObjTextYoutubeObjProcessText :Composition
class ObjTextHighlightJsonObjProcessText{
}
ObjText <.. ObjTextHighlightJsonObjProcessText :Composition
class ObjTextLinuxcmdObjProcessText{
}
ObjText <.. ObjTextLinuxcmdObjProcessText :Composition
class ObjTextPMTObjProcessText{
}
ObjText <.. ObjTextPMTObjProcessText :Composition
class ObjTextGitbranchObjProcessText{
}
ObjText <.. ObjTextGitbranchObjProcessText :Composition
class ObjTextPublishObjProcessText{
}
ObjText <.. ObjTextPublishObjProcessText :Composition
class ObjTextHelpupObjProcessText{
}
ObjText <.. ObjTextHelpupObjProcessText :Composition
class PackageTechnocore{
<<Interface>> PackageTechnocore
+factory()
}
ObjText <|-- PackageTechnocore : Inheritance
class ObjTextFlagObjProcessText{
}
ObjText <.. ObjTextFlagObjProcessText :Composition
class ObjTextDocFormObjProcessText{
}
ObjText <.. ObjTextDocFormObjProcessText :Composition
class ObjTextGoObjProcessText{
}
ObjText <.. ObjTextGoObjProcessText :Composition
class ObjTextLocalObjProcessText{
}
ObjText <.. ObjTextLocalObjProcessText :Composition
class ObjTextIntObjProcessText{
}
ObjText <.. ObjTextIntObjProcessText :Composition
class ObjTextRunsqlObjProcessText{
}
ObjText <.. ObjTextRunsqlObjProcessText :Composition
class ObjTextSqlFormatObjProcessText{
}
ObjText <.. ObjTextSqlFormatObjProcessText :Composition
class ObjTextWavePlayerObjProcessText{
}
ObjText <.. ObjTextWavePlayerObjProcessText :Composition
```
*Updated : 2025-02-27*
[//]: <> (HIRAR END)
| Validation Type | Description |
|-----------------|-----------------------------------------------|
| required | Makes the element required. |
| remote | Requests a resource to check the element for validity. |
| maxlength | Makes the element require a given maximum length. |
| rangelength | Makes the element require a given value range. |
| min | Makes the element require a given minimum. |
| max | Makes the element require a given maximum. |
| range | Makes the element require a given value range.|
| email | Makes the element require a valid email. |
| url | Makes the element require a valid URL. |
| date | Makes the element require a date. |
| dateISO | Makes the element require an ISO date. |
| number | Makes the element require a decimal number. |
| digits | Makes the element require digits only. |
| creditcard | Makes the element require a credit card number. |
| equalTo | Requires the element to be the same as another one. |
## Performance Optimisations
### Early Exit Fast Paths
`process_text()` applies several early-exit checks to avoid
expensive brace-matching and command dispatch on strings that
contain no template markers:
1. **No `$` and no `{`** — the text contains no possible markers,
so it is returned immediately with zero processing.
2. **Has `$` but no `{`** — only `patch_param()` runs (simple
`$variable$` substitution). All brace-command logic is skipped.
3. **Has `{` but no `:` before `}`** or the extracted command name
is not found in `BUFFER_TEXT_CACHE` — the text is returned as-is,
skipping the expensive brace-matching loop entirely.
These guards eliminate the majority of `process_text()` overhead for
plain-text and static HTML content.
### Debug Calls Disabled
23 `self.debug()` calls inside `process_text()` and its helper
methods have been commented out with the annotation:
```python
# NOTE: disabled — impacts performance <>
Each self.debug() invocation publishes to MQTT, which adds
measurable latency when processing thousands of text fragments
per report render. The calls remain in the source for diagnostic
use — uncomment them when troubleshooting template expansion.
Report objects can set self._skip_process_text = True to bypass
process_text() entirely during WebServer template rendering.
When this flag is set, the web server returns the report HTML
without running any $variable$ or {command:...} expansion.
This is used by reports whose output is fully pre-rendered (e.g.
ObjReportDocumentation subclasses) and do not contain any
template markers.
cythonize -3 -a -i ObjProcessText.py
Compiling /home/axion/projects/axion/factory.core/ObjProcessText.py because it changed..[1/1] Cythonizing /home/axion/projects/axion/factory.core/ObjProcessText.py
Updated : 2025-09-10