DIRECTORY Basics USING [BYTE], ImagerFont USING [Font], Menus USING [MenuProc], TiogaOpsDefs USING [Ref], ViewerClasses USING [Viewer], VoiceViewers USING [VoiceViewerInfo, SoundInterval, TextMarkEntry], Rope USING [ROPE]; VoiceMarkers: CEDAR DEFINITIONS = BEGIN voiceCharWidth: REAL = 8.0; voiceCharAscent: REAL = 9.0; voiceCharDescent: REAL = 1.0; voiceCharHeight: REAL = voiceCharAscent + voiceCharDescent; AddCharMark: Menus.MenuProc; DeleteCharMarks: Menus.MenuProc; LockedAddCharMark: PROC [viewer: ViewerClasses.Viewer, position: INT]; DisplayCharMarks: PROC [unMarkedRope: Rope.ROPE, charMarkList: LIST OF INT, skipChars: INT] RETURNS [Rope.ROPE]; ExtractCharMarks: PUBLIC PROC [viewerInfo: VoiceViewers.VoiceViewerInfo, soundInterval: VoiceViewers.SoundInterval]; EditCharMarks: PROC [viewerInfo: VoiceViewers.VoiceViewerInfo, unchangedHead, deleteChars, insertChars: INT, soundInterval: VoiceViewers.SoundInterval]; voiceMarkerFont: ImagerFont.Font; -- the font used to display the text voiceCharSet: Basics.BYTE = 0; -- since at times a 16-bit Xerox character code is called for TextInput: PROC [viewer: ViewerClasses.Viewer, input: Rope.ROPE]; BackSpace: PROC [viewer: ViewerClasses.Viewer]; BackWord: PROC [viewer: ViewerClasses.Viewer]; RedrawTextMarkers: PROC [viewer: ViewerClasses.Viewer, voiceCharNode: TiogaOpsDefs.Ref]; ExtractTextMarks: PUBLIC PROC [viewerInfo: VoiceViewers.VoiceViewerInfo, soundInterval: VoiceViewers.SoundInterval]; EditTextMarks: PROC [viewerInfo: VoiceViewers.VoiceViewerInfo, unchangedHead, deleteChars, insertChars: INT, soundInterval: VoiceViewers.SoundInterval]; RopeFromTextList: PROC [LIST OF VoiceViewers.TextMarkEntry] RETURNS [Rope.ROPE]; TextListFromRope: PROC [Rope.ROPE] RETURNS [LIST OF VoiceViewers.TextMarkEntry]; END. ¦VoiceMarkers.mesa module to handle markers in voice, of two types i) a special character which the user can place at a selection and remove using button-pushes ii) annotation of voice with text Ades, April 30, 1986 10:09:54 am PDT ---- constants describing the size of characters used in the voiceProfile/voicePlay fonts these probably should be picked up from the fonts parameters. Note that when there is artwork on any part of a line, selections on that line will be as tall as the artwork [see TextInVoiceImpl for how the ascent of the artwork is set]. If there is no artwork on that line we still want the selections to be 'tall', so the two voice fonts each contain one character ['?] which has an ascent of 24.0 - the same as the artwork. This causes all selections to be 'tall'. See also comments in TextInVoiceImpl about the interaction of artworks and VoiceProfile.Style ---- routines to do with character markers this gets called by SoundList.SoundChars, which has been called to build the viewer contents corresponding to some soundlist, the first skipChars omitted: takes that rope and replaces normal characters with marker characters as appropriate return as selection.charMarkList a copy [n.b.] of the section of the character mark list in viewerInfo falling in to the region of selection.ropeInterval this gets called when an edit is made to the contents of the viewer: it keeps the charMarkList in step with the edit ---- routines to do with textual markers all printable characters typed in to a voice viewer cause this procedure to be called similarly BackSpacing gets this one called yes - you're getting the pattern . . called by voicePlayBack's redraw procedure [under voiceLock] to place all the textual markers back into a voice viewer return as selection.textMarkList a copy [n.b.] of the section of the textual mark list in viewerInfo falling in to the region of selection.ropeInterval this gets called when an edit is made to the contents of the viewer: it keeps the textMarkList in step with the edit convert the list of text markers in a voice viewer into a rope suitable for saving in a textual document at the position of a talks bubble and go the other way ʬ˜šœ™J™/J™]™!Icode™$—J™—šÏk ˜ Jšœœœ˜Jšœ œ˜Jšœœ ˜Jšœ œ˜Jšœœ ˜Jšœ œ1˜CJšœœœ˜J™—JšÏn œœ œ˜'J˜J™YJ™J™ÒJ™Jšœ]™]J™Jšœœ˜Jšœœ˜Jšœœ˜Jšœœ&˜;J˜Jšœ*™*J˜Jšž œ˜J˜Jšžœ˜ J˜Jšžœœ*œ˜FJ˜Jšžœœœœœœ œ˜[šœœ˜Jšœž œÇ™ïJ™—šžœœœX˜uJšœ™™™J™—šž œœUœ-˜˜J™tJšœ™—Jšœ˜Jšœ(™(J™Jšœ#Ïc$˜GJšœœŸ=˜\J˜Jšž œœ,œ˜AJ™UJ™Jšž œœ ˜/J™*J˜Jšžœœ ˜.J™%J˜JšžœœA˜XJšœv™vJ˜JšžœœœX˜uJšœ˜™˜J˜Jšž œœUœ-˜˜™tJ™—Jš žœœœœœœ˜PJ™ŠJ˜Jš žœœœœœœ˜PJ™J™J™Jšœ˜—…—V