1*1776c5c5Sdh-tools<?php 2*1776c5c5Sdh-tools 3*1776c5c5Sdh-toolsuse dokuwiki\Extension\SyntaxPlugin; 4*1776c5c5Sdh-tools 5*1776c5c5Sdh-tools/** 6*1776c5c5Sdh-tools * Syntax component for inline icon rendering. 7*1776c5c5Sdh-tools */ 8*1776c5c5Sdh-toolsclass syntax_plugin_fontello extends SyntaxPlugin 9*1776c5c5Sdh-tools{ 10*1776c5c5Sdh-tools /** @var helper_plugin_fontello */ 11*1776c5c5Sdh-tools protected $helper; 12*1776c5c5Sdh-tools 13*1776c5c5Sdh-tools public function __construct() 14*1776c5c5Sdh-tools { 15*1776c5c5Sdh-tools $this->helper = $this->loadHelper('fontello'); 16*1776c5c5Sdh-tools } 17*1776c5c5Sdh-tools 18*1776c5c5Sdh-tools /** 19*1776c5c5Sdh-tools * @return string 20*1776c5c5Sdh-tools */ 21*1776c5c5Sdh-tools public function getType() 22*1776c5c5Sdh-tools { 23*1776c5c5Sdh-tools return 'substition'; 24*1776c5c5Sdh-tools } 25*1776c5c5Sdh-tools 26*1776c5c5Sdh-tools /** 27*1776c5c5Sdh-tools * @return string 28*1776c5c5Sdh-tools */ 29*1776c5c5Sdh-tools public function getPType() 30*1776c5c5Sdh-tools { 31*1776c5c5Sdh-tools return 'normal'; 32*1776c5c5Sdh-tools } 33*1776c5c5Sdh-tools 34*1776c5c5Sdh-tools /** 35*1776c5c5Sdh-tools * @return int 36*1776c5c5Sdh-tools */ 37*1776c5c5Sdh-tools public function getSort() 38*1776c5c5Sdh-tools { 39*1776c5c5Sdh-tools return 190; 40*1776c5c5Sdh-tools } 41*1776c5c5Sdh-tools 42*1776c5c5Sdh-tools /** 43*1776c5c5Sdh-tools * @param string $mode 44*1776c5c5Sdh-tools * @return void 45*1776c5c5Sdh-tools */ 46*1776c5c5Sdh-tools public function connectTo($mode) 47*1776c5c5Sdh-tools { 48*1776c5c5Sdh-tools $this->Lexer->addSpecialPattern('<icon:[A-Za-z0-9_-]+(?:\|(?:toc|notoc))?>', $mode, 'plugin_fontello'); 49*1776c5c5Sdh-tools } 50*1776c5c5Sdh-tools 51*1776c5c5Sdh-tools /** 52*1776c5c5Sdh-tools * @param string $match 53*1776c5c5Sdh-tools * @param int $state 54*1776c5c5Sdh-tools * @param int $pos 55*1776c5c5Sdh-tools * @param Doku_Handler $handler 56*1776c5c5Sdh-tools * @return array 57*1776c5c5Sdh-tools */ 58*1776c5c5Sdh-tools public function handle($match, $state, $pos, Doku_Handler $handler) 59*1776c5c5Sdh-tools { 60*1776c5c5Sdh-tools $token = $this->helper->parseIconToken($match); 61*1776c5c5Sdh-tools if ($token === null) { 62*1776c5c5Sdh-tools return [ 63*1776c5c5Sdh-tools 'raw' => $match, 64*1776c5c5Sdh-tools 'name' => '', 65*1776c5c5Sdh-tools 'class' => null, 66*1776c5c5Sdh-tools 'missing_package' => false, 67*1776c5c5Sdh-tools ]; 68*1776c5c5Sdh-tools } 69*1776c5c5Sdh-tools 70*1776c5c5Sdh-tools $name = $token['name']; 71*1776c5c5Sdh-tools $hasPackage = $this->helper->hasActivePackage(); 72*1776c5c5Sdh-tools $class = $hasPackage ? $this->helper->getIconClass($name) : null; 73*1776c5c5Sdh-tools 74*1776c5c5Sdh-tools return [ 75*1776c5c5Sdh-tools 'raw' => $match, 76*1776c5c5Sdh-tools 'name' => $name, 77*1776c5c5Sdh-tools 'class' => $class, 78*1776c5c5Sdh-tools 'missing_package' => !$hasPackage, 79*1776c5c5Sdh-tools ]; 80*1776c5c5Sdh-tools } 81*1776c5c5Sdh-tools 82*1776c5c5Sdh-tools /** 83*1776c5c5Sdh-tools * @param string $format 84*1776c5c5Sdh-tools * @param Doku_Renderer $renderer 85*1776c5c5Sdh-tools * @param array $data 86*1776c5c5Sdh-tools * @return bool 87*1776c5c5Sdh-tools */ 88*1776c5c5Sdh-tools public function render($format, Doku_Renderer $renderer, $data) 89*1776c5c5Sdh-tools { 90*1776c5c5Sdh-tools if ($format !== 'xhtml') return false; 91*1776c5c5Sdh-tools 92*1776c5c5Sdh-tools /** @var Doku_Renderer_xhtml $renderer */ 93*1776c5c5Sdh-tools if (!empty($data['class'])) { 94*1776c5c5Sdh-tools $renderer->doc .= '<span class="fontello-icon ' . hsc($data['class']) . '" aria-hidden="true"></span>'; 95*1776c5c5Sdh-tools } elseif (!empty($data['missing_package'])) { 96*1776c5c5Sdh-tools $renderer->doc .= hsc(sprintf($this->getLang('icon_missing_package'), $data['name'])); 97*1776c5c5Sdh-tools } else { 98*1776c5c5Sdh-tools $renderer->doc .= hsc($data['raw']); 99*1776c5c5Sdh-tools } 100*1776c5c5Sdh-tools 101*1776c5c5Sdh-tools return true; 102*1776c5c5Sdh-tools } 103*1776c5c5Sdh-tools} 104