Project: I/O Utility Classes
Unit: PJPipeFilters
Class: TPJUnicodeBMPPipeFilter
Applies to: ~>1.0
property OnLineEnd: TPJUnicodeTextReadEvent;
This event is triggered whenever the end of a line is encountered in the Unicode text read from the associated pipe. Line ends are determined by the value of the EOLMarker property.
The event can also be triggered when the Flush method is called or when the object is destroyed. This occurs if there is some text remaining that has not been terminated by an end of line marker.
The event handler is passed the following parameters:
-
Sender - Set to the TPJUnicodeBMPPipeFilter object that triggered the event.
-
Text - An UnicodeString containing the line of text, stripped of the end of line marker.
Note that the UnicodeString type must be defined to use this event. This is a native type on Delphi 2009 or later. For Delphi 2007 and earlier the PJPipeFilters unit defines UnicodeString as WideString.
In this example all text strings are Unicode.
Suppose we have a TPJUnicodeBMPPipeFilter object created on a pipe that contains the following Unicode text:
Lorem ipsum<EOL>intellegam<EOL>dissentias<EOL>te sea
The EOLMarker property is set to <EOL>
. We perform three pipe reads and a flush operation before destroying the object. Here's what happens:
- The ReadPipe method is called and reads text [1]
Lorem ip
from the pipe.- OnLineEnd is not triggered because the text contains no end of line marker (
<EOL>
). - The text is recorded for later use in a "carry forward" buffer.
- OnLineEnd is not triggered because the text contains no end of line marker (
- ReadPipe is called and reads
sum<EOL>intellegam<EOL>dis
from the pipe.- The text is appended to the carried forward text to get
Lorem ipsum<EOL>intellegam<EOL>dis
, which is then processed. - OnLineEnd is triggered with parameter
Lorem ipsum
. The following<EOL>
is discarded. - OnLineEnd is triggered again with parameter
intellegam
. The following<EOL>
is again discarded. - The text
dis
is left over and recorded in the carry forward buffer.
- The text is appended to the carried forward text to get
- ReadPipe is called and reads
sentias<EOL>te sea
from the pipe.- The text is appended to the carried forward text to get
dissentias<EOL>te sea
, which is processed. - OnLineEnd is triggered with parameter
dissentias
and the following<EOL>
is discarded. - The remaining text
te sea
is recorded in the carry forward buffer.
- The text is appended to the carried forward text to get
- The Flush method is called.
- OnLineEnd is triggered with carried forward text
te sea
as its parameter. - The carry forward buffer is cleared.
- OnLineEnd is triggered with carried forward text
- The object is destroyed, which automatically calls Flush once more.
- Nothing happens because the carry forward buffer is empty.
Of course ReadPipe actually reads binary data from the pipe and converts that data into a Unicode text string.
- TPJUnicodeTextReadEvent
- OnText property