(FILECREATED "18-Feb-87 15:43:31" {SUMEX-AIM}PS:<TMAX.SOURCES>ENDNOTE.;4 15652 changes to: (FNS NOTE.BUTTONEVENTINFN) previous date: "18-Feb-87 10:11:49" {SUMEX-AIM}PS:<GILMURRAY.LISP>ENDNOTE.;6) (* Copyright (c) 1987 by Leland Stanford Junior University. All rights reserved.) (PRETTYCOMPRINT ENDNOTECOMS) (RPAQQ ENDNOTECOMS ((* Developed under support from NIH grant RR-00785.) (* Written by Frank Gilmurray and Sami Shaio.) (FNS ADD.ENDNOTE INSERT.ENDNOTES INSERT.ENDNOTES.TEXT DELETE.ENDNOTES NOTESREGIONP SET.ENDNOTE.STYLE MAP.ENDNOTE.LOOKS GET.ENDNOTE.FONTS) (FNS ENDNOTEP NOTE.PUTFN NOTE.GETFN NOTE.BUTTONEVENTINFN) (RECORDS ENDNOTEFONTS) (* * Allow user to edit Endnote text in another TEdit window.) (FNS AUX.TEDIT AUX.TEDIT.AFTERQUITFN AUX.TEDIT.TITLEMENUFN) (* * Delimit text between two markers known as REGION MARKERS.) (FNS REGMARKOBJ REGMARKOBJP REGMARK.DISPLAYFN REGMARK.IMAGEBOXFN REGMARK.PUTFN REGMARK.GETFN REGMARK.BUTTONEVENTINFN) (RECORDS REGMARKOBJ))) (* Developed under support from NIH grant RR-00785.) (* Written by Frank Gilmurray and Sami Shaio.) (DEFINEQ (ADD.ENDNOTE (LAMBDA (STREAM WINDOW) (* fsg "17-Feb-87 10:47") (* * Insert an ENDNOTE ImageObject as a superscript. Displayed as a number when updated.) (LET ((NOBJ (NUMBEROBJ 'NOTE))) (TEDIT.INSERT.OBJECT NOBJ STREAM) (COND ((UPDATE? WINDOW) (UPDATE.NUMBEROBJS WINDOW 'ENDNOTEP)) (T NIL)) (replace (NUMBEROBJ NUMBER.TEXT) of (fetch OBJECTDATUM of NOBJ) with (TEDIT.GETINPUT STREAM "Endnote text:")) (TEDIT.PROMPTPRINT STREAM "" T)))) (INSERT.ENDNOTES (LAMBDA (STREAM WINDOW) (* fsg "18-Feb-87 09:38") (* * Inserts text of endnotes at the end of the TEdit document. The text is inserted between two Region marking imageobjs.) (LET* ((TEXTOBJ (TEXTOBJ STREAM)) (LIST.OF.ENDNOTES (TSP.LIST.OF.OBJECTS TEXTOBJ 'ENDNOTEP)) (CARETPOSITION (fetch CH# of (TEDIT.GETSEL STREAM)))) (DELETE.ENDNOTES STREAM) (COND (LIST.OF.ENDNOTES (TEDIT.PROMPTPRINT STREAM "Inserting notes at the end of the document..." T) (TEDIT.INSERT.OBJECT (REGMARKOBJ 'ENDNOTES 'Endnotes-START) STREAM (ADD1 (fetch TEXTLEN of TEXTOBJ))) (TEDIT.LOOKS STREAM '(PROTECTED ON) (fetch TEXTLEN of TEXTOBJ) 1) (TEDIT.INSERT STREAM (CONCAT (CHARACTER (CHARCODE EOL)) "Notes" (CHARACTER (CHARCODE EOL))) (ADD1 (fetch TEXTLEN of TEXTOBJ)) (fetch (ENDNOTEFONTS TITLE.FONT) of (GET.ENDNOTE.FONTS WINDOW)) T) (INSERT.ENDNOTES.TEXT STREAM TEXTOBJ LIST.OF.ENDNOTES) (TEDIT.INSERT.OBJECT (REGMARKOBJ 'ENDNOTES 'Endnotes-END) STREAM (ADD1 (fetch TEXTLEN of TEXTOBJ))) (TEDIT.LOOKS STREAM '(PROTECTED ON) (fetch TEXTLEN of TEXTOBJ) 1) (TEDIT.PROMPTPRINT STREAM "done") (TEDIT.NORMALIZECARET TEXTOBJ (TEDIT.SETSEL STREAM CARETPOSITION 1)) ) (T NIL))))) (INSERT.ENDNOTES.TEXT (LAMBDA (STREAM TEXTOBJ LIST.OF.ENDNOTES) (* fsg " 7-Jan-87 14:31") (* * Here to print the text of each endnote.) (LET ((TEXTLOOKS (fetch (ENDNOTEFONTS TEXT.FONT) of (GET.ENDNOTE.FONTS WINDOW)))) (for ENDNOTEOBJ in LIST.OF.ENDNOTES do (LET ((NUMSTRING (MKSTRING (fetch (NUMBEROBJ NUMSTRING) of (fetch OBJECTDATUM of (CAR ENDNOTEOBJ))))) (TEXT (fetch (NUMBEROBJ NUMBER.TEXT) of (fetch OBJECTDATUM of (CAR ENDNOTEOBJ))))) (TEDIT.INSERT STREAM NUMSTRING (ADD1 (fetch TEXTLEN of TEXTOBJ)) TEXTLOOKS T) (TEDIT.INSERT STREAM (CONCAT " " TEXT (CHARACTER (CHARCODE EOL))) (ADD1 (fetch TEXTLEN of TEXTOBJ)) TEXTLOOKS T)))))) (DELETE.ENDNOTES (LAMBDA (STREAM) (* fsg "18-Feb-87 09:11") (* * Delete the Endnotes, i.e. delete the start/end REGMARK ImageObjects and all the text between them.) (LET* ((TEXTOBJ (TEXTOBJ STREAM)) (NOTEMARKER.LIST (TSP.LIST.OF.OBJECTS TEXTOBJ 'NOTESREGIONP)) (NOTES.START (CADAR NOTEMARKER.LIST)) (NOTES.END (CADADR NOTEMARKER.LIST))) (AND NOTEMARKER.LIST (TEDIT.DELETE STREAM NOTES.START (IDIFFERENCE (ADD1 NOTES.END) NOTES.START)))))) (NOTESREGIONP (LAMBDA (IMOBJ) (* fsg "26-Jan-87 09:41") (AND (REGMARKOBJP IMOBJ) (EQ (fetch REGION.USE of (fetch OBJECTDATUM of IMOBJ)) 'ENDNOTES)))) (SET.ENDNOTE.STYLE (LAMBDA (STREAM WINDOW) (* fsg " 9-Jan-87 09:18") (* * Set the font of the ENDNOTE number, title, or text.) (LET ((NOTE.FONTS (GET.ENDNOTE.FONTS WINDOW)) (NOTE.TYPE (MENU (create MENU TITLE ← "ENDNOTE Fonts" CENTERFLG ← T ITEMS ← '(Number Title Text)))) OLD.FONT NEW.FONT) (AND NOTE.TYPE (PROGN (SETQ OLD.FONT (SELECTQ NOTE.TYPE (Number (fetch (ENDNOTEFONTS NUMBER.FONT) of NOTE.FONTS)) (Title (fetch (ENDNOTEFONTS TITLE.FONT) of NOTE.FONTS)) (Text (fetch (ENDNOTEFONTS TEXT.FONT) of NOTE.FONTS)) NIL)) (TEDIT.PROMPTPRINT STREAM (CONCAT "Change Endnote " NOTE.TYPE " font " (LIST (ABBREVIATE.FONT OLD.FONT)) " to...") T) (SETQ NEW.FONT (FONTCREATE (GET.TSP.FONT WINDOW OLD.FONT))) (COND ((NEQ OLD.FONT NEW.FONT) (SELECTQ NOTE.TYPE (Number (replace (ENDNOTEFONTS NUMBER.FONT) of NOTE.FONTS with NEW.FONT)) (Title (replace (ENDNOTEFONTS TITLE.FONT) of NOTE.FONTS with NEW.FONT)) (Text (replace (ENDNOTEFONTS TEXT.FONT) of NOTE.FONTS with NEW.FONT)) NIL) (AND (EQ NOTE.TYPE 'Number) (MAP.ENDNOTE.LOOKS STREAM NEW.FONT))) (T NIL)) (TEDIT.PROMPTPRINT STREAM "" T)))))) (MAP.ENDNOTE.LOOKS (LAMBDA (STREAM NUMBERFONT) (* fsg " 9-Jan-87 09:09") (* * Here to update the ENDNOTE looks. Only the ENDNOTE superscript numbers are updated.) (LET ((LIST.OF.NOTES (TSP.LIST.OF.OBJECTS (TEXTOBJ STREAM) 'ENDNOTEP))) (AND LIST.OF.NOTES (PROGN (TEDIT.PROMPTPRINT STREAM "Updating ENDNOTE Number looks..." T) (for NOTE/CH# in LIST.OF.NOTES do (TEDIT.LOOKS STREAM NUMBERFONT (CADR NOTE/CH#) 1)) (TEDIT.PROMPTPRINT STREAM "done.")))))) (GET.ENDNOTE.FONTS (LAMBDA (WINDOW) (* fsg " 5-Jan-87 10:40") (* * Setup the default ENDNOTE fonts for number, title, and text.) (OR (WINDOWPROP WINDOW 'ENDNOTE.FONTS) (PROGN (WINDOWPROP WINDOW 'ENDNOTE.FONTS (create ENDNOTEFONTS NUMBER.FONT ← GP.DefaultFont TITLE.FONT ← GP.DefaultFont TEXT.FONT ← GP.DefaultFont)) (WINDOWPROP WINDOW 'ENDNOTE.FONTS))))) ) (DEFINEQ (ENDNOTEP (LAMBDA (IMOBJ) (* ss: " 2-Jul-85 16:51") (AND (NUMBEROBJP IMOBJ) (EQ (fetch USE of (fetch OBJECTDATUM of IMOBJ)) 'NOTE)))) (NOTE.PUTFN (LAMBDA (NUMBEROBJ STREAM WINDOW) (* fsg "28-Jan-87 13:48") (* * Used to put a numberobj that is functioning as an endnote.) (replace (NUMBEROBJ FONT) of (fetch OBJECTDATUM of NUMBEROBJ) with (for NOTEFONT in (GET.ENDNOTE.FONTS WINDOW) collect (LIST.FONT.PROPS NOTEFONT) )) (PRIN4 (LIST 'Endnote (IMAGEOBJPROP NUMBEROBJ 'TAG) (fetch OBJECTDATUM of NUMBEROBJ)) STREAM))) (NOTE.GETFN (LAMBDA (NEWOBJ USE/TEXT WINDOW) (* fsg " 8-Jan-87 10:19") (* * Used to get a numberobj that is functioning as an endnote.) (WINDOWPROP WINDOW 'ENDNOTE.FONTS (for NOTEFONT in (fetch (NUMBEROBJ FONT) of USE/TEXT) collect (FONTCREATE NOTEFONT))) (replace (NUMBEROBJ FONT) of USE/TEXT with NIL) (replace OBJECTDATUM of NEWOBJ with USE/TEXT) NEWOBJ)) (NOTE.BUTTONEVENTINFN (LAMBDA (NUMBEROBJ STREAM) (* fsg "18-Feb-87 11:16") (* * Bring up another TEdit window where user can edit the text of an Endnote.) (MENU (create MENU TITLE ← 'Endnotes% Menu CENTERFLG ← T ITEMS ← '((Edit% Endnote (AUX.TEDIT NUMBEROBJ (CONCAT "Endnote #" (fetch NUMSTRING of (fetch OBJECTDATUM of NUMBEROBJ))) STREAM)) (Tag% Endnote (XREF.TAG.OBJECT NUMBEROBJ STREAM))))))) ) [DECLARE: EVAL@COMPILE (RECORD ENDNOTEFONTS (NUMBER.FONT TITLE.FONT TEXT.FONT)) ] (* * Allow user to edit Endnote text in another TEdit window.) (DEFINEQ (AUX.TEDIT (LAMBDA (IMOBJ TITLE STREAM) (* fsg "20-Jan-87 15:46") (* * Open a TEdit window where the user can view/edit the text of the selected Endnote.) (LET* ((MAINWINDOW (\TEDIT.MAINW STREAM)) (AUXWINDOW (CREATEW (WINDOWPROP MAINWINDOW 'AUXW.REGION) TITLE))) (WINDOWPROP AUXWINDOW 'MAIN.WINDOW MAINWINDOW) (WINDOWPROP AUXWINDOW 'NOTE.IMAGEOBJ IMOBJ) (TEDIT (MKSTRING (fetch (NUMBEROBJ NUMBER.TEXT) of (fetch OBJECTDATUM of IMOBJ))) AUXWINDOW NIL '(AFTERQUITFN AUX.TEDIT.AFTERQUITFN TITLEMENUFN AUX.TEDIT.TITLEMENUFN))))) (AUX.TEDIT.AFTERQUITFN (LAMBDA (AUXWINDOW) (* fsg "20-Jan-87 15:56") (* * Here AFTER user finished with Endnote TEdit process.) (LET ((MAINWINDOW (WINDOWPROP AUXWINDOW 'MAIN.WINDOW))) (WINDOWPROP MAINWINDOW 'AUXW.REGION (WINDOWPROP AUXWINDOW 'REGION)) (GIVE.TTY.PROCESS MAINWINDOW) (TEDIT.NORMALIZECARET (TEXTOBJ MAINWINDOW))))) (AUX.TEDIT.TITLEMENUFN (LAMBDA (AUXWINDOW) (* fsg "20-Jan-87 15:49") (* * Here when left or middle button hit in title bar.) (LET ((ITEM (MENU (create MENU CENTERFLG ← T ITEMS ← '(Save% Changes Abort% Changes))))) (AND ITEM (PROGN (SELECTQ ITEM (Save% Changes (replace (NUMBEROBJ NUMBER.TEXT) of (fetch OBJECTDATUM of (WINDOWPROP AUXWINDOW 'NOTE.IMAGEOBJ)) with (COERCETEXTOBJ (TEXTSTREAM AUXWINDOW) 'STRINGP))) NIL) (TEDIT.QUIT (TEXTSTREAM AUXWINDOW))))))) ) (* * Delimit text between two markers known as REGION MARKERS.) (DEFINEQ (REGMARKOBJ (LAMBDA (USE MARKING) (* ss: "15-Jul-85 11:54") (LET ((NEWOBJ (IMAGEOBJCREATE (create REGMARKOBJ REGION.USE ← USE MARKING ← MARKING) (IMAGEFNSCREATE (FUNCTION REGMARK.DISPLAYFN) (FUNCTION REGMARK.IMAGEBOXFN) (FUNCTION REGMARK.PUTFN) (FUNCTION REGMARK.GETFN) (FUNCTION NILL) (FUNCTION REGMARK.BUTTONEVENTINFN) (FUNCTION NILL) (FUNCTION NILL) (FUNCTION NILL) (FUNCTION NILL) (FUNCTION NILL) (FUNCTION NILL) (FUNCTION NILL))))) (IMAGEOBJPROP NEWOBJ 'TYPE 'REGMARKOBJ) NEWOBJ))) (REGMARKOBJP (LAMBDA (IMOBJ) (* ss: "12-Jul-85 15:04") (AND IMOBJ (EQ (IMAGEOBJPROP IMOBJ 'TYPE) 'REGMARKOBJ)))) (REGMARK.DISPLAYFN (LAMBDA (OBJ STREAM) (* fsg "18-Feb-87 09:18") (* * REGMARK is just a marker, it doesn't actually display anything.) NIL)) (REGMARK.IMAGEBOXFN (LAMBDA (OBJ STREAM CURRENTX RIGHTMARGIN) (* fsg "17-Feb-87 10:22") (* * REGMARK is just a marker, it doesn't actually display anything.) (create IMAGEBOX XSIZE ← 0 YSIZE ← 0 YDESC ← 0 XKERN ← 0))) (REGMARK.PUTFN (LAMBDA (MARKOBJ STREAM) (* fsg "28-Jan-87 14:10") (PRIN2 (LIST 'Region (IMAGEOBJPROP MARKOBJ 'TAG) (LIST (fetch REGION.USE of (fetch OBJECTDATUM of MARKOBJ)) (fetch MARKING of (fetch OBJECTDATUM of MARKOBJ)))) STREAM))) (REGMARK.GETFN (LAMBDA (STREAM) (* fsg "28-Jan-87 16:06") (OR (WINDOWPROP (PROCESSPROP (THIS.PROCESS) 'WINDOW) 'IMAGEOBJ.MENUW) (TSP.FMMENU (TEXTSTREAM (PROCESSPROP (THIS.PROCESS) 'WINDOW)))) (LET* ((REGMARK.ARGS (CDR (READ STREAM))) (NEWOBJ (APPLY 'REGMARKOBJ (CADR REGMARK.ARGS)))) (IMAGEOBJPROP NEWOBJ 'TAG (CAR REGMARK.ARGS)) NEWOBJ))) (REGMARK.BUTTONEVENTINFN (LAMBDA (MARKOBJ STREAM) (* fsg "18-Feb-87 10:07") (* * This function is never called because the REGMARK ImageObjects are protected after they are inserted and anything protected can't be selected.) (AND (MOUSESTATE MIDDLE) (LET ((MARKDATUM (fetch OBJECTDATUM of MARKOBJ))) (TEDIT.PROMPTPRINT STREAM (CONCAT "Region used for " (fetch REGION.USE of MARKDATUM) (COND ((fetch MARKING of MARKDATUM) (CONCAT ", Marker is " (fetch MARKING of MARKDATUM))) (T ""))) T))))) ) [DECLARE: EVAL@COMPILE (RECORD REGMARKOBJ (REGION.USE MARKING)) ] (PUTPROPS ENDNOTE COPYRIGHT ("Leland Stanford Junior University" 1987)) (DECLARE: DONTCOPY (FILEMAP (NIL (1240 8234 (ADD.ENDNOTE 1252 . 1873) (INSERT.ENDNOTES 1877 . 3628) (INSERT.ENDNOTES.TEXT 3632 . 4538) (DELETE.ENDNOTES 4542 . 5135) (NOTESREGIONP 5139 . 5384) (SET.ENDNOTE.STYLE 5388 . 7086) (MAP.ENDNOTE.LOOKS 7090 . 7727) (GET.ENDNOTE.FONTS 7731 . 8231)) (8236 10115 (ENDNOTEP 8248 . 8477) ( NOTE.PUTFN 8481 . 9034) (NOTE.GETFN 9038 . 9547) (NOTE.BUTTONEVENTINFN 9551 . 10112)) (10280 12228 ( AUX.TEDIT 10292 . 11019) (AUX.TEDIT.AFTERQUITFN 11023 . 11495) (AUX.TEDIT.TITLEMENUFN 11499 . 12225)) (12302 15479 (REGMARKOBJ 12314 . 13131) (REGMARKOBJP 13135 . 13328) (REGMARK.DISPLAYFN 13332 . 13548) (REGMARK.IMAGEBOXFN 13552 . 13859) (REGMARK.PUTFN 13863 . 14228) (REGMARK.GETFN 14232 . 14759) ( REGMARK.BUTTONEVENTINFN 14763 . 15476))))) STOP