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;
        }
    }