From 471902aaba43cb528cf0a742b2372cdf473bbe44 Mon Sep 17 00:00:00 2001 From: Luiz Rafael Culik Date: Tue, 2 Jan 2001 00:07:35 +0000 Subject: [PATCH] See changelog 2001-01-01 22:15 GMT -3 --- harbour/ChangeLog | 5 + harbour/contrib/pdflib/pdfhbdoc.c | 184 +++++++++++++++++++++--------- harbour/utils/hbdoc/genpdf1.prg | 141 +++++------------------ 3 files changed, 160 insertions(+), 170 deletions(-) diff --git a/harbour/ChangeLog b/harbour/ChangeLog index 2ecebac8cb..d4617e6d5b 100644 --- a/harbour/ChangeLog +++ b/harbour/ChangeLog @@ -1,3 +1,8 @@ +2001-01-01 22:15 GMT -3 Luiz Rafael Culik + *utils/hbdoc/genpdf.prg + *contrib/pdflib/pdfhbdoc.c + *Fixed handling of 4 column table items + 2000-12-29 01:30 UTC-0800 Brian Hays * source/rtl/memoline.c Added OS_UNIX_COMPATIBLE test for single-byte EOL markers diff --git a/harbour/contrib/pdflib/pdfhbdoc.c b/harbour/contrib/pdflib/pdfhbdoc.c index 888eb464f7..3795dc77fe 100644 --- a/harbour/contrib/pdflib/pdfhbdoc.c +++ b/harbour/contrib/pdflib/pdfhbdoc.c @@ -63,6 +63,8 @@ PHB_ITEM pArray=NULL; static float hb_checkStringWidth(const char *szString); static float hb_pdfGetHeight(const char *szText); static void hb_ProcessTableItem(PHB_ITEM p1,PHB_ITEM p2,PHB_ITEM p3,PHB_ITEM p4); +float getText(PDF *p,const char *szText,int iFont,float irow,float icol,float iw); +void setText(PDF *p,const char *szText,float irow,float icol,float h,float iw); HB_FUNC(HB_PDFNEW) { @@ -301,8 +303,9 @@ if (pTableItem2 != NULL){ } if (pTableItem3 != NULL){ bFItems=TRUE; + bTItems=FALSE; } - +iRow-=LEAD; for (ulPos=1;ulPos<=hb_arrayLen(pTableItem);ulPos++) { PHB_ITEM pTempArray ; PHB_ITEM pTempArray1 ; @@ -346,68 +349,135 @@ bFItems=FALSE; } static void hb_ProcessTableItem(PHB_ITEM p1,PHB_ITEM p2,PHB_ITEM p3,PHB_ITEM p4) { -ULONG ulTempPos; -ULONG ulLen; -float fHeight; -float fI; -ulLen=hb_arrayLen(p1); -for (ulTempPos=1;ulTempPos<=ulLen;ulTempPos++){ - const char *szTemp=(char *) hb_arrayGetCPtr(p1,ulTempPos); - const char *szTemp1=(char *) hb_arrayGetCPtr(p2,ulTempPos); - if (!bTItems && !bFItems) { - PDF_setfont(szPDFFile, sziFont, FONTSIZETABLE); - PDF_show_xy(szPDFFile,szTemp,27,iRow-=LEAD); - PDF_show_xy(szPDFFile,szTemp1,286,iRow); -/* iRow-=LEAD; - iCol-=LEAD;*/ - fHeight+=FONTSIZE; - } - if (bTItems && !bFItems) { - const char * szTemp2=(char *) hb_arrayGetCPtr(p3,ulTempPos); + ULONG ulTempPos; + ULONG ulLen; + float fHeight; + float fI; + float iitem,iitem1,iitem2,iitem3; + + ulLen=hb_arrayLen(p1); + for (ulTempPos=1;ulTempPos<=ulLen;ulTempPos++){ + const char *szTemp=(char *) hb_arrayGetCPtr(p1,ulTempPos); + const char *szTemp1=(char *) hb_arrayGetCPtr(p2,ulTempPos); - PDF_setfont(szPDFFile, sziFont, FONTSIZETABLE); - PDF_show_xy(szPDFFile,szTemp,27,iRow-=LEAD); - PDF_show_xy(szPDFFile,szTemp1,200,iRow); - PDF_show_xy(szPDFFile,szTemp2,370,iRow); - PDF_setfont(szPDFFile, sziFont, FONTSIZESMALL); -/* PDF_show_xy(szPDFFile,szTemp,27,iCol); - PDF_show_xy(szPDFFile,szTemp1,200,iCol); - PDF_show_xy(szPDFFile,szTemp2,370,iCol); - iRow-=LEAD; - iCol-=LEAD;**/ - fHeight+=FONTSIZE; - -} -} - if (fOldPos==0) { if (!bTItems && !bFItems) { - PDF_rect(szPDFFile,25,iRow-2,510,fHeight); - PDF_rect(szPDFFile,280,iRow-2,255,fHeight); - PDF_stroke(szPDFFile); - fOldPos=iRow; - } - if (bTItems && !bFItems) { - PDF_rect(szPDFFile,25,iRow-2,510,fHeight); - PDF_rect(szPDFFile,195,iRow-2,171,fHeight); - PDF_rect(szPDFFile,367,iRow-2,168,fHeight); - PDF_stroke(szPDFFile); - fOldPos=iRow; + PDF_setfont(szPDFFile, sziFont, FONTSIZETABLE); + iitem=getText(szPDFFile,szTemp1,sziFont,293,iRow,261); + iitem1=getText(szPDFFile,szTemp,sziFont,27,iRow,261); + if (iitem iitem1 && iitem >iitem2) { + setText(szPDFFile ,szTemp2,381,iRow,iitem,173); + setText(szPDFFile ,szTemp1,204,iRow,iitem,172); + setText(szPDFFile ,szTemp,27,iRow,iitem,172); + iRow-=iitem; + } + + if (iitem2> iitem && iitem2>iitem1){ + setText(szPDFFile ,szTemp2,381,iRow,iitem2,173); + setText(szPDFFile ,szTemp1,204,iRow,iitem2,172); + setText(szPDFFile ,szTemp,27,iRow,iitem2,172); + iRow-=iitem2; + } + + if (iitem1> iitem && iitem1>iitem2 ){ + setText(szPDFFile ,szTemp2,381,iRow,iitem1,173); + setText(szPDFFile ,szTemp1,204,iRow,iitem1,172); + setText(szPDFFile ,szTemp,27,iRow,iitem1,172); + iRow-=iitem1; + } + +} + if (!bTItems && bFItems) { + const char * szTemp2=(char *) hb_arrayGetCPtr(p3,ulTempPos); + const char * szTemp3=(char *) hb_arrayGetCPtr(p4,ulTempPos); + PDF_setfont(szPDFFile, sziFont, FONTSIZETABLE); + iitem1=getText(szPDFFile ,szTemp3,sziFont,426,iRow,128); + iitem2=getText(szPDFFile ,szTemp2,sziFont,293,iRow,128); + iitem=getText(szPDFFile ,szTemp1,sziFont,160,iRow,128); + iitem3=getText(szPDFFile ,szTemp,sziFont,27,iRow,128); + if (iitem > iitem1 && iitem >iitem2 && iitem>iitem3) { + setText(szPDFFile ,szTemp3,426,iRow,iitem,128); + setText(szPDFFile ,szTemp2,293,iRow,iitem,128); + setText(szPDFFile ,szTemp1,160,iRow,iitem,128); + setText(szPDFFile ,szTemp,27,iRow,iitem,128); + iRow-=iitem; + } + else { + if (iitem2> iitem && iitem2>iitem1 && iitem2>iitem3){ + setText(szPDFFile ,szTemp3,426,iRow,iitem2,128); + setText(szPDFFile ,szTemp2,293,iRow,iitem2,128); + setText(szPDFFile ,szTemp1,160,iRow,iitem2,128); + setText(szPDFFile ,szTemp,27,iRow,iitem2,128); + iRow-=iitem2; + } else { - if (!bTItems && !bFItems) { - PDF_rect(szPDFFile,25,iRow-2,510,fHeight); - PDF_rect(szPDFFile,280,iRow-2,255,fHeight); - PDF_stroke(szPDFFile); - fOldPos=iRow; - } - if (bTItems && !bFItems) { - PDF_rect(szPDFFile,25,iRow-2,510,fHeight); - PDF_rect(szPDFFile,195,iRow-2,171,fHeight); - PDF_rect(szPDFFile,367,iRow-2,168,fHeight); - PDF_stroke(szPDFFile); - fOldPos=iRow; + if (iitem1> iitem && iitem1>iitem2 && iitem1>iitem3){ + setText(szPDFFile ,szTemp3,426,iRow,iitem1,128); + setText(szPDFFile ,szTemp2,293,iRow,iitem1,128); + setText(szPDFFile ,szTemp1,160,iRow,iitem1,128); + setText(szPDFFile ,szTemp,27,iRow,iitem1,128); + iRow-=iitem1; } + else { + if (iitem3> iitem && iitem3>iitem2 && iitem3>iitem){ + setText(szPDFFile ,szTemp3,426,iRow,iitem3,128); + setText(szPDFFile ,szTemp2,293,iRow,iitem3,128); + setText(szPDFFile ,szTemp1,160,iRow,iitem3,128); + setText(szPDFFile ,szTemp,27,iRow,iitem3,128); + iRow-=iitem3; +} + else { + setText(szPDFFile ,szTemp3,426,iRow,iitem3,128); + setText(szPDFFile ,szTemp2,293,iRow,iitem3,128); + setText(szPDFFile ,szTemp1,160,iRow,iitem3,128); + setText(szPDFFile ,szTemp,27,iRow,iitem3,128); + iRow-=iitem3; + + } + } + } + } +} } } + +float getText(PDF *p,const char *szText,int iFont,float irow,float icol,float iw) +{ +float h; +float w; +int c; +h=FONTSIZETABLE*2; +PDF_setfont(p, iFont, 7.0); +c=PDF_show_boxed(p, szText, irow, icol, iw, h, "justify", "blind"); +while (c>0){ + h+= FONTSIZETABLE; + c=PDF_show_boxed(p, szText, irow, icol, iw, h, "justify", "blind"); +} +return h; +} + +void setText(PDF *p,const char *szText,float irow,float icol,float h,float iw) +{ + + PDF_show_boxed(p, szText, irow, icol, iw, h, "justify", ""); + PDF_rect(p,irow,icol,iw+5,h); + PDF_stroke(p); +} diff --git a/harbour/utils/hbdoc/genpdf1.prg b/harbour/utils/hbdoc/genpdf1.prg index 3209bf4d4b..ace111157d 100644 --- a/harbour/utils/hbdoc/genpdf1.prg +++ b/harbour/utils/hbdoc/genpdf1.prg @@ -150,7 +150,7 @@ FUNCTION ProcessPdf(lMemory) LOCAL cData := DELIM + "DATA" + DELIM LOCAL cMethod := DELIM + 'METHOD' + DELIM LOCAL cClassDoc := DELIM + "CLASSDOC" + DELIM - +local hhh DEFAULT lMemory to .F. lData := .F. lMethod := .F. @@ -178,6 +178,7 @@ FUNCTION ProcessPdf(lMemory) hb_pdfnewpage("Harbour Guide",'Harbour Guide') hb_pdfinitbook(aResult) hb_pdfendpage() + hhh:=fcreate('ssss.sss') endif FOR i := 1 TO nFiles @@ -207,8 +208,18 @@ FUNCTION ProcessPdf(lMemory) DO WHILE .NOT. lEof // Read a line - - cBuffer := TRIM( SUBSTR( ReadLN( @lEof ), nCommentLen ) ) + cBuffer:=ReadLN( @lEof ) + if !lmemory + ? valtype(cBuffer) + ? cBuffer + fWrite(hhh,cBuffer+hb_osnewline()) +// cBuffer:=" " + Endif + if !lmemory + cBuffer := TRIM( SUBSTR( cBuffer, nCommentLen ) ) + else + cBuffer := SUBSTR( cBuffer, nCommentLen ) + endif cBuffer := STRTRAN( cBuffer, CHR( 10 ), "" ) nLineCnt ++ // IF nLineCnt % 10 = 0 @@ -687,6 +698,7 @@ FUNCTION ProcessPdf(lMemory) HB_PDFCLOSE() if lmemory // ferase('pdf\temp.pdf') +fclose(hhh) endif RETURN Nil @@ -746,10 +758,13 @@ RETURN nil FUNCTION GenPdfTable( oPdf ,nNumTableItems) if nNumTableItems <3 +hb_pdfWriteText( " " ) HB_PDFTABLE(aFitable,aSitable) elseif nNumTableItems<4 +hb_pdfWriteText( " " ) HB_PDFTABLE(aFitable,aSitable,aTitable) else +hb_pdfWriteText( " " ) HB_PDFTABLE(aFitable,aSitable,aTitable,aFoiTable) endif @@ -1373,120 +1388,20 @@ Local aItems2:={} Local aItems3:={} Local aItems4:={} -Local nCount:=0 -Local nPos:=0 -Local nResult:=0 -Local lEndPar:=.f. -Local cTemp:='' -Local nLen:=Len(cItem) -local nLen1:=Len(cItem2) -local nLen2:=Len(cItem3) -local nLen3:=Len(cItem4) -Local nMaxArray:=0 + if nItem <3 - do While nLen>0 - cTemp:=substr(cItem,1,47) - if nLen>47 - nPos:=Rat(" ",cTemp) - endif - if nPos>0 - cTemp:=substr(cItem,1,nPos) - aadd(aItems,cTemp) - else - aadd(aItems,cTemp) - endif - cItem:=strtran(cItem,cTemp,"") - nLen:=len(cItem) - enddo - do While nLen1>0 - cTemp:=substr(cItem2,1,47) - if nLen1>47 - nPos:=Rat(" ",cTemp) - endif - if nPos>0 - cTemp:=substr(cItem2,1,nPos) - aadd(aItems2,cTemp) - else - aadd(aItems2,cTemp) - endif - cItem2:=strtran(cItem2,cTemp,"") - nLen1:=len(cItem2) -enddo + aadd(aitems,citem) + aadd(aItems2,citem2) elseif nItem <4 - do While nLen>0 - cTemp:=substr(cItem,1,32) - if nLen>32 - nPos:=Rat(" ",cTemp) - endif - - if nPos>0 - cTemp:=substr(cItem,1,nPos) - aadd(aItems,cTemp) - else - aadd(aItems,cTemp) - endif - cItem:=strtran(cItem,cTemp,"") - nLen:=len(cItem) - enddo - do While nLen1>0 - cTemp:=substr(cItem2,1,32) - if nLen1>32 - nPos:=Rat(" ",cTemp) - endif - if nPos>0 - cTemp:=substr(cItem2,13nPos) - aadd(aItems2,cTemp) - else - aadd(aItems2,cTemp) - endif - cItem2:=strtran(cItem2,cTemp,"") - nLen1:=len(cItem2) -enddo - -endif -if nItem <4 - do While nLen2>0 - cTemp:=substr(cItem3,1,32) - if nLen2>32 - nPos:=Rat(" ",cTemp) - endif - if nPos>0 - cTemp:=substr(cItem3,1,nPos) - aadd(aItems3,cTemp) + aadd(aitems,cItem) + aadd(aitems2,citem2) + aadd(aitems3,citem3) else - aadd(aItems3,cTemp) - endif - cItem3:=strtran(cItem3,cTemp,"") - nLen2:=len(cItem3) -enddo + aadd(aitems,cItem) + aadd(aitems2,citem2) + aadd(aitems3,citem3) + aadd(aItems4,citem4) endif - do While nLen3>0 - cTemp:=substr(cItem4,1,40) - nPos:=Rat(" ",cTemp) - if nPos>0 - cTemp:=substr(cItem4,1,nPos) - aadd(aItems4,cTemp) - else - aadd(aItems4,cTemp) - endif - cItem4:=strtran(cItem4,cTemp,"") - nLen3:=len(cItem4) -enddo -nMaxArray:=getArray(aItems,aItems2,Aitems3,aItems4) - -do while Len(aItems)