Pull to refresh

Выделение синтаксиса исходников для хабратопиков

Reading time4 min
Views472
Добрый день.

Прежде всего, хотелось бы поблагодарить w999d за инвайт :) В ответ захотелось сделать для хабрачан что-то приятное :)

Когда я писал свой первый пост на Хабре в песочницу, я обратил внимание, что Хабр по какой-то загадочной для меня причине не поддерживает тег выделения синтаксиса для постов. Когда пишешь какую-нибудь статью по программированию, исходник нужно форматировать обязательно, иначе его просто читать никто не будет. Тогда я как-то обошелся каким-то сторонним форматтером, работа которого для PHP кода меня не сильно устроила. Но в мою голову запала мысль сделать нормальный форматтер для хабрачан. Впрочем, даже если окажется, что я изобрел велосипед, время, которое я провел, разбираясь с исходником форматтера, точно не потрачено зря.


Итак, представляю самую что ни на есть альфа версию HabraSyntax форматтера: http://habrasyntax.fractalizer.ru

После форматирования, получается примерно следующее:

<?php
/*======================================================================*\
|| #################################################################### ||
|| # vBulletin 3.7.3
|| # ---------------------------------------------------------------- # ||
|| # Copyright ©2000-2008 Jelsoft Enterprises Ltd. All Rights Reserved. ||
|| # This file may not be redistributed in whole or significant part. # ||
|| # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # ||
|| # www.vbulletin.com | www.vbulletin.com/license.html # ||
|| #################################################################### ||
\*======================================================================
*/

// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);

// #################### DEFINE IMPORTANT CONSTANTS #######################
define('THIS_SCRIPT', 'ajax');
define('CSRF_PROTECTION', true);
define('LOCATION_BYPASS', 1);
define('NOPMPOPUP', 1);

// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array('posting');
switch ($_POST['do'])
{
    case 'fetchuserfield':
    case 'saveuserfield':
        $phrasegroups[] = 'cprofilefield';
        $phrasegroups[] = 'user';
}

// get special data templates from the datastore
$specialtemplates = array('bbcodecache');

// pre-cache templates used by all actions
$globaltemplates = array();

// pre-cache templates used by specific actions
$actiontemplates = array(
    'fetchuserfield' => array(
        'memberinfo_customfield_edit',
        'userfield_checkbox_option',
        'userfield_optional_input',
        'userfield_radio',
        'userfield_radio_option',
        'userfield_select',
        'userfield_select_option',
        'userfield_select_multiple',
        'userfield_textarea',
        'userfield_textbox',
    )
);

$_POST['ajax'] = 1;

// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
require_once(DIR . '/includes/class_xml.php');

// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################

($hook = vBulletinHook::fetch_hook('ajax_start')) ? eval($hook) : false;

// #############################################################################
// user name search

if ($_POST['do'] == 'usersearch')
{
    $vbulletin->input->clean_array_gpc('p', array('fragment' => TYPE_STR));

    $vbulletin->GPC['fragment'] = convert_urlencoded_unicode($vbulletin->GPC['fragment']);

    if ($vbulletin->GPC['fragment'] != '' AND strlen($vbulletin->GPC['fragment']) >= 3)
    {
        $fragment = htmlspecialchars_uni($vbulletin->GPC['fragment']);
    }
    else
    {
        $fragment = '';
    }

    $xml = new vB_AJAX_XML_Builder($vbulletin, 'text/xml');
    $xml->add_group('users');

    if ($fragment != '')
    {
        $users = $db->query_read_slave("
            SELECT userid, username FROM
" . TABLE_PREFIX . "user
            WHERE username LIKE('
" . $db->escape_string_like($fragment) . "%')
            ORDER BY username
            LIMIT 15
        
");
        while ($user = $db->fetch_array($users))
        {
            $xml->add_tag('user', $user['username'], array('userid' => $user['userid']));
        }
    }

    $xml->close_group();
    $xml->print_xml();
}
Этот исходный код отформатирован с помощью FractalizeR's HabraSyntax Source Code Highlighter.


Поскольку, код только написан, замечания и комментарий приветствуются.

Поддерживается достаточное количество языков программирования, так что… :) Приятной работы.
Tags:
Hubs:
Total votes 19: ↑17 and ↓2+15
Comments16

Articles