eXept Software AG Logo

Smalltalk/X Webserver

Documentation of class 'TextCollector':

Home

Documentation
www.exept.de
Everywhere
for:
[back]

Class: TextCollector


Inheritance:

   Object
   |
   +--GraphicsMedium
      |
      +--DisplaySurface
         |
         +--SimpleView
            |
            +--View
               |
               +--ListView
                  |
                  +--TextView
                     |
                     +--EditTextView
                        |
                        +--TextCollector
                           |
                           +--TerminalView
                           |
                           +--Workspace

Package:
stx:libwidg
Category:
Views-Text
Version:
rev: 1.183 date: 2019/08/18 18:11:12
user: cg
file: TextCollector.st directory: libwidg
module: stx stc-classLibrary: libwidg
Author:
Claus Gittinger

Description:


a view for editable text, which also understands some stream messages.
Instances of this view can take the place of a stream and display the 
received text.
Its main use in the system is the Transcript, but it can also be used for
things like trace-windows, errorLogs etc.
It is also inherited by TerminalView, which especially uses the buffering and
delayed output features for high performance output (compare to a windows console).

If collecting is turned on, a textcollector will not immediately display 
entered text, but wait for some short time (timeDelay) and collect incoming 
data - finally updating the whole chunk in one piece. 
This helps slow display devices, which would otherwise scroll a lot. 
(on fast displays this is less of a problem).

The total number of lines kept is controlled by lineLimit, if more lines 
than this limit are added at the bottom, the textcollector will forget lines 
at the top. You can set linelimit to nil (i.e. no limit), but you may need a lot 
of memory then ...

[StyleSheet paramters (transcript only):]

    transcriptForegroundColor       defaults to textForegroundColor
    transcriptBackgroundColor'      defaults to textBackgroundColor.

    transcriptCursorForegroundColor
    transcriptCursorBackgroundColor


Related information:

    CodeView
    EditTextView
    ActorStream

Class protocol:

Signal constants
o  transcriptQuerySignal

debugging
o  debugSendersOfMessagePattern

o  debugSendersOfMessagePattern: aGLOBMatchPattern
ever want to know, who sends a particular text-message to the transcript ?
Call this with a match string and get a halt, when a matching text is sent to the transcript

usage example(s):

     self debugSendersOfMessagePattern:'no such*'
     self debugSendersOfMessagePattern:'remove*'
     self debugSendersOfMessagePattern:nil.
     self debugSendersOfMessagePattern:'*'.

o  timestampMessages
if true, all messages are shown with a timestamp in front

o  timestampMessages: aBoolean
if true, all messages are shown with a timestamp in front

usage example(s):

     self timestampMessages:true
     self timestampMessages:false.

o  traceSendersOfMessagePattern

o  traceSendersOfMessagePattern: aGLOBMatchPattern
ever want to know, who sends a particular text-message to the transcript ?
Call this with a match string and get a trace, when a matching text is sent to the transcript

usage example(s):

     self traceSendersOfMessagePattern:'removed unreached*'
     self traceSendersOfMessagePattern:nil.
     self traceSendersOfMessagePattern:'*'.

defaults
o  defaultCollectSize
the number of lines buffered for delayed update.
At most this number of lines to be shown are buffered (without redrawing),
before a redraw is done. Thus, if a lot of output is generated fast,
the redrawing is performed in chunks.
This has a significant effect on the performane,
as the view does not have to scroll and redraw for each
individual line, but does junp-scrolling instead.
See also defaultTimeDelay

o  defaultCollectSize: numberOfLines
the number of lines buffered for delayed update.
At most this number of lines to be shown are buffered (without redrawing),
before a redraw is done. Thus, if a lot of output is generated fast,
the redrawing is performed in chunks.
This has a significant effect on the performane,
as the view does not have to scroll and redraw for each
individual line, but does junp-scrolling instead.
See also defaultTimeDelay

o  defaultLineLimit
the number of lines remembered by default.
Only the last n lines are remembered and can be seen by scrolling.
Older lines are forgotten.
This limit can be changed by the userPreferences dialog

o  defaultLineLimit: numberOfLines
the number of lines remembered by default.
Only the last n lines are remembered and can be seen by scrolling.
Older lines are forgotten.
This limit can be changed by the userPreferences dialog

o  defaultTimeDelay
the time in seconds to wait & collect by default.
At most this number of seconds incoming text is buffered (without redrawing),
before a redraw is done. Thus, if a lot of output is generated fast,
the redrawing is performed in chunks.
This has a significant effect on the performane,
as the view does not have to scroll and redraw for each
individual line, but does junp-scrolling instead.
The value may be a float (eg. 0.5)
See also defaultCollectSize

o  defaultTimeDelay: seconds
the time in seconds to wait & collect by default.
At most this number of seconds incoming text is buffered (without redrawing),
before a redraw is done. Thus, if a lot of output is generated fast,
the redrawing is performed in chunks.
This has a significant effect on the performane,
as the view does not have to scroll and redraw for each
individual line, but does junp-scrolling instead.
The argument may be a float (eg. 0.5)
See also defaultCollectSize

o  defaultTranscriptSize
the number of cols/lines by which the Transcript should come up

instance creation
o  initialize

o  newTranscript
create and open a new transcript.
This is a leftOver method from times were the Launcher & Transcript
were two different views. It is no longer recommended.

usage example(s):

     TextCollector newTranscript.
     Transcript lineLimit:3000.

o  newTranscript: nameSymbol
create and open a new transcript, unless one already exists by that name.
The transcript is remembered in a global by that name.
This is a leftOver method from times were the Launcher & Transcript
were two different views. It is no longer recommended.

usage example(s):

     TextCollector newTranscript:#T2.
     T2 showCR:'Hello world'.
     Smalltalk removeKey:#T2


Instance protocol:

Compatibility-ST80
o  deselect

o  flush

accessing
o  autoRaise

o  autoRaise: something

o  collect: aBoolean
turn on/off collecting - if on, do not output immediately
but collect text and output en-bloque after some time delta

o  collectSize: numberOfLines
set the collect buffer size. If collect is enabled,
the receiver will force update of the view,
whenever that many lines have been collected
(or the updateTimeDelay interval has passed).
With collect turned off, an immediate update is performed.

o  destroyAction: aBlock
define the action to be performed when I get destroyed.
This is a special feature, to allow resetting Transcript to Stderr
when closed. (see TextCollectorclass>>newTranscript)

o  entryStream
returns something which is a stream, sending its input to me

o  lineLimit
return the number of text-lines I am supposed to hold when collecting.
Nil means: unlimited

usage example(s):

     Transcript lineLimit:5000
     Transcript lineLimit

o  lineLimit: aNumber
define the number of text-lines I am supposed to hold

usage example(s):

     Transcript lineLimit:5000

o  updateTimeDelay: seconds
if collect is enabled, the receiver will update its view,
after that time delay (i.e. it collects output during that period),
or when collectSize lines have been collected without update.
With collect turned off, an immediate update is performed.

initialization & release
o  destroy
destroy this view

o  initialize
(comment from inherited method)
initialize a new EditTextView;
setup some instance variables

o  mapped
view became visible - show collected lines (if any)

o  reinitialize
reinit after a snapIn.
recreate access-semaphore; image could have been save (theoretically)
with the semaphore locked - in this case, we had a deadlock

o  release

menu - actions
o  doSetLineLimit

private
o  checkLineLimit
this method checks if the text has become too large (> lineLimit)
and cuts off some lines at the top if so; it must be called whenever lines
have been added to the bottom

o  installDelayedUpdate
arrange for collecting input for some time,
and output all buffered strings at once after a while.
This makes output to the transcript much faster on systems
with poor scrolling performance (i.e. dumb vga cards ...).

o  senderTraceString
generate a sender trace string.

queries
o  current
return the current (your screen's) transcript.
In multiDisplay applications, this need NOT be the main transcript,
as each display may have its own transcript.
But typically, this is the same as Transcript.

usage example(s):

     Transcript current flash

o  isStream
if I am the Transcript, I am used as a stream.
See #displayOn:

usage example(s):

        Transcript isStream

o  isTextCollector
true, iff this is a text collector emulating a stream

usage example(s):

     Transcript isTextCollector

o  position
for compatibiliy with normal streams; return the column

o  showLineLimitInMenu

scrolling
o  makeCursorVisible

o  scrollLock: aBoolean

o  scrollTo: anOrigin redraw: doRedraw

stream messages
o  addLine: line
append a line to the outstanding lines buffer

o  binary: beBinaryBool
ExternalStream protocol compatibility

o  bufferSizeForBulkCopy

o  buffered: aBoolean
ignored here

o  cr
output a carriage return, finishing the current line

usage example(s):

self ~~ Transcript ifTrue:['xc' printCR].

o  display: someObject
dolphin compatibility

o  doesNotUnderstand: aMessage
this is funny: all message we do not understand, are passed
on to the stream which will send the characters via nextPut:
This way, we understand all Stream messages - great isn't it!

o  ensureCr
if the output position is not already at the beginning of a line,
output a carriage return

o  format: formatSpec with: args
convenient formatted printing:
%1..%9 - positional parameters from args-collection
%(name) - named parameter from args-dictionary
%% - escape for %
%<cr> - cr (also tab, nl)

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            format:'[%1] Hello %2 World - this is %3%' 
            with:{i . 'my' . 'nice'}
     ].

o  lineLength
to make a textCollector (somewhat) compatible with printer
streams, support the lineLength query

o  nextPut: something
append somethings printString to my displayed text.
This allows TextCollectors to be used Stream-wise

o  nextPutAll: something
append all of something to my displayed text.
This allows TextCollectors to be used Stream-wise

o  nextPutAll: count from: buffer startingAt: initialPosition
append count characters from buffer starting at initialPosition to my displayed text.
This allows TextCollectors to be used Stream-wise

o  printf: formatSpec
convenient C-style formatted printing.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript printf:'Hello World\n'
     ].

o  printf: formatSpec arguments: args
convenient C-style formatted printing with an arbitrary number of arguments.
Same as printf:withAll:, for protocol completeness.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello %s World - this is %s\n' 
            with:{i . 'my' . 'nice'}
     ].

o  printf: formatSpec with: arg1
convenient C-style formatted printing with 1 argument.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript printf:'[%d] Hello World\n' with:i
     ].

o  printf: formatSpec with: arg1 with: arg2
convenient C-style formatted printing with 2 arguments.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello World\n' with:i
     ].

o  printf: formatSpec with: arg1 with: arg2 with: arg3
convenient C-style formatted printing with 3 arguments.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello World\n' with:i
     ].

o  printf: formatSpec with: arg1 with: arg2 with: arg3 with: arg4
convenient C-style formatted printing.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello World\n' with:i
     ].

o  printf: formatSpec with: arg1 with: arg2 with: arg3 with: arg4 with: arg5
convenient C-style formatted printing.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello World\n' with:i
     ].

o  printf: formatSpec withAll: args
convenient C-style formatted printing with an arbitrary number of arguments.
For smalltalk specific formats,
see documentation in PrintfScanf >> format_printf

usage example(s):

     1 to: 10 do:[:i |
        Transcript 
            printf:'[%d] Hello %s World - this is %s\n' 
            with:{i . 'my' . 'nice'}
     ].

o  println
for those used to Java/Javascript, a compatibility message.
Most useful inside expecco

o  println: anObject
for those used to Java/Javascript, a compatibility message.
Most useful inside expecco

o  show: anObject
insert the argument aString at current cursor position

o  showCR: anObject
insert the argument aString at current cursor position,
and advance to the next line. This is the same as a #show:
followed by a #cr.

o  space

o  tab
append a tab-character to the stream.
This is only allowed, if the receiver supports writing.

stream messages-emphasis
o  bgColor: aColorOrNil
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered with background color in aColorOrNil.
Does not affect show/showCR

o  bold
switch to bold
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in a bold font.
Does not affect show/showCR

usage example(s):

     Transcript 
        nextPutAll:'hello';
        bold;
        nextPutAll:' world';
        notBold;
        nextPutLine:' again'

o  color: aColorOrNil
switch color
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in aColorOrNil.
Does not affect show/showCR

usage example(s):

     Transcript 
        nextPutAll:'hello';
        color:Color red;
        nextPutAll:' world';
        color:nil;
        nextPutLine:' again'

o  emphasis: anEmphasisCollectionOrNil
change emphasis
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered with anEmphasisCollectionOrNil.
Does not affect show/showCR

usage example(s):

     Transcript 
        nextPutAll:'hello ';
        emphasis:#( bold underline );
        nextPutAll:'world';
        emphasis:nil;
        nextPutLine:' again'

o  italic
switch to italic
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in an italic font.
Does not affect show/showCR

o  normal
switch back to normal
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in the default font without color

o  notBold
switch to non-bold
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in a non-bold font.
Does not affect show/showCR

o  notItalic
switch to non-italic
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered in a non-italic font.
Does not affect show/showCR

o  notReverse
switch back default colors

o  notUnderline
switch to non-underline
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered without underline.
Does not affect show/showCR

o  reverse
switch to reverse
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered with reversed colors.
Does not affect show/showCR

o  underline
switch to underline
followup characters sent with stream messages (nextPut/nextPutAll)
will be rendered with underline.
Does not affect show/showCR

transcript specials
o  assertEndEntry
assert there is no pending collected output

o  beTranscript
make the receiver be the systemTranscript; this one
is accessible via the global Transcript and gets relevant
system messages from various places.

o  beTranscript: name
make the receiver be the systemTranscript; this one
is accessible via the global Transcript and gets relevant
system messages from various places.

o  beginEntry
noop for now, ST80 compatibility

o  clear
Transcript clear

o  delayedEndEntry
flush collected output; displaying all that has been buffered so far

o  endEntry
flush collected output; displaying all that has been buffered so far

o  flash
make sure everything is visible, before flashing

o  flash: messageOrNil withColor: flashColor
make sure everything is visible, before flashing



ST/X 7.2.0.0; WebServer 1.670 at bd0aa1f87cdd.unknown:8081; Fri, 29 Mar 2024 16:03:13 GMT