Lexer->addSpecialPattern('(?s:.*?)', $mode, 'plugin_pgpblock'); $this->Lexer->addSpecialPattern('(?s:.*?)', $mode, 'plugin_pgpblock'); $this->Lexer->addSpecialPattern('(?s:.*?)', $mode, 'plugin_pgpblock'); } public function handle($match, $state, $pos, Doku_Handler $handler) { // 1. Identify the tag and capture attributes if (preg_match('/^<(pgp|gpg|pgpfile)(.*?)>(.*)<\/\1>$/is', $match, $matches)) { $tag = strtolower($matches[1]); $attr_str = $matches[2]; $text = trim($matches[3]); } else { return false; } // 2. Extract filename attribute safely $filename = ''; if (preg_match('/filename=["\']([^"\']+)["\']/i', $attr_str, $fn_match)) { $filename = $fn_match[1]; } return array($text, $tag, $filename); } public function render($format, Doku_Renderer $renderer, $data) { if($format != 'xhtml' || $data === false) return false; list($text, $tag, $filename) = $data; $is_encrypted = (strpos($text, '-----BEGIN PGP MESSAGE-----') !== false); $encoded_text = hsc($text); if ($is_encrypted) { $is_file = ($tag === 'pgpfile'); $type_class = $is_file ? 'pgp-type-file' : 'pgp-type-text'; $title = $is_file ? '📦 Encrypted File' : '📄 Encrypted Text'; if ($is_file && $filename) $title .= ': ' . hsc($filename); $renderer->doc .= '
'; $renderer->doc .= '
' . $title . '
'; $renderer->doc .= '
' . $encoded_text . '
'; $renderer->doc .= '
'; } else { // Render unencrypted text in the white box $renderer->doc .= '
' . $encoded_text . '
'; } return true; } }