louis vuitton bag moncler jacka ugg boots mbt sko louis vuitton oslo moncler ugg www.steklo1.ru
   Поиск
 

Алгоритмы

Алгоритмы на С#

Cи Шарп это просто Simple C#
Логин Пароль Вход Регистрация
Главная
Изучаем C#
Web-приложения
Win-приложения
Web-сервисы
ADO.NET
FrameWork
Алгоритмы
Исходники
Классы
Среда разработки
Статьи
Форум
FAQ
О Проекте
Обратная связь
Отблагодарить
Rambler's Top100

Оформление программного кода: синтаксис и подсветка ключевых слов

Задача:


На своем сайте необходимо сделать оформление программного кода

Проблемы



  • Форматирование - отступы вложенных блоков

  • Подсветка синтаксиса: Ключевые (зарезервированные) слова, комментарии, значения строковых переменных


Исходные данные


Имеем строку, в которой
1. разделители строк - <BR>
2. разделители слов - пробелы
3. кавычки - &quote;

Решение


Первая проблема появилась собственно из-за того, что сколько бы пробелов или табуляций не стояло бы между словами, любой
броузер склеивает их в один пробел
при этом форматирования типа



if (1==1)
{
    MessageBox.Show("True");
}
else
{
    MessageBox.Show("False");
}


превращается в


if (1==1)
{
MessageBox.Show("True");
}
else
{
MessageBox.Show("False");
}


Что же делать?
Необходимо заменить все пробелы на спец. символы HTML. Для пробела это &nbsp;



string tmp = code.Replace(" ""&nbsp;");



Теперь первая часть второй проблемы - подсветка ключевых слов.
Во-первых создадим массив, в котором будут содержаться все ключевые слова, которые мы хотим выделить другим светом



        string[] KeyWords = new string[] { "abstract","do","in","protected","true","as","double","int","public","try","base","else","interface","readonly","typeof",
            "bool","enum","internal","ref","uint","break","event","is","return","ulong","byte","explicit","lock","sbyte","unchecked",
            "case","extern","long","sealed","unsafe","catch","false","namespace","short","ushort","char","finally","new","sizeof","using",
            "checked","fixed","null","stackalloc","virtual","class","float","object","static","void","const","for","operator","string","volatile",
            "continue","foreach","out","struct","while","decimal","goto","override","switch","default","if","params","this","delegate","implicit","private","throw" };



Далее в цикле проверяем есть ключевое слово в нашей входной строке или нет, если есть то оборачиваем его в тэг font нужного нам цвета.
Для замены (обертки) используем регулярные выражения


                foreach (string word in KeyWords)
                {
                    if (code.Contains(word))
                    {
                        // Оборачиваем если ключевое слово начинается не с буквы и заканчивается не буквой
                        // Иначе это просто вхождение ключевого слова в другое слово
                        tmp = Regex.Replace(tmp, @"(\W)(" + word + @")(\W)""$1$2$3");
                    }
                }
 


Подсветка значений строковых переменных (заключаются в кавычки либо в апострофы) как и комментариев (начинаются с // или заключены в /* */)
решаются тем же самым способом - регулярными выражениями

Строковые значения


                // подсвечиваем то что в кавычках
                tmp = Regex.Replace(tmp, @"(&quot;.+?&quot;)""$1");
                // подсвечиваем то что в апострафах
                tmp = Regex.Replace(tmp, @"('.+?')""$1");


Комментарии


                // подсвечиваем от начала где встретились два слэша до конца HTML-ной строки
                tmp = Regex.Replace(tmp, @"(//.+?<(BR|br)>)""$1");
                // подсвечиваем все что внутри /* */
                tmp = Regex.Replace(tmp, @"(/\*.+?\*/)""$1");



Примечание
К сожалению подсветить ключевые слова в регистронезависимых языках (например: SQL) таким образом не получиться.
Необходимо еще добавить приведение регистров слов

Предыдущая стр.    Оглавление   
Средняя оценка: (5 - 1 голосов)
Для оценки необходимо зарегистрироваться


Только зарегистрировавшиеся пользователи могут оставлять комментарии

Комментирует OlechkaLuckyGirl 24.10.2010 10:56:31




Практический обучающий видео-курс "Основы C#"

От профессионального
разработчика для начинающих
и опытных программистов!

Кликните, чтобы изучить
язык C# с нуля и научиться
писать программы под платформу .NET!