Colorer в Linux
//v 1.1 by areus 03.03.03
#include <stdio.h>
#include <regexp\cregexp.h>
#include <string.h>
void filterStdIn(char *sRegExp){
SMatches match;
PRegExp re;
bool isOK;
char text[255];
char *sMatch;
re = new CRegExp();
sMatch = new char[255];
int len, i;
if (!re->SetExpr(sRegExp)){
printf("Error in regexp: %s\n", sRegExp);
return;
}
puts(sRegExp);
while(!feof(stdin)) {
fgets(text, 255, stdin);
isOK = re->Parse(text, &match);
for(i=0; i<match.CurMatch && isOK ; i++){
if(match.s[i] > -1){
len = match.e[i] - match.s[i];
strncpy(sMatch, text + match.s[i], len);
sMatch[len] = '\0';
printf("%s ", sMatch);
}
}
if(isOK)printf("\n");
}
delete re, sMatch;
}
main(int argc, char **argv){
if(argc>1){
filterStdIn(argv[1]);
}else{
printf("RegExpFilter 1.0 [using Colorer's rx-lib]
\r\nusage:\r\ndir | %s /regexp/[gmi]", argv[0]);
}
}
Все перечисленное - opensource(см. исходники Colorer), и кроссплатформенно!. Colorer также доступен как плагин для платформы Eclipse. Про использование Colorer в Far я позже напишу в статье "Far - универсальная IDE", а вот как я использую colorer под Linux, опишу уже сейчас. Скачаем пакет colorer для linux, и установим, замечу, что это самый короткий configure-скрипт:
$./configure
loading cache ./config.cache
checking how to run the C preprocessor... (cached) cc -E
checking whether ln -s works... (cached) yes
checking whether make sets ${MAKE}... (cached) yes
checking for main in -ldl... (cached) yes
checking for main in -lm... (cached) yes
checking for main in -lc... (cached) yes
checking for working const... (cached) yes
checking for inline... (cached) inline
creating ./config.status
creating Makefile
$make
$su -c 'make install'
Список подсвечиваемых синтаксисов довольно обширен, их 156(!):
$colorer -l|wc -l
Colorer-take5 Library beta4 01.12.2004
Copyright (c) 1999-2005 Igor Russkih
loading file types...
156
Использвание консольной colorer подробно описано тут. Я же ограничусь небольшими примерами.
Создадим маленький исходник на языке C:
$echo -e '#include\n\nmain(){\nprintf("hello colorer\\n");\n}' > hc.c
Посмотрим на него:
$cat hc.c
#include
main(){
printf("hello colorer\n");
}
Сгенерируем HTML с подсветкой в файле hc.html:
$colorer -h hc.c -o hc.html
Заметим что Colorer автоматически определил тип файла, и соответственно подсветил синтаксис. Автоопределение происходит как по расширению, так и по magic-байтам(это можно менять, правя соотв. *,hrc файлы). Такое поведение можно изменять, жестко указав тип(ключ -t).
Если мы не указываем имя выходного файла (ключ -o), и указываем отключить HTML заголовки (ключ -dh, что значит disable headers), то получаем на STDOUT html-разметку для вставки(html-snippet):

Я копирую и вставляю эту разметку в html-код этого поста:
#include<stdio.h>
main(){
printf("hello colorer\n");
}
Теперь, если обьединить это с функцией clip:

html-snippet "ляжет" прямо в буфер обмена(clip -p перенаправит вывод в буфер), после чего остается только вставить код в редактируемый пост. Для удобства я написал следующую функцию:
function chl {
colorer -dh -h $* | clip p
}
положил ее в ~/.alias и использую ее так: chl
Например:
chl print_ora_users_ldif.pl
Можно передавать Colorer'у ключи, например для нумерации строк:
chl -ln print_ora_users_ldif.pl
Можно перенаправлять STDOUT:
cat print_ora_users_ldif.pl |chl
Замечу, что код подсветки зачастую занимает довольно большой объем. За его сокращение "отвечает" ключ -ht, но в этом случае нам нужно сперва определить соответствующие css-классы(def_Comment,def_Syntax, и т.д.).
Очень жаль, что недоступна страница Midnight Commander integration page, ссылка на которую есть на офсайте, потому как других упоминаний о такой интеграции, мне найти не удалось.
Система генерации HTML Colorer'ом доступна в online.
Дополнительные ссылки:









