home *** CD-ROM | disk | FTP | other *** search
/ PC World 2002 December / PCWorld_2002-12_cd.bin / Software / Komercni / Baltik / katB.exe / katB / DESIGN / DESIGN_C.XML < prev    next >
Text File  |  2002-09-24  |  13KB  |  276 lines

  1. ////////////////////////////////////////////////////////////////////////////////
  2. //----------------------------------------------------------------------------//
  3. //-----project DESINGER, copyright 2002 Libor Bareτ-------------------------//
  4. //----------------------------------------------------------------------------//
  5.      DIAGRAMCELL* Cells=0;
  6.      int * zorder=0;
  7.      int nSize=0;
  8.      long  Src;
  9.  
  10. string GetVisibility(long nType){
  11.             if(nType & 0x00000002L/*TYPE_OA_PRIVATE*/) return "private";
  12.             else if(nType & 0x00000001L/*TYPE_OA_PROTECTED*/) return "protected";
  13.             else return "public";
  14.  
  15.  
  16. }
  17. string OperationParser(CLASSITEM* pItem, string & vis, string & type, string & name, string & param){
  18.      string strHTML;
  19.      vis = GetVisibility(pItem->nType);
  20.      string ToParser = pItem->strText;
  21.      type = "";
  22.      name = "";
  23.      param = "";
  24.      int nPos;
  25.          param = "";
  26.      int nLen = StrDélka(ToParser);
  27.      char nName = 0;
  28.          int nParam = 0;
  29.      for(nPos=0;nPos < nLen;nPos++){
  30.        if(ToParser[nPos]=='('){
  31.                   name = trim(StrKopie(ToParser,0,nPos));
  32.           nName =1;
  33.  
  34.           unsigned end = StrPozicePod²et╪zce(ToParser,0,")");
  35.           if(end != 0xffff){
  36.               int nX,id=0;
  37.               string str;
  38.               for(nPos++;nPos < end && ToParser[nPos] != ')';nPos++){
  39.                   int nX=nPos;
  40.                   for(;nPos < nLen && ToParser[nPos] != ')' && ToParser[nPos] != ',';nPos++){}
  41.                   str = trim(StrKopie(ToParser,nX,nPos-nX));
  42.                   if(str != ""){
  43.                      //-Box__AddItem(21/*IDC_PARA_LIST*/,id,strx,0);id++;
  44.                                             int x,i = StrPozicePod²et╪zce(str,0,":");
  45.                                                 if(StrKopie(str,0,5)=="inout"){x=6;}
  46.                                                 else if ((StrKopie(str,0,3)=="out")){x=4;}
  47.                                                 else if ((StrKopie(str,0,2)=="in")){x=3;}
  48.                                                 else {x=0;}
  49.                                                 if(nParam != 0)param+=", ";
  50.                                                 else {
  51. strHTML = "<TR><TD width=\"100\"><FONT face=\"Tahoma\" size=\"2\"></FONT></TD><TD width=\"100\" vAlign=\"top\" align=\"middle\"><span class=\"Labels\">parametry :</span></TD><TD>";
  52. strHTML+="<TABLE cellSpacing=\"0\" cellPadding=\"0\" border=\"0\" width=\"350\" >";
  53.  
  54.                                                 }
  55.                                                 param+=trim(StrKopie(str,i+1,-1))+" "+trim(StrKopie(str,x,i-x));
  56.                                                 nParam++;
  57.                                                 strHTML+="<TR><TD width=10></TD><TD><span class=\"Types\">"+trim(StrKopie(str,i+1,-1))+"</span></TD><td><FONT face=\"Tahoma\" size=\"2\">"+trim(StrKopie(str,x,i-x))+"</FONT></td></TR>";
  58.                   }
  59.               }
  60.           }
  61.        }
  62.        if(ToParser[nPos]==':'){  // read type
  63.            if(nName==0) name = trim(StrKopie(ToParser,0,nPos));
  64.                    type = trim(StrKopie(ToParser,nPos+1,-1));
  65.        }
  66.    }
  67.  
  68.    param = trim(param);
  69.    name = trim(name);
  70.    type = trim(type);
  71.    if(strHTML != ""){
  72.        strHTML +="</TABLE></TD></TR>";
  73.  
  74.    }
  75.    return strHTML;
  76.  
  77. }
  78. void VariableParser(CLASSITEM* pItem, string & vis, string & type, string & name){
  79.             vis = GetVisibility(pItem->nType);
  80.  
  81.             // name and type
  82.             unsigned pos = StrPozicePod²et╪zce(pItem->strText,0," : ");
  83.             if(pos == 0xffff){name = pItem->strText; type = "";}
  84.             else {
  85.                name = StrKopie(pItem->strText,0,pos);
  86.                type = StrKopie(pItem->strText,pos+3,StrDélka(pItem->strText)-pos-3);
  87.             }
  88.  
  89. }
  90.  
  91. void EXPORT_HTML(string tofile){
  92.      TxtPiτⁿet╪zec("\nExportuji náhled t²íd do  "+tofile);
  93.  
  94.   //   if(SouborExistuje(tofile))SouborSmaº(tofile);
  95.  
  96.      long Dest = SouborOtev²i(tofile,SouborP²ístupZápis|SouborP²ístupTextov∞);
  97.      SouborU²ízni(Dest);
  98.  
  99.      SouborNastavPozici(Dest,0,SouborPoziceOdZaƒátku);
  100.      int nPos = 0;
  101.      SouborPiτⁿet╪zec(Dest,"<HTML><HEAD><META http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1250\">");
  102.      SouborPiτⁿet╪zec(Dest,"<style> .Types {font-size: x-small;color: blue;font-family: Tahoma;} .Labels {font-weight: bold;font-size: x-small;color: indigo;font-family: Tahoma;}</style></HEAD>");
  103.  
  104.  
  105.      SouborPiτⁿet╪zec(Dest,"<BODY>");
  106.  
  107.      {
  108.          // class
  109.          DIAGRAMCELL * pCell=NULL;
  110.          string vis,name,type,param;
  111.          for(nPos =0; nPos < nSize; nPos++){
  112.  
  113.              pCell = &Cells[nPos];
  114.              if(pCell->nType < 3){
  115.              SouborPiτⁿet╪zec(Dest,"<TABLE style=\"WIDTH: 571px; HEIGHT: 27px\" width=\"570\" border=\"0\" cellpadding=\"1\" cellspacing=\"1\" bgColor=\"lightgrey\"><tbody bgColor=\"white\"><tr><td colspan=\"5\" bgColor=\"#cadfff\"><STRONG>     ");
  116.              SouborPiτⁿet╪zec(Dest,"<FONT color=\"midnightblue\" face=\"Arial\" size=\"5\">");
  117.              SouborPiτⁿet╪zec(Dest,pCell->ClassName);
  118.  
  119.              SouborPiτⁿet╪zec(Dest,"</FONT></STRONG></td></tr>");
  120.  
  121.              {
  122.                  SouborPiτⁿet╪zec(Dest,"<TR><TD colspan=\"5\" bgColor=\"snow\"><FONT face=\"Tahoma\" color=\"gray\"><STRONG>  Atributy :</STRONG> </FONT></TD></TR>");
  123.                  SouborPiτⁿet╪zec(Dest,"<TR bgColor=\"peachpuff\"><TD width=\"100\" align=\"middle\"><span class=\"Labels\">viditelnost</span> </TD><TD width=\"100\" align=\"middle\"><span class=\"Labels\">typ</span></TD><TD colSpan=\"3\" align=\"middle\">");
  124.                  SouborPiτⁿet╪zec(Dest,"<span class=\"Labels\">nßzev atributu</span></TD></TR>");
  125.                  {
  126.                     // variables
  127.                     int nVariable=0;
  128.                     for(;nVariable < pCell->nSizeVariable;nVariable++){
  129.                        VariableParser(&(((CLASSITEM*)pCell->pVariable)[nVariable]),vis,type,name);
  130.                        SouborPiτⁿet╪zec(Dest,"<TR><TD width='100'><FONT face=\"Tahoma\" size=\"2\"> "+vis+"</FONT></TD><TD width='100'><span class=\"Types\"> "+type+"</span></TD><TD colSpan=\"3\">");
  131.                        SouborPiτⁿet╪zec(Dest,"<FONT face=\"Tahoma\" size=\"2\"> <FONT size=\"3\">"+name+"</FONT></FONT>");
  132.                     }
  133.  
  134.                  }
  135.  
  136.  
  137.              }
  138.              {
  139.                  // operations
  140.                  SouborPiτⁿet╪zec(Dest,"<TR><TD width=\"100\" colspan=\"5\" bgColor=\"snow\"><FONT face=\"Tahoma\" color=\"dimgray\"><STRONG>  Operace :</STRONG></FONT></TD></TR>");
  141.                  SouborPiτⁿet╪zec(Dest,"<TR bgColor=\"peachpuff\"><TD width=\"100\"><P align=\"center\"><span class=\"Labels\">viditelnost</span></P>");
  142.                  SouborPiτⁿet╪zec(Dest,"</TD><TD width=\"100\" align=\"middle\"><span class=\"Labels\">nßvratov² typ</span></TD><TD colSpan=\"3\" align=\"middle\"><span class=\"Labels\">nßzev operace</span></TD></TR>");
  143.                  {
  144.                     // operations
  145.                     int nOperation=0;
  146.                     for(;nOperation < pCell->nSizeOperation;nOperation++){
  147.                        string strH = OperationParser(&(((CLASSITEM*)pCell->pOperation)[nOperation]),vis,type,name,param);
  148.                        SouborPiτⁿet╪zec(Dest,"<TR><TD width=\"100\"><FONT face=\"Tahoma\"> <FONT size=\"2\">"+vis+"</FONT></FONT></TD><TD width=\"100\"><span class=\"Types\"> "+type+"</span></TD><TD colSpan=\"3\">");
  149.                        SouborPiτⁿet╪zec(Dest,"<FONT face=\"Arial\" size=\"2\"> <FONT size=\"3\">"+name+"</FONT></FONT></TR>");
  150.                        if(strH != "")SouborPiτⁿet╪zec(Dest,strH);
  151.  
  152.                     }
  153.  
  154.                  }
  155.  
  156.  
  157.  
  158.              }
  159.              SouborPiτⁿet╪zec(Dest,"</table><br><br>");
  160.              }
  161.  
  162.           }
  163.  
  164.      }
  165.  
  166.      SouborPiτⁿet╪zec(Dest,"</BODY></HTML>");
  167.  
  168.     SouborZav²i(Dest);
  169.  
  170.  
  171. }
  172. void EXPORT_CPLUSPLUS(int idclass,string file){
  173.      DIAGRAMCELL * pCell = &Cells[idclass];
  174.      string hfile = file + pCell->ClassName+".h";
  175.      file += pCell->ClassName+".cpp";
  176.      TxtPiτⁿet╪zec("\nExportuji t²ídu '"+pCell->ClassName+"' implementation :  "+file+"\n    interface : "+hfile);
  177.      if(SouborExistuje(file))SouborSmaº(file);
  178.      long DestCpp = SouborOtev²i(file,SouborP²ístupZápis|SouborP²ístupTextov∞);
  179.      long DestH = SouborOtev²i(hfile,SouborP²ístupZápis|SouborP²ístupTextov∞);
  180.      SouborU²ízni(DestCpp);
  181.      SouborU²ízni(DestH);
  182.  
  183.      SouborNastavPozici(DestH,0,SouborPoziceOdZaƒátku);
  184.      SouborNastavPozici(DestCpp,0,SouborPoziceOdZaƒátku);
  185.      SouborPiτⁿet╪zec(DestCpp,"//////////////////////////////////////////////////////////////////\n//        Class : "+pCell->ClassName+"\n"+
  186.                               +"//        File :  "+pCell->ClassName+".cpp - implementation \n//\n"+
  187.                               +"//       Created by SoftDesigner Professional Edition for UML\n//////////////////////////////////////////////////////////////////\n\n");
  188.      SouborPiτⁿet╪zec(DestH,"//////////////////////////////////////////////////////////////////\n//        Class : "+pCell->ClassName+"\n"+
  189.                               +"//        File :  "+pCell->ClassName+".h - interface \n//\n"+
  190.                               +"//       Created by SoftDesigner Professional Edition for UML\n//////////////////////////////////////////////////////////////////\n\n");
  191.  
  192.      SouborPiτⁿet╪zec(DestCpp,"#include \""+pCell->ClassName+".h\"\n\n\n");
  193.      if(pCell->dwFlags & 0x100){
  194.          SouborPiτⁿet╪zec(DestH,"virtual ");
  195.      }
  196.      SouborPiτⁿet╪zec(DestH,"class "+pCell->ClassName+" ");
  197.      int nSizeParent=0;
  198.      int nPos;
  199.      DIAGRAMCELL * pDep;
  200.      for(nPos=0;pCell->nSizeDependents > nPos;nPos++){
  201.          pDep = &Cells[pCell->pDependents[nPos]];
  202.          if(pDep->nType == 4 && pDep->dwFlags & 1 && pDep->nBreakB == idclass){
  203.                if(nSizeParent != 0)     SouborPiτⁿet╪zec(DestH,", ");
  204.                else SouborPiτⁿet╪zec(DestH," : ");
  205.                nSizeParent++;
  206.                SouborPiτⁿet╪zec(DestH,Cells[pDep->nBreakA].ClassName);
  207.          }
  208.  
  209.      }
  210.      SouborPiτⁿet╪zec(DestH," {\n");
  211.  
  212.      string vis,name,type,param;
  213.      {
  214.         // output variables;
  215.         SouborPiτⁿet╪zec(DestH,"\n        // Variables ");
  216.         SouborPiτNov∞ⁿádek(DestH);
  217.         // HERE OUTPUT
  218.                     int nVariable=0;
  219.                     for(;nVariable < pCell->nSizeVariable;nVariable++){
  220.                        VariableParser(&(((CLASSITEM*)pCell->pVariable)[nVariable]),vis,type,name);
  221.                        SouborPiτⁿet╪zec(DestH,"        "+vis+" "+type+" "+name+";\n");
  222.                     }
  223.  
  224.         SouborPiτNov∞ⁿádek(DestH);
  225.  
  226.      }
  227.  
  228.      {
  229.         // output operations;
  230.         SouborPiτⁿet╪zec(DestH,"\n        // Operations ");
  231.         string ext="";
  232.         SouborPiτNov∞ⁿádek(DestH);
  233.                     int nOperation=0;
  234.                     for(;nOperation < pCell->nSizeOperation;nOperation++){
  235.                         OperationParser(&(((CLASSITEM*)pCell->pOperation)[nOperation]),vis,type,name,param);
  236.                         if((((CLASSITEM*)pCell->pOperation)[nOperation]).nType & 0x100) ext = "virtual ";
  237.                         else ext="";
  238.                         SouborPiτⁿet╪zec(DestH,"        "+ext+vis+" "+type+" "+name+"( "+param+" );\n");
  239.                         SouborPiτⁿet╪zec(DestCpp,type+" "+pCell->ClassName+"::"+name+"("+param+")\n{\n        // TODO : Here add your code ... \n\n}\n");
  240.                     }
  241.         // HERE OUTPUT
  242.         SouborPiτNov∞ⁿádek(DestH);
  243.  
  244.  
  245.      }
  246.  
  247.      SouborPiτⁿet╪zec(DestH,"\n\n\n}");
  248.      SouborZav²i(DestH);
  249.      SouborZav²i(DestCpp);
  250.  
  251. }
  252. void IMPORT_CPLUSPLUS(string file){
  253.          // CZE
  254.          // program umi importovat z *.Cpp a *.H, tedy z definici imlementace a rozhrani jazyka C++
  255.          //
  256.          //
  257.          //  poznamka k implementaci : Jazyk C++ je velmi rozsahly a pokryt veskerou sktrukturu jazyka by bylo
  258.          //  pomerne casove narocne a program i tak by nemohl nektere struktury zobrazit.
  259.          //  Soucastna verze parseru proto neobsahuje dekodery pro tyto typy C++ konstrukci 
  260.          //     : parametrizovane tridy, class v class, typedefy, define, atd...
  261.          //  ve skutecnosti tento jednoduchy parser zapozdri pouze jednoduchou orientaci v kodu,
  262.          //  je sice pravda, ze komletni parser by nebylo narocne udelat, jenze ... bylo by nutne
  263.          //  zahrnost defacto i vlastni minicopiler kodu, ktery by byl schopen resit konstrukce definici apod.
  264.          //
  265.      long Cpp = SouborOtev²i(file,SouborP²ístupZápis|SouborP²ístupTextov∞);
  266.      string strLastOp;
  267.      string strLine;
  268.      char bComments; /* */
  269.      while(!SouborKonec(Cpp)){
  270.            Soubor¼tiSⁿet╪zec(Cpp,strLine);
  271.  
  272.      }
  273.  
  274.  
  275.  
  276. }