• [^] # Re: normal

    Posté par . En réponse au message Trouver la fin d'une ligne après un charactère. Évalué à 2.

    merci pour vos réponses, en fait je n'y connais pas grand chose en programmation de ce type, mais je cherche à adapter un "lexer" pour Scintilla.

    La coloration existe déjà, par contre pour pouvoir permettre au code de se replier en fonction de certains critères, je n'y arrive pas.

    Pour la coloration, ça avait été fait à partir du code du lexer de Markdown, et ça donnait ça : http://scintilla.hg.sourceforge.net/hgweb/scintilla/scintill(...)

    J'ai essayé de suivre un peu le modèle utilisé pour TeX pour le repliage de code, mais là où les marques pour TeX sont nettes (par exemple avec \begin et \end), dans txt2tags c'est plus compliqué, parce que les parties à replier (les entêtes) sont de type :

    == header 1 ==

    texte

    == header 2 ==

    texte

    === sous header ===

    etc

    et donc il n'est pas aisé de savoir où ça commence et où ça s'arrête. J'avais donc pensé faire commencer ça à la fin d'une ligne avec ==\n et l'arrêter en début de ligne avec \n== par exemple, en me basant sur le code de :

    http://scintilla.hg.sourceforge.net/hgweb/scintilla/scintill(...)

    static int classifyFoldPointTeXPaired(const char* s) {
    int lev=0;
    if (!(isdigit(s[0]) || (s[0] == '.'))){
    if (strcmp(s, "begin")==0||strcmp(s,"FoldStart")==0||
    strcmp(s,"abstract")==0||strcmp(s,"unprotect")==0||
    strcmp(s,"title")==0||strncmp(s,"start",5)==0||strncmp(s,"Start",5)==0||
    strcmp(s,"documentclass")==0||strncmp(s,"if",2)==0
    )
    lev=1;
    if (strcmp(s, "end")==0||strcmp(s,"FoldStop")==0||
    strcmp(s,"maketitle")==0||strcmp(s,"protect")==0||
    strncmp(s,"stop",4)==0||strncmp(s,"Stop",4)==0||
    strcmp(s,"fi")==0
    )
    lev=-1;
    }
    return lev;
    }


    Mais si ça fonctionne bien avec n'importe quel symbole ou partie de texte entrée, avec un \n ça bloque l'analyse.

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it