SystemOrganization addCategory: #PetitManifestMf! PPCompositeParser subclass: #PPManifestMfParser instanceVariableNames: 'pairs pair label basicValue oneLinerBasicValue pairValue newline valueSeparator' classVariableNames: '' poolDictionaries: '' category: 'PetitManifestMf'! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/23/2010 13:44'! basicValue ^ oneLinerBasicValue , ((newline , #space asParser) , oneLinerBasicValue ==> #last) star ==> [:token | ((OrderedCollection with: token first inspect) addAll: token second; yourself) asArray ]! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 17:26'! label ^ (#letter asParser / #digit asParser / $- asParser) star flatten trim! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 16:35'! newline ^ (Character lf asParser) / (Character cr asParser , Character lf asParser optional)! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 17:32'! oneLinerBasicValue ^ (PPPredicateObjectParser anyExceptAnyOf: {$, . Character cr . Character lf }) star flatten! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 15:43'! pair ^label , $: asParser token trim, pairValue ==> [:token | (token at: 1)->(token at: 3)]! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/23/2010 13:46'! pairValue ^ oneLinerBasicValue , ((valueSeparator , oneLinerBasicValue) ==> [:token | token last] ) star ==> [:token | token last isEmpty ifTrue: [token first] ifFalse: [((OrderedCollection with: token first) addAll: token last; yourself) asArray ]]! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 16:35'! pairs ^ pair , (newline , pair ==> [:token | token second ]) star, newline star ==> [:token | ((OrderedCollection with: token first) addAll: token second; yourself) asArray ]! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 14:43'! start ^ pairs end ! ! !PPManifestMfParser methodsFor: 'as yet unclassified' stamp: 'tg 7/23/2010 11:20'! valueSeparator ^ $, asParser token! ! PPCompositeParserTest subclass: #PPManifestMfParserTest instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'PetitManifestMf'! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/9/2010 09:12'! parserClass ^ PPManifestMfParser! ! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 14:49'! testDoublePairsWithCollection self assert: 'Header: value1,value2 Header2: value3, value4' is: {'Header'->#('value1' 'value2') . 'Header2'->#('value3' 'value4')}! ! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 14:49'! testMultilineDoublePairsWithCollection self assert: 'Header: value1, value2 Header2: value3, value4' is: {'Header'->#('value1' 'value2') . 'Header2'->#('value3' 'value4')}! ! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/22/2010 14:48'! testMultilineSinglePairWithCollection self assert: 'Header: value1, value2' is: {'Header'->#('value1' 'value2')}! ! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/12/2010 11:05'! testSinglePair self assert: 'Header: value' is: {'Header'->'value'}! ! !PPManifestMfParserTest methodsFor: 'as yet unclassified' stamp: 'tg 7/12/2010 12:46'! testSinglePairWithCollection self assert: 'Header: value1, value2' is: {'Header'->#('value1' 'value2')}! !