16b7e227cSYamadaMiz<?php 26b7e227cSYamadaMiz/** 3b68e3724SYamadaMiz * DokuWiki Plugin Mizar Verifiable Docs (Syntax Component) 44754b0a7SYamadaMiz * 56b7e227cSYamadaMiz * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 66b7e227cSYamadaMiz * @author Yamada, M. <yamadam@mizar.work> 76b7e227cSYamadaMiz */ 8b68e3724SYamadaMizclass syntax_plugin_mizarverifiabledocs extends \dokuwiki\Extension\SyntaxPlugin { 96b7e227cSYamadaMiz /** @inheritDoc */ 106b7e227cSYamadaMiz public function getType() { 116b7e227cSYamadaMiz return 'substition'; 126b7e227cSYamadaMiz } 136b7e227cSYamadaMiz 146b7e227cSYamadaMiz /** @inheritDoc */ 156b7e227cSYamadaMiz public function getPType() { 166b7e227cSYamadaMiz return 'block'; 176b7e227cSYamadaMiz } 186b7e227cSYamadaMiz 196b7e227cSYamadaMiz /** @inheritDoc */ 206b7e227cSYamadaMiz public function getSort() { 216b7e227cSYamadaMiz return 195; 226b7e227cSYamadaMiz } 236b7e227cSYamadaMiz 246b7e227cSYamadaMiz /** @inheritDoc */ 256b7e227cSYamadaMiz public function connectTo($mode) { 26b68e3724SYamadaMiz $this->Lexer->addSpecialPattern('<mizar\s+[^>]+>.*?</mizar>', $mode, 'plugin_mizarverifiabledocs'); 276b7e227cSYamadaMiz } 286b7e227cSYamadaMiz 296b7e227cSYamadaMiz public function handle($match, $state, $pos, Doku_Handler $handler) { 306b7e227cSYamadaMiz preg_match('/<mizar\s+([^>]+)>(.*?)<\/mizar>/s', $match, $matches); 316b7e227cSYamadaMiz $filename = htmlspecialchars(trim($matches[1])); 326b7e227cSYamadaMiz $content = htmlspecialchars(trim($matches[2])); 336b7e227cSYamadaMiz return array($state, $filename, $content); 346b7e227cSYamadaMiz } 356b7e227cSYamadaMiz 366b7e227cSYamadaMiz public function render($mode, Doku_Renderer $renderer, $data) { 3708219f34SYamadaMiz // xhtml以外のモードはスキップ 3808219f34SYamadaMiz if ($mode != 'xhtml') { 3908219f34SYamadaMiz return false; 4008219f34SYamadaMiz } 416b7e227cSYamadaMiz static $mizarCounter = 0; // 一意のカウンターを追加 426b7e227cSYamadaMiz list($state,$filename, $content) = $data; 4308219f34SYamadaMiz $mizarId = 'mizarBlock' . $mizarCounter; 4408219f34SYamadaMiz $blockNumber = $mizarCounter + 1; // 表示用の番号 (1, 2, 3,...) 4508219f34SYamadaMiz $mizarCounter++; // カウンターをインクリメント 466b7e227cSYamadaMiz 476b7e227cSYamadaMiz if ($mode == 'xhtml') { 486b7e227cSYamadaMiz // ボタンやエディタのHTMLを生成 499fc5dc4bSYamadaMiz $renderer->doc .= '<div class="mizarWrapper" id="' . $mizarId . '">'; 506b7e227cSYamadaMiz $renderer->doc .= '<dl class="file">'; 519fc5dc4bSYamadaMiz $renderer->doc .= '<button class="copy-button" data-mizarid="' . $mizarId . '">Copy</button>'; 529fc5dc4bSYamadaMiz $renderer->doc .= '<button id="resetButton' . $mizarId . '" class="reset-button">Reset</button>'; 539fc5dc4bSYamadaMiz $renderer->doc .= '<button id="editButton' . $mizarId . '" class="edit-button">Edit</button>'; 54f9af2148SYamadaMiz $renderer->doc .= '<button id="compileButton' . $mizarId . '" class="compile-button">Compile</button>'; 554f65af2cSYamadaMiz $renderer->doc .= '<button id="hideButton' . $mizarId . '" class="hide-button">Hide</button>'; 56*3f7dd076SYamadaMiz $renderer->doc .= '<button id="graphButton' . $mizarId . '" class="graph-button">Graph</button>'; // ★追加 574f65af2cSYamadaMiz $renderer->doc .= '<button id="showButton' . $mizarId . '" class="show-button">Show</button>'; 589fc5dc4bSYamadaMiz 5908219f34SYamadaMiz $renderer->doc .= '<dt>' 6008219f34SYamadaMiz . '<a href="#" onclick="createMizarFile(\'' . $filename . '\'); return false;" ' 6108219f34SYamadaMiz . ' title="クリックしてコンテンツをダウンロード" class="file-download">' 6208219f34SYamadaMiz . $filename. '(' . $blockNumber . ') ' 6308219f34SYamadaMiz . '</a>' 6408219f34SYamadaMiz . '</dt>'; 6508219f34SYamadaMiz 669fc5dc4bSYamadaMiz $renderer->doc .= '<dd><div class="editor-container" data-content="' . htmlspecialchars($content) . '"></div></dd>'; 676b7e227cSYamadaMiz $renderer->doc .= '</dl>'; 685cbf3a53SYamadaMiz $renderer->doc .= '<div id="output' . $mizarId . '" class="output"></div>'; 69668cfaceSYamadaMiz $renderer->doc .= '<script type="module" src="' . DOKU_BASE . 'lib/plugins/mizarverifiabledocs/dist/script.js"></script>'; 709fc5dc4bSYamadaMiz $renderer->doc .= '</div>'; 716b7e227cSYamadaMiz } else { 726b7e227cSYamadaMiz $renderer->doc .= "<mizar $filename>$content</mizar>"; 736b7e227cSYamadaMiz } 746b7e227cSYamadaMiz return true; 756b7e227cSYamadaMiz } 766b7e227cSYamadaMiz}