Formatter: GeSHi Code Highlighting
Compatible with: R6.1 Current version: 0.3 Credits: |
Repo: community/formatter/highlight/geshi.php
https://github.com/GeSHi/geshi-1.0
GeSHi Documentation
1. Usage
Call via (geshi [formatter])
%%(geshi php numbers=1 start=35 lines=37) source%%
2. Install
- place the GeSHi lib under the lib/geshi/ folder
- add the GeSHi class to autoload.conf
lib/geshi/geshi.php GeSHi
- add geshi.php highlighter to the formatter/highlight/ folder
<?php
// WackoWiki Wrapper for GeSHi - Generic Syntax Highlighter
// https://wackowiki.org/doc/Dev/PatchesHacks/GeSHi
# require_once 'lib/geshi/geshi.php'; // -> autoload.conf
if ($options['_default'])
{
$language = $options['_default'];
$lines = [];
$numbers = GESHI_NO_LINE_NUMBERS;
$start = (int) ($options['start'] ?? 1);
$header = GESHI_HEADER_PRE_VALID;
$geshi = new GeSHi($text, $language);
if (!empty($options['lines']))
{
$lines = array_map('intval', explode(',', $options['lines']));
$lines = array_unique($lines);
}
if (!empty($options['numbers']))
{
$numbers = $options['numbers'] ? GESHI_NORMAL_LINE_NUMBERS : GESHI_NO_LINE_NUMBERS;
$header = match ((int) $options['numbers'])
{
1 => GESHI_HEADER_PRE_VALID,
2 => GESHI_HEADER_PRE_TABLE,
default => false,
};
}
$geshi->enable_classes(); // use classes for highlighting (must be first after creating object)
$geshi->set_overall_class('code'); // enables using a single stylesheet for multiple code fragments
$geshi->set_tab_width(4); // default: 8
$geshi->set_header_type($header); // GESHI_HEADER_DIV GESHI_HEADER_PRE_VALID GESHI_HEADER_PRE_TABLE GESHI_HEADER_NONE
$geshi->enable_line_numbers((bool) $numbers); // GESHI_NORMAL_LINE_NUMBERS GESHI_FANCY_LINE_NUMBERS, 2 GESHI_NO_LINE_NUMBERS
$geshi->start_line_numbers_at((int) abs($start));
$geshi->highlight_lines_extra($lines);
#/*
// get the stylesheet -> geshi.css
echo '<style type="text/css">';
echo $geshi->get_stylesheet(false);
echo '</style>';
#*/
echo '<!--notypo-->' . "\n";
echo $geshi->parse_code();
echo '<!--/notypo-->' . "\n";
}
else
{
echo Ut::html($text);
}
2.1. External stylesheet
GeSHi comes with a contrib/
directory, which in it contains a “wizard” script for creating a stylesheet.
geshi.css (incomplete)
/* GeSHi – syntax highlighting code */
.code .de1, .code .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align\top;}
.code {font-family:monospace;}
.code .imp {font-weight: bold; color: red;}
.code li, .code .li1 {font-weight: normal; vertical-align\top;}
.code .ln width:1px;text-align\right;margin:0;padding:0 2px;vertical-align\top;}
.code .li2 {font-weight: bold; vertical-align\top;}
.code .kw2 {color: #000000; font-weight: bold;}
.code .kw3 {color: #000066;}
.code .es0 {color: #000099; font-weight: bold;}
.code .br0 {color: #66cc66;}
.code .sy0 {color: #66cc66;}
.code .st0 {color: #ff0000;}
.code .nu0 {color: #cc66cc;}
.code .sc-2 {color: #404040;}
.code .sc-1 {color: #808080; font-style: italic;}
.code .sc0 {color: #00bbdd;}
.code .sc1 {color: #ddbb00;}
.code .sc2 {color: #009900;}
.code .ln-xtra, .code li.ln-xtra, .code div.ln-xtra {background-color: #ffc;}
.code span.xtra { display:block; }
// add to theme/_common/_header.php $this->add_html('header', '<link rel="stylesheet" href="' . $this->db->theme_url . 'css/geshi.css">');
3. Supported Formats
# | Language | Formatter |
---|---|---|
Actionscript | actionscript | |
ADA | ada | |
Apache Log | apache | |
AppleScript | applescript | |
ASM | asm | |
ASP | asp | |
AutoIT | autoit | |
Bash | bash | |
BlitzBasic | blitzbasic | |
bnf | bnf | |
C | c | |
C for Macs | c_mac | |
C# | csharp | |
C++ | cpp | |
C++ (+QT) | cpp-qt | |
CAD DCL | caddcl | |
CadLisp | cadlisp | |
CFDG | cfdg | |
ColdFusion | cfm | |
CSS | css | |
D | d | |
Delphi | delphi | |
Diff-Output | diff | |
DIV | div | |
DOS | dos | |
Eiffel | eiffel | |
Fortran | fortran | |
FreeBasic | freebasic | |
GML | gml | |
Groovy | groovy | |
HTML | html4strict | |
INI | ini | |
Inno Script | inno | |
Io | io | |
Java 5 | java5 | |
Java | java | |
Javascript | javascript | |
LaTeX | latex | |
Lisp | lisp | |
Lua | lua | |
Matlab | matlab | |
mIRC Scripting | mirc | |
Microchip Assembler | mpasm | |
Microsoft Registry | reg | |
MySQL | mysql | |
NSIS | nsis | |
Objective C | objc | |
OpenOffice BASIC | oobas | |
Objective Caml | ocaml | |
Objective Caml (brief) | ocaml-brief | |
Oracle 8 | oracle8 | |
Pascal | pascal | |
Perl | perl | |
PHP | php | |
PHP (brief) | php-brief | |
PL/SQL | plsql | |
Python | phyton | |
Q(uick)BASIC | qbasic | |
robots.txt | robots | |
Ruby | ruby | |
SAS | sas | |
Scheme | scheme | |
sdlBasic | sdlbasic | |
Smarty | smarty | |
SQL | sql | |
TCL/iTCL | tcl | |
T-SQL | tsql | |
Text | text | |
thinBasic | thinbasic | |
Unoidl | idl | |
VB.NET | vbnet | |
VHDL | vhdl | |
Visual BASIC | vb | |
Visual Fox Pro | visualfoxpro | |
WinBatch | winbatch | |
XML | xml | |
ZiLOG Z80 Assembler | z80 |
4. Changelog
0.1 Initial version
0.2 Updated to work with R.6.0
0.3 Updated to work with R.6.1, PHP 8 (Match expression)