TextformatterPrism by abdus

Prism JS Syntax Highlighter

A module to parse given HTML and syntax-highlight code elements using Prism

  • v2.0.0
    • Improved language parsing logic
    • Prevent 404s from nonexistent files
    • Renamed hookable functions, update your hooks accordingly. See below for more information.

  • Add module to /site/modules/ and then install.
    Or go to Modules > Install > Add New and use any of the options provided to to install.

  • Create a text/textarea field and pick Prism Syntax Highlighter from Details > Text Formatters.

    Protip: This module parses HTML markup, so it should come after HTML parsers such as Markdown textformatters.

  • Add code elements within the field content with language-xxxx classes. Or pick a default language from configuration page if you are unable to specify the classes.

  • Select any plugins you want. To use some plugins, extra classes are required. See plugin documentation.

  • Install these recommended modules for the best experience:

  • Go to module configuration to specify:
  • Auto inclusion of highlighters for parsed languages
  • Default language for inline code elements or ones without language-xxxx classes.
  • Ability to use minified/non-minified component and parser files
  • Plugins
  • Themes
  • Custom JS and CSS for configuration / theming
  • Ability to use hooks to specify custom CSS and JS

Hook into TextformatterPrism::getCss and TextformatterPrism::getJs in your ready.php file.

  • $event->arguments includes two arguments, first one $languages an array of parsed language names, second $plugins an array of picked plugin names. To include your own JS/CSS mutate $event->return.
// specify custom CSS
wire()->addHookAfter('TextformatterPrism::getCss', function (HookEvent $event) {
    $css = $event->return;
    $css[] = '/path/to/custom.css'
    // return an array of urls
    $event->return = $css;
// Specify custom JS
wire()->addHookAfter('TextformatterPrism::getJs', function (HookEvent $event) {
    $js = $event->return;
    $js[] = '/path/to/custom.js'
    // return an array of urls
    $event->return = $js;

Install and use modules at your own risk. Always have a site and database backup before installing new modules.

Latest news

  • ProcessWire Weekly #490
    In the 490th issue of ProcessWire Weekly we'll check out what's new in the latest core version ProcessWire 3.0.229, introduce a brand-new third party module, and more. Read on!
    Weekly.pw / 30 September 2023
  • ProcessWire 3.0.226 new main/master version
    After 8 months in development we are excited to bring you ProcessWire 3.0.226 main/master. This version has a ton of great new features, improvements and optimizations, plus more than 100 issue fixes. This post takes an in-depth look at highlights from this great new version.
    Blog / 25 August 2023
  • Subscribe to weekly ProcessWire news

“…building with ProcessWire was a breeze, I really love all the flexibility the system provides. I can’t imagine using any other CMS in the future.” —Thomas Aull