- Автор flashr декабря 25, 2008
В предыдущем посте я активно использовал вставки кусков кода в текст поста. Как вы могли видеть, текст был подсвечен и красиво оформлен. Это было сделано не спомощью стандартных средств, а с помощью самописного проекта
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- using System.Configuration;
- using System.Diagnostics;
- using System.Text.RegularExpressions;
- using System.Web;
- using System.Xml;
-
- // nicked from http://www.codeproject.com/aspnet/URLRewriter.asp
- public class URLRewriter : IConfigurationSectionHandler {
- public static log4net.ILog Logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
- protected XmlNode _oRules = null;
-
- protected URLRewriter() { }
-
- public string GetSubstitution(string zPath) {
- Regex oReg;
-
- foreach (XmlNode oNode in _oRules.SelectNodes("rule")) {
- // get the url and rewrite nodes
- XmlNode oUrlNode = oNode.SelectSingleNode("url");
- XmlNode oRewriteNode = oNode.SelectSingleNode("rewrite");
-
- // check validity of the values
- if (oUrlNode == null || string.IsNullOrEmpty(oUrlNode.InnerText)
- || oRewriteNode == null || string.IsNullOrEmpty(oRewriteNode.InnerText)) {
- Logger.Warn("Invalid urlrewrites rule discovered in web.config file.");
- continue;
- }
-
- oReg = new Regex(oUrlNode.InnerText, RegexOptions.IgnoreCase);
-
- // if match, return the substitution
- Match oMatch = oReg.Match(zPath);
- if (oMatch.Success) {
- return oReg.Replace(zPath, oRewriteNode.InnerText);
- }
- }
-
- return null; // no rewrite
- }
-
- public static void Process() {
- URLRewriter oRewriter = (URLRewriter)System.Configuration.ConfigurationManager.GetSection("urlrewrites");
-
- string zSubst = oRewriter.GetSubstitution(HttpContext.Current.Request.Path);
-
- if (!string.IsNullOrEmpty(zSubst)) {
- Logger.InfoFormat("Rewriting url '{0}' to '{1}' ", HttpContext.Current.Request.Path, zSubst);
- HttpContext.Current.RewritePath(zSubst);
- }
- }
-
- #region Implementation of IConfigurationSectionHandler
- public object Create(object parent, object configContext, XmlNode section) {
- _oRules = section;
-
- return this;
- }
- #endregion
- }
PS: Исходники с http://source.virtser.net/ не использовались.
Метки: Code | life | news