syntax_plugin_bomfix.php - A PHP4 class that implements * a DokuWiki plugin for UTF8 "magic" bytes. * *

* External editors (i.e. separate standalone programs like word processing * software) usually mark a file in UTF8 format by prepending its content * with a "magic" byte sequence at the very start of file. While there is * no harm in it as far as DokuWiki is concerned those "magic" bytes * (Byte Order Mark) do appear in the page presented to the user. *

* Depending on a page's actual content and the respective CSS rules in * effect this may lead to undesired results. One way to get rid of this * problem would be to open the affected page(s) with DokuWiki's built-in * edit feature and simply remove those bytes. However, such an approach * would cause the word processor to open the file as plain text assuming * it's in ASCII or, say, ISO-8859-1 format - whatever may be configured * as the default text format. That, in consequence, would invalidate (or * at least render strangely) all UTF8 character sequences. *

* Actually that is the recommended approach if (i.e. if) * you never intend to edit the wiki pages by an external editor. *

* As it happens, personally I prefer to edit the pages (of a local DokuWiki * installation) by OpenOffice.org for various reasons. (And, yes, I know * that I bypass DokuWiki's changes-system this way.) Therefor I need those * "magic" bytes but I don't want them to show up in the pages * presented to the end user (reader). Enter syntax_plugin_bomfix. * The whole purpose of this plugin is to suppress the output of that * "magic" byte sequence. And nothing more. There are no new wiki language * features introduced by this plugin. Nor is there anything special you * have to remember when editing one of your already existing or newly * created pages. *

* To use it just install the plugin in your DokuWiki's plugin folder. * That's all. *

 *	Copyright (C) 2006, 2010  M.Watermann, D-10247 Berlin, FRG
 *			All rights reserved
 *		EMail : <support@mwat.de>
 * 
*
* 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 software 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. *
* @author Matthias Watermann * @version $Id: syntax_plugin_bomfix.php,v 1.6 2010/02/22 10:49:59 matthias Exp $ * @since created 24-Dec-2006 */ class syntax_plugin_bomfix extends DokuWiki_Syntax_Plugin { /** * @publicsection */ //@{ /** * Tell the parser whether the plugin accepts syntax mode * $aMode within its own markup. * * @param $aMode String The requested syntaxmode. * @return Boolean FALSE always since no nested markup * is possible with this plugin. * @public */ function accepts($aMode) { return FALSE; } // accepts() /** * Connect lookup pattern to lexer. * * @param $aMode String The desired rendermode. * @public * @see render() */ function connectTo($aMode) { $this->Lexer->addSpecialPattern('^\xEF\xBB\xBF', $aMode, 'plugin_bomfix'); } // connectTo() /** * Get an associative array with plugin info. * *

* The returned array holds the following fields: *

*
author
Author of the plugin
*
email
Email address to contact the author
*
date
Last modified date of the plugin in * YYYY-MM-DD format
*
name
Name of the plugin
*
desc
Short description of the plugin (Text only)
*
url
Website with more information on the plugin * (eg. syntax description)
*
* @return Array Information about this plugin class. * @public * @static */ function getInfo() { return array( 'author' => 'Matthias Watermann', 'email' => 'support@mwat.de', 'date' => '2010-02-22', 'name' => 'BOMfix Syntax Plugin', 'desc' => 'Ignore UTF8 "magic" bytes at start of page', 'url' => 'http://www.dokuwiki.org/plugin:bomfix'); } // getInfo() /** * Where to sort in? * * @return Integer 380 (doesn't really matter). * @static * @public */ function getSort() { return 380; } // getSort() /** * Get the type of syntax this plugin defines. * * @return String 'substition' (i.e. 'substitution'). * @static * @public */ function getType() { return 'substition'; // sic! should be __substitution__ } // getType() /** * Handler to prepare matched data for the rendering process. * *

* The $aState parameter gives the type of pattern * which triggered the call to this method: *

*
*
DOKU_LEXER_ENTER
*
a pattern set by addEntryPattern()
*
DOKU_LEXER_MATCHED
*
a pattern set by addPattern()
*
DOKU_LEXER_EXIT
*
a pattern set by addExitPattern()
*
DOKU_LEXER_SPECIAL
*
a pattern set by addSpecialPattern()
*
DOKU_LEXER_UNMATCHED
*
ordinary text encountered within the plugin's syntax mode * which doesn't match any pattern.
*

* This implementation does nothing (ignoring the passed arguments) * and just returns the given $aState. *

* @param $aMatch String The text matched by the patterns. * @param $aState Integer The lexer state for the match. * @param $aPos Integer The character position of the matched text. * @param $aHandler Object Reference to the Doku_Handler object. * @return Integer The current lexer state. * @public * @see render() * @static */ function handle($aMatch, $aState, $aPos, &$aHandler) { return $aState; // doesn't really matter as it's ignored anyway ... } // handle() /** * Handle the actual output creation. * *

* The method checks for the given $aFormat and returns * FALSE when a format isn't supported. * $aRenderer contains a reference to the renderer object * which is currently handling the rendering. * The contents of $aData is the return value of the * handle() method. *

* Besides "eating" the BOM implicitely this implementation does * nothing (ignoring all passed arguments) and always returns * TRUE. *

* @param $aFormat String The output format to generate. * @param $aRenderer Object A reference to the renderer object. * @param $aData Integer The data created/returned by the * handle() method. * @return Boolean TRUE always since there's no actual * rendering done and hence can't ever fail. * @public * @see handle() * @static */ function render($aFormat, &$aRenderer, $aData) { // nothing to do here - just 'eat' the BOM return TRUE; } // render() //@} } // class syntax_plugin_bomfix } // if ?>