AXForum  
Вернуться   AXForum > Прочие обсуждения > Обсуждение форума
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 28.04.2009, 13:41   #1  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Синтаксический подсвет для Х++
Вопрос Alexey_M, mazzy

Сейчас тэг [xpp][/xpp] хорошо обрамляет год и правильно подсвечивает Х++ код.

Этого часто не хватает, когда пишем сообщения в различных блогах.

Можно как-то этот обработчик оформить отдельно?
Я сейчас пользуюсь вот этим.
Также в Windows Live Writer есть возможность вставки кода - можно было бы сделать отдельным плагином (ссылка на SDK)
Я попробую поиграться с SDK на днях, если время будет.
Но хотелось бы логику саму чтобы вы предоставили (или сделали страничку, схожую с той, что указана выше, где в он-лайн можно это сделать)

Что скажете?
Старый 28.04.2009, 13:58   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Чувствую, что что-то интересное, но не очень понимаю вопроса.

Цитата:
Сообщение от kashperuk Посмотреть сообщение
Можно как-то этот обработчик оформить отдельно?
что значит "отдельно"?
Какой результат ожидается?
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2009, 14:11   #4  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ожидается, что любой человек (даже гость форума) сможет зайти на страничку а-ля www.axforum.info/XppCodeHighlight, там вставить свой x++ код, и получить на выходе html для вставки в блог или другой сайт, который будет содержать этот код, красиво раскрашенный.
Аналогичная функциональность приведена по ссылке в первом сообщении, но там в списке языков нет Х++.
Ну, а на страничку эту можно еще и рекламу вставить, чтобы люди глазели
Старый 28.04.2009, 14:56   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10


Обрати внимание, я спросил "ожидаемые результаты", а не что он будет делать.
Цитата:
Сообщение от kashperuk Посмотреть сообщение
вставить свой x++ код, и получить на выходе html для вставки в блог или другой сайт, который будет содержать этот код, красиво раскрашенный.
А раскрашенный как?
стилями/span'ами? тегом font?
должен ли в результате присутствовать тег <pre> или <code>? или оба?
А почему html, а не bb-коды для форумов/блогов? Если bb-коды, то какие?

В общем, нужно определить что такое "красиво" в ожидаемом результате

чтбоы осознать масштаб хотелки, вот конструктор html-кода для блока яндекс-рекламы http://partner.yandex.ru/constructor...r.html?p=14808 или поиска по сайту http://site.yandex.ru/ (разделы, где настраивается внешний вид).

В общем, я думаю, что это такая замечательная хотелка, которую можно реализовать отдельно от форума силами энтузиастов. Здесь с удовольствием готов разместить ссылку и бесплатно прорекламировать.
__________________
полезное на axForum, github, vk, coub.
Старый 28.04.2009, 16:15   #6  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Аналогичная функциональность приведена по ссылке в первом сообщении, но там в списке языков нет Х++.
там есть язык "axapta"
Старый 28.04.2009, 17:01   #7  
Aleksey_M is offline
Aleksey_M
Administrator
Аватар для Aleksey_M
 
520 / 355 (13) ++++++
Регистрация: 26.08.2005
Адрес: Москва
kashperuk
Ну вот примерно так. Тупо в лоб. Со всеми некрасивостями.
PHP код:
        // remove htmlspecialchars'd bits and excess spacing
        
$code rtrim($code);
        
$code preg_replace('#^\W*\n#'''$code); //Вырезаем ведущие переводы строки

        
$operators = array('abstract''anytype''asc''at''avg''break''breakpoint''by''byref''case''catch''changecompany''class''classnum''classstr''client''configurationkeynum''configurationkeystr''container''continue''count''crosscompany''date''default''delete_from''desc''display''div''do''edit''else''enumnum''enumstr''exists''extendedtypenum''extendedtypestr''extends''false''featurekeynum''featurekeystr''fieldnum''fieldpname''fieldstr''final''firstfast''firstonly''firstonly10''firstonly100''firstonly1000''flush''for''forceliterals''forcenestedloop''forceplaceholders''forceselectorder''formstr''forupdate''from''group''helpapplstr''helpdevstr''hint''htmlpdahorizontalpagestr''htmlpdaverticalpagestr''htmlstandardpagestr''identifierstr''if''implements''index''indexnum''indexstr''insert_recordset''int''int64''interface''join''left''licensecodenum''licensecodestr''like''literalstr''maxof''menuitemactionstr''menuitemdisplaystr''menuitemoutputstr''menustr''methodstr''minof''mod''nbofetch''new''next''nofetch''not''notexists''null''optimisticlock''order''outer''pause''pessimisticlock''print''private''protected''public''querystr''real''repeatableread''resourcestr''retry''return''reverse''right''securitykeynum''securitykeystr''select''server''setting''static''staticmethodstr''str''sum''super''switch''tablecollectionstr''tablefieldgroupstr''tablelock''tablemethodstr''tablenum''tablepname''tablestaticmethodstr''tablestr''throw''true''try''ttsabort''ttsbegin''ttscommit''typeid''update_recordset''varstr''void''webclientfilestr''webformstr''webmenustr''webreportstr''webserverfilestr''where''while''window');

        
$string_1 false// '
        
$string_2 false// "
        
$comment 0;    // 1 - было /
                // 2 - было //
                // 3 - было /*
        
$slash false// было \
        
$word '';
        
$result '';

        for (
$i 0$i strlen($code); $i++)
        {
            
$char $code{$i};

            
//сбрасываем признак начала возможного комментария
            
if ($comment == && $char != '/' && $char != '*')
            {
                
$comment 0;
                
$word .= '/';
            }
            switch (
$char) {
            case 
"'":
                if (
$comment<&& !$string_2 && !$slash)
                {
                    if (
$string_1)
                    {
                        
$result .= '<span style="color: red">'.htmlspecialchars($word.$char).'</span>';
                        
$string_1 false;
                        
$string_2 false;
                        
$comment 0;
                        
$word '';
                    }else{
                        
$result .= htmlspecialchars($word);
                        
$word $char;
                        
$string_1 true;
                    }
                }else{
                    
$word .= "'";
                }
                
$slash false;
                break;
            case 
"\"":
                if (
$comment<&& !$string_1 && !$slash)
                {
                    if (
$string_2)
                    {
                        
$result .= '<span style="color: red">'.htmlspecialchars($word.$char).'</span>';
                        
$string_1 false;
                        
$string_2 false;
                        
$comment 0;
                        
$word '';
                    }else{
                        
$result .= htmlspecialchars($word);
                        
$word $char;
                        
$string_2 true;
                    }
                }else{
                    
$word .= '"';
                }
                
$slash false;
                break;
            case 
"/":
                switch (
$comment) {
                case 
0:
                    if (!
$string_1 && !$string_2)
                    {
                        
//$word .= $char; добавим после
                        
$comment 1;
                    }else{
                        
$word .= $char;
                    }
                    break;
                case 
1:
                    
$result .= htmlspecialchars($word);
                    
$word $char;
                    
$string_1 false;
                    
$string_2 false;
                    
$comment 2;
                    break;
                case 
2:
                    
$word .= $char;
                    break;
                case 
3:
                    if (
$comment == && $code{($i==0)?1:$i-1}=='*')
                    {
                        
$result .= '<span style="color: green">/'.htmlspecialchars($word.$char).'</span>';
                        
$string_1 false;
                        
$string_2 false;
                        
$comment 0;
                        
$word '';
                    }else{
                        
$word .= $char;
                    }
                }
                
$slash false;
                break;
            case 
"\\":
                
$slash = !$slash;
                
$word .= $char;
                break;
            case 
"\n":
                if (
$comment == 2)
                {
                    
$result .= '<span style="color: green">/'.htmlspecialchars($word.$char).'</span>';
                    
$string_1 false;
                    
$string_2 false;
                    
$comment 0;
                    
$word '';
                }else{
                    
$word .= $char;
                }
                
$slash false;
                break;
            case 
"*":
                if (
$comment == 1)
                {
                    
$result .= htmlspecialchars($word);
                    
$word $char;
                    
$string_1 false;
                    
$string_2 false;
                    
$comment 3;
                }else{
                    
$word .= $char;
                }
                
$slash false;
                break;
            default:
                if (!
$string_1 && !$string_2 && $comment<2)
                {
                    if (
in_array(strtolower($char),array('0','1','2','3','4','5','6','7','8','9',
                        
'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')))
                    {
                        
$word .= $char;
                    }elseif (
in_array(strtolower($word), $operators))
                    {
                        
$result .= '<span style="color: blue">'.htmlspecialchars($word).'</span>'.$char;
                        
$word '';
                    }else{
                        
$result .= htmlspecialchars($word.$char);
                        
$word '';
                    }
                }else{
                    
$word .= $char;
                }
                
$slash false;
            }
        }
        
//Подсвечиваем незакрытое
        
if ($string_1 OR $string_2)
        {
            
$result .= '<span style="color: red">'.htmlspecialchars($word).'</span>';
            
$string_1 false;
            
$string_2 false;
            
$comment 0;
            
$word '';
        }
        elseif (
$comment 1)
        {
            
$result .= '<span style="color: green">/'.htmlspecialchars($word).'</span>';
            
$string_1 false;
            
$string_2 false;
            
$comment 0;
            
$word '';
        }
        
$code $result htmlspecialchars($word); 
__________________
Был грязный плащ на нем одет,
Цилиндр черный смят в гармошку...
За это сообщение автора поблагодарили: kashperuk (5).
Старый 28.04.2009, 17:10   #8  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ice Посмотреть сообщение
там есть язык "axapta"
Хмм. Где?
Старый 28.04.2009, 17:15   #9  
ice is offline
ice
Участник
Аватар для ice
Лучший по профессии 2014
 
1,738 / 404 (17) +++++++
Регистрация: 23.03.2006
Цитата:
Сообщение от kashperuk Посмотреть сообщение
Хмм. Где?
на том сайте есть ссылка на это.
скачай и наслаждайся
За это сообщение автора поблагодарили: Poleax (1).
Старый 28.04.2009, 17:36   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от ice Посмотреть сообщение
на том сайте есть ссылка на это.
скачай и наслаждайся
Аа. ну да, это то же самое, что Максим вверху запостил
Теги
x++, подсветка

 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 14:36.