begin process at 2008 07 06 15:10:54
1 205 602 membres
171 nouveaux aujourd'hui
14 119 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Parser Cmarkup [ Base de données / XML ] (mickei)

Parser Cmarkup le 02/10/2007 17:26:08

mickei
Bonjour,

J'utilise le parser CMarkup, mais je n'arrive pas à autoindenter les lignes, est ce que quelqu'un utilise le même parser et y arrive, si oui comment?

Merci pour votre aide

Re : Parser Cmarkup le 02/10/2007 20:15:07

The_Guardian

Look at the start and end tags in <QTY>1</QTY>. The struct contains the offsets of the  left and right of both the start and end tags (i.e. all the < and >  signs). The reserved integer is not currently used but could be used for a  delete flag and/or level (i.e. depth) in the hierarchy to support indentation.  The other three integers are indexes to the structs for the parent, child and  next elements.
==

Donc en gros ça dit que l'indentation a pas l'air d'être implémentée sur CMarkup [ Lien ] donc je dirais que c'est pas possible pour le moment
===
Une autruche ne se cuit pas aux petits lardons

Re : Parser Cmarkup le 02/10/2007 20:24:15

mickei
Merci,
J'étais aussi tombé sur cette page et en avait déduis la même chose mais j'espérais quand même.
Tant pis reste à faire un post traitement.

Re : Parser Cmarkup le 02/10/2007 22:12:40

The_Guardian
?

Une autruche ne se cuit pas aux petits lardons

Re : Parser Cmarkup le 03/10/2007 10:25:14

mickei
Au final je fais le traitement suivant juste avant d'enregister le fichier :

void XXX::AutoIndentMarkup(CMarkup *pMarkup)
{
    CString sDocument;
    CString sLigne;
    CString sEnd("");
    CString sNomBalise;
    UINT32    ulDebLigne=0;
    UINT32    ulFinLigne=0;
    UINT32    ulNiveau=0;
    UINT32    ulNiveauSuivant=0;
    UINT32    ulCmptNiveau;

    //recupere le fichier xml
    sDocument = pMarkup->GetDoc();
    //initialise la premiere ligne
    ulFinLigne = sDocument.Find("\r\n",ulFinLigne);
    //tant que l on n est pas a la fin du fichier
    while (ulFinLigne != -1)
    {
        //recupere la ligne
        sLigne = sDocument.Mid(ulDebLigne, ulFinLigne - ulDebLigne);
       
        //traite la ligne
        //si balise non de commentaire
        if (sLigne.Left(1) == "<" && sLigne.Mid(1,1) != "?" && sLigne.Mid(1,1) != "!" )
        {
            //recupere la balise
            sNomBalise = sLigne.Mid(sLigne.ReverseFind('<')+2,sLigne.GetLength() - sLigne.ReverseFind('<') - 3);
            //si c est une balise fermante decalage cette ligne
            if ( sLigne.Mid(1,1) == "/" )
            {
                ulNiveauSuivant--;
                ulNiveau = ulNiveauSuivant;
            }
            //si balise vide dans ce ca pas de decalage
            else if (sLigne.Mid (sLigne.GetLength() - 2,1) == "/")
            {
            }
            //si la balise ouvrante et fermante sur la meme ligne pas de decalage
            else if ( sLigne.Mid( 1, sNomBalise.GetLength()) == sNomBalise && sLigne.Mid( sLigne.GetLength() - sNomBalise.GetLength() - 2,1) == "/" )
            {
            }
            //si balise ouvrante le decalae est a la ligne suivante
            else
            {
                ulNiveauSuivant++;
            }
        }

        for (ulCmptNiveau = 0; ulCmptNiveau < ulNiveau; ulCmptNiveau++)
        {
            sLigne = "  " + sLigne;

        }

        sEnd+= sLigne + "\r\n";
        ulNiveau = ulNiveauSuivant;

        //recherche la ligne suivante
        ulDebLigne = ulFinLigne+2;
        ulFinLigne = sDocument.Find("\r\n",ulFinLigne+2);
    }

    pMarkup->SetDoc(sEnd);

}


Ca marche niquel, si ça peut servir à quelqu'un .

Re : Parser Cmarkup le 03/10/2007 13:09:45

The_Guardian
ah good ca:p

Une autruche ne se cuit pas aux petits lardons


Classé sous : arrive, utilise, parser, cmarkup

Participer à cet échange

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS