SmaCC__SmaCCLineNumberStream.st
author vranyj1
Wed, 17 Nov 2010 21:57:55 +0000
changeset 20 4ea23addc2c4
parent 15 8b8cd1701c33
permissions -rw-r--r--
Makefile updated
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     1
"{ Package: 'stx:goodies/smaCC' }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     2
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     3
"{ NameSpace: SmaCC }"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     4
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     5
PeekableStream subclass:#SmaCCLineNumberStream
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     6
	instanceVariableNames:'sourceStream previousWasCR eolPositions lastPosition'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     7
	classVariableNames:'CR LF'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     8
	poolDictionaries:''
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
     9
	category:'SmaCC-Runtime'
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    10
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    11
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    12
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    13
!SmaCCLineNumberStream class methodsFor:'initialization'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    14
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    15
initialize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    16
    CR := Character cr.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    17
    Smalltalk isSmalltalkX ifTrue:[
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    18
        CR := Character return.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    19
    ].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    20
    LF := Character nl.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    21
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    22
    "
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    23
     self initialize
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    24
    "
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    25
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    26
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    27
!SmaCCLineNumberStream class methodsFor:'instance creation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    28
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    29
on: aReadStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    30
	^(self basicNew)
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    31
		on: aReadStream;
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    32
		yourself
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    33
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    34
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    35
!SmaCCLineNumberStream class methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    36
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    37
zeroPosition
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    38
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    39
    ^0
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    40
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    41
    "Created: / 05-04-2006 / 21:27:49 / janfrog"
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    42
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    43
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    44
!SmaCCLineNumberStream methodsFor:'accessing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    45
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    46
contents
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    47
	^sourceStream contents
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    48
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    49
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    50
flush
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    51
	^sourceStream flush
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    52
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    53
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    54
lineNumber
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    55
	| index start stop pos |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    56
	pos := sourceStream position.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    57
	pos >= eolPositions last ifTrue: [^eolPositions size].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    58
	start := 1.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    59
	stop := eolPositions size.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    60
	[start + 1 < stop] whileTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    61
			[index := (start + stop) // 2.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    62
			(eolPositions at: index) <= pos 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    63
				ifTrue: [start := index]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    64
				ifFalse: [stop := index]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    65
	^start
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    66
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    67
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    68
next
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    69
        | character |
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    70
        character := sourceStream next.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    71
        sourceStream position - 1 == lastPosition 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    72
                ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    73
                        [lastPosition := lastPosition + 1.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    74
                        character == CR 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    75
                                ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    76
                                        [eolPositions add: sourceStream position.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    77
                                        previousWasCR := true]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    78
                                ifFalse: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    79
                                        [(previousWasCR not and: [character == LF]) 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    80
                                                ifTrue: [eolPositions add: sourceStream position].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    81
                                        previousWasCR := false]].
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    82
        ^character
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    83
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    84
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    85
nextPut: anObject 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    86
	^sourceStream nextPut: anObject
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    87
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    88
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    89
position
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    90
	^sourceStream position
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    91
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    92
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    93
position: anInteger 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    94
	anInteger > lastPosition 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    95
		ifTrue: 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    96
			[sourceStream position: lastPosition.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    97
			[sourceStream position < anInteger and: [sourceStream atEnd not]] 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    98
				whileTrue: [self next]]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
    99
		ifFalse: [sourceStream position: anInteger]
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   100
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   101
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   102
skip: anInteger
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   103
	^self position: self position + anInteger
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   104
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   105
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   106
!SmaCCLineNumberStream methodsFor:'error handling'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   107
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   108
doesNotUnderstand: aMessage 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   109
	^sourceStream perform: aMessage selector withArguments: aMessage arguments
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   110
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   111
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   112
!SmaCCLineNumberStream methodsFor:'initialize-release'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   113
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   114
on: aReadStream 
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   115
	sourceStream := aReadStream.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   116
	eolPositions := OrderedCollection with: aReadStream position.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   117
	lastPosition := aReadStream position.
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   118
	previousWasCR := false
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   119
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   120
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   121
!SmaCCLineNumberStream methodsFor:'testing'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   122
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   123
atEnd
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   124
	^sourceStream atEnd
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   125
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   126
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   127
isReadable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   128
	^sourceStream isReadable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   129
!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   130
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   131
isWritable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   132
	^sourceStream isWritable
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   133
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   134
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   135
!SmaCCLineNumberStream class methodsFor:'documentation'!
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   136
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   137
version
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   138
    ^ '$Header: /opt/data/cvs/stx/goodies/smaCC/SmaCC__SmaCCLineNumberStream.st,v 1.2 2006-04-05 20:07:51 vranyj1 Exp $'
15
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
   139
!
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
   140
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
   141
version_SVN
8b8cd1701c33 added version_SVN method
vranyj1
parents: 1
diff changeset
   142
    ^ '$Id$'
1
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   143
! !
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   144
b8cca2663544 Initial import
vranyj1
parents:
diff changeset
   145
SmaCCLineNumberStream initialize!