PluginCode
in package
Implements media handling for programming source code
This media handler handles programing languages source code. This is useful for storing code snippets in the wiki.
Source code meta-data can be stored in the file as comments:
For PHP:
##---
## title: my-php-file.php
## date: 2023-03-05
##---
For python:
##---
## title: sample-python.py
## date: 2023-03-25
##---
Adding additional languages
To add an additional language, create anew entry in the TYPES constant.
- array-key : should be the main file extension for this file type.
Each array entry contains:
-
exts
(optional) - array with additional file extensions -
meta-re-start
- regular expression used to match begining of metadata block -
meta-re-end
- regular expression used to match end of metadata block -
meta-re-line
- regular expression used to extract metadata line - `hl-js-class' - syntax highlighting class. Refer to Highlight.js
-
cm-mode
- CodeMirror mode. See CodeMirror -
cm-deps
- Additional dependancies for CodeMirror. -
template
- Template to use to create new files.
Tags
Table of Contents
Constants
- TYPES = ['yaml' => ['exts' => ['yaml', 'yml'], 'meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m', 'hl-js-class' => 'language-yaml', 'cm-mode' => 'yaml', 'cm-deps' => ["mode/yaml/yaml.js"], 'template' => '---' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . '...' . \PHP_EOL . '' . \PHP_EOL], 'py' => ['meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m', 'hl-js-class' => 'language-python', 'cm-mode' => 'python', 'cm-deps' => ["addon/edit/matchbrackets.js", "mode/python/python.js"], 'template' => '#!/usr/bin/env python3' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . '' . \PHP_EOL], 'php' => ['exts' => ['php', 'phps'], 'hl-js-class' => 'language-php', 'cm-mode' => 'application/x-httpd-php', 'cm-deps' => ["addon/edit/matchbrackets.js", "mode/htmlmixed/htmlmixed.js", "mode/xml/xml.js", "mode/javascript/javascript.js", "mode/css/css.js", "mode/clike/clike.js", "mode/php/php.js"], 'template' => '<?php' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . 'phpinfo();' . \PHP_EOL, 'skip-re' => '/<?php\s+/', 'meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)\s*$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m']]
- VERSION = '1.1'
Methods
- edit() : bool|null
- Edit event handler
- load() : void
- Loading entry point for this class
- preSave() : bool|null
- preSave event handler
- read() : bool|null
- Read event handler
- readStruct() : string
- Read structured data
- render() : bool|null
- Render event handler
Constants
TYPES
public
mixed
TYPES
= ['yaml' => ['exts' => ['yaml', 'yml'], 'meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m', 'hl-js-class' => 'language-yaml', 'cm-mode' => 'yaml', 'cm-deps' => ["mode/yaml/yaml.js"], 'template' => '---' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . '...' . \PHP_EOL . '' . \PHP_EOL], 'py' => ['meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m', 'hl-js-class' => 'language-python', 'cm-mode' => 'python', 'cm-deps' => ["addon/edit/matchbrackets.js", "mode/python/python.js"], 'template' => '#!/usr/bin/env python3' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . '' . \PHP_EOL], 'php' => ['exts' => ['php', 'phps'], 'hl-js-class' => 'language-php', 'cm-mode' => 'application/x-httpd-php', 'cm-deps' => ["addon/edit/matchbrackets.js", "mode/htmlmixed/htmlmixed.js", "mode/xml/xml.js", "mode/javascript/javascript.js", "mode/css/css.js", "mode/clike/clike.js", "mode/php/php.js"], 'template' => '<?php' . \PHP_EOL . '##---' . \PHP_EOL . '## title: {title}' . \PHP_EOL . '## date: {date}' . \PHP_EOL . '## author: {author}' . \PHP_EOL . '##---' . \PHP_EOL . 'phpinfo();' . \PHP_EOL, 'skip-re' => '/<?php\s+/', 'meta-re-start' => '/^\s*##---\s*\n/m', 'meta-re-end' => '/^\s*##---\s*\n/m', 'meta-re-line' => '/^\s*##\s*([^:]+):\s*(.*)\s*$/', 'meta-re-log-line' => '/^\s*##\s*add-log:\s*(.*)$/m']]
VERSION
public
string
VERSION
= '1.1'
Methods
edit()
Edit event handler
public
static edit(NanoWikiApp $wiki, array<string|int, mixed> &$ev) : bool|null
Handles edit:[ext]
events.
It creates a CodeMirror editor page with the configuration matching the source code language.
Parameters
- $wiki : NanoWikiApp
-
running wiki instance
- $ev : array<string|int, mixed>
-
passed event
Return values
bool|nullload()
Loading entry point for this class
public
static load(array<string|int, mixed> $cfg) : void
Hooks media implemented by this class
Parameters
- $cfg : array<string|int, mixed>
preSave()
preSave event handler
public
static preSave(NanoWikiApp $wiki, array<string|int, mixed> &$ev) : bool|null
Handles preSave:[ext]
events.
TODO: check for LOG lines and adds them to the props.
Parameters
- $wiki : NanoWikiApp
-
running wiki instance
- $ev : array<string|int, mixed>
-
passed event
Return values
bool|nullread()
Read event handler
public
static read(NanoWikiApp $wiki, array<string|int, mixed> &$ev) : bool|null
Handles read:[ext]
events.
Reads the source code and extract meta data tags.
Parameters
- $wiki : NanoWikiApp
-
running wiki instance
- $ev : array<string|int, mixed>
-
passed event
Return values
bool|nullreadStruct()
Read structured data
public
static readStruct(string $source, array<string|int, mixed> &$meta, string $ext) : string
Extracts meta data tags embedded in source code
Parameters
- $source : string
-
text to process
- $meta : array<string|int, mixed>
-
receives the read meta data
- $ext : string
-
media file extension
Return values
string —Returns the source
render()
Render event handler
public
static render(NanoWikiApp $wiki, array<string|int, mixed> &$ev) : bool|null
Handles render:[ext]
events.
Escapes the source code and wraps it in an HTML block for syntax highlighting
Parameters
- $wiki : NanoWikiApp
-
running wiki instance
- $ev : array<string|int, mixed>
-
passed event