#! /usr/bin/perl # Copyright (C) 2017 Alex Schroeder # This program is free software: you can redistribute it and/or modify it under # the terms of the GNU General Public License as published by the Free Software # Foundation, either version 3 of the License, or (at your option) any later # version. # # This program is distributed in the hope that it will be useful, but WITHOUT # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS # FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # this program. If not, see . use strict; use v5.10; AddModuleDescription('mermaid.pl', 'Mermaid for Diagrams'); our ($bol, @MyRules, $MermaidCss, $MermaidJs, $HtmlHeaders, %Page); $MermaidCss = '/mermaid/mermaid.css'; $MermaidJs = '/mermaid/mermaid.min.js'; # When browsing a page containing mermaid markup, load the mermaid Javascript and CSS *MermaidOldBrowsePage = *BrowsePage; *BrowsePage = *MermaidNewBrowsePage; sub MermaidNewBrowsePage { my ($id) = @_; OpenPage($id); # Uses to render graphs if ($Page{text} =~ // and $HtmlHeaders !~ /mermaid/) { $HtmlHeaders .= qq{ }; } return MermaidOldBrowsePage(@_); } # When previewing an edit containing mermaid markup, load the mermaid Javascript # and CSS *MermaidOldDoEdit = *DoEdit; *DoEdit = *MermaidNewDoEdit; sub MermaidNewDoEdit { # Uses to render graphs if (GetParam('text') =~ /<mermaid>/ and $HtmlHeaders !~ /mermaid/) { $HtmlHeaders = q{ }; } return MermaidOldDoEdit(@_); } # And a formatting rule, of course. push(@MyRules, \&MermaidRule); sub MermaidRule { if ($bol && m/\G\<mermaid\>\n(.+?)\n\<\/mermaid\>/cgs) { return CloseHtmlEnvironments() . '
' . UrlDecode($1) . '
'; } return undef; }