function PukiWikiInlineConverter($converters = NULL, $excludes = NULL) { if ($converters === NULL) { if (PukiWikiConfig::GetParam('autourllink')) { $converters = array('plugin', 'note', 'url', 'url_interwiki', 'mailto', 'interwikiname', 'autolink', 'bracketname', 'wikiname', 'autolink_a'); } else { $converters = array('plugin', 'note', 'url_interwiki', 'mailto', 'interwikiname', 'autolink', 'bracketname', 'wikiname', 'autolink_a'); } } if ($excludes !== NULL) { $converters = array_diff($converters, $excludes); } $this->converters = array(); $patterns = array(); $start = 1; foreach ($converters as $name) { $classname = "PukiWikiLink_{$name}"; $converter = new $classname($start); $pattern = $converter->get_pattern(); if ($pattern === FALSE) { continue; } $patterns[] = "(\n{$pattern}\n)"; $this->converters[$start] = $converter; $start += $converter->get_count(); $start++; } $this->pattern = join('|', $patterns); }
function get_pattern() { $s1 = $this->start + 1; if (PukiWikiConfig::GetParam('autourllink')) { return <<<EOD (?: \\[\\[ ((?:(?!\\]\\]).)+)(?:>|:) # (1) alias )? ([\\w.-]+@[\\w-]+\\.[\\w.-]+) # (2) mailto (?({$s1})\\]\\]) # close bracket if (1) EOD; } else { return <<<EOD (?: \\[\\[ ((?:(?!\\]\\]).)+)(?:>|:) # (1) alias ) ([\\w.-]+@[\\w-]+\\.[\\w.-]+) # (2) mailto (?({$s1})\\]\\]) # close bracket if (1) EOD; } }