diff options
author | mbornet-hl <mbornet.pro@wanadoo.fr> | 2015-09-10 20:28:47 +0200 |
---|---|---|
committer | mbornet-hl <mbornet.pro@wanadoo.fr> | 2015-09-10 20:28:47 +0200 |
commit | e3a4277bfadd4ee70b573304e0cbc1b4f3a48fcf (patch) | |
tree | 180614f4896ed84406802330c4ffd6cf09a06b4d | |
parent | ae2a91c3d410552f897e2e3ef5d0d9289ee1bd94 (diff) | |
download | hl-e3a4277bfadd4ee70b573304e0cbc1b4f3a48fcf.zip hl-e3a4277bfadd4ee70b573304e0cbc1b4f3a48fcf.tar.gz hl-e3a4277bfadd4ee70b573304e0cbc1b4f3a48fcf.tar.bz2 |
hl now manages /etc/default/hl config file.
-rw-r--r-- | man1/hl.1 | 16 | ||||
-rw-r--r-- | src/.hl.cfg | 409 | ||||
-rw-r--r-- | src/cr_cpri.h | 3 | ||||
-rw-r--r-- | src/cr_main.c | 332 | ||||
-rwxr-xr-x | src/hl | bin | 36120 -> 36120 bytes |
5 files changed, 331 insertions, 429 deletions
@@ -1,5 +1,5 @@ -.\" @(#) [MB] cr_hl.1 Version 1.7 du 15/09/04 - -.TH "HL" "1" "July 2015" "" "User Commands" +.\" @(#) [MB] cr_hl.1 Version 1.9 du 15/09/10 - +.TH "HL" "1" "September 2015" "" "User Commands" .SH "NAME" hl - Colorize strings matching regular expressions .SH "SYNOPSIS" @@ -159,9 +159,11 @@ Colorize the output of the \fBcal\fP command with the first three month in brigh .SH "FILES" .TP -The \fBhl\fP command can use a configuration file named \fB$HOME/.hl.cfg\fP . +Since version 1.57, the default configuration for \fBhl\fP is \fB/etc/default/hl\fP . This configuration file is common to all users. +But each user can define his own configurations in his own \fB$HOME/.hl.cfg\fP configuration file. +Users' configurations have the precedence over default configurations. -Its recognized syntax is : +Their recognized syntax is : - comment lines (beginning with a '#'), @@ -224,13 +226,15 @@ hl : .EE .SH "MAN PAGE VERSION" -The version of this man page is 1.7. -It is compatible with hl version 1.42 and upper. +The version of this man page is 1.9. +It is compatible with hl version 1.57 and upper. .SH "AUTHOR" .PP The original version of this manual page was written by Martial Bornet <mbornet (.) pro (at) wanadoo (.) fr> for the \fBGNU/Linux\fP system. +The author also can be contacted with <man (.) flashnux (at) gmail (.) com>. + Permission is granted to copy, distribute and/or modify this document under the terms of the GNU GPL. diff --git a/src/.hl.cfg b/src/.hl.cfg index 8b4974e..cc90a58 100644 --- a/src/.hl.cfg +++ b/src/.hl.cfg @@ -1,5 +1,5 @@ # -# @(#) [MB] cr_.hl.cfg Version 1.25 du 15/09/07 - +# @(#) [MB] cr_.hl.cfg Version 1.27 du 15/09/10 - # acl : @@ -18,15 +18,15 @@ apt : # Just for fun : C syntax, close to vim's C : - -e - -%c '/\*' - -. '\*/' - -g '\<(void|bool|char|int|long|unsigned|float|double|struct|enum)\>' - -y '\<(sizeof|switch|case|default|for|while|if|else|[0-9]|stderr|stdout)\>' - -m '(\\n|\\r|\\b)' - -y '".*"' - -m '^[ ]*#[a-zA-Z]+' - -y '^[ ]*#include[ ]+(<.*>|".*")' + -e + -%c '/\*' + -. '\*/' + -g '\<(void|bool|char|int|long|unsigned|float|double|struct|enum)\>' + -y '\<(sizeof|switch|case|default|for|while|if|else|[0-9]|stderr|stdout)\>' + -m '(\\n|\\r|\\b)' + -y '".*"' + -m '^[ ]*#[a-zA-Z]+' + -y '^[ ]*#include[ ]+(<.*>|".*")' cal : -e @@ -181,10 +181,10 @@ ethtool : -g 'duplex:.*full|link detected:.*yes|speed:.*1000mb/s' eth_VIP : - -e - -3 - -%c '(eth[0-9]+(\.[0-9]+){0,1}:[0-9]+)' - -. '^$' + -e + -3 + -%c '(eth[0-9]+(\.[0-9]+){0,1}:[0-9]+)' + -. '^$' fail2ban : -e @@ -193,23 +193,23 @@ fail2ban : fdisk : -e - -b 'Device Boot.*' - -3w 'Disk.*(/dev/sd.)' - -2 - -c '.*/dev/sda.*' - -%c 'Disk /dev/sda' - -. '^$' - -g '.*/dev/sdb.*' - -%g 'Disk /dev/sdb' - -. '^$' - -y '.*/dev/sdc.*' - -%y 'Disk /dev/sdc' - -. '^$' - -m '.*/dev/sdd.*' - -%m 'Disk /dev/sdd' - -. '^$' - -b '.*Device.*' - -1G '.*/dev/sde.*' + -b 'Device Boot.*' + -3w 'Disk.*(/dev/sd.)' + -2 + -c '.*/dev/sda.*' + -%c 'Disk /dev/sda' + -. '^$' + -g '.*/dev/sdb.*' + -%g 'Disk /dev/sdb' + -. '^$' + -y '.*/dev/sdc.*' + -%y 'Disk /dev/sdc' + -. '^$' + -m '.*/dev/sdd.*' + -%m 'Disk /dev/sdd' + -. '^$' + -b '.*Device.*' + -1G '.*/dev/sde.*' free : -e @@ -273,13 +273,13 @@ hl_usage : -w '(-w .*)' hosts : - -e - -b '#.*' - -1R '^([ ]+)[0-9.]' - -2g '^[ ]*\<((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))\>' + -e + -b '#.*' + -1R '^([ ]+)[0-9.]' + -2g '^[ ]*\<((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))\>' -3r '(([0-9]{1,3}\.){3}[0-9]{1,3})' - -3c '^[ ]*[0-9.]+[ ]+([^ ]+)' - -2y '^[ ]*[0-9.]+[ ]+[^ ]+(.+)' + -3c '^[ ]*[0-9.]+[ ]+([^ ]+)' + -2y '^[ ]*[0-9.]+[ ]+[^ ]+(.+)' ifconfig : -ei @@ -295,7 +295,7 @@ IP : --validate_IP ip : - -e + -e -3g '\<((([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]))\>' iptables : @@ -349,36 +349,36 @@ man : -3b '(Example .*):' namei : - -e - -3c '.* -> .*' - -2b '^ *d .*' - -3g '^ *- .*' - -y '^f: .*' - -r '^( *? .*|.* No such file or directory.*)' + -e + -3c '.* -> .*' + -2b '^ *d .*' + -3g '^ *- .*' + -y '^f: .*' + -r '^( *? .*|.* No such file or directory.*)' netstat : -ei - -g 'ESTABLISHED' - -1y 'LISTEN' - -m 'TIME_WAIT' + -g 'ESTABLISHED' + -1y 'LISTEN' + -m 'TIME_WAIT' -g '\<((192.168.[0-9]{1,3}\.[0-9]{1,3}))\>' -b '\<((127\.[01]\.[01]\.[01])|(0\.0\.0\.0))\>' -r '\<(([0-9]{1,3}\.){3}[0-9]{1,3})\>' passwd : - -e - -c '^[^:]+' - -m '^[^:]+:([^:]+):' - -y '^[^:]+:[^:]+:([^:]+:[^:]+):' - -c '^([^:]*:){4}([^:]+)' - -g '^([^:]*:){5}([^:]+)' - -y '^([^:]*:){6}([^:]+)' + -e + -c '^[^:]+' + -m '^[^:]+:([^:]+):' + -y '^[^:]+:[^:]+:([^:]+:[^:]+):' + -c '^([^:]*:){4}([^:]+)' + -g '^([^:]*:){5}([^:]+)' + -y '^([^:]*:){6}([^:]+)' passwd_chk : - -e - -G '^([^:]+):.*(/bin/false)$' - -R '^([^:]+).*:(/bin/bash)$' - --passwd + -e + -G '^([^:]+):.*(/bin/false)$' + -R '^([^:]+).*:(/bin/bash)$' + --passwd percent : -e @@ -394,6 +394,17 @@ ps_cpu : -c '00:00:0[1-9] .*' -b '00:00:00 .*' +ps_cpu_time : + -e + -3 + -r '((0[1-9]|[1-9][0-9])(:[0-9]{2}){2} .*)' + -y '(00:(0[1-9]|[1-9][0-9]):[0-9]{2} .*)' + -c '(00:00:[1-9][0-9] .*)' + +# Alias de ps_cpu_time : +ps : + --ps_cpu_time + rev_color_names : -R 'red' -G 'green' @@ -459,12 +470,12 @@ virsh_list : -y '.*paused' w : - -e - -b '.*load average.*|^USER.*' - -r '^root .*' - -c ' /bin/bash' - -y ' /usr/bin/python' - -g '.+' + -e + -b '.*load average.*|^USER.*' + -r '^root .*' + -c ' /bin/bash' + -y ' /usr/bin/python' + -g '.+' xxd : -e @@ -473,251 +484,107 @@ xxd : -g '.{16}$' -c '[[:xdigit:]]' -za0 : - -e - -r '.* 0$' - -g '.' - -za_conf : - -ei - -b '[ ]*#.*' - -g '^[-_.[:alnum:]]+[ ]*:|-C[ ]+[-_.[:alnum:]]+' - -C '<db::' - -c '[-[:alnum:]]+:[^ ]+' - -m '[ ](-[-_[:alnum:]]+|--[-_[:alnum:]]+)' - -r '-M[ ]+(fs|users|rpm|dpkg|sysconf)' - -y '(-o|--html-out)[ ]+[^ ]+' - -w '(--title|--label)[ ]+[^ ]+' - -za_usage : - -e - -3c '\-M ([^:].*)' - -3y '^--module .*' - -3y '^--[^ ]+' - -2g '\--[^ ]+' - -3b ' -.\ ' - -3m ':(.+)' - -# For test purposes : -# ~~~~~~~~~~~~~~~~~~~ -alpha : - -e - -y 'alpha|ALPHA' - -beta : - -e - -b 'beta|BETA' - -alphabeta : - --alpha - --beta - -alpha2 : - -e - -y 'alpha|ALPHA' - --beta - -beta : - -e - -b 'beta|BETA' - -alphabeta : - --alpha - --beta - -alphabeta2 : - --alpha2 - -col_dupl : - -e - -r 'a' - -g 'ab' - -r 'abc' - -c 'abcd' - -# -# Range : -# 0 => 124661 -# 124662 => 249323 -# 249324 => 415538 -# -free_used_swap : - -e - -g '\<[0-9]\>' - -g '\<[1-9][0-9]\>' - -g '\<[1-9][0-9]{2}\>' - -g '\<[1-9][0-9]{3}\>' - -g '\<[1-9][0-9]{4}\>' - -g '\<1[01][0-9]{4}\>' - -g '\<12[0-3][0-9]{3}\>' - -g '\<124[0-5][0-9]{2}\>' - -g '\<1246[0-5][0-9]\>' - -g '\<12466[0-1]\>' - -Er '.' - -swap : - -e - -g '\<[0-9]\>' - -y '\<[1-9][0-9]\>' - -b '\<[1-9][0-9]{2}\>' - -m '\<[1-9][0-9]{3}\>' - -c '\<[1-9][0-9]{4}\>' - -w '\<[1-9][0-9]{5}\>' - -R '\<1[0-9]{6}\>' - -G '\<2[0-4][0-9]{5}\>' - -Y '\<250[0-9]{4}\>' - -B '\<251[0-5][0-9]{3}\>' - -M '\<2516[0][0-9]{2}\>' - -C '\<25161[0-4][0-9]\>' - -W '\<2516150\>' - -Er '.' - -p : - -e - -g 'Swap: +[0-9]+ +(\<[0-9]\>)' - -g 'Swap: +[0-9]+ +(\<[1-9][0-9]\>)' - -g 'Swap: +[0-9]+ +(\<[1-9][0-9]{2}\>)' - -g 'Swap: +[0-9]+ +(\<[1-9][0-9]{3}\>)' - -g 'Swap: +[0-9]+ +(\<[1-9][0-9]{4}\>)' - -g 'Swap: +[0-9]+ +(\<[1-9][0-9]{5}\>)' - -g 'Swap: +[0-9]+ +(\<1[0-9]{6}\>)' - -g 'Swap: +[0-9]+ +(\<2[0-4][0-9]{5}\>)' - -g 'Swap: +[0-9]+ +(\<250[0-9]{4}\>)' - -g 'Swap: +[0-9]+ +(\<251[0-5][0-9]{3}\>)' - -g 'Swap: +[0-9]+ +(\<2516[0][0-9]{2}\>)' - -g 'Swap: +[0-9]+ +(\<25161[0-4][0-9]\>)' - -g 'Swap: +[0-9]+ +(\<2516150\>)' - -y 'Swap: +[0-9]+ +(\<251615[1-9]\>)' - -y 'Swap: +[0-9]+ +(\<25161[6-9][0-9]\>)' - -y 'Swap: +[0-9]+ +(\<2516[2-9][0-9]{2}\>)' - -g 'Swap: +[0-9]+ +(\<251[7-9][0-9]{3}\>)' - -b 'Swap: +[0-9]+ +(\<25[2-9][0-9]{4}\>)' - -W 'Swap: +[0-9]+ +(\<2[6-7][0-9]{5}\>)' - -C 'Swap: +[0-9]+ +(\<28[0-6][0-9]{4}\>)' - -B 'Swap: +[0-9]+ +(\<287[0-3][0-9]{3}\>)' - -Y 'Swap: +[0-9]+ +(\<2874[0-7][0-9]{2}\>)' - -G 'Swap: +[0-9]+ +(\<28748[0-5][0-9]\>)' - -R 'Swap: +[0-9]+ +(\<287486[0-6]\>)' - -r 'Swap: +[0-9]+ +(\<[0-9]+\>)' - -test : - -e - -R '^\(1\): (1)' - -r '^ 1 : (<red> .{3})' - -R '^\(2\): [^1]*(1)' - -R '^\(2\): .*(2)' - -R '^\(2\): .*(1)' - -r '^ 2 : (</red>) [^<]* (<red>.+</red>)' - hi_red : - -e - -3 - -r '.+' + -e + -3 + -r '.+' hi_green : - -e - -3 - -g '.+' + -e + -3 + -g '.+' hi_yellow : - -e - -3 - -y '.+' + -e + -3 + -y '.+' hi_blue : - -e - -3 - -b '.+' + -e + -3 + -b '.+' hi_magenta : - -e - -3 - -m '.+' + -e + -3 + -m '.+' hi_cyan : - -e - -3 - -c '.+' + -e + -3 + -c '.+' hi_white : - -e - -3 - -w '.+' + -e + -3 + -w '.+' dim_red : - -e - -1 - -r '.+' + -e + -1 + -r '.+' dim_green : - -e - -1 - -g '.+' + -e + -1 + -g '.+' dim_yellow : - -e - -1 - -y '.+' + -e + -1 + -y '.+' dim_blue : - -e - -1 - -b '.+' + -e + -1 + -b '.+' dim_magenta : - -e - -1 - -m '.+' + -e + -1 + -m '.+' dim_cyan : - -e - -1 - -c '.+' + -e + -1 + -c '.+' dim_white : - -e - -1 - -w '.+' + -e + -1 + -w '.+' red : - -e - -2 - -r '.+' + -e + -2 + -r '.+' green : - -e - -2 - -g '.+' + -e + -2 + -g '.+' yellow : - -e - -2 - -y '.+' + -e + -2 + -y '.+' blue : - -e - -2 - -b '.+' + -e + -2 + -b '.+' magenta : - -e - -2 - -m '.+' + -e + -2 + -m '.+' cyan : - -e - -2 - -c '.+' + -e + -2 + -c '.+' white : - -e - -2 - -w '.+' - -esc0m : - -e - -2b '^.{7}' - -3y '.\[0m' - -2r '1b5b 306d' - -2r '1b 5b30 6d' - -3b '.{16}$' + -e + -2 + -w '.+' diff --git a/src/cr_cpri.h b/src/cr_cpri.h index 6f3b885..57abd09 100644 --- a/src/cr_cpri.h +++ b/src/cr_cpri.h @@ -22,7 +22,7 @@ * * File : cr_cpri.h * - * @(#) [MB] cr_cpri.h Version 1.23 du 15/08/26 - + * @(#) [MB] cr_cpri.h Version 1.24 du 15/09/10 - * * ============================================================================ */ @@ -35,6 +35,7 @@ #include <regex.h> #define CR_CONFIG_FILENAME ".hl.cfg" +#define CR_DEFLT_CONFIG_FILE "/etc/default/hl" #define bool int #define FALSE (0) diff --git a/src/cr_main.c b/src/cr_main.c index 808f326..451e233 100644 --- a/src/cr_main.c +++ b/src/cr_main.c @@ -20,13 +20,14 @@ * * File : cr_main.c * - * @(#) [MB] cr_main.c Version 1.55 du 15/09/07 - + * @(#) [MB] cr_main.c Version 1.57 du 15/09/10 - * * Functions in this file : * ~~~~~~~~~~~~~~~~~~~~~~~~ * - cr_list2argv * - cr_lists2argv * - cr_read_config_file + * - cr_read_config_files * - cr_new_config * - cr_new_arg * - cr_new_args @@ -39,6 +40,7 @@ * - cr_getopt * - cr_set_args * - cr_add_to_list + * - cr_clear_marker_flags * - cr_add_regexp * - main * - cr_usage @@ -49,11 +51,13 @@ * - cr_add_config * - cr_add_arg * - cr_free_re + * - cr_marker2color + * - cr_set_desc * - cr_read_input * - cr_start_color * - cr_end_color * - cr_init_desc - * - cr_set_desc + * - cr_same_colors * - cr_disp_line * ============================================================================ */ @@ -124,9 +128,39 @@ void cr_lists2argv(struct cr_configs *configs) CR_READ_CONFIG_FILE ******************************************************************************/ -void cr_read_config_file() +void cr_read_config_file(char *cfg_file) +{ + if (access(cfg_file, 0) != 0) { +#if 0 + fprintf(stderr, "%s: config file \"%s\" does not exist !\n", + G.prgname, cfg_file); + exit(1); +#else + return; +#endif + } + + if ((yyin = fopen(cfg_file, "r")) == NULL) { + fprintf(stderr, "%s: cannot open \"%s\" !\n", + G.prgname, cfg_file); + perror("fopen"); + exit(1); + } + + yylex(); + +// cr_lists2argv(&G.configs); +} + +/****************************************************************************** + + CR_READ_CONFIG_FILES + +******************************************************************************/ +void cr_read_config_files(void) { - char *_home, _cfg_file[1024]; + int _size; + char *_home, *_cfg_file; if (G.config_file_read) { return; @@ -137,21 +171,17 @@ void cr_read_config_file() exit(1); } - sprintf(_cfg_file, "%s/%s", _home, CR_CONFIG_FILENAME); - if (access(_cfg_file, 0) != 0) { - fprintf(stderr, "%s: config file \"%s\" does not exist !\n", - G.prgname, _cfg_file); + _size = strlen(_home) + 1 + sizeof(CR_CONFIG_FILENAME); + if ((_cfg_file = malloc(_size)) == NULL) { + fprintf(stderr, cr_err_malloc, G.prgname); exit(1); } - if ((yyin = fopen(_cfg_file, "r")) == NULL) { - fprintf(stderr, "%s: cannot open \"%s\" !\n", - G.prgname, _cfg_file); - perror("fopen"); - exit(1); - } + sprintf(_cfg_file, "%s/%s", _home, CR_CONFIG_FILENAME); - yylex(); + cr_read_config_file(_cfg_file); + + cr_read_config_file(CR_DEFLT_CONFIG_FILE); cr_lists2argv(&G.configs); @@ -225,7 +255,7 @@ struct cr_config *cr_get_config(char *config_name, struct cr_args *args) struct cr_config *_config; if (!G.config_file_read) { - cr_read_config_file(); + cr_read_config_files(); } for (_config = args->configs->extract; _config != 0; @@ -461,7 +491,7 @@ void cr_add_to_list(struct cr_re_desc *re) /****************************************************************************** - CR_CLEAR_MARKER_FLAGS + CR_CLEAR_MARKER_FLAGS ******************************************************************************/ inline void cr_clear_marker_flags(void) @@ -496,7 +526,7 @@ void cr_add_regexp(int color, char *regexp) cr_add_to_list(_re); G.last_RE = _re; - G.last_color = color; + G.last_color = color; } else { _re = G.last_RE; @@ -511,7 +541,7 @@ void cr_add_regexp(int color, char *regexp) cr_clear_marker_flags(); G.last_RE = 0; - G.last_color = 0; + G.last_color = 0; } } @@ -550,7 +580,7 @@ int main(int argc, char *argv[]) break; case 'H': - cr_read_config_file(); + cr_read_config_files(); cr_usage(TRUE); break; @@ -643,7 +673,7 @@ int main(int argc, char *argv[]) break; case 'V': - fprintf(stderr, "%s: version %s\n", G.prgname, "1.55"); + fprintf(stderr, "%s: version %s\n", G.prgname, "1.57"); exit(1); break; @@ -690,13 +720,13 @@ int main(int argc, char *argv[]) cr_start_color(&_re->col); printf("%s", _re->regex[0]); cr_end_color(NULL); - printf("\n"); + printf("\n"); if (_re->regex[1]) { printf(" => "); cr_start_color(&_re->col); printf("%s", _re->regex[1]); cr_end_color(NULL); - printf("\n"); + printf("\n"); } } } @@ -714,7 +744,7 @@ int main(int argc, char *argv[]) ******************************************************************************/ void cr_usage(bool disp_config) { - fprintf(stderr, "%s: version %s\n", G.prgname, "1.55"); + fprintf(stderr, "%s: version %s\n", G.prgname, "1.57"); fprintf(stderr, "Usage: %s [-h|-H|-V|-[[%%.]eiuvdDEL1234][-[rgybmcwRGYBMCW] regexp ...][--config_name ...] ]\n", G.prgname); fprintf(stderr, " -h : help\n"); @@ -876,7 +906,7 @@ void cr_free_RE(void) /****************************************************************************** - CR_MARKER2COLOR + CR_MARKER2COLOR ******************************************************************************/ void cr_marker2color( struct cr_re_desc *re) @@ -884,48 +914,48 @@ void cr_marker2color( struct cr_re_desc *re) int _i = 0, _curr_level; struct cr_col_desc *_desc; - _curr_level = re->curr_level; + _curr_level = re->curr_level; //fprintf(stderr, "[%2d] >>> curr_level : %d\n", _i, _curr_level); for (_i = 0, _desc = G.desc; _i < G.length; _i++, _desc++) { - switch (_desc->marker) { - case 1: - _curr_level++; + switch (_desc->marker) { + case 1: + _curr_level++; //fprintf(stderr, "[%2d] +++ curr_level : %d\n", _i, _curr_level); - break; + break; - case -1: - if (_curr_level > 0) { - _curr_level--; - } + case -1: + if (_curr_level > 0) { + _curr_level--; + } //fprintf(stderr, "[%2d] --- curr_level : %d\n", _i, _curr_level); - break; + break; - case 0: + case 0: //fprintf(stderr, "[%2d] === curr_level : %d\n", _i, _curr_level); - break; - - default: - fprintf(stderr, "%s: internal error\n", G.prgname); - exit(1); - break; - } - if (!_desc->used) { - if (_curr_level > 0) { -// fprintf(stderr, "==> [%2d] [%c] Color set. Col num = %d\n", -// _i, G.line[_i], re->col.col_num); - _desc->used = TRUE; - _desc->col = &re->col; - } - else { -// fprintf(stderr, "==> [%2d] [%c] NO COLOR.\n", _i, G.line[_i]); - } - } - else { -// fprintf(stderr, "==> [%2d] [%c] Already colorized.\n", _i, G.line[_i]); - } - } - - re->curr_level = _curr_level; + break; + + default: + fprintf(stderr, "%s: internal error\n", G.prgname); + exit(1); + break; + } + if (!_desc->used) { + if (_curr_level > 0) { +// fprintf(stderr, "==> [%2d] [%c] Color set. Col num = %d\n", +// _i, G.line[_i], re->col.col_num); + _desc->used = TRUE; + _desc->col = &re->col; + } + else { +// fprintf(stderr, "==> [%2d] [%c] NO COLOR.\n", _i, G.line[_i]); + } + } + else { +// fprintf(stderr, "==> [%2d] [%c] Already colorized.\n", _i, G.line[_i]); + } + } + + re->curr_level = _curr_level; //fprintf(stderr, "[%2d] <<< curr_level : %d\n", _i, _curr_level); } @@ -940,35 +970,35 @@ void cr_set_desc(struct cr_re_desc *re, int offset, int s, int e, int marker) struct cr_col_desc *_desc; //fprintf(stderr, "SET_DESC : s = %3d e = %3d marker = %d\n", s, e, marker); - if (re->regex[1] == 0) { - /* RE descriptor does not define a range - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ - for (_i = s, _desc = &G.desc[offset + s]; _i <= e; _i++, _desc++) { - if (!_desc->used) { - _desc->used = TRUE; - _desc->col = &re->col; - } - } - } - else { - switch (marker) { - - case 1: - _desc = &G.desc[offset + s]; - break; - - case -1: - _desc = &G.desc[offset + e + 1]; // XXX : ATTENTION AU SEGV - break; - - default: - fprintf(stderr, "%s: erreur interne, marker = %d\n", - G.prgname, marker); - exit(1); - } - - _desc->marker = marker; - } + if (re->regex[1] == 0) { + /* RE descriptor does not define a range + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ + for (_i = s, _desc = &G.desc[offset + s]; _i <= e; _i++, _desc++) { + if (!_desc->used) { + _desc->used = TRUE; + _desc->col = &re->col; + } + } + } + else { + switch (marker) { + + case 1: + _desc = &G.desc[offset + s]; + break; + + case -1: + _desc = &G.desc[offset + e + 1]; // XXX : ATTENTION AU SEGV + break; + + default: + fprintf(stderr, "%s: erreur interne, marker = %d\n", + G.prgname, marker); + exit(1); + } + + _desc->marker = marker; + } } /****************************************************************************** @@ -979,7 +1009,7 @@ void cr_set_desc(struct cr_re_desc *re, int offset, int s, int e, int marker) void cr_read_input(void) { int _i, _j, _n, _s = 0, _e = 0, _off, _idx_last, - _marker; + _marker; struct cr_re_desc *_re; size_t _nmatch; regmatch_t _pmatch[CR_SIZE + 1]; @@ -1010,58 +1040,58 @@ void cr_read_input(void) } for (_re = G.extract_RE; _re != NULL; _re = _re->next) { - for (_i = 0; _i < 2; _i++) { - if (_re->regex[_i]) { - for (_off = 0, _eflags = 0; - _off < G.length && - regexec(&_re->reg[_i], G.line + _off, _nmatch, _pmatch, - _eflags) == 0; _off += _e + 1, _eflags = REG_NOTBOL) { - - if (G.debug) { - fprintf(stderr, "Match for [%s] // [%s]\n", - G.line + _off, _re->regex[_i]); - fprintf(stderr, "LINE : [%s] :\n", G.line + _off); - } - - for (_j = 0; _pmatch[_j].rm_so != -1; _j++) { - if (_j == 0 && _pmatch[1].rm_so != -1) { - continue; - } - - _s = _pmatch[_j].rm_so; - _e = _pmatch[_j].rm_eo - 1; - - if (G.debug) { - strncpy(_debug_str, - G.line + _off + _s, _e - _s + 1); - _debug_str[_e -_s + 1] = 0; - fprintf(stderr, - "OFFSET = %3d : %3d => %3d [%s] [%s]\n", - _off, _s, _e, _re->regex[_i], _debug_str); - } - - if (_i == 0) _marker = 1; - else _marker = -1; - cr_set_desc(_re, _off, _s, _e, _marker); - } - - /* To handle empty strings - ~~~~~~~~~~~~~~~~~~~~~~~ */ - if (_e < 0) { - _e = 0; - } - } - - if (G.debug) { - fprintf(stderr, "NO MATCH for [%s] // [%s]\n", - G.line + _off, _re->regex[_i]); - } - } - } - - if (_re->regex[1]) { - cr_marker2color(_re); - } + for (_i = 0; _i < 2; _i++) { + if (_re->regex[_i]) { + for (_off = 0, _eflags = 0; + _off < G.length && + regexec(&_re->reg[_i], G.line + _off, _nmatch, _pmatch, + _eflags) == 0; _off += _e + 1, _eflags = REG_NOTBOL) { + + if (G.debug) { + fprintf(stderr, "Match for [%s] // [%s]\n", + G.line + _off, _re->regex[_i]); + fprintf(stderr, "LINE : [%s] :\n", G.line + _off); + } + + for (_j = 0; _pmatch[_j].rm_so != -1; _j++) { + if (_j == 0 && _pmatch[1].rm_so != -1) { + continue; + } + + _s = _pmatch[_j].rm_so; + _e = _pmatch[_j].rm_eo - 1; + + if (G.debug) { + strncpy(_debug_str, + G.line + _off + _s, _e - _s + 1); + _debug_str[_e -_s + 1] = 0; + fprintf(stderr, + "OFFSET = %3d : %3d => %3d [%s] [%s]\n", + _off, _s, _e, _re->regex[_i], _debug_str); + } + + if (_i == 0) _marker = 1; + else _marker = -1; + cr_set_desc(_re, _off, _s, _e, _marker); + } + + /* To handle empty strings + ~~~~~~~~~~~~~~~~~~~~~~~ */ + if (_e < 0) { + _e = 0; + } + } + + if (G.debug) { + fprintf(stderr, "NO MATCH for [%s] // [%s]\n", + G.line + _off, _re->regex[_i]); + } + } + } + + if (_re->regex[1]) { + cr_marker2color(_re); + } } cr_disp_line(); @@ -1170,19 +1200,19 @@ void cr_init_desc(void) _desc++) { _desc->col = NULL; _desc->used = FALSE; - _desc->marker = 0; + _desc->marker = 0; } } /****************************************************************************** - CR_SAME_COLORS + CR_SAME_COLORS ******************************************************************************/ inline bool cr_same_colors(struct cr_color *col1, struct cr_color *col2) { - return (col1->col_num == col2->col_num) - && (col1->intensity == col2->intensity); + return (col1->col_num == col2->col_num) + && (col1->intensity == col2->intensity); } /****************************************************************************** @@ -1201,7 +1231,7 @@ void cr_disp_line(void) if (G.curr_col) { cr_end_color(G.curr_col); putc('\n', G.curr_col->out); - G.curr_col = NULL; + G.curr_col = NULL; } else { putc('\n', stdout); @@ -1215,7 +1245,7 @@ void cr_disp_line(void) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ cr_start_color(_desc->col); putc(_c, _desc->col->out); - G.curr_col = _desc->col; + G.curr_col = _desc->col; } else { /* Previous character was in color @@ -1231,7 +1261,7 @@ void cr_disp_line(void) cr_end_color(G.curr_col); cr_start_color(_desc->col); putc(_c, _desc->col->out); - G.curr_col = _desc->col; + G.curr_col = _desc->col; } } } @@ -1243,7 +1273,7 @@ void cr_disp_line(void) ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ cr_end_color(G.curr_col); putc(_c, G.curr_col->out); - G.curr_col = NULL; + G.curr_col = NULL; } else { /* Previous character was not in color @@ -1266,5 +1296,5 @@ void cr_disp_line(void) cr_end_color(G.curr_col); } - G.curr_col = NULL; + G.curr_col = NULL; } Binary files differ |