//SortieLatex.cpp #include #include #include typedef int Valeur; class SommetABR; typedef SommetABR* ABR; void SortieLatex(ABR Ar); class SommetABR { protected: Valeur racine; ABR Pere,SAG, SAD; int hauteur,balanceGmoinsD; public: SommetABR(Valeur v); SommetABR(SommetABR& s); ABR remonterToutEnHaut(); void GrefferSAG(ABR g); void GrefferSAD(ABR d); void SupprimerSAG(); void SupprimerSAD(); bool FeuilleP(); void RemplacerPourLePerePar(ABR); friend std::string* TikzRecursABR(int ligne,int gauche, int droite, int numeroPere, int typeFils, ABR Ar); }; std::string* TikzRecursABR(int ligne,int gauche, int droite, int numeroPere, int typeFils, ABR Ar); std::string * TikzRecursABR(int ligne,int gauche, int droite, int numeroPere, int typeFils, ABR Ar){ std::ostringstream ossnum, osslign,osscol,ossnumPere, ossbal, ossnum2Pere,ossnumRac; std::string stres(""); if (Ar) { ossnumPere<racine; if (Ar->Pere )ossnum2Pere<Pere->racine; else ossnum2Pere<<0; int numero; if (typeFils==-1) numero=1; else numero= 2*numeroPere + typeFils; ossnum<SAG) stres+=*TikzRecursABR(ligne -1 ,gauche,mil-1, numero,0,Ar->SAG); if (Ar->SAD) stres+=*TikzRecursABR(ligne - 1,mil+1,droite, numero,1,Ar->SAD); } return new std::string(stres); } std::string * TikzABR(ABR Ar){ return TikzRecursABR(1,1,10,1, -1,Ar); } void SortieLatex(ABR Ar, std::string filepath){ //don't insert garbage in filepath, its std::system-ised. std::ofstream fichier(filepath.c_str(), std::ios::out | std::ios::trunc); std::string preamb ("\\documentclass{article} \n \\usepackage{tikz} \n \\begin{document} \n \\resizebox{300pt}{!}{\n \\begin{tikzpicture}\n"); std::cout<&1 isnt enough to mute pdflatex... system_CARE << "mkdir pdflatex_temp > /dev/null 2>&1;" << "init_texlive;"<< "pdflatex -output-directory=\"./pdflatex_temp\" -interaction=nonstopmode \"" << filepath << "\" >/dev/null 2>&1;" <<"mv ./pdflatex_temp/*.pdf ./ > /dev/null 2>&1;"; std::system(system_CARE.str().c_str()); return; } // g++ -c SortieLatex.cpp