*** empty log message ***
authorClaus Gittinger <cg@exept.de>
Mon, 21 Jul 2003 11:12:36 +0200
changeset 1283 974c05685dc6
parent 1282 7e4ffdfd19f6
child 1284 57550436b55b
*** empty log message ***
LineNumberReadStream.st
--- a/LineNumberReadStream.st	Thu Jul 17 15:24:40 2003 +0200
+++ b/LineNumberReadStream.st	Mon Jul 21 11:12:36 2003 +0200
@@ -15,7 +15,7 @@
 "{ Package: 'stx:goodies' }"
 
 FilteringStream subclass:#LineNumberReadStream
-	instanceVariableNames:'lineNumber'
+	instanceVariableNames:'lineNumber lineStartPosition'
 	classVariableNames:''
 	poolDictionaries:''
 	category:'Streams-Misc'
@@ -41,18 +41,19 @@
 
 documentation
 "
-    This filter keeps track of the current line, while
-    passing text from its inputStream to its outputStream.
+    This filter keeps track of the current line, and optionally
+    the current lines start position (if the input stream is positionable).
+    while passing text from its inputStream to its outputStream.
 
     Can be placed in-between text processing and the texts
     input stream, and let it keep track of the lineNumber.
 
     [see also:]
-	ReadStream WriteStream ExternalStream FileStream
-	FilteringStream FilteringLineStream
+        ReadStream WriteStream ExternalStream FileStream
+        FilteringStream FilteringLineStream
 
     [author:]
-	Claus Gittinger
+        Claus Gittinger
 "
 !
 
@@ -110,6 +111,12 @@
 
     "Created: 11.1.1997 / 16:57:10 / cg"
     "Modified: 11.1.1997 / 16:57:22 / cg"
+!
+
+lineStartPosition
+    "return the current lines start position"
+
+    ^ lineStartPosition
 ! !
 
 !LineNumberReadStream methodsFor:'initialization'!
@@ -118,13 +125,19 @@
     super initialize.
 
     lineNumber := 1.
+    inputStream isPositionable ifTrue:[
+        lineStartPosition := inputStream position.
+    ].
     filter := [:char |
 
-		char == Character cr ifTrue:[
-		    lineNumber := lineNumber + 1.
-		].
-		char
-	      ].
+                char == Character cr ifTrue:[
+                    lineNumber := lineNumber + 1.
+                    inputStream isPositionable ifTrue:[
+                        lineStartPosition := inputStream position.
+                    ].
+                ].
+                char
+              ].
 
     "Modified: 11.1.1997 / 16:58:42 / cg"
 ! !
@@ -132,5 +145,5 @@
 !LineNumberReadStream class methodsFor:'documentation'!
 
 version
-    ^ '$Header: /cvs/stx/stx/libbasic2/LineNumberReadStream.st,v 1.3 2003-06-09 16:20:24 cg Exp $'
+    ^ '$Header: /cvs/stx/stx/libbasic2/LineNumberReadStream.st,v 1.4 2003-07-21 09:12:36 cg Exp $'
 ! !