c ---------------------------------------------------------------- c TEXTPREP.CCT: Interlinear Text Preparation c ---------------------------------------------------------------- c Does SH2 style text preparation c See TEXTPREP.DOC for full documentation c ---------------------------------------------------------------- c Revision history c 2.1 D I Bevan 06 Aug 1997 made breaks at whitespace after punctuation c 2.0 D I Bevan 05 Aug 1997 restructured code c added \ref 000 record containing \id info c added code to handle sentence-final quotes c fixed handling of SH2 fields c added code to remove multiple spaces c 1.0 A Buseman 16 Aug 1996 c ---------------------------------------------------------------- begin > store(mkrId) '\id' c ID field marker store(mkrName) '\name' c Text name field marker store(mkrRef) '\ref' c Reference number field marker store(mkrText) '\t' c Text field marker store(mkrFree) '\f' c Free translation field marker store(setSentPunc) '.?!' c sentence final punctuation store(setCVNum) '0123456789-,' c chapter/verse number chars c ---------------------------------------------------------------- endstore do(procResetRefNum) use(gpInit) c ---------------------------------------------------------------- c DEFINES c Resets reference number count to one define(procResetRefNum) > store(cRef) '001' endstore c Outputs ref number field and text marker, and increments ref number define(procRef) > out(mkrRef) out(txtName) ' ' out(cRef) nl out(mkrText) ' ' incr(cRef) c Outputs text name field (in special \ref 000 record if \id info present) define(procName) > ifeq(txtId) '' begin nl out(mkrName) out(txtName) nl end else out(mkrRef) out(txtName) ' 000' nl c \ref name 000 out(mkrName) out(txtName) nl c \name name out(mkrId) out(txtId) nl c \id id info store(txtId) endstore c clear id info endif c Outputs free translation field define(procFreeTrans) > nl out(mkrFree) nl nl c ---------------------------------------------------------------- group(gpInit) c Process first line of file c Store \id info in txtId cont(mkrId) > store(txtId) use(gpStoreId) c Use Main group to process any other marker '\' > dup back(1) use(gpMain) c If no marker, create an empty name field and add first \ref field '' > out(mkrName) nl do(procRef) use(gpMain) c ---------------------------------------------------------------- group(gpMain) c Process \name fields nl cont(mkrName) ' ' > next cont(mkrName) ' ' > store(txtName) ' ' use(gpNewName) cont(mkrName) nl > nl back(1) store(txtName) use(gpNewName) c Trash SH2 fields nl '\_' > next '\_' > store(txtTrash) use(gpTrashLine) c Keep other markers nl '\' > next '\' > nl '\' use(gpSFMkr) c Squash spaces and join lines ' ' > next ' ' nl > next nl > ' ' back(1) c Process end of sentence any(setSentPunc) > dup use(gpSentEnd) c ---------------------------------------------------------------- group(gpStoreId) c Store \id info in txtId c End storing at next field marker, return to Init group '\' > endstore dup back(1) use(gpInit) c ---------------------------------------------------------------- group(gpNewName) c Process \name c If followed by another marker: nl '\' > endstore c end storing in txtName at newline do(procResetRefNum) c reset ref number do(procName) c \name name '\' back(2) use(gpMain) c process following marker c Else: nl > endstore c end storing in txtName at newline do(procResetRefNum) c reset ref number do(procName) c \name name do(procRef) use(gpMain) c \ref name 001 c \t c ---------------------------------------------------------------- group(gpSentEnd) c Process end of sentence ' ' > next c break at whitespace nl > nl use(gpSentBreak) endfile > do(procFreeTrans) endfile c add free translation field at end of file c ---------------------------------------------------------------- group(gpSentBreak) c Process sentence break ' ' > '' c delete extra whitespace nl > '' endfile > do(procFreeTrans) endfile c add free translation field at end of file c If followed by a marker: '\' > do(procFreeTrans) c output free translation marker dup back(2) use(gpMain) c and process marker c Else: '' > do(procFreeTrans) c output free translation marker do(procRef) use(gpMain) c \ref name nnn c \t c ---------------------------------------------------------------- group(gpSFMkr) c Keep marker (and chapter/verse numbers) ' ' any(setCVNum) > next c Keep chapter/verse numbers any(setCVNum) > dup ' ' nl '\_' > next nl '\_' > nl c If followed by SH2 field: store(txtTrash) c trash the SH2 field set(swReturnToSFM) use(gpTrashLine) ' ' nl '\' > next nl '\' > dup c Else if followed by other marker: c just keep processing ' ' nl > next ' ' > next c Else at whitespace: nl > nl c break line and add do(procRef) use(gpMain) c \ref name nnn c \t c ---------------------------------------------------------------- group(gpTrashLine) c Trash current line nl > endstore c end storing in txtTrash at newline if(swReturnToSFM) c and return to calling group back(1) clear(swReturnToSFM) use(gpSFMkr) else use(gpMain) endif c ---------------------------------------------------------------- c END OF TEXTPREP.CCT c ----------------------------------------------------------------