示例#1
0
/**
 * Pattern handler for PHP & JavaScript block syntaxes
 *
 * @param Texy\BlockParser
 * @param array      regexp matches
 * @param string     pattern name
 * @return Texy\HtmlElement|string|FALSE
 */
function codeBlockHandler(Texy\BlockParser $parser, array $matches, $name)
{
    list($content) = $matches;
    $lang = $name === 'phpBlockSyntax' ? 'PHP' : 'HTML';
    $fshl = new fshlParser('HTML_UTF8', P_TAB_INDENT);
    $texy = $parser->getTexy();
    $content = $fshl->highlightString($lang, $content);
    $content = $texy->protect($content, $texy::CONTENT_BLOCK);
    $elPre = new Texy\HtmlElement('pre');
    $elPre->attrs['class'] = strtolower($lang);
    $elCode = $elPre->create('code', $content);
    return $elPre;
}
示例#2
0
文件: demo.php 项目: chomenko/cemvin
/**
 * Pattern handler for block syntaxes
 *
 * @param Texy\BlockParser
 * @param array      regexp matches
 * @param string     pattern name (myBlockSyntax1)
 * @return Texy\HtmlElement|string|FALSE
 */
function userBlockHandler(Texy\BlockParser $parser, array $matches, $name)
{
    list(, $mTag, $mText) = $matches;
    $texy = $parser->getTexy();
    // create element
    if ($mTag === 'perex') {
        $el = new Texy\HtmlElement('div');
        $el->attrs['class'][] = 'perex';
    } else {
        $el = new Texy\HtmlElement($mTag);
    }
    // create content
    $el->parseLine($texy, $mText);
    return $el;
}
示例#3
0
文件: demo.php 项目: chomenko/cemvin
/**
 * @return Texy\HtmlElement|string|FALSE
 */
function figureHandler(Texy\HandlerInvocation $invocation, Texy\Image $image, Texy\Link $link = NULL, $content, Texy\Modifier $modifier)
{
    // finish invocation by default way
    $el = $invocation->proceed();
    // change div -> dl
    $el->setName('dl');
    // change p -> dd
    $el[1]->setName('dd');
    // wrap img into dt
    $img = $el[0];
    unset($el[0]);
    $dt = new Texy\HtmlElement('dt');
    $dt->add($img);
    $el->insert(0, $dt);
    return $el;
}
示例#4
0
文件: demo.php 项目: chomenko/cemvin
/**
 * User handler for unknown reference
 * @return Texy\HtmlElement|string
 */
function newReferenceHandler(Texy\HandlerInvocation $parser, $refName)
{
    $names = ['Me', 'Punkrats', 'Servats', 'Bonifats'];
    if (!isset($names[$refName])) {
        return FALSE;
        // it's not my job
    }
    $name = $names[$refName];
    $el = new Texy\HtmlElement('a');
    $el->attrs['href'] = '#comm-' . $refName;
    // set link destination
    $el->attrs['class'][] = 'comment';
    // set class name
    $el->attrs['rel'] = 'nofollow';
    // enable rel="nofollow"
    $el->setText("[{$refName}] {$name}:");
    // set link label (with Texy formatting)
    return $el;
}
示例#5
0
/**
 * User handler for code block
 * @return Texy\HtmlElement
 */
function blockHandler(Texy\HandlerInvocation $invocation, $blocktype, $content, $lang, Texy\Modifier $modifier)
{
    if ($blocktype !== 'block/code') {
        return $invocation->proceed();
    }
    $texy = $invocation->getTexy();
    global $geshiPath;
    if ($lang == 'html') {
        $lang = 'html4strict';
    }
    $content = Texy\Helpers::outdent($content);
    $geshi = new GeSHi($content, $lang, $geshiPath . 'geshi/');
    // GeSHi could not find the language
    if ($geshi->error) {
        return $invocation->proceed();
    }
    // do syntax-highlighting
    $geshi->set_encoding('UTF-8');
    $geshi->set_header_type(GESHI_HEADER_PRE);
    $geshi->enable_classes();
    $geshi->set_overall_style('color: #000066; border: 1px solid #d0d0d0; background-color: #f0f0f0;', TRUE);
    $geshi->set_line_style('font: normal normal 95% \'Courier New\', Courier, monospace; color: #003030;', 'font-weight: bold; color: #006060;', TRUE);
    $geshi->set_code_style('color: #000020;', 'color: #000020;');
    $geshi->set_link_styles(GESHI_LINK, 'color: #000060;');
    $geshi->set_link_styles(GESHI_HOVER, 'background-color: #f0f000;');
    // save generated stylesheet
    $texy->styleSheet .= $geshi->get_stylesheet();
    $content = $geshi->parse_code();
    // check buggy GESHI, it sometimes produce not UTF-8 valid code :-((
    $content = iconv('UTF-8', 'UTF-8//IGNORE', $content);
    // protect output is in HTML
    $content = $texy->protect($content, $texy::CONTENT_BLOCK);
    $el = new Texy\HtmlElement();
    $el->setText($content);
    return $el;
}