; ; File: RomanITL2.a ; ; Contains: Pack 6 sorting hooks, character type and conversion tables, and word break ; tables (all for US Roman). ; ; Written by: MED Mark Davis ; JDT Joe Ternasky ; ldc Lee Collins ; PKE Peter Edberg ; SMB Sue Bartalo ; ; Copyright: 1986-1992 by Apple Computer, Inc., all rights reserved. ; ; Change History (most recent first): ; ; <15> 11/17/92 PKE Change includes so that we can give this file out to localizers. ; Move SetClass, DumpCharTable, setByte, and SetRow macros to new ; IntlResourcesPriv.a. ; <14> 6/17/92 HA #1020127,: Changed "" to be mapped to a postNum class ; instead of preNum, in class mapping table of FindWord (wrTable). ; So clicking on a run of numbers followed by will select the ; whole as one word. ; <13> 4/14/92 JSM Get rid of all SysVers conditionals. ; <12> 3/3/92 PKE #1021909, CubeE: Fix error in word select tables for non-break ; space handling. ; <11> 1/10/91 PKE (csd) Adapt to change in ScriptEqu.a: change ring to ; ringMark. ; <10> 12/10/90 PKE (VL) Change word break tables to fix old bug in which a ; non-breaking space glues whitespace to anything else. Now it ; only glues it to other whitespace. ; <9> 9/17/90 PKE Use formerly-reserved field in version 7 wordTable and wrapTable ; headers to store length of those tables; makes the tables ever ; so much nicer to DeRez. Touched up previous comment. ; <8> 9/17/90 SMB (PKE) Use formerly-reserved field in resource header for format ; code. A value >= 1 indicates that the length fields, etc. are ; present. ; <7> 5/29/90 DDG NEEDED FOR SIXPACK: Changed all the sixpack conditionals from ; six-point-oh-seven to six-point-oh-six. ; <5> 3/26/90 PKE Changed to also include 7.0 header extensions if ; romanDoSimpleScripts is true (which is now the case for 6.0.6). ; <4> 3/21/90 SMB Adding FindScriptTable to itl2 in a previously reserved space ; (by simply adding a comment!). ; <3> 3/2/90 PKE Changed word select definition in 7.0 to include letter-number ; as well as number-letter (already changed for 6.x). ; <2> 2/1/90 PKE NEEDED FOR 6.0.5: Change word select definition in 6.x to ; include letter-number as well as number-letter. Makes word ; select in TextEdit 3.0 act more like old TextEdit. This partly ; addresses BRC #58143. ALSO: Updated header to BBS format. ; <1> 12/18/89 CCH Adding for the first time into BBS. Changed include 'inc.sum.a' ; to load 'StandardEqu.d'. Updated file name references. ; ; (BBS versions above, EASE versions below) ; <2.3> 9/19/89 PKE Add length fields to header, fill in wordTableLen and ; wrapTableLen. Rearranged headers for 7.0 break tables to match ; new interfaces. ; <2.2> 9/5/89 PKE Now always use new-format FindWord tables for 7.0; other changes ; solved the problem that led to the silly forNFindWord ; conditional. ; <2.1> 9/4/89 PKE Add new-format FindWord tables for 7.0, but conditionalize them ; on forNFindWord, since will only be using them for testing at ; the moment. ; <2.0> 8/26/89 PKE Deleted load 'nEqu.d'. Changed references to newItl2Tables ; symbol to use SysVers instead, deleted newItl2Tables symbol. ; <1.9> 5/30/89 PKE Remove support in 6.0.4 for double-acute accent. ; <1.8> 4/12/89 PKE Added version number; fixed DumpCharTable macro for &index=0. ; <1.7> 3/29/89 PKE Add NoMarkList to SetClass & DumpCharTable macros; replace ; LowerNoMarkList table with NoMarkList table in itl2. LwrString ; can only use 4 out of the 5 possible conversions we might want, ; and the LowerNoMark conversion is the least useful. ; <1.6> 3/13/89 PKE Changed back to old order of offsets to tables (would have ; caused too many problems with existing prototypes). ; <1.5> 3/12/89 PKE Added LowerNoMarkList table; changed SetClass and DumpCharTable ; macros to accomodate this and to set UpperNoMarkList and ; LowerNoMarkList table values for all characters; supplied the ; additional data for the SetClass macro calls; fixed handling of ; & (when stripping diacritics, they now go to O & o). Changed ; order of offsets to CharType/Transliterate/FindWord tables. ; <1.4> 3/10/89 PKE Add , to CharType/Transliterate tables ; <1.3> 3/5/89 PKE Conditionalized table changes that support character set ; extensions in Sys $604 and up; added German '' support as part ; of these changes. ; <1.2> 2/21/89 PKE Extended to include CharType/Transliterate/FindWord tables from ; itlR. Fixed a problem introduced by use of new MPW equates: the ; itl2 offset equates defined in ScriptEqu.a replace the address ; offsets in this file, so change the offsets here to itl2XXXX. ; <1.1> 2/14/89 PKE Updated to use MPW 3.0 final ScriptEqu.a equate names ; <1.0> 11/16/88 CCH Added to EASE. ; ; (itlr history below, before it was merged in here) ; 10/18/88 ldc Moved word break and word wrap tables from RomanUtil.a ; 9/23/88 ldc changed lower casing rule for dotless i, added UpperNoMarkList ; for lower to upper casing without diacritics ; 7/12/88 ldc Added extensions of Macintosh character set ; 6/14/88 ldc Broke out from RomanUtil.a ; ; (old itl2 history below) ; 11/20/86 jdt Removed standard equates load. Renamed this file to prevent file ; name collisions. ; 9/18/86 JDT Roman package hooks are now also used by a switch-launched ; international system. And loving it. ; 8/28/86 JDT Mercilessly axed for the Roman script hook routines. The Roman ; package hooks do absolutely nothing. And they enjoy it. ; 8/27/86 MED Fixed extension bar. ; 8/24/86 MED Broke out from Intl, using $$Resource. ; ;___________________________________________________________________________________________________ ; new includes <15> include 'Script.a' include 'IntlResourcesPriv.a' ; old includes: ;; load 'StandardEqu.d' ;; include 'ScriptPriv.a' string asis proc HookDispatch dc.w itl2InitHook - HookDispatch ; (0) initHook dc.w itl2FetchHook - HookDispatch ; (2) fetchHook dc.w itl2VernierHook - HookDispatch ; (4) vernierHook dc.w itl2ProjectHook - HookDispatch ; (6) projectHook dc.w -1 ; (8) flag for new tables dc.w itl2Rsvd2Hook - HookDispatch ; (10) exitHook (in ScriptEqu.a) ; ----------------------------------------------------------------------------- ; Additional offsets for CharType/Transliterate/FindWord tables ; ----------------------------------------------------------------------------- dc.w TypeList - HookDispatch ; (12) dc.w ClassArray - HookDispatch ; (14) dc.w UpperList - HookDispatch ; (16) dc.w LowerList - HookDispatch ; (18) dc.w UpperNoMarkList - HookDispatch ; (20) dc.w WordTable - HookDispatch ; (22) dc.w WrapTable - HookDispatch ; (24) dc.w NoMarkList - HookDispatch ; (26) dc.w $200 ; (28) version number <04/12/89 pke> dc.w 1 ; (30) format #: 1 => header extensions exist <8> dc.w 0 ; (32) reserved for initHookLen dc.w 0 ; (34) reserved for fetchHookLen dc.w 0 ; (36) reserved for vernierHookLen dc.w 0 ; (38) reserved for projectHookLen dc.w 0 ; (40) reserved dc.w 0 ; (42) reserved for exitHookLen dc.w 0 ; (44) reserved for typeListLen dc.w 0 ; (46) reserved for classArrayLen dc.w 0 ; (48) reserved for upperListLen dc.w 0 ; (50) reserved for lowerListLen dc.w 0 ; (52) reserved for upperNoMarkListLen dc.w WordTableEnd - WordTable ; (54) wordTableLen dc.w WrapTableEnd - WrapTable ; (56) wrapTableLen dc.w 0 ; (58) reserved for noMarkListLen dc.w 0 ; (60) reserved for FindScriptTableOffset <4> dc.w 0 ; (62) reserved for FindScriptTableLen <4> ; ----------------------------------------------------------------------------- ; Routine: InitHook ; Input: x(a6) Local frame variables. ; Output: none. ; Warning: Follows Pascal register conventions. ; ; Initialize any special stuff for the international hooks. ; ----------------------------------------------------------------------------- itl2InitHook rts ; return to the caller. ; ----------------------------------------------------------------------------- ; Routine: FetchHook ; Input: a2.l String Data Structure. ; a3.l String pointer (one past fetched character). ; d5.b 1 if string is empty, otherwise 0. ; d4.w Top byte is fetched character. ; Output: d4.w Top byte set to character, bottom to extension. ; d5.B 1 if string is empty, otherwise 0. ; Warning: Follows Pascal register conventions. ; ; Adds an extension byte to the character if necessary. This is used for ; double byte characters or in preparation for projection of two characters ; into one. ; ----------------------------------------------------------------------------- itl2FetchHook rts ; return to the caller. ; ----------------------------------------------------------------------------- ; Routine: VernierHook ; Input: d4.b High byte of character. ; d5.b Low byte of character. ; Output: d4.b High byte of character. ; d5.b Low byte of character. ; cc NE if we should skip standard Vernier. ; Warning: Follows Pascal register conventions. ; ; Modifies the character in either d4 or d5 to establish the relationship ; between two characters that are weakly equal. ; ----------------------------------------------------------------------------- itl2VernierHook move.l #0,d0 ; use standard Vernier. rts ; return to the caller. ; ----------------------------------------------------------------------------- ; Routine: ProjectHook ; Input: a2.l String data structure. ; d4.w Top byte set to character, bottom to extension. ; Output: d4.w Projected character. ; cc NE to skip normal Vernier. ; Warning: Follows Pascal register conventions. ; ; Combines a character and its extension into a single character. ; ----------------------------------------------------------------------------- itl2ProjectHook move.l #0,d0 ; use standard Vernier. rts ; return to the caller. ; ----------------------------------------------------------------------------- ; Routine: Rsvd2Hook ; Input: none. ; Output: none. ; Warning: Follows Pascal register conventions. ; ; Mark has not decided what this hook does yet. ; ----------------------------------------------------------------------------- itl2Rsvd2Hook rts ; return to the caller. ; SetClass & DumpCharTable macros moved to IntlResourcesPriv.a <15> ; ========================================================================================== ; The first element of each row is the type byte. Format is as follows: ; ; bits 0-3: char type; 0=punct, 1=ASCII, 7=European, 8=bidirect ; if bidirect script ; bits 4-5: sub-type (for punct); 0=normal, 1=number, 2=symbol, 3=blank ; bit 6 (mask $40): 1=> right-left character ; else ; bits 4-6: sub-type (for punct); 0=normal, 1=number, 2=symbol, 3=blank ; bit 7 (mask $80): 1 => uppercase ; type, case+strip delta, case delta, strip delta, list... lastClass: set 0 SetClass $20,0,0,0,(0,255) ; default: punct,symbol SetClass $30,0,0,0,$00,$09,$0D,$20 ; spaces: punct,blank SetClass $00,0,0,0, '!', '"', '''', '(' ,')', ',', '-', '.', '/', ':', ';', '?', \ '[', ']', '{', '}', '', '', '', '', '', '', '', '' \ ; punct,normal SetClass $10,0,0,0,('0','9') ; punct,number SetClass $81,'a','a','A',('A','Z') ; upper letter SetClass $01,'A','A','a',('a','z') ; lower letter SetClass $07,0,0,0,('',''),'' ; default European ; removed diacritics from the case+strip delta in lower-case chars below <03/12/89 pke> SetClass $87,'a','','A','' SetClass $87,'a','','A','' SetClass $87,'c','','C','' SetClass $87,'e','','E','' SetClass $87,'n','','N','' SetClass $87,'o','','O','' SetClass $87,'u','','U','' SetClass $87,'','','','' SetClass $87,'o','','O','' ; separated for special handling <03/12/89 pke> SetClass $87,'','','','' SetClass $87,'a','','A','' SetClass $87,'a','','A','' SetClass $87,'o','','O','' SetClass $07,'A','','a','' SetClass $07,'A','','a','' SetClass $07,'C','','c','' SetClass $07,'E','','e','' SetClass $07,'N','','n','' SetClass $07,'O','','o','' SetClass $07,'U','','u','' SetClass $07,'','','','' SetClass $07,'O','','o','' ; separated for special handling <03/12/89 pke> SetClass $07,'','','','' SetClass $07,'A','','a','' SetClass $07,'A','','a','' SetClass $07,'O','','o','' ;<7/12/88ldc> extensions to Macintosh character set SetClass $87,'y','','Y',diaeresisUprY ; SetClass $87,'a','','A',circumflexUprA ; SetClass $87,'e','','E',circumflexUprE ; SetClass $87,'a','','A',acuteUprA ; SetClass $87,'e','','E',diaeresisUprE ; SetClass $87,'e','','E',graveUprE ; SetClass $87,'i','','I',acuteUprI ; SetClass $87,'i','','I',circumflexUprI ; SetClass $87,'i','','I',diaeresisUprI ; SetClass $87,'i','','I',graveUprI ; SetClass $87,'o','','O',acuteUprO ; SetClass $87,'o','','O',circumflexUprO ; SetClass $87,'o','','O',graveUprO ; SetClass $87,'u','','U',acuteUprU ; SetClass $87,'u','','U',circumflexUprU ; SetClass $87,'u','','U',graveUprU ; ;<7/12/88ldc> more extensions SetClass $07,'Y',diaeresisUprY, 'y','' SetClass $07,'A',circumflexUprA, 'a','' SetClass $07,'E',circumflexUprE, 'e','' SetClass $07,'A',acuteUprA, 'a','' SetClass $07,'E',diaeresisUprE, 'e','' SetClass $07,'E',graveUprE, 'e','' SetClass $07,'I',acuteUprI, 'i','' SetClass $07,'I',circumflexUprI, 'i','' SetClass $07,'I',diaeresisUprI, 'i','' SetClass $07,'I',graveUprI, 'i','' SetClass $07,'O',acuteUprO, 'o','' SetClass $07,'O',circumflexUprO, 'o','' SetClass $07,'O',graveUprO, 'o','' SetClass $07,'U',acuteUprU, 'u','' SetClass $07,'U',circumflexUprU, 'u','' SetClass $07,'U',graveUprU, 'u','' SetClass $07,'I','I', 'i',dotlessLwrI SetClass $07,'','','','' ; <03/05/89 pke> ; Note: the following are not specifically European, but they're not ASCII either. ; Sigh. Call them European for now. SetClass $07,'','','','' ; <03/10/89 pke> SetClass $07,'','','','' ; <03/10/89 pke> ClassArray: DumpCharTable 0 TypeList: DumpCharTable 1 UpperList DumpCharTable 2 LowerList DumpCharTable 3 UpperNoMarkList DumpCharTable 4 NoMarkList DumpCharTable 5 ; make this 5 now, since there is no LowerNoMarkList <15> ; **************************************************************************** ; FINDWORD STUFF ; **************************************************************************** ; SetByte & SetRow macros moved to IntlResourcesPriv.a <15> ; ----------------------------------------------------------------------------- ; There are two sets of tables here, one for word select and one for word wrap. ; FindWord needs a pointer to the appropriate table, or 0 or -1 to select the ; default select or wrap tables. ; ; Each set of tables begins with a 256-byte array which assigns a character ; type to each code in the Macintosh. This is followed by a table of tuples ; indicating which character combinations should not be split; this table ; begins with a length word. ; ----------------------------------------------------------------------------- ; **************************************************************************** ; FINDWORD - WORD SELECT TABLE (new format) ; **************************************************************************** ;----------------------------------------------------------------------------- ; Class definitions. ; ; Values must be assigned sequentially, beginning at 0 (which must be the ; break class). NumClass must be set to the number of classes. ;----------------------------------------------------------------------------- WordClass record 0 break ds.b 1 ; always breaks (must be present as first item) nonbreak ds.b 1 ; non-breaking space. letter ds.b 1 ; letters. number ds.b 1 ; digits. midLetter ds.b 1 ; a'a. midLetNum ds.b 1 ; a'a 1'1. preNum ds.b 1 ; $, etc. postNum ds.b 1 ; %, etc. midNum ds.b 1 ; 1,1. preMidNum ds.b 1 ; .1234. blank ds.b 1 ; spaces and tabs. cr ds.b 1 ; add carriage return <7/31/87med> ;wild ds.b 1 ; anything goes. NumClass set * endr ;----------------------------------------------------------------------------- ; Main index (rearranged <1.8>) ;----------------------------------------------------------------------------- align 2 WordTable dc.b $80 ; Flags1 (must be negative to indicate new format) dc.b 0 ; Flags2 (if non-zero, there may be 2-byte chars) dc.w 0 ; Version dc.w wdClassTable - WordTable dc.w wdAuxCTable - WordTable dc.w wdBackwdTable - WordTable dc.w wdForwdTable - WordTable dc.w 6 ; doBackupOffset (if offset < this, go forward from ; beginning instead of backing up) dc.w WordTableEnd - WordTable ; length <1.8><9> ;----------------------------------------------------------------------------- ; Base class table ; ; The ClassTable is 256 bytes of character types, as defined above. It is ; indexed by the character's ascii code. ;----------------------------------------------------------------------------- wdClassTable With WordClass dcb.b 256,break setByte wdClassTable,nonBreak,$ca setByte wdClassTable,letter,('A','Z'),('a','z'),('','') ; fixed bug <6/6/88med> setByte wdClassTable,letter,'','','','',('',''),'' setByte wdClassTable,letter,diaeresisUprY ; <7/18/88ldc> setByte wdClassTable,letter,fiLigature,flLigature ; <7/18/88ldc> setByte wdClassTable,letter,(circumflexUprA,circumflexUprO) ; <7/18/88ldc> setByte wdClassTable,letter,(graveUprO,dotlessLwrI) ; <7/18/88ldc> setByte wdClassTable,letter,'' ; <03/05/89 pke> setByte wdClassTable,letter,(circumflex, ringMark) ; <7/18/88ldc><11> setByte wdClassTable,letter,(cedilla, hachek) ; <7/18/88ldc> setByte wdClassTable,midLetter,'-' setByte wdClassTable,midLetNum,$27,'' setByte wdClassTable,number,('0','9') setByte wdClassTable,preNum,'$','','',intlCurrency ; <7/18/88ldc> <14> setByte wdClassTable,postNum,'%','', perThousand ; <7/18/88ldc> <14> setByte wdClassTable,midNum,',',fraction ; <7/18/88ldc> setByte wdClassTable,preMidNum,'.' ; setByte wdClassTable,blank,' ',$09,$0D setByte wdClassTable,blank,$00,' ',$09 ; removed cr, added null <7/31/87med> setByte wdClassTable,cr,$0d ; cr only on end of white-space <7/31/87med> EndWith ;----------------------------------------------------------------------------- ; Auxiliary class tables index ;----------------------------------------------------------------------------- align 2 wdAuxCTable dc.w WordClass.break ; not used for roman ;----------------------------------------------------------------------------- ; Transition table index for backward processing ;----------------------------------------------------------------------------- align 2 wdBackwdTable NState set 12 ; Highest-numbered state <10> NClass set WordClass.NumClass dcb.w NState+1, 0 ; Add 1 for exit state (0) ;----------------------------------------------------------------------------- ; Transition table for backward processing ; ; NOTE: in following table, first row must be all non-zero values with '*' ;----------------------------------------------------------------------------- ; brk nBr let num mLe mLN prN poN mNu pMN blk cr SetRow wdBackwdTable,1, *6, *9, *2, *3, *4, *5, *6, *7, *7, *5, *8, *8 ; <10> SetRow wdBackwdTable,2, 0,*10, *2, *3, 4, 4, 0, 0, 0, 4, 0, 0 ; <10> SetRow wdBackwdTable,3, 0,*10, *2, *3, 0, 7, *6, 0, 7, *7, 0, 0 ; <3><10><12> use *6 for prN SetRow wdBackwdTable,4, 0,*10, *2, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; <10> SetRow wdBackwdTable,5, 0,*10, *2, *3, 0, 0, 0, 0, 0, 0, 0, 0 ; <10> SetRow wdBackwdTable,6, 0,*10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ; <10> SetRow wdBackwdTable,7, 0,*10, 0, *3, 0, 0, 0, 0, 0, 0, 0, 0 ; <10> SetRow wdBackwdTable,8, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, *8, *0 ; <10> SetRow wdBackwdTable,9, *6, *9, *2, *3, *4, *5, *6, *7, *7, *5, *8, 0 ; <10> SetRow wdBackwdTable,10, *6,*10, *2, *3, *4, *5, *6, *7, *7, *5, 0, 0 ; <10> ;----------------------------------------------------------------------------- ; Transition table index for forward processing ;----------------------------------------------------------------------------- align 2 wdForwdTable NState set 11 ; Highest-numbered state <10> NClass set WordClass.NumClass dcb.w NState+1, 0 ; Add 1 for exit state (0) ;----------------------------------------------------------------------------- ; Transition table for forward processing ; ; NOTE: in following table, first row must be all non-zero values with '*' ;----------------------------------------------------------------------------- ; brk nBr let num mLe mLN prN poN mNu pMN blk cr SetRow wdForwdTable,1, *4, *1, *2, *3, *4, *4, *5, *4, *4, *5, *6,*10 ; <10> SetRow wdForwdTable,2, *0, *8, *2, *3, *7, *7, *0, *0, *0, *7, *0, *0 ; <3> SetRow wdForwdTable,3, *0, *8, *2, *3, *0, *9, *0, *4, *9, *9, *0, *0 SetRow wdForwdTable,4, *0, *8, *0, *0, *0, *0, *0, *0, *0, *0, *0, *0 SetRow wdForwdTable,5, *0, *8, *0, *3, *0, *0, *0, *0, *0, *0, *0, *0 SetRow wdForwdTable,6, *0,*11, *0, *0, *0, *0, *0, *0, *0, *0, *6,*10 ; <10> SetRow wdForwdTable,7, 0, 0, *2, 0, 0, 0, 0, 0, 0, 0, 0, 0 SetRow wdForwdTable,8, *4, *8, *2, *3, *4, *4, *5, *4, *4, *5, *0, *0 ; <10> SetRow wdForwdTable,9, 0, 0, 0, *3, 0, 0, 0, 0, 0, 0, 0, 0 SetRow wdForwdTable,10, *0, *0, *0, *0, *0, *0, *0, *0, *0, *0, *0, *0 ; <10> SetRow wdForwdTable,11, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, *6,*10 ; <10> ;----------------------------------------------------------------------------- WordTableEnd ; <2.3> ; **************************************************************************** ; FINDWORD - WORD WRAP TABLE (new format) ; **************************************************************************** ;----------------------------------------------------------------------------- ; Class definitions. ; ; Values must be assigned sequentially, beginning at 0 (which must be the ; break class). NumClass must be set to the number of classes. ;----------------------------------------------------------------------------- WrapClass record 0 break ds.b 1 ; always breaks (must be present as first item) nonBreak ds.b 1 ; non-breaking space. blank ds.b 1 ; spaces and tabs. cr ds.b 1 ; add carriage return <7/31/87med> nonBlank ds.b 1 ; most everything else. op ds.b 1 ; hyphen, plus, etc. ;wild ds.b 1 ; constant! anything goes. NumClass set * endr ;----------------------------------------------------------------------------- ; Main index (rearranged <1.8>) ;----------------------------------------------------------------------------- align 2 WrapTable dc.b $80 ; Flags1 (must be negative to indicate new format) dc.b 0 ; Flags2 (if non-zero, there may be 2-byte chars) dc.w 0 ; Version dc.w wrClassTable - WrapTable dc.w wrAuxCTable - WrapTable dc.w wrBackwdTable - WrapTable dc.w wrForwdTable - WrapTable dc.w 6 ; doBackupOffset (if offset < this, go forward from ; beginning instead of backing up) dc.w WrapTableEnd - WrapTable ; reserved <1.8><9> ;----------------------------------------------------------------------------- ; Base class table ; ; The ClassTable is 256 bytes of character types, as defined above. It is ; indexed by the character's ascii code. ;----------------------------------------------------------------------------- wrClassTable With WrapClass dcb.b 256,nonBlank setByte wrClassTable,nonBreak,$ca ; setByte wrClassTable,blank,' ',$09,$0D setByte wrClassTable,blank,$00,' ',$09 ; removed cr, added null <7/31/87med> setByte wrClassTable,cr,$0d ; cr only on end of white-space <7/31/87med> setByte wrClassTable,op,'-','','','+','','*','/','' setByte wrClassTable,op,'=','','','>','<','','' setByte wrClassTable,op,$26,'|','^','\' EndWith ;----------------------------------------------------------------------------- ; Auxiliary class tables index ;----------------------------------------------------------------------------- align 2 wrAuxCTable dc.w WrapClass.break ; not used for roman ;----------------------------------------------------------------------------- ; Transition table index for backward processing ;----------------------------------------------------------------------------- align 2 wrBackwdTable NState set 6 ; <10> NClass set WrapClass.NumClass dcb.w NState+1, 0 ; Add 1 for exit state (0) ;----------------------------------------------------------------------------- ; Transition table for backward processing ; ; NOTE: in following table, first row must be all non-zero values with '*' ;----------------------------------------------------------------------------- ; brk nBr bl cr nBl op SetRow wrBackwdTable,1, *4, *5, *2, *2, *3, *3 ; <10> SetRow wrBackwdTable,2, 0, 2, *2, *0, 0, 0 ; <10> SetRow wrBackwdTable,3, 0, *6, 0, 0, *3, 0 ; <10> SetRow wrBackwdTable,4, 0, *6, 0, 0, 0, 0 ; <10> SetRow wrBackwdTable,5, *4, *5, *2, 0, *3, *3 ; <10> SetRow wrBackwdTable,6, *4, *6, 0, 0, *3, *3 ; <10> ;----------------------------------------------------------------------------- ; Transition table index for forward processing ;----------------------------------------------------------------------------- align 2 wrForwdTable NState set 7 ; <10> NClass set WrapClass.NumClass dcb.w NState+1, 0 ; Add 1 for exit state (0) ;----------------------------------------------------------------------------- ; Transition table for forward processing ; ; NOTE: in following table, first row must be all non-zero values with '*' ;----------------------------------------------------------------------------- ; brk nBr bl cr nBl op SetRow wrForwdTable,1, *4, *1, *2, *6, *3, *4 ; <10> SetRow wrForwdTable,2, *0, *7, *2, *6, *0, *0 ; <10> SetRow wrForwdTable,3, *0, *5, *0, *0, *3, *4 SetRow wrForwdTable,4, *0, *5, *0, *0, *0, *0 SetRow wrForwdTable,5, *4, *5, *0, *0, *3, *4 SetRow wrForwdTable,6, *0, *0, *0, *0, *0, *0 ; <10> SetRow wrForwdTable,7, 0, 7, *2, *6, 0, 0 ; <10> ;----------------------------------------------------------------------------- WrapTableEnd ; <2.3> endproc end