Failed
";
        echo "
\n";
        foreach($error_cache as $error_msg) {
            echo "- ";
            switch($error_msg['t']) {
                case TYPE_NOTICE:
                    echo "NOTICE:";
                    break;
                case TYPE_WARNING:
                    echo "WARNING:";
                    break;
                case TYPE_ERROR:
                    echo "ERROR:";
                    break;
            }
            echo " " . $error_msg['m'] . "
 ";
        }
        echo "
\n";
    } else {
        echo "OK
";
    }
    echo "\n";
    $error_cache = array();
}
function report_error($type, $message) {
    global $error_cache, $error_abort;
    $error_cache[] = array('t' => $type, 'm' => $message);
    if(TYPE_ERROR == $type) {
        $error_abort = true;
    }
}
function extvar($name, $default){
    if(isset($_POST[$name])) {
        return $_POST[$name];
    }
    if(isset($_GET[$name])) {
        return $_GET[$name];
    }
    return $default;
}
?>
    GeSHi Language File Generator Script
    
GeSHi Language File Generator Script
To use this script, make sure that geshi.php is in the
parent directory or in your include_path, and that the language files are in a
subdirectory of GeSHi's directory called geshi/.
If not already done, select a language file below that will be used as
base for the language file to generate or create a blank one. Following this
you can do whatever you like to edit your language file. But note that not all
features are made available through this script.
Checking GeSHi installation ...  'example',
    'name' => 'Example'
    );
$ai = array(
    'name' => 'Benny Baumann',
    'email' => 'BenBE@geshi.org',
    'web' => 'http://qbnz.com/highlighter/'
    );
$ld = array(
    'cmt' => array(
        'sl' => array(
            1 => array(
                'start' => '//',
                'style' => 'font-style: italic; color: #666666;'
                ),
            2 => array(
                'start' => '#',
                'style' => 'font-style: italic; color: #666666;'
                )
            ),
        'ml' => array(
            1 => array(
                'start' => '/*',
                'end' => '*/',
                'style' => 'font-style: italic; color: #666666;'
                ),
            2 => array(
                'start' => '/**',
                'end' => '*/',
                'style' => 'font-style: italic; color: #006600;'
                )
            ),
        'rxc' => array(
            1 => array(
                'rx' => '/Hello RegExp/',
                'style' => 'font-style: italic; color: #666666;'
                )
            )
        ),
    'str' => array(
        'qm' => array(
            1 => array(
                'delim' => "'",
                'style' => 'color: #0000FF;'
                ),
            2 => array(
              'delim' => """,
                'style' => 'color: #0000FF;'
                )
            ),
        'ec' => array(
            'char' => '\\',
            'style' => 'font-weight: bold; color: #000080;'
            ),
        'erx' => array(
            1 => array(
                'rx' => '/\{\\\\$\w+\}/',
                'style' => 'font-weight: bold; color: #008080;'
                ),
            2 => array(
                'rx'=> '/\{\\\\$\w+\}/',
                'style' => 'font-weight: bold; color: #008080;'
                )
            )
        ),
    'kw_case' => 'GESHI_CAPS_NO_CHANGE',
    'kw' => array(
        1 => array(
            'list' => '',
            'case' => '0',
            'style' => 'color: #0000FF; font-weight: bold;',
            'docs' => ''
            )
        ),
    'sy' => array(
        0 => array(
            'list' => '',
            'style' => 'color: #0000FF; font-weight: bold;'
            )
        )
    );
$kw_case_sel = array(
    'GESHI_CAPS_NO_CHANGE' => '',
    'GESHI_CAPS_UPPER' => '',
    'GESHI_CAPS_LOWER' => ''
    );
$kw_cases_sel = array(
    1 => array(
        0 => '',
        1 => ''
        )
    );
// --- empty variables for values of $_POST - end ---
echo "
";
//var_dump($languages);
var_dump($_GET);
var_dump($_POST);
foreach($post_var_names as $varName) { // export wanted variables of $_POST array...
    if(array_key_exists($varName, $_POST)) {
      $$varName = htmlspecialchars_deep($_POST[$varName]);
    }
}
// determine the selected kw_case...
$kw_case_sel[$ld['kw_case']] = ' selected="selected"';
// determine the selected kw_cases...
for($i = 1; $i <= count($kw_cases_sel); $i += 1) {
    $kw_cases_sel[$i][(int) $ld['kw'][$i]['case']] = ' selected="selected"';
}
$lang = validate_lang();
var_dump($lang);
echo "";
?>
Operation completed in 
$time_end = explode(' ', microtime());
$time_diff = $time_end[0] + $time_end[1] - $time_start[0] - $time_start[1];
echo sprintf("%.2f", $time_diff);
?> seconds.
function str_to_phpstring($str, $doublequote = false){
    if($doublequote) {
        return '"' . strtr($str,
            array(
                "\"" => "\\\"",
                "\\" => "\\\\",
                "\0" => "\\0",
                "\n" => "\\n",
                "\r" => "\\r",
                "\t" => "\\t",
                "\$" => "\\\$"
                )
            ) . '"';
    } else {
        return "'" . strtr($str,
            array(
                "'" => "\\'",
                "\\" => "\\\\"
                )
            ) . "'";
    }
}
function validate_lang(){
    $ai = array(
        'name' => 'Benny Baumann',
        'email' => 'BenBE@geshi.org',
        'web' => 'http://qbnz.com/highlighter/'
        );
    $li = array(
        'file' => 'example',
        'desc' => 'Example'
        );
    if(isset($_POST['ld'])) {
        $ld = $_POST['ld'];
    } else {
        $ld = array(
            'cmt' => array(
                'sl' => array(
                    1 => array(
                        'start' => '//',
                        'style' => 'test'
                        )
                    ),
                'ml' => array(
                    1 => array(
                        'start' => '/*',
                        'end' => '*/',
                        'style' => 'font-style: italic; color: #666666;'
                        )
                    ),
                'rxc' => array(
                    1 => array(
                        'rx' => '/Hello/',
                        'style' => 'color: #00000'
                        )
                    )
                ),
            'str' => array(
                'qm' => array(),
                'ec' => array(
                    'char' => ''  
                    ),
                'erx' => array()
                ),
            'kw' => array(),
            'kw_case' => 'GESHI_CAPS_NO_CHANGE',
            'sy' => array()
            );
        }
    return array('ai' => $ai, 'li' => $li, 'ld' => $ld);
}
function gen_langfile($lang){
    $langfile = $lang['li']['file'];
    $langdesc = $lang['li']['desc'];
    $langauthor_name = $lang['ai']['name'];
    $langauthor_email = $lang['ai']['email'];
    $langauthor_web = $lang['ai']['web'];
    $langversion = GESHI_VERSION;
    $langdate = date('Y/m/d');
    $langyear = date('Y');
    $i = '    ';
    $i = array('', $i, $i.$i, $i.$i.$i);
    $src = << ".str_to_phpstring($langdesc).",\n";
    //Comments
    $src .= $i[1] . "'COMMENT_SINGLE' => array(\n";
    foreach($lang['ld']['cmt']['sl'] as $idx_cmt_sl => $tmp_cmt_sl) {
        $src .= $i[2] . ((int)$idx_cmt_sl). " => ". str_to_phpstring($tmp_cmt_sl['start']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'COMMENT_MULTI' => array(\n";
    foreach($lang['ld']['cmt']['ml'] as $tmp_cmt_ml) {
        $src .= $i[2] . str_to_phpstring($tmp_cmt_ml['start']). " => ". str_to_phpstring($tmp_cmt_ml['end']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'COMMENT_REGEXP' => array(\n";
    foreach($lang['ld']['cmt']['rxc'] as $idx_cmt_rxc => $tmp_cmt_rxc) {
        $src .= $i[2] . ((int)$idx_cmt_rxc). " => ". str_to_phpstring($tmp_cmt_rxc['rx']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    //Case Keywords
    $src .= $i[1] . "'CASE_KEYWORDS' => " . $lang['ld']['kw_case'] . ",\n";
    //Quotes \ Strings
    $src .= $i[1] . "'QUOTEMARKS' => array(\n";
    foreach($lang['ld']['str']['qm'] as $idx_str_qm => $tmp_str_qm) {
        $src .= $i[2] . ((int)$idx_str_qm). " => ". str_to_phpstring($tmp_str_qm['delim']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'ESCAPE_CHAR' => " . str_to_phpstring($lang['ld']['str']['ec']['char']) . ",\n";
    $src .= $i[1] . "'ESCAPE_REGEXP' => array(\n";
    foreach($lang['ld']['str']['erx'] as $idx_str_erx => $tmp_str_erx) {
        $src .= $i[2] . ((int)$idx_str_erx). " => ". str_to_phpstring($tmp_str_erx['rx']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    //HardQuotes
    $src .= $i[1] . "'HARDQUOTE' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'HARDESCAPE' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'HARDCHAR' => '',\n";
    //Numbers
    $src .= $i[1] . "'NUMBERS' =>\n";
    $src .= $i[2] . "GESHI_NUMBER_INT_BASIC | GESHI_NUMBER_OCT_PREFIX | GESHI_NUMBER_HEX_PREFIX |\n";
    $src .= $i[2] . "GESHI_NUMBER_FLT_SCI_ZERO,\n";
    //Keywords
    $src .= $i[1] . "'KEYWRODS' => array(\n";
    foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
        $src .= $i[2] . ((int)$idx_kw) . " => array(\n";
        if(!is_array($tmp_kw['list'])) {
            $tmp_kw['list'] = explode("\n", $tmp_kw['list']);
        }
        $tmp_kw['list'] = array_map('trim', $tmp_kw['list']);
        sort($tmp_kw['list']);
        $kw_esc = array_map('str_to_phpstring', $tmp_kw['list']);
        $kw_nl = true;
        $kw_pos = 0;
        foreach($kw_esc as $kw_data) {
            if((strlen($kw_data) + $kw_pos > 79) && $kw_pos > strlen($i[3])) {
                $src .= "\n";
                $kw_nl = true;
                $kw_pos = 0;
            }
            if($kw_nl) {
                $src .= $i[3];
                $kw_pos += strlen($i[3]);
                $kw_nl = false;
            }
            $src .= $kw_data . ', ';
            $kw_pos += strlen($kw_data) + 2;
        }
        $src .= "\n";
        $src .= $i[3] . "),\n";
    }
    $src .= $i[2] . "),\n";
    //Case Sensitivity
    $src .= $i[1] . "'CASE_SENSITIVE' => array(\n";
    foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
        $src .= $i[2] . ((int)$idx_kw) . " => " . ($tmp_kw['case'] ? 'true' : 'false') . ",\n";
    }
    $src .= $i[2] . "),\n";
    //Symbols
    $src .= $i[1] . "'SYMBOLS' => array(\n";
    foreach($lang['ld']['sy'] as $idx_kw => $tmp_kw) {
        $src .= $i[2] . ((int)$idx_kw) . " => array(\n";
        $tmp_kw['list'] = (array)$tmp_kw['list'];
        sort($tmp_kw['list']);
        $kw_esc = array_map('str_to_phpstring', $tmp_kw['list']);
        $kw_nl = true;
        $kw_pos = strlen($i[3]);
        foreach($kw_esc as $kw_data) {
            if((strlen($kw_data) + $kw_pos > 79) && $kw_pos > strlen($i[3])) {
                $src .= "\n";
                $kw_nl = true;
                $kw_pos = 0;
            }
            if($kw_nl) {
                $src .= $i[3];
                $kw_pos += strlen($i[3]);
                $kw_nl = false;
            }
            $src .= $kw_data . ', ';
            $kw_pos += strlen($kw_data) + 2;
        }
        $src .= "\n";
        $src .= $i[3] . "),\n";
    }
    $src .= $i[2] . "),\n";
    //Styles \ CSS
    $src .= $i[1] . "'STYLES' => array(\n";
    $src .= $i[2] . "'KEYWRODS' => array(\n";
    foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
        $src .= $i[3] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['style']) . ",\n";
    }
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'COMMENTS' => array(\n";
    foreach($lang['ld']['cmt']['sl'] as $idx_cmt_sl => $tmp_cmt_sl) {
        $src .= $i[3] . ((int)$idx_cmt_sl) . " => " . str_to_phpstring($tmp_cmt_sl['style']) . ",\n";
    }
    foreach($lang['ld']['cmt']['rxc'] as $idx_cmt_rxc => $tmp_cmt_rxc) {
        $src .= $i[3] . ((int)$idx_cmt_rxc) . " => " . str_to_phpstring($tmp_cmt_rxc['style']) . ",\n";
    }
    $src .= $i[3] . "'MULTI' => " . str_to_phpstring($lang['ld']['cmt']['ml'][1]['style']) . "\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'ESCAPE_CHAR' => array(\n";
    foreach($lang['ld']['str']['erx'] as $idx_str_erx => $tmp_str_erx) {
        $src .= $i[3] . ((int)$idx_str_erx). " => ". str_to_phpstring($tmp_str_erx['style']) . ",\n";
    }
    //    'HARD' => 'color: #000099; font-weight: bold;'
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'BRACKETS' => array(\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'STRINGS' => array(\n";
    foreach($lang['ld']['str']['qm'] as $idx_str_qm => $tmp_str_qm) {
        $src .= $i[3] . ((int)$idx_str_qm). " => ". str_to_phpstring($tmp_str_qm['style']) . ",\n";
    }
    //    'HARD' => 'color: #0000ff;'
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'NUMBERS' => array(\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'METHODS' => array(\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'SYMBOLS' => array(\n";
    foreach($lang['ld']['sy'] as $idx_kw => $tmp_kw) {
        $src .= $i[3] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['style']) . ",\n";
    }
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'REGEXPS' => array(\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "'SCRIPT' => array(\n";
    $src .= $i[3] . "),\n";
    $src .= $i[2] . "),\n";
    //Keyword Documentation
    $src .= $i[1] . "'URLS' => array(\n";
    foreach($lang['ld']['kw'] as $idx_kw => $tmp_kw) {
        $src .= $i[2] . ((int)$idx_kw) . " => " . str_to_phpstring($tmp_kw['docs']) . ",\n";
    }
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'OOLANG' => false,\n";
    $src .= $i[1] . "'OBJECT_SPLITTERS' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'REGEXPS' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'STRICT_MODE_APPLIES' => GESHI_MAYBE,\n";
    $src .= $i[1] . "'SCRIPT_DELIMITERS' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'HIGHLIGHT_STRICT_BLOCK' => array(\n";
    $src .= $i[2] . "),\n";
    $src .= $i[1] . "'TAB_WIDTH' => 4,\n";
    $src .= <<
GESHI_LANGFILE_FOOTER;
    //Reduce source ...
    $src = preg_replace('/array\(\s*\)/s', 'array()', $src);
    $src = preg_replace('/\,(\s*\))/s', '\1', $src);
    $src = preg_replace('/\s+$/m', '', $src);
    return $src;
}
// vim: shiftwidth=4 softtabstop=4
?>