mirror of
https://github.com/elliotnunn/supermario.git
synced 2024-11-29 05:49:19 +00:00
632 lines
27 KiB
Plaintext
632 lines
27 KiB
Plaintext
;
|
||
; 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,<PKE>: 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 fi,fl 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) <change to NoMarkList <03/29/89 pke>
|
||
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,'fi','fi','fi','fi' ; <03/10/89 pke>
|
||
SetClass $07,'fl','fl','fl','fl' ; <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
|