Source-Code.ME - HightLight

В предыдущем посте я активно использовал вставки кусков кода в текст поста. Как вы могли видеть, текст был подсвечен и красиво оформлен. Это было сделано не спомощью стандартных средств, а с помощью самописного проекта Source-Code.ME (s-c.me).
При его написании использовалось: ASP.NET,IIS,ASP AJAX Toolkit,Log4net(логирование),URLRewriter(перезапись обращений), inettuts(Перемещаемые виджеты), jQuery(работа с куками), ManoliCode HighLighter(основа для подсветки кода).
Времени потрачено: 4 вечера.
Что нового сделано: Автоматическое определение механизма подсветки в зависимости от куска кода; PHP подсветка; Улучшенный алгоритм подсветки объектов для Csharp кода; Интегрирован inettuts в качестве компонента и виджетов; Возможность подсветки как чистым HTML'ом так и в виде CSS вставки; Добавлено выравнивание по левому краю; Возможность копирования как кода, так и конечного HTML'a по одному клику.
Что в планах: Автоматическое проставление тэгов для кода и поиск по тегам; Обсуждение куска кода при помощи F*Connect; Проверка орфографии(рус-анг) в куске кода с предложением возможных правильных вариантов; Мобильная версия =), позиционированная как Spell-Check.ME с возможностью перевода слов-фраз; Может еще какие мысли прийдут в голову.

Пример подсветки класса URLRewriter под катом, кому не влом - тестируйте =)
Copy Source | Copy HTML
  1. using System.Configuration;
  2. using System.Diagnostics;
  3. using System.Text.RegularExpressions;
  4. using System.Web;
  5. using System.Xml;
  6.  
  7. // nicked from http://www.codeproject.com/aspnet/URLRewriter.asp
  8.     public class URLRewriter : IConfigurationSectionHandler {
  9.         public static log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
  10.         protected XmlNode _oRules = null;
  11.  
  12.         protected URLRewriter() { }
  13.  
  14.         public string GetSubstitution(string zPath) {
  15.             Regex oReg;
  16.  
  17.             foreach (XmlNode oNode in _oRules.SelectNodes("rule")) {
  18.                 // get the url and rewrite nodes
  19.                 XmlNode oUrlNode = oNode.SelectSingleNode("url");
  20.                 XmlNode oRewriteNode = oNode.SelectSingleNode("rewrite");
  21.  
  22.                 // check validity of the values
  23.                 if (oUrlNode == null || string.IsNullOrEmpty(oUrlNode.InnerText)
  24.                     || oRewriteNode == null || string.IsNullOrEmpty(oRewriteNode.InnerText)) {
  25.                     Logger.Warn("Invalid urlrewrites rule discovered in web.config file.");
  26.                     continue;
  27.                 }
  28.  
  29.                 oReg = new Regex(oUrlNode.InnerText, RegexOptions.IgnoreCase);
  30.  
  31.                 // if match, return the substitution
  32.                 Match oMatch = oReg.Match(zPath);
  33.                 if (oMatch.Success) {
  34.                     return oReg.Replace(zPath, oRewriteNode.InnerText);
  35.                 }
  36.             }
  37.  
  38.             return null; // no rewrite
  39.         }
  40.  
  41.         public static void Process() {
  42.             URLRewriter oRewriter = (URLRewriter)System.Configuration.ConfigurationManager.GetSection("urlrewrites");
  43.  
  44.             string zSubst = oRewriter.GetSubstitution(HttpContext.Current.Request.Path);
  45.  
  46.             if (!string.IsNullOrEmpty(zSubst)) {
  47.                 Logger.InfoFormat("Rewriting url '{0}' to '{1}' ", HttpContext.Current.Request.Path, zSubst);
  48.                 HttpContext.Current.RewritePath(zSubst);
  49.             }
  50.         }
  51.  
  52.         #region Implementation of IConfigurationSectionHandler
  53.         public object Create(object parent, object configContext, XmlNode section) {
  54.             _oRules = section;
  55.  
  56.             return this;
  57.         }
  58.         #endregion
  59.     }
PS: Исходники с http://source.virtser.net/ не использовались.

Метки: Code | life | news


Комментарии (1) -

декабря 29. 2008 08:21

lilumi

Офигенно сделано. Люблю всякие хайлайтеры.
Я так понял код он сохраняет у тебя на сервере?
Интересная фишка этот inettuts — надо будет с ним что-нить зачудить.

Добавить комментарий



biuquote
Loading


Кто я?

Программист. Я слежу за блогосферой и знаю, как будет развиваться интернет. Когда у меня есть время я даже прилагаю для этого усилия. Подробнее

Последние комментарии

Topbot at FeedsBurner

Копирайт

Все мысли, высказанные в блоге, являются моим мнением и за это мнение меня никто не забанит! Кроме того, никто не имеет право копировать материалы блога без использования ctrl+C/V!

© Copyright 2008