Two simple Javascript syntax files to support basic Windows PowerShell syntax highlighting on prism.js supported systems.
Based loosely on the existing clike language definition, with several changes:
- Updated the comment token's regex to accommodate multi-line comments (
<# whatever #>), and single line comments (# this is a comment). - Updated the string token's regex to accommodate multi-line string (
@" ... "@). - Updated the keyword token's regex to add PowerShell specific keywords (switch, begin, process, end).
- Updated the boolean token's regex to include the leading
$. - Added the attr-value token with regex to match PowerShell Actions (based on the approved PowerShell verbs).
- Added the symbol token with regex to match PowerShell variables (other than
$true | $false). - Updated the operator token's regex to include the various PowerShell comparison operators (-or, -le, etc)
Follow the steps in this blog. Once the ./ghostium/src/assets/_components/prism/components directory exists, copy the two .js files into that directory. Follow the remainder of the steps, including editing the src/default.hbs config file and rebuilding Ghostium. Note that prior to the final rebuild, you should make backups of your config.hbs and navigation.hbs files - restoring them after the rebuild.
Note that I opted not to define custom tokens for psactions/psvars. In doing so, it removes the requirement to add new entries to whatever Prism theme is currently in use. I chose pre-existing tokens that work pretty well with the okaidia theme, your mileage may vary with custom themes/other Prism themes.
This is a first attempt at adding syntax highlighting for a complex language. As a result, there are a few known issues:
- Nested tokens (e.g. strings containing variables) follow the outermost highlighting rule.
- May cause weird color selection in non-okaidia Prism themes.
- Some code in prism.js replaces "
<" with "<" behind the scenes and breaks what would normally be expected for PowerShell block comments:/<#[\w\W]*?#>/g. I had to change the regex to accommodate this substitution (/\<#[\w\W]*?#>/g).
More information and examples can be found on my ghost blog post here.