xref: /plugin/mizarverifiabledocs/syntax.php (revision 4f65af2c978c8b810c87fd11fcd551c84c6abad5)
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) {
376b7e227cSYamadaMiz        static $mizarCounter = 0; // 一意のカウンターを追加
386b7e227cSYamadaMiz        list($state,$filename, $content) = $data;
396b7e227cSYamadaMiz        $mizarId = 'mizarBlock' . $mizarCounter++; // 一意のIDを生成
406b7e227cSYamadaMiz
416b7e227cSYamadaMiz        if ($mode == 'xhtml') {
426b7e227cSYamadaMiz            // ボタンやエディタのHTMLを生成
439fc5dc4bSYamadaMiz            $renderer->doc .= '<div class="mizarWrapper" id="' . $mizarId . '">';
446b7e227cSYamadaMiz            $renderer->doc .= '<dl class="file">';
459fc5dc4bSYamadaMiz            $renderer->doc .= '<button class="copy-button" data-mizarid="' . $mizarId . '">Copy</button>';
469fc5dc4bSYamadaMiz            $renderer->doc .= '<button id="resetButton' . $mizarId . '" class="reset-button">Reset</button>';
479fc5dc4bSYamadaMiz            $renderer->doc .= '<button id="editButton' . $mizarId . '" class="edit-button">Edit</button>';
48f9af2148SYamadaMiz            $renderer->doc .= '<button id="compileButton' . $mizarId . '" class="compile-button">Compile</button>';
49*4f65af2cSYamadaMiz            $renderer->doc .= '<button id="hideButton' . $mizarId . '" class="hide-button">Hide</button>';
50*4f65af2cSYamadaMiz            $renderer->doc .= '<button id="showButton' . $mizarId . '" class="show-button">Show</button>';
519fc5dc4bSYamadaMiz
529fc5dc4bSYamadaMiz            $renderer->doc .= '<dt><a href="#" onclick="createMizarFile(\'' . $filename . '\'); return false;" title="クリックしてコンテンツをダウンロード" class="file-download">' . $filename . '</a></dt>';
539fc5dc4bSYamadaMiz            $renderer->doc .= '<dd><div class="editor-container" data-content="' . htmlspecialchars($content) . '"></div></dd>';
546b7e227cSYamadaMiz            $renderer->doc .= '</dl>';
555cbf3a53SYamadaMiz            $renderer->doc .= '<div id="output' . $mizarId . '" class="output"></div>';
56668cfaceSYamadaMiz            $renderer->doc .= '<script type="module" src="' . DOKU_BASE . 'lib/plugins/mizarverifiabledocs/dist/script.js"></script>';
579fc5dc4bSYamadaMiz            $renderer->doc .= '</div>';
586b7e227cSYamadaMiz        } else {
596b7e227cSYamadaMiz            $renderer->doc .= "<mizar $filename>$content</mizar>";
606b7e227cSYamadaMiz        }
616b7e227cSYamadaMiz        return true;
626b7e227cSYamadaMiz    }
636b7e227cSYamadaMiz}