Stroka TFormatOutput::Format(const char *str) { Stroka ret, Line; size_t pos = 0, len = strlen(str); do { pos = FormLine(str, pos, Line); ret += Line + "\n"; } while(pos < len); return ret; }
//--------------------------------------------------------------------------- int MakeFile(char* NameF) { int i,m, k; int isTab; int TabCount; char s1[100],s2[100],s3[100]; if ((ft = fopen(NameF, "w")) == NULL) return(-1); // Обязательная часть - преамбула документа for (i = 0; i < 24; i++) // 24 LINES Now!!!!! { fprintf(ft, "%s\n", DocBeg[i]); } //...................................................... fprintf(ft,"%s",b_ffoot); fprintf(ft,"%s",k_ssm); fprintf(ft,"%s\n","\\ifthenelse{\\value{page}=\\pageref{LastPage}}"); Kegel = 6; Algn = 0; // Unknown!!!!! P_cnt = 0; LaufTab =0; TabCount =0; //.................. PageFooter Type ........................................... isTab = 0; for (i=0; i<Rep_cnt; i++) // ищем Pagefooter { if ( Rep_st[i].Typ== 4) //PageFooter Type { bzero(&si[0], 400); if((isTab==1) && (Rep_st[i].Value==0)) {sprintf(&a_si[P_cnt][0],"%s \n",e_tbl1);isTab=0; P_cnt++;TabCount=TabCount+2;}// Таблица кончилась - закрываем! if(Rep_st[i].Value>0) { if(isTab && (Rep_st[i].Value!=LaufTab)) // одна таблица сменяют другую { // закрываем текущую sprintf(&a_si[P_cnt][0],"%s \n",e_tbl1);isTab=0;P_cnt++;TabCount=TabCount+2; } if ((!isTab)) { isTab = 1; LaufTab = Rep_st[i].Value; sprintf(&a_si[P_cnt][0],"%s %s %i %s %i %s %i %s\n",b_tbl1,"p{",Rep_st[i].Cols[0],"mm}p{",Rep_st[i].Cols[1],"mm}p{",Rep_st[i].Cols[2],"mm}}"); P_cnt++; } } //if(Rep_st[i].Value>0)! if(isTab) { bzero(&s1[0], 100); bzero(&s2[0], 100); bzero(&s3[0], 100); FormLineF(i); k = Translate(&Rep_st[i].Num[0]); if (k) Rep_st[i].Bold = 4; // TT Type must to use! save_si(&s1[0]);bzero(&si[0], 400); Translate(&Rep_st[i].NCand[0]); save_si(&s2[0]);bzero(&si[0], 400); Translate(&Rep_st[i].Txt[0]); sprintf(&a_si[P_cnt][0],"%s %s %s %s %s %s %s %s %s %s%s%i%s\n",fs1,fs2,fs3,fs4,s1,"&",s2,"&",si,c_eol,"[",Rep_st[i].Vsps,"pt]"); P_cnt++; } else{ k = Translate(&Rep_st[i].Txt[0]); if (k) Rep_st[i].Bold = 4; // TT Type must to use! if (FormLineF(i)>0)// CHECK for empty Txt inline FormLine()!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! { sprintf(&a_si[P_cnt][0],"%s %s%s%s%s %s %s%i%s\n",fs1,fs2,fs3,fs4,si,c_eol,"[",Rep_st[i].Vsps,"pt]"); // закончили строку подвала! P_cnt++; } } } // Type == PageFooter } // все просмотрели - заканчиваем footer if(isTab){sprintf(&a_si[P_cnt][0],"%s \n",e_tbl1);isTab=0; P_cnt++;TabCount=TabCount+2;}// PageFooter кончилась - закрываем! //!!!!!!!!!!!!!!!!!!! L A N G !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! fprintf(ft,"%s%d%s","{\\vspace{",int(Kegel*1.3*2*(P_cnt-TabCount)),"pt}"); if(Lang==0) fprintf(ft,"%s\n",e_ffoot); else fprintf(ft,"%s\n",en_ffoot); fprintf(ft,"%s","{"); for(i=0;i<P_cnt;i++) { fprintf(ft,"%s",a_si[i]); } if(Lang==0) fprintf(ft,"%s\n",e_ffoot); else fprintf(ft,"%s\n",en_ffoot); fprintf(ft,"%s\n","}"); //......................End of PageFooter....................................... fprintf(ft,"%s %i %s\n"," \\textheight = ",int(255-(Kegel*2.4*(P_cnt-TabCount))/2.65+0.5),"mm"); // ..................!!!!!! Begin DOKUMENT !!!!!!!!!!! ........................ fprintf(ft,"%s\n",b_doc); Kegel = 10; isTab = 0; for (i=0; i<Rep_cnt; i++) // просмотр для Head { if ( Rep_st[i].Typ== 1) { // Header Type bzero(&si[0], 400); k = Translate(&Rep_st[i].Txt[0]); FormLine(i); fprintf(ft,"%s %s\n",si,c_eol); } // end of Header } // End cicle for Head //............................................................................ for (i=0; i<Rep_cnt; i++) // просмотр для ВСЕГО ТЕКСТА { if(Rep_st[i].Typ == 5) // Immediate Command!!! fprintf(ft,"%s\n",Rep_st[i].Txt.c_str()); if ( Rep_st[i].Typ== 2) // Table Type { bzero(&si[0], 400); if(isTab && (Rep_st[i].Tab!=LaufTab)) // одна таблица сменяют другую { // закрываем текущую fprintf(ft,"%s \n",e_tbl);isTab=0; } if ((!isTab)) { isTab = 1; LaufTab = Rep_st[i].Tab; FormLine(i); fprintf(ft,"%s",b_tbl); /* k = Rep_st[i].Cols[0]+Rep_st[i].Cols[1]+Rep_st[i].Cols[2]+ Rep_st[i].Cols[3]+Rep_st[i].Cols[4]; */ k = abs(Rep_st[i].Cols[0])+abs(Rep_st[i].Cols[1])+abs(Rep_st[i].Cols[2])+ abs(Rep_st[i].Cols[3])+abs(Rep_st[i].Cols[4]); double d = 160./k; fprintf(ft,"%s"," {"); for (m=0;m<5;m++) if (Rep_st[i].Cols[m]!=0) { //fprintf(ft,"%s %i %s","p{",(int)(d*Rep_st[i].Cols[m]),"mm}"); fprintf(ft,"%s %i %s","p{",(int)(d*abs(Rep_st[i].Cols[m])),"mm}"); } fprintf(ft,"%s\n"," }"); } for (m=0;m<5;m++) if (Rep_st[i].Cols[m]!=0) { switch (m) { case 0:{ if(abs(Rep_st[i].Cols[0]==1)) fprintf(ft,"%s ",Rep_st[i].Txt.c_str()); else fprintf(ft,"%s ",Rep_st[i].Num.c_str()); if(Rep_st[i].Cols[0]<0)fprintf(ft,"%s",c_dotfill); //!!!!!!!!!!! break;} case 1:{fprintf(ft,"%s","&"); if (Rep_st[i].NCand.length()>0)fprintf(ft,"%s %s", Rep_st[i].NCand.c_str(),". "); if(Rep_st[i].Cols[1]<0)fprintf(ft,"%s",c_dotfill); //!!!!!!!!!!! break;} case 2:{fprintf(ft,"%s","&");fprintf(ft,"%s",Rep_st[i].Txt.c_str()); if(Rep_st[i].Cols[2]<0)fprintf(ft,"%s",c_dotfill); //!!!!!!!!!!! break;} case 3:{fprintf(ft,"%s %i","&",Rep_st[i].Value); if(Rep_st[i].Cols[3]<0)fprintf(ft,"%s",c_dotfill); //!!!!!!!!!!! break;} case 4:{fprintf(ft,"%s %s","&",Rep_st[i].V_prop.c_str());break;} default:; } } fprintf(ft,"%s %s %i %s\n",c_eol,"[",Rep_st[i].Vsps,"pt]"); } // end of Body if ( Rep_st[i].Typ== 3) // Normal text Type { if(isTab){fprintf(ft,"%s \n",e_tbl);isTab=0;} bzero(&si[0], 400); k = Translate(&Rep_st[i].Txt[0]); FormLine(i); fprintf(ft,"%s %s %s %i %s\n",si,c_eol,"[",Rep_st[i].Vsps,"pt]"); } } // End cycle for Text if(isTab){fprintf(ft,"%s \n",e_tbl);isTab=0;} //.............................................................................. fprintf(ft,"%s \n","\\begin{figure}[ht]"); for(i=0;i<P_cnt;i++) fprintf(ft,"%s",a_si[i]); fprintf(ft,"%s \n","\\end{figure}"); //.............................................................................. // !!! End of DOKUMENT !!!!!! fprintf(ft,"%s\n",e_doc); // Конец ТеХ файла - закрываем! // fprintf(ft,"%s \n",c_eol); fclose(ft); return(1); };