PROCEDURE ParseRTF
LPARAMETERS tcRtfContents
CREATE CURSOR cRtfCode ( NestLev I, ;
Code C(200), Doc M )
lnLevel = 0
lcCode = ''
lcDoc = ''
llInCode = .f.
FOR lnI = 1 TO LEN(tcRtfContents)
lcChr = SUBSTR(tcRtfContents,lnI,1)
DO CASE
CASE lcChr='{'
lnLevel = lnLevel + 1
IF NOT EMPTY(lcCode+lcDoc)
INSERT INTO cRtfCode ( NestLev, Code, Doc ) ;
VALUES (lnLevel,lcCode,lcDoc)
lcCode = ''
lcDoc = ''
ENDIF
llInCode = .T.
CASE lcChr='}'
lnLevel = lnLevel - 1
IF NOT EMPTY(lcCode+lcDoc)
INSERT INTO cRtfCode ( NestLev, Code, Doc ) ;
VALUES (lnLevel,lcCode,lcDoc)
ENDIF
lcCode = ''
lcDoc = ''
CASE llInCode AND EMPTY(lcChr)
llInCode = .F.
CASE llInCode
lcCode = lcCode + lcChr
OTHERWISE && NOT llInCode
lcDoc = lcDoc + lcChr
ENDCASE
ENDFOR
RETURN lnLevel=0
ENDPROC
PROCEDURE ConcatRTF
LPARAMETERS tcOne, tcTwo
lcFirstFile = FILETOSTR(tcOne)
* Trim off final "}"
lnAt = RAT([}],lcFirstFile)
lcFirstFile = left(lcFirstFile,lnAt-1)
* Load second RTF:
lcSecondFile = FILETOSTR(tcTwo)
if not ParseRTF( lcSecondFile )
? 'Error!!'
suspend
endif
* Find the start of the body:
locate for '\pard' $ cRTFcode.doc
* Paste the body onto the first:
lcSecondFile = ''
lnLevel = cRTFCode.NestLev
SCAN REST
IF lnLevel>cRTFCode.NestLev
lcSecondFile = lcSecondFile + [}]
lnLevel = lnLevel - 1
ENDIF
if empty(cRTFcode.Code)
lcSecondFile = lcSecondFile + cRTFcode.doc
else
lcSecondFile = lcSecondFile + [{] + cRTFcode.code
lnLevel = lnLevel + 1
if not empty(cRTFcode.Doc)
lcSecondFile = lcSecondFile + [ ] + cRTFcode.doc
endif
ENDIF
ENDSCAN
RETURN lcFirstFile+lcSecondFile+'}'
ENDPROC