1
0
mirror of synced 2026-05-01 22:16:57 +00:00

Rmk85 Tedit distinguish public TEDIT.NTHCHARCODE from private \TEDIT.NTH..., fix screen update bug (#2091)

* Distinguish public TEDIT.NTHCHARCODE... from private \TEDIT.NTHCHARCODE...

* Fix screen-update bug: deleting the character before the first character in a window

* glitch in region code
This commit is contained in:
rmkaplan
2025-04-09 11:46:01 -07:00
committed by GitHub
parent 78e88e238b
commit cd3889874f
23 changed files with 757 additions and 702 deletions

View File

@@ -1,14 +1,12 @@
(DEFINE-FILE-INFO PACKAGE "INTERLISP" READTABLE "INTERLISP" BASE 10)
(FILECREATED "23-Mar-2025 15:10:37" {WMEDLEY}<library>tedit>TEDIT-LOOKS.;399 155940
(FILECREATED "30-Mar-2025 22:01:10" {WMEDLEY}<library>TEDIT>TEDIT-LOOKS.;403 156185
:EDIT-BY rmk
:CHANGES-TO (FNS \TEDIT.CHARLOOKS.CHANGE.FONT \TEDIT.FONT.NEXTSIZE \TEDIT.FONTCLASS.TO.FONT
\TEDIT.CHANGE.CHARLOOKS)
(VARS TEDIT-LOOKSCOMS)
:CHANGES-TO (FNS \TEDIT.TRANSLATE.ASCIICHARS)
:PREVIOUS-DATE "19-Mar-2025 13:20:52" {WMEDLEY}<library>tedit>TEDIT-LOOKS.;395)
:PREVIOUS-DATE "28-Mar-2025 14:24:25" {WMEDLEY}<library>TEDIT>TEDIT-LOOKS.;402)
(PRETTYCOMPRINT TEDIT-LOOKSCOMS)
@@ -903,7 +901,9 @@
(DEFINEQ
(\TEDIT.TRANSLATE.ASCIICHARS
[LAMBDA (TEXTOBJ NOASCIIFONTS) (* ; "Edited 2-Jan-2025 23:30 by rmk")
[LAMBDA (TSTREAM NOASCIIFONTS) (* ; "Edited 30-Mar-2025 22:00 by rmk")
(* ; "Edited 28-Mar-2025 14:24 by rmk")
(* ; "Edited 2-Jan-2025 23:30 by rmk")
(* ; "Edited 30-Dec-2024 21:30 by rmk")
(* ; "Edited 22-Dec-2024 11:42 by rmk")
(* ; "Edited 20-Dec-2024 13:34 by rmk")
@@ -922,129 +922,133 @@
(* ;; "\ASCII2MCCS is the default translation array, for Gacha, Timesroman. HIPPO, MATH ... have their own.")
(DECLARE (GLOBALVARS ASCIITONSTRANSLATIONS \ASCII2MCCS))
(SETQ TEXTOBJ (TEXTOBJ TEXTOBJ))
(CL:WHEN (thereis CL FAMILY in (FGETTOBJ TEXTOBJ TXTCHARLOOKSLIST)
unless [EQ 'CLASSIC (SETQ FAMILY (FONTPROP (GETCLOOKS CL CLFONT)
'FAMILY] suchthat
(LET
((TEXTOBJ (TEXTOBJ TSTREAM)))
(CL:WHEN (thereis CL FAMILY in (FGETTOBJ TEXTOBJ TXTCHARLOOKSLIST)
unless [EQ 'CLASSIC (SETQ FAMILY (FONTPROP (GETCLOOKS CL CLFONT)
'FAMILY] suchthat
(* ;; "CLASSIC is in the list presumably to provide a coercion to MODERN for Interpress. We don't want to translate it.")
(ASSOC FAMILY
ASCIITONSTRANSLATIONS))
(for CHNO CLOOKS TRANS MAPARRAY NEWFONTNAME STRING FAT CLOOKSLIST FAMILY TARRAYLAST
from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ)
eachtime (SETQ CLOOKS (PLOOKS PC))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY)) unless (OR (EQ OBJECT.PTYPE (PTYPE PC))
(EQ FAMILY 'CLASSIC))
when (SETQ TRANS (ASSOC FAMILY ASCIITONSTRANSLATIONS))
do
(* ;; "PC needs some work.")
(ASSOC FAMILY
ASCIITONSTRANSLATIONS)
)
(for CHNO CLOOKS TRANS MAPARRAY NEWFONTNAME STRING FAT CLOOKSLIST FAMILY TARRAYLAST
from 1 by (PLEN PC) as PC inpieces (\TEDIT.FIRSTPIECE TEXTOBJ)
eachtime (SETQ CLOOKS (PLOOKS PC))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY)) unless (OR (EQ OBJECT.PTYPE (PTYPE PC))
(EQ FAMILY 'CLASSIC))
when (SETQ TRANS (ASSOC FAMILY ASCIITONSTRANSLATIONS))
do
(* ;; "PC needs some work.")
(SETQ MAPARRAY (CADR TRANS))
(SETQ NEWFONTNAME (CADDR TRANS))
(CL:WHEN MAPARRAY (* ;
(SETQ MAPARRAY (CADR TRANS))
(SETQ NEWFONTNAME (CADDR TRANS))
(CL:WHEN MAPARRAY (* ;
 "Idiosyncratic fonts (MATH, CYRILLIC). ")
(SETQ MAPARRAY (GETATOMVAL MAPARRAY)) (* ; "Global value")
(CL:WHEN (AND NOASCIIFONTS (PREVPIECE PC))
(SETQ MAPARRAY (GETATOMVAL MAPARRAY)) (* ; "Global value")
(CL:WHEN (AND NOASCIIFONTS (PREVPIECE PC))
(* ;; " Look backward for NEWFONTNAME, since that piece has already been coerced. The idea is to get Cyrillic to continue the previous looks (serif, san-serif)")
(* ;; " Look backward for NEWFONTNAME, since that piece has already been coerced. The idea is to get Cyrillic to continue the previous looks (serif, san-serif)")
(SETQ NEWFONTNAME (FONTPROP (GETCLOOKS (PLOOKS (PREVPIECE PC))
CLFONT)
'FAMILY))))
(if (OR MAPARRAY NOASCIIFONTS)
then
(* ;; "Translate all characters in idiosyncratic fonts, flush everything and change the looks even for Helvetica etc. if NO ALTOFONTS")
(SETQ NEWFONTNAME (FONTPROP (GETCLOOKS (PLOOKS (PREVPIECE PC))
CLFONT)
'FAMILY))))
(if (OR MAPARRAY NOASCIIFONTS)
then
(* ;; "Translate all characters in idiosyncratic fonts, flush everything and change the looks even for Helvetica etc. if NO ALTOFONTS")
(CL:UNLESS MAPARRAY (SETQ MAPARRAY \ASCII2MCCS))
(SETQ TARRAYLAST (SUB1 (ARRAYSIZE MAPARRAY)))
(CL:UNLESS MAPARRAY (SETQ MAPARRAY \ASCII2MCCS))
(SETQ TARRAYLAST (SUB1 (ARRAYSIZE MAPARRAY)))
(* ;; "Create a string with the translated codes, then convert the existing piece to a string piece holding that string.")
(* ;; "Create a string with the translated codes, then convert the existing piece to a string piece holding that string.")
(SETQ STRING (ALLOCSTRING (PLEN PC)))
(for OFFSET OLDCODE NEWCODE from 1 to (PLEN PC)
do
(* ;;
(SETQ STRING (ALLOCSTRING (PLEN PC)))
(for OFFSET OLDCODE NEWCODE from 1 to (PLEN PC)
do
(* ;;
 "Out-of-range alone and zero newcodes alone (some arrays are not filled in).")
(SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PC OFFSET))
(RPLCHARCODE STRING OFFSET (if [OR (IGREATERP OLDCODE TARRAYLAST)
(ZEROP (SETQ NEWCODE (ELT MAPARRAY
OLDCODE]
then OLDCODE
else NEWCODE)))
(SETQ FAT (ffetch (STRINGP FATSTRINGP) of STRING))
(FSETPC PC PTYPE (CL:IF FAT
FATSTRING.PTYPE
THINSTRING.PTYPE))
(FSETPC PC PCONTENTS STRING)
(FSETPC PC PFPOS NIL)
(FSETPC PC PBINABLE (NOT FAT))
(FSETPC PC PBYTESPERCHAR (CL:IF FAT
2
1))
(FSETPC PC PBYTELEN (CL:IF FAT
(UNFOLD (PLEN PC)
2)
(PLEN PC)))
(FSETPC PC PLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS NEWFONTNAME
))
else
(* ;; "Must be a text font (GACHA, TIMESROMAN, HELVETICA) \ASCIITONS is the translation array, mostly identities. ")
(* ;; "Find the first change quickly, in piece coordinates. Then change whatever else needs it, slowly, in document coordinates. It would be more complicated to do the replacements in piece coordinates, because the pieces would get split on the fly. ")
(for OFFSET OLDCODE NEWLOOKS from 1 to (PLEN PC)
eachtime (SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PC OFFSET))
when (ILEQ OLDCODE 255) unless (EQ OLDCODE (ELT \ASCII2MCCS OLDCODE))
do
(* ;; "First hit, scan/change the rest of PC")
(SETQ NEWLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS
(SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PC OFFSET))
(RPLCHARCODE STRING OFFSET
(if [OR (IGREATERP OLDCODE TARRAYLAST)
(ZEROP (SETQ NEWCODE (ELT MAPARRAY OLDCODE]
then OLDCODE
else NEWCODE)))
(SETQ FAT (ffetch (STRINGP FATSTRINGP) of STRING))
(FSETPC PC PTYPE (CL:IF FAT
FATSTRING.PTYPE
THINSTRING.PTYPE))
(FSETPC PC PCONTENTS STRING)
(FSETPC PC PFPOS NIL)
(FSETPC PC PBINABLE (NOT FAT))
(FSETPC PC PBYTESPERCHAR (CL:IF FAT
2
1))
(FSETPC PC PBYTELEN (CL:IF FAT
(UNFOLD (PLEN PC)
2)
(PLEN PC)))
(FSETPC PC PLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS
NEWFONTNAME))
(for I NEWCODE from (IPLUS CHNO (SUB1 OFFSET))
to (SUB1 (IPLUS CHNO (PLEN PC))) eachtime (SETQ OLDCODE
(TEDIT.NTHCHARCODE TEXTOBJ I
))
when (ILEQ OLDCODE 255) unless (EQ OLDCODE (SETQ NEWCODE
(ELT \ASCII2MCCS OLDCODE)))
do (TEDIT.RPLCHARCODE TEXTOBJ I NEWCODE NEWLOOKS))
(RETURN))) finally
else
(* ;; "Must be a text font (GACHA, TIMESROMAN, HELVETICA) \ASCIITONS is the translation array, mostly identities. ")
(* ;; "Find the first change quickly, in piece coordinates. Then change whatever else needs it, slowly, in document coordinates. It would be more complicated to do the replacements in piece coordinates, because the pieces would get split on the fly. ")
(for OFFSET OLDCODE NEWLOOKS from 1 to (PLEN PC)
eachtime (SETQ OLDCODE (\TEDIT.PIECE.NTHCHARCODE TEXTOBJ PC OFFSET))
when (ILEQ OLDCODE 255) unless (EQ OLDCODE (ELT \ASCII2MCCS OLDCODE))
do
(* ;; "First hit, scan/change the rest of PC")
(SETQ NEWLOOKS (\TEDIT.TRANSLATE.ASCII.CHARLOOKS TEXTOBJ CLOOKS
NEWFONTNAME))
(for I NEWCODE from (IPLUS CHNO (SUB1 OFFSET))
to (SUB1 (IPLUS CHNO (PLEN PC))) eachtime (SETQ OLDCODE
(\TEDIT.NTHCHARCODE TSTREAM
I))
when (ILEQ OLDCODE 255) unless (EQ OLDCODE (SETQ NEWCODE
(ELT \ASCII2MCCS OLDCODE))
)
do (\TEDIT.RPLCHARCODE TSTREAM I NEWCODE NEWLOOKS))
(RETURN))) finally
(* ;; "Here we change the default and caret looks. Perhaps this should be done only if NOASCIIFONTS. But there is a risk that Ascii fonts and characters would slip in by future editing. ")
(CL:WHEN NOASCIIFONTS
(SETQ CLOOKS (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY))
(CL:WHEN (AND (NEQ FAMILY 'CLASSIC)
(SETQ TRANS (ASSOC FAMILY
(CL:WHEN NOASCIIFONTS
(SETQ CLOOKS (FGETTOBJ TEXTOBJ DEFAULTCHARLOOKS))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY))
(CL:WHEN (AND (NEQ FAMILY 'CLASSIC)
(SETQ TRANS (ASSOC FAMILY
ASCIITONSTRANSLATIONS
)))
(FSETTOBJ TEXTOBJ DEFAULTCHARLOOKS
(\TEDIT.TRANSLATE.ASCII.CHARLOOKS
TEXTOBJ CLOOKS (CADDR TRANS))))
(SETQ CLOOKS (FGETTOBJ TEXTOBJ CARETLOOKS))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY))
(CL:WHEN (AND (NEQ FAMILY 'CLASSIC)
(SETQ TRANS (ASSOC FAMILY
)))
(FSETTOBJ TEXTOBJ DEFAULTCHARLOOKS
(\TEDIT.TRANSLATE.ASCII.CHARLOOKS
TEXTOBJ CLOOKS (CADDR TRANS))))
(SETQ CLOOKS (FGETTOBJ TEXTOBJ CARETLOOKS))
(SETQ FAMILY (FONTPROP (GETCLOOKS CLOOKS CLFONT)
'FAMILY))
(CL:WHEN (AND (NEQ FAMILY 'CLASSIC)
(SETQ TRANS (ASSOC FAMILY
ASCIITONSTRANSLATIONS
)))
(FSETTOBJ TEXTOBJ CARETLOOKS (
)))
(FSETTOBJ TEXTOBJ CARETLOOKS (
\TEDIT.TRANSLATE.ASCII.CHARLOOKS
TEXTOBJ CLOOKS
(CADDR TRANS)))))
(CL:WHEN CLOOKSLIST
TEXTOBJ CLOOKS
(CADDR TRANS)))))
(CL:WHEN CLOOKSLIST
(* ;;
(* ;;
 "Something happened, get rid of any lingering old looks")
(\TEDIT.UNIQUIFY.ALL TEXTOBJ))))])
(\TEDIT.UNIQUIFY.ALL TEXTOBJ))))])
(\TEDIT.CONVERT.TO.FORMATTED
[LAMBDA (TSTREAM START END) (* ; "Edited 7-Jul-2024 09:06 by rmk")
[LAMBDA (TSTREAM START END) (* ; "Edited 28-Mar-2025 14:11 by rmk")
(* ; "Edited 7-Jul-2024 09:06 by rmk")
(* ; "Edited 10-May-2024 22:42 by rmk")
(* ; "Edited 6-May-2024 23:49 by rmk")
(* ; "Edited 29-Apr-2024 10:42 by rmk")
@@ -1065,7 +1069,7 @@
(* ;; "Using BIN for the main iteration is a little tricky when TEDIT.RPLCHARCODE is used to make the single-character change. RPLCHARCODE can split the pieces and parameters in the TSTREAM that are used to drive the high-speed (BINABLE) operation. It should perhaps figure out how to fix the stream internally, but for now the \TEXTSETFILEPTR gets things consistent again.")
(LET [(TEXTOBJ (TEXTOBJ! (fetch (TEXTSTREAM TEXTOBJ) of TSTREAM]
(LET [(TEXTOBJ (TEXTOBJ! (GETTSTR TSTREAM TEXTOBJ]
(CL:UNLESS (OR (FGETTOBJ TEXTOBJ FORMATTEDP)
(ZEROP (FGETTOBJ TEXTOBJ TEXTLEN)))
(CL:UNLESS START (SETQ START 1))
@@ -1082,7 +1086,7 @@
(* ;;
 "Linefeed not preceded by CR, replace by EOL and mark it paragraph-last. What about FORM?")
(TEDIT.RPLCHARCODE TEXTOBJ CHNO (CHARCODE EOL))
(\TEDIT.RPLCHARCODE TSTREAM CHNO (CHARCODE EOL))
(SETQ CHANGED T)
(FSETPC (\TEDIT.CHTOPC CHNO TEXTOBJ)
PPARALAST T))
@@ -2480,26 +2484,26 @@
(ADDTOVAR LAMA )
)
(DECLARE%: DONTCOPY
(FILEMAP (NIL (22713 24655 (\TEDIT.CHARLOOKS.DEFPRINT 22723 . 23859) (\TEDIT.PARALOOKS.DEFPRINT 23861
. 24653)) (24759 25855 (\TEDIT.CREATE.DEFAULT.FMTSPEC 24769 . 25477) (\TEDIT.CREATE.FACE.MENU 25479
. 25651) (\TEDIT.CREATE.SIZE.MENU 25653 . 25853)) (26756 26945 (\TEDIT.CHARLOOK.FEATUREP 26766 .
26943)) (27247 50519 (\TEDIT.CHARLOOKS.FROM.FONT 27257 . 29470) (\TEDIT.EQCLOOKS 29472 . 32094) (
\TEDIT.SAMECLOOKS 32096 . 34766) (TEDIT.CARETLOOKS 34768 . 36314) (TEDIT.COPY.LOOKS 36316 . 39599) (
\TEDIT.UNPARSE.CHARLOOKS.LIST 39601 . 42568) (\TEDIT.MODIFYLOOKS 42570 . 44564) (TEDIT.NEW.FONT 44566
. 45013) (\TEDIT.CARETLOOKS.VERIFY 45015 . 45852) (\TEDIT.CARETPIECE 45854 . 46159) (
\TEDIT.GET.INSERT.CHARLOOKS 46161 . 48897) (\TEDIT.GET.TERMSA.WIDTHS 48899 . 49315) (
\TEDIT.PARSE.CHARLOOKS.LIST 49317 . 50517)) (50520 67038 (\TEDIT.TRANSLATE.ASCIICHARS 50530 . 61016) (
\TEDIT.CONVERT.TO.FORMATTED 61018 . 67036)) (68050 75161 (\TEDIT.UNIQUIFY.CHARLOOKS 68060 . 69720) (
\TEDIT.UNIQUIFY.PARALOOKS 69722 . 70989) (\TEDIT.UNIQUIFY.ALL 70991 . 72966) (
\TEDIT.FLUSH.UNUSED.LOOKS 72968 . 75159)) (75194 86290 (TEDIT.LOOKS 75204 . 77593) (TEDIT.GET.LOOKS
77595 . 79624) (TEDIT.SUBLOOKS 79626 . 83654) (TEDIT.FINDLOOKS 83656 . 86288)) (86365 116283 (
\TEDIT.CHANGE.CHARLOOKS 86375 . 95611) (\TEDIT.CHANGE.CHARLOOKS.NEW 95613 . 99238) (
\TEDIT.CHARLOOKS.CHANGE.FONT 99240 . 107547) (\TEDIT.FONT.NEXTSIZE 107549 . 109170) (\TEDIT.LOOKS
109172 . 112501) (\TEDIT.FONTCOPY 112503 . 114004) (\TEDIT.COERCE.FONTCLASS 114006 . 115157) (
\TEDIT.FONTCLASS.TO.FONT 115159 . 116281)) (116326 147600 (\TEDIT.EQFMTSPEC 116336 . 119551) (
TEDIT.GET.PARALOOKS 119553 . 123600) (\TEDIT.PARSE.PARALOOKS.LIST 123602 . 130944) (TEDIT.PARALOOKS
130946 . 131986) (\TEDIT.CHANGE.PARALOOKS 131988 . 139273) (\TEDIT.CHANGE.PARALOOKS.NEW 139275 .
143258) (TEDIT.COPY.PARALOOKS 143260 . 145934) (\TEDIT.PARABOUNDS 145936 . 147598)) (147660 155058 (
TEDIT.SUBPARALOOKS 147670 . 151454) (SAMEPARALOOKS 151456 . 155056)) (155059 155746 (
\TEDIT.MARK.REVISION 155069 . 155744)))))
(FILEMAP (NIL (22577 24519 (\TEDIT.CHARLOOKS.DEFPRINT 22587 . 23723) (\TEDIT.PARALOOKS.DEFPRINT 23725
. 24517)) (24623 25719 (\TEDIT.CREATE.DEFAULT.FMTSPEC 24633 . 25341) (\TEDIT.CREATE.FACE.MENU 25343
. 25515) (\TEDIT.CREATE.SIZE.MENU 25517 . 25717)) (26620 26809 (\TEDIT.CHARLOOK.FEATUREP 26630 .
26807)) (27111 50383 (\TEDIT.CHARLOOKS.FROM.FONT 27121 . 29334) (\TEDIT.EQCLOOKS 29336 . 31958) (
\TEDIT.SAMECLOOKS 31960 . 34630) (TEDIT.CARETLOOKS 34632 . 36178) (TEDIT.COPY.LOOKS 36180 . 39463) (
\TEDIT.UNPARSE.CHARLOOKS.LIST 39465 . 42432) (\TEDIT.MODIFYLOOKS 42434 . 44428) (TEDIT.NEW.FONT 44430
. 44877) (\TEDIT.CARETLOOKS.VERIFY 44879 . 45716) (\TEDIT.CARETPIECE 45718 . 46023) (
\TEDIT.GET.INSERT.CHARLOOKS 46025 . 48761) (\TEDIT.GET.TERMSA.WIDTHS 48763 . 49179) (
\TEDIT.PARSE.CHARLOOKS.LIST 49181 . 50381)) (50384 67283 (\TEDIT.TRANSLATE.ASCIICHARS 50394 . 61173) (
\TEDIT.CONVERT.TO.FORMATTED 61175 . 67281)) (68295 75406 (\TEDIT.UNIQUIFY.CHARLOOKS 68305 . 69965) (
\TEDIT.UNIQUIFY.PARALOOKS 69967 . 71234) (\TEDIT.UNIQUIFY.ALL 71236 . 73211) (
\TEDIT.FLUSH.UNUSED.LOOKS 73213 . 75404)) (75439 86535 (TEDIT.LOOKS 75449 . 77838) (TEDIT.GET.LOOKS
77840 . 79869) (TEDIT.SUBLOOKS 79871 . 83899) (TEDIT.FINDLOOKS 83901 . 86533)) (86610 116528 (
\TEDIT.CHANGE.CHARLOOKS 86620 . 95856) (\TEDIT.CHANGE.CHARLOOKS.NEW 95858 . 99483) (
\TEDIT.CHARLOOKS.CHANGE.FONT 99485 . 107792) (\TEDIT.FONT.NEXTSIZE 107794 . 109415) (\TEDIT.LOOKS
109417 . 112746) (\TEDIT.FONTCOPY 112748 . 114249) (\TEDIT.COERCE.FONTCLASS 114251 . 115402) (
\TEDIT.FONTCLASS.TO.FONT 115404 . 116526)) (116571 147845 (\TEDIT.EQFMTSPEC 116581 . 119796) (
TEDIT.GET.PARALOOKS 119798 . 123845) (\TEDIT.PARSE.PARALOOKS.LIST 123847 . 131189) (TEDIT.PARALOOKS
131191 . 132231) (\TEDIT.CHANGE.PARALOOKS 132233 . 139518) (\TEDIT.CHANGE.PARALOOKS.NEW 139520 .
143503) (TEDIT.COPY.PARALOOKS 143505 . 146179) (\TEDIT.PARABOUNDS 146181 . 147843)) (147905 155303 (
TEDIT.SUBPARALOOKS 147915 . 151699) (SAMEPARALOOKS 151701 . 155301)) (155304 155991 (
\TEDIT.MARK.REVISION 155314 . 155989)))))
STOP