MCScanner.st
author Claus Gittinger <cg@exept.de>
Mon, 14 May 2018 02:21:18 +0200
changeset 1048 582b3a028cbc
parent 939 64b784b699f9
permissions -rw-r--r--
#FEATURE by cg class: MCMethodDefinition changed: #postloadOver:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"{ Package: 'stx:goodies/monticello' }"
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
Object subclass:#MCScanner
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
	instanceVariableNames:'stream'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
	classVariableNames:''
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
	poolDictionaries:''
678
ec1bd261c5d6 category change
Claus Gittinger <cg@exept.de>
parents: 336
diff changeset
     7
	category:'SCM-Monticello-Chunk Format'
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
794
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    10
!MCScanner class methodsFor:'documentation'!
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    11
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    12
documentation
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    13
"
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    14
    I scan / tokenize metadata  (package name, version info, ancestry, dependencies, ...) found in .mcz files.
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    15
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    16
    For example, try:
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    17
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    18
    MCScanner scan:  '(name ''MyPackage-ll.6'' message ''Fix bug xxx'' id ''b21dbd73-f1c3-2746-a3cc-92f1d4edea28'')' readStream
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    19
"
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
    20
! !
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
!MCScanner class methodsFor:'as yet unclassified'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
scan: aStream
939
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
    25
    ^ (self new stream: aStream) next
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
    26
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
    27
    "kludge:
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    28
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    29
    | v |
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    30
    [ v := (self new stream: aStream) next ]
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    31
        on: RecursionInterruptSignal do:[:ex|ex proceed].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    32
    ^v
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    33
    "
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    34
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    35
    "Modified: / 13-10-2010 / 15:52:14 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
scanTokens: aString
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
	"compatibility"
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
	^ Array with: (self scan: aString readStream)
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
! !
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
!MCScanner methodsFor:'as yet unclassified'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
next
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    46
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    47
    | token stack array |
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    48
    token := self nextToken.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    49
    token == $) ifTrue:[self error: 'Array not opened'].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    50
    token ~= $( ifTrue:[^token].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    51
    stack := Stack with: (array := OrderedCollection new).
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    52
    [ stack isEmpty ] whileFalse:[
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    53
        token := self nextToken.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    54
        token == $( 
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    55
            ifTrue:
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    56
                [stack push: OrderedCollection new]
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    57
            ifFalse:
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    58
                [token == $) 
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    59
                    ifTrue:
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    60
                        [|top|
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    61
                        top := stack top asArray.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    62
                        stack pop.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    63
                        stack size > 0 ifTrue:[stack top add: top]]
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    64
                    ifFalse:
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    65
                        [stack top add: token]]].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    66
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    67
    ^array asArray
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    68
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    69
    "Modified: / 28-10-2010 / 13:31:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
nextArray
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
	stream next. "("
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
	^ Array streamContents:
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
		[:s |
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
		[stream skipSeparators.
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
		(stream peek = $)) or: [stream atEnd]] whileFalse: [s nextPut: self next].
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
		stream next = $) ifFalse: [self error: 'Unclosed array']]
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
nextString
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
	^ stream nextDelimited: $'
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
nextSymbol
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
	^ (String streamContents:
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
		[:s |
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
		[stream peek isAlphaNumeric] whileTrue: [s nextPut: stream next]]) asSymbol
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
			
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    92
nextToken
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    93
        | c |
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    94
        stream skipSeparators.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    95
        c := stream peek.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    96
        c = $# ifTrue: [c := stream next; peek].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    97
        c = $' ifTrue: [^ self nextString].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    98
        c = $( ifTrue: [stream next.^ $(].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
    99
        c = $) ifTrue: [stream next.^ $)].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   100
        c isAlphaNumeric ifTrue: [^ self nextSymbol].
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   101
        self error: 'Unknown token type'.
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   102
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   103
    "Created: / 28-10-2010 / 13:20:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   104
!
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   105
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
stream: aStream
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   107
	stream := aStream
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
! !
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
!MCScanner class methodsFor:'documentation'!
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
version
939
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
   113
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCScanner.st,v 1.6 2014-12-11 15:49:15 cg Exp $'
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   114
!
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   115
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   116
version_CVS
939
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
   117
    ^ '$Header: /cvs/stx/stx/goodies/monticello/MCScanner.st,v 1.6 2014-12-11 15:49:15 cg Exp $'
225
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   118
!
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   119
4453a8f6fb4a added: #version_CVS
Claus Gittinger <cg@exept.de>
parents: 40
diff changeset
   120
version_SVN
939
64b784b699f9 class: MCScanner
Claus Gittinger <cg@exept.de>
parents: 794
diff changeset
   121
    ^ '$Id: MCScanner.st,v 1.6 2014-12-11 15:49:15 cg Exp $'
40
34febde6d331 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
! !
794
a2889c14bba1 added: #documentation
Claus Gittinger <cg@exept.de>
parents: 678
diff changeset
   123