Fedora-Fr - Communauté francophone Fedora - Linux

Communauté francophone des utilisateurs de la distribution Linux Fedora.

  

Dernière news : Fedora 34 n'est plus maintenu

#1 23/10/2008 18:46:47

bioinfornatics
Membre
Lieu : Paris
Inscription : 08/03/2007
Messages : 3 721
Site Web

Fedora-fr add-ons colorer code

Bonjour,
Les balises codes sont très pratiques mais pourrait on ajouter un menu-liste contenant divers langage (perl bash) permettant la coloration syntaxique.
j'ai un script qui perl qui fait un peu cela, bon il est pas pas parfait et il peut être améliorable (cooration syntaxique réalisé par ce script):

#!/usr/bin/perl -w
use strict;

#------------------------------------------------- perl -------------------------------------------------------------

# Tableau des mots à colorer en perl
my @perl_word_to_color = ('BEGIN', 'CORE', 'DESTROY', 'END', 'EQ', 'GE', 'GT', 'INIT', 'LE', 'LT', 'NE', 'CHECK', 'abs', 'accept', \
'alarm', 'and', 'atan2', 'bind', 'binmode', 'bless', 'caller', 'chdir', 'chmod', 'chomp', 'chop', \
'chown', 'chr', 'chroot', 'close', 'closedir', 'cmp', 'connect', 'continue', 'cos', 'crypt', \
'dbmclose', 'dbmopen', 'defined', 'delete', 'die', 'do', 'dump', 'each', 'else', 'elsif', 'endgrent', \
'endhostent', 'endnetent', 'endprotoent', 'endpwent', 'endservent', 'eof', 'eq', 'eval', \
'exec', 'exists', 'exit', 'exp', 'fcntl', 'fileno', 'flock', 'for', 'foreach', 'fork', 'format', \
'formline', 'ge', 'getc', 'getgrent', 'getgrgid', 'getgrnam', 'gethostbyaddr', 'gethostbyname', \
'gethostent', 'getlogin', 'getnetbyaddr', 'getnetbyname', 'getnetent', 'getpeername', \
'getpgrp', 'getppid', 'getpriority', 'getprotobyname', 'getprotobynumber', 'getprotoent', \
'getpwent', 'getpwnam', 'getpwuid', 'getservbyname', 'getservbyport', 'getservent', \
'getsockname', 'getsockopt', 'glob', 'gmtime', 'goto', 'grep', 'gt', 'hex', 'if', 'index', \
'int', 'ioctl', 'join', 'keys', 'kill', 'last', 'lc', 'lcfirst', 'le', 'length', 'link', 'listen', \
'local', 'localtime', 'lock', 'log', 'lstat', 'lt', 'map', 'mkdir', 'msgctl', 'msgget', 'msgrcv', \
'msgsnd', 'my', 'ne', 'next', 'no', 'not', 'oct', 'open', 'opendir', 'or', 'ord', 'our', 'pack', 'package', \
'pipe', 'pop', 'pos', 'print', 'printf', 'prototype', 'push', 'quotemeta', 'qu', \
'rand', 'read', 'readdir', 'readline', 'readlink', 'readpipe', 'recv', 'redo', \
'ref', 'rename', 'require', 'reset', 'return', 'reverse', 'rewinddir', 'rindex', 'rmdir', \
'scalar', 'seek', 'seekdir', 'select', 'semctl', 'semget', 'semop', 'send', 'setgrent', \
'sethostent', 'setnetent', 'setpgrp', 'setpriority', 'setprotoent', 'setpwent', \
'setservent', 'setsockopt', 'shift', 'shmctl', 'shmget', 'shmread', 'shmwrite', 'shutdown', \
'sin', 'sleep', 'socket', 'socketpair', 'sort', 'splice', 'split', 'sprintf', 'sqrt', 'srand', \
'stat', 'study', 'sub', 'substr', 'symlink', 'syscall', 'sysopen', 'sysread', 'sysseek', \
'system', 'syswrite', 'tell', 'telldir', 'tie', 'tied', 'time', 'times', 'truncate', \
'uc', 'ucfirst', 'umask', 'undef', 'unless', 'unlink', 'unpack', 'use', 'unshift', 'untie', 'until', \
'use', 'utime', 'values', 'vec', 'wait', 'waitpid', 'wantarray', 'warn', 'while', 'write', 'xor');   
#----------------------------------------------------------------------------------------------------------------------

#------------------------------------------------- bash -------------------------------------------------------------

# Tableau des mots à colorer en bash
my @bash_word_to_color = ('ar', 'asa', 'awk', 'banner', 'basename', 'bash', 'bc', 'bdiff', 'break', \
'bunzip2', 'bzip2', 'cal', 'calendar', 'case', 'cat', 'cc', 'cd', 'chmod', 'cksum', \
'clear', 'cmp', 'col', 'comm', 'compress', 'continue', 'cp', 'cpio', 'crypt', \
'csplit', 'ctags', 'cut', 'date', 'dc', 'dd', 'declare', 'deroff', 'dev', 'df', 'diff', 'diff3', \
'dircmp', 'dirname', 'do', 'done', 'du', 'echo', 'ed', 'egrep', 'elif', 'else', 'env', \
'esac', 'eval', 'ex', 'exec', 'exit', 'expand', 'export', 'expr', 'false', 'fc', \
'fgrep', 'fi', 'file', 'find', 'fmt', 'fold', 'for', 'function', 'functions', \
'getconf', 'getopt', 'getopts', 'grep', 'gres', 'hash', 'head', 'help', \
'history', 'iconv', 'id', 'if', 'in', 'integer', 'jobs', 'join', 'kill', 'local', 'lc', \
'let', 'line', 'ln', 'logname', 'look', 'ls', 'm4', 'mail', 'mailx', 'make', \
'man', 'mkdir', 'more', 'mt', 'mv', 'newgrp', 'nl', 'nm', 'nohup', 'ntps', 'od', \
'pack', 'paste', 'patch', 'pathchk', 'pax', 'pcat', 'perl', 'pg', 'pr', 'print', \
'printf', 'ps', 'pwd', 'read', 'readonly', 'red', 'return', 'rev', 'rm', 'rmdir', \
'sed', 'select', 'set', 'sh', 'shift', 'size', 'sleep', 'sort', 'spell', \
'split', 'start', 'stop', 'strings', 'strip', 'stty', 'sum', 'suspend', \
'sync', 'tail', 'tar', 'tee', 'test', 'then', 'time', 'times', 'touch', 'tr', \
'trap', 'true', 'tsort', 'tty', 'type', 'typeset', 'ulimit', 'umask', 'unalias', \
'uname', 'uncompress', 'unexpand', 'uniq', 'unpack', 'unset', 'until', \
'uudecode', 'uuencode', 'vi', 'vim', 'vpax', 'wait', 'wc', 'whence', 'which', \
'while', 'who', 'wpaste', 'wstart', 'xargs', 'zcat', 'chgrp', 'chown', 'chroot', 'dir', 'dircolors', \
'factor', 'groups', 'hostid', 'install', 'link', 'md5sum', 'mkfifo', \
'mknod', 'nice', 'pinky', 'printenv', 'ptx', 'readlink', 'seq', \
'sha1sum', 'shred', 'stat', 'su', 'tac', 'unlink', 'users', 'vdir', 'whoami', 'yes');
#----------------------------------------------------------------------------------------------------------------------


if ($#ARGV == -1 or scalar(@ARGV) >3) {
    print "Usage: colour_code.pl fichier_source fichier_destination langage\n";
    print "langage disponible: perl, bash\n";
}
else
{
    # Ajouts des valeurs passer en argument au variable correspondante
    my $fichier_source = $ARGV[0];
    my $fichier_destinataire = $ARGV[1];
    my $programme = $ARGV[2];
   
    # Attribution de la table de langage aproprié
    my @langage = '';
   
    if ($programme eq 'perl')
    {
        @langage = @perl_word_to_color;
    }
    elsif ($programme eq 'bash')
    {
        @langage = @bash_word_to_color;
    }
    else
    {
        print "Usage: colour_code.pl fichier_source fichier_destination langage\n";
        print "langage disponible: perl, bash\n";
    }
   
    # Ouverture en lecture du fichier source
    open (SOURCE ,"< $fichier_source") or die "$!";
   
    # Copie de l'ensemble des lignes dans le tableau
    my @lignes = <SOURCE>;
   
    # Fermeture du fichier source
    close (SOURCE);
   
    # Modification du code source avec marqueur de coloration
    my $ligne = '';
    my $motif = '';
    my @nouvelle_lignes = '';
    my $commentaire ='';
   
    foreach $ligne (@lignes) {
       
        # print "Avant: $ligne\n";
       
        # Vérification si présence comentaire dans la ligne
        if ($ligne =~ m/(?<!\$|=)#.*/) {
            $ligne = $`;
            $commentaire = $&;
            # Coloration des commentaires
            $commentaire =~ s/.*/\[color=#008080\]$&\[\/color\]/;
        }
           
        # Coloration des mots clés (bleu)
        foreach $motif (@langage) {
            $ligne =~ s/^$motif(?=\s|\()/\[color=#0000FF\]$&\[\/color\]/;    # Si le motif est en début de ligne
            $ligne =~ s/(?<=\s|\()$motif(?=\s|\()/\[color=#0000FF\]$&\[\/color\]/g;        # Sinon vérifier qu'il soit séparé par un espace avant et après
        }
       
        # Coloration des scalaires (vert): $ma_var, $ma_var, $_, $&, $`
        $ligne =~ s/\$\w+|\$&|\$`|\$'|\$&/\[color=#008000\]$&\[\/color\]/g;
       
        # Coloration des tableaux et des hash (rouge): @mon_tableau, @_, %mon_hash
        $ligne =~ s/@\w+|%[0-9a-zA-Z_\-]+/\[color=#FF0000\]$&\[\/color\]/g;
       
        # print "Après: $ligne\n";
       
        if ($commentaire ne "") {
            $ligne .= $commentaire."\n";
        }
       
        $commentaire = "";
       
        # Ajout de la nouvelle ligne dans le tableau
        push(@nouvelle_lignes,$ligne);
       
    }
   
    # Ouverture en écriture du fichier destinataire
    open (DESTINATAIRE ,"> $fichier_destinataire") or die "$!";
   
    # Écriture du code source avec marqueur de coloration
    print DESTINATAIRE @nouvelle_lignes;
   
    # Fermeture du fichier
    close (DESTINATAIRE);
   
}

=head1 colour_code.pl

=head2 BUT

Colorer les codes sources

Dernière modification par bioinfornatics (23/10/2008 18:47:39)

Hors ligne

#2 23/10/2008 19:36:13

llaumgui
Administrateur
Administrateur
Lieu : Prades-le-Lez
Inscription : 03/09/2004
Messages : 2 720
Site Web

Re : Fedora-fr add-ons colorer code

Plus d'évolution du forum sur la base punBB 1.2. On le fera évoluer avec la sortie de FluxBB 1.3.

Hors ligne

#3 23/10/2008 21:03:10

bioinfornatics
Membre
Lieu : Paris
Inscription : 08/03/2007
Messages : 3 721
Site Web

Re : Fedora-fr add-ons colorer code

Vivement FluxBB 1.3 big_smile

Hors ligne

#4 23/10/2008 22:10:14

bioinfornatics
Membre
Lieu : Paris
Inscription : 08/03/2007
Messages : 3 721
Site Web

Re : Fedora-fr add-ons colorer code

la version FluxBB v1.3 is beta2 est sortie en juin mais j'ai patrouvé la date de sortie de la version stable

Hors ligne

#5 23/10/2008 23:30:40

llaumgui
Administrateur
Administrateur
Lieu : Prades-le-Lez
Inscription : 03/09/2004
Messages : 2 720
Site Web

Re : Fedora-fr add-ons colorer code

Il n'y en a pas... Ca sortiera quand ça sera pret...

Hors ligne

#6 31/08/2010 11:49:31

C@sp€r
Bricoleur Fedora
Lieu : /dev/loop
Inscription : 09/04/2010
Messages : 767
Site Web

Re : Fedora-fr add-ons colorer code

Je déterre ce topic parce que je trouve l'idée de Bioinfornatics intéréssante, et puis là le forum est en FluxBB 1.4, donc ça serait possible...


1st, no system is safe
2nd, aim for the impossible
3rd, have fun in cyberspace and meatspace

Hors ligne

Pied de page des forums