1*6b7e227cSYamadaMiz<?php 2*6b7e227cSYamadaMiz/** 3*6b7e227cSYamadaMiz * DokuWiki Plugin Mizar proof checker (Syntax Component) 4*6b7e227cSYamadaMiz * 5*6b7e227cSYamadaMiz * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6*6b7e227cSYamadaMiz * @author Yamada, M. <yamadam@mizar.work> 7*6b7e227cSYamadaMiz */ 8*6b7e227cSYamadaMizclass syntax_plugin_mizarproofchecker extends \dokuwiki\Extension\SyntaxPlugin { 9*6b7e227cSYamadaMiz /** @inheritDoc */ 10*6b7e227cSYamadaMiz public function getType() { 11*6b7e227cSYamadaMiz return 'substition'; 12*6b7e227cSYamadaMiz } 13*6b7e227cSYamadaMiz 14*6b7e227cSYamadaMiz /** @inheritDoc */ 15*6b7e227cSYamadaMiz public function getPType() { 16*6b7e227cSYamadaMiz return 'block'; 17*6b7e227cSYamadaMiz } 18*6b7e227cSYamadaMiz 19*6b7e227cSYamadaMiz /** @inheritDoc */ 20*6b7e227cSYamadaMiz public function getSort() { 21*6b7e227cSYamadaMiz return 195; 22*6b7e227cSYamadaMiz } 23*6b7e227cSYamadaMiz 24*6b7e227cSYamadaMiz /** @inheritDoc */ 25*6b7e227cSYamadaMiz public function connectTo($mode) { 26*6b7e227cSYamadaMiz $this->Lexer->addSpecialPattern('<mizar\s+[^>]+>.*?</mizar>', $mode, 'plugin_mizarproofchecker'); 27*6b7e227cSYamadaMiz } 28*6b7e227cSYamadaMiz 29*6b7e227cSYamadaMiz public function handle($match, $state, $pos, Doku_Handler $handler) { 30*6b7e227cSYamadaMiz preg_match('/<mizar\s+([^>]+)>(.*?)<\/mizar>/s', $match, $matches); 31*6b7e227cSYamadaMiz $filename = htmlspecialchars(trim($matches[1])); 32*6b7e227cSYamadaMiz $content = htmlspecialchars(trim($matches[2])); 33*6b7e227cSYamadaMiz return array($state, $filename, $content); 34*6b7e227cSYamadaMiz } 35*6b7e227cSYamadaMiz 36*6b7e227cSYamadaMiz public function render($mode, Doku_Renderer $renderer, $data) { 37*6b7e227cSYamadaMiz static $mizarCounter = 0; // 一意のカウンターを追加 38*6b7e227cSYamadaMiz list($state,$filename, $content) = $data; 39*6b7e227cSYamadaMiz $mizarId = 'mizarBlock' . $mizarCounter++; // 一意のIDを生成 40*6b7e227cSYamadaMiz 41*6b7e227cSYamadaMiz if ($mode == 'xhtml') { 42*6b7e227cSYamadaMiz // ボタンやエディタのHTMLを生成 43*6b7e227cSYamadaMiz $renderer->doc .= '<div class="mizarWrapper" id="' . $mizarId . '">'; // ラッパーdivを追加 44*6b7e227cSYamadaMiz $renderer->doc .= '<div id="copyMessage" style="display:none;">コンテンツがクリップボードにコピーされました。</div>'; 45*6b7e227cSYamadaMiz $renderer->doc .= '<dl class="file">'; 46*6b7e227cSYamadaMiz $renderer->doc .= '<button id="myEditorButton' . $mizarId . '">Editor</button>'; 47*6b7e227cSYamadaMiz $renderer->doc .= '<button id="verifyButton' . $mizarId . '" style="display:none;">mizf</button>'; 48*6b7e227cSYamadaMiz $renderer->doc .= '<button id="clearButton' . $mizarId . '" style="display:none;">clear</button>'; 49*6b7e227cSYamadaMiz $renderer->doc .= '<dt><a href="#" onclick="return copyToClipboard(\'' . $mizarId . '\');" title="クリックしてコンテンツをコピー" class="mediafile mf_miz clipboard-icon">' . $filename . '</a></dt>'; 50*6b7e227cSYamadaMiz // エディタ用のコンテナを準備 51*6b7e227cSYamadaMiz $renderer->doc .= '<dd><div id="editorContainer' . $mizarId . '" class="editor-container" data-content="' . htmlspecialchars($content) . '"></div></dd>'; 52*6b7e227cSYamadaMiz $renderer->doc .= '</dl>'; 53*6b7e227cSYamadaMiz $renderer->doc .= '<div id="output' . $mizarId . '" style="padding: 10px; border: 1px solid #ccc; margin-top: 10px; white-space: pre-wrap; display: none;"></div>'; 54*6b7e227cSYamadaMiz $renderer->doc .= '<script type="text/javascript" src="' . DOKU_BASE . 'lib/plugins/mizarproofchecker/dist/script.js"></script>'; 55*6b7e227cSYamadaMiz $renderer->doc .= '</div>'; // ラッパーdivを閉じる 56*6b7e227cSYamadaMiz } else { 57*6b7e227cSYamadaMiz $renderer->doc .= "<mizar $filename>$content</mizar>"; 58*6b7e227cSYamadaMiz } 59*6b7e227cSYamadaMiz return true; 60*6b7e227cSYamadaMiz } 61*6b7e227cSYamadaMiz}