From 5c2a149b4cbc6f7125637d2710ec70ff0229090e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Verhaeghe?= Date: Fri, 18 Aug 2023 16:38:40 +0200 Subject: [PATCH] add testCanParseAttributePrefixedWithStar --- .../FamixHtmlImporterTest.class.st | 14 ++++ src/SmaCC_HTML/HTMLParser.class.st | 5 +- src/SmaCC_HTML/HTMLScanner.class.st | 82 +++++++++---------- 3 files changed, 58 insertions(+), 43 deletions(-) diff --git a/src/Famix-Html-Importer-Tests/FamixHtmlImporterTest.class.st b/src/Famix-Html-Importer-Tests/FamixHtmlImporterTest.class.st index 04252fb..8709c8a 100644 --- a/src/Famix-Html-Importer-Tests/FamixHtmlImporterTest.class.st +++ b/src/Famix-Html-Importer-Tests/FamixHtmlImporterTest.class.st @@ -99,6 +99,20 @@ FamixHtmlImporterTest >> testCanImportTagWithEndOfLine [ equals: '"hello"' ] +{ #category : #initialization } +FamixHtmlImporterTest >> testCanParseAttributePrefixedWithStar [ + + importer importString: '
'. + self assert: (htmlModel allWithType: FamixHtmlElement) size equals: 1. + self + assert: (htmlModel allWithType: FamixHtmlAttribute) size + equals: 1. + self + assert: + (htmlModel allWithType: FamixHtmlAttribute) anyOne attributeName + equals: '*ngIf' +] + { #category : #initialization } FamixHtmlImporterTest >> testCanParseAttributeWithComa [ diff --git a/src/SmaCC_HTML/HTMLParser.class.st b/src/SmaCC_HTML/HTMLParser.class.st index 72752bd..47c0364 100644 --- a/src/SmaCC_HTML/HTMLParser.class.st +++ b/src/SmaCC_HTML/HTMLParser.class.st @@ -23,7 +23,7 @@ HTMLParser class >> ambiguousTransitions [ { #category : #'generated-accessing' } HTMLParser class >> cacheId [ - ^'2023-08-18T16:29:03.68+02:00' + ^'2023-08-18T16:38:18.924+02:00' ] { #category : #generated } @@ -220,6 +220,7 @@ tag tag : \[? \(? \#? + | \* ; tag @@ -343,7 +344,7 @@ HTMLParser class >> reduceTable [ #(40 2 #liftFirstValue: 1613826 false) #(26 3 #reduceActionForhtmlElements1: 354305 false) #(35 1 #reduceActionForAttribute1: 1164289 false) - #(43 0 #reduceActionForStartATTVALUE1: 3830785 true) + #(43 0 #reduceActionForStartATTVALUE1: 3836929 true) #(34 0 #reduceActionFor__SEA_WS___Attribute__htmlAttribute___1: 1113089 false) #(30 0 #reduceActionFor__SEA_WS___Attribute__htmlAttribute___1: 658433 false) #(31 5 #reduceActionForVoidElement1: 891905 false) diff --git a/src/SmaCC_HTML/HTMLScanner.class.st b/src/SmaCC_HTML/HTMLScanner.class.st index 9fd7f2d..f945c03 100644 --- a/src/SmaCC_HTML/HTMLScanner.class.st +++ b/src/SmaCC_HTML/HTMLScanner.class.st @@ -1280,8 +1280,8 @@ HTMLScanner >> scanForToken [ currentCharacter == Character space ] ] ] whileTrue ]. ^ self scan48 ]. scope == #default ifTrue: [ ^ self scan17 ]. - scope == #attvalue ifTrue: [ ^ self scanForTokenX1 ]. - scope == #tag ifTrue: [ ^ self scanForTokenX2 ]. + scope == #attvalue ifTrue: [ ^ self scanForTokenX2 ]. + scope == #tag ifTrue: [ ^ self scanForTokenX1 ]. ^ self reportLastMatch ] @@ -1289,41 +1289,13 @@ HTMLScanner >> scanForToken [ HTMLScanner >> scanForTokenX1 [ self step. - currentCharacter == Character space ifTrue: [ self scanForTokenX1X1 ]. - currentCharacter == $" ifTrue: [ ^ self scan5 ]. - currentCharacter == $# ifTrue: [ ^ self scan8 ]. - currentCharacter == $' ifTrue: [ ^ self scan14 ]. - currentCharacter == $< ifTrue: [ ^ self scan10 ]. - currentCharacter isDigit ifTrue: [ ^ self scan16 ]. - ((currentCharacter between: Character tab and: Character lf) or: [ - currentCharacter == Character cr ]) ifTrue: [ ^ self scan4 ]. - ((currentCharacter between: $+ and: $?) or: [ - (currentCharacter between: $A and: $Z) or: [ - currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) - ifTrue: [ ^ self scan9 ]. - ^ self scan1 + currentCharacter == $( ifTrue: [ ^ self scan54 ]. + ^ self scanForTokenX1X5 ] { #category : #generated } HTMLScanner >> scanForTokenX1X1 [ - [ - self recordMatch: #( 6 ). - self step. - currentCharacter == Character space ] whileTrue -] - -{ #category : #generated } -HTMLScanner >> scanForTokenX2 [ - - self step. - currentCharacter == $# ifTrue: [ ^ self scan51 ]. - ^ self scanForTokenX2X5 -] - -{ #category : #generated } -HTMLScanner >> scanForTokenX2X1 [ - self step. currentCharacter == $# ifTrue: [ ^ self scan51 ]. currentCharacter == $( ifTrue: [ ^ self scan54 ]. @@ -1335,7 +1307,7 @@ HTMLScanner >> scanForTokenX2X1 [ ] { #category : #generated } -HTMLScanner >> scanForTokenX2X2 [ +HTMLScanner >> scanForTokenX1X2 [ self recordMatch: #( 11 ). self step. @@ -1344,7 +1316,7 @@ HTMLScanner >> scanForTokenX2X2 [ ] { #category : #generated } -HTMLScanner >> scanForTokenX2X3 [ +HTMLScanner >> scanForTokenX1X3 [ self recordMatch: #( 13 ). self step. @@ -1353,7 +1325,7 @@ HTMLScanner >> scanForTokenX2X3 [ ] { #category : #generated } -HTMLScanner >> scanForTokenX2X4 [ +HTMLScanner >> scanForTokenX1X4 [ self recordMatch: #( 12 ). self step. @@ -1362,14 +1334,14 @@ HTMLScanner >> scanForTokenX2X4 [ ] { #category : #generated } -HTMLScanner >> scanForTokenX2X5 [ +HTMLScanner >> scanForTokenX1X5 [ - currentCharacter == $( ifTrue: [ ^ self scan54 ]. - currentCharacter == $/ ifTrue: [ ^ self scanForTokenX2X4 ]. + currentCharacter == $/ ifTrue: [ ^ self scanForTokenX1X4 ]. currentCharacter == $< ifTrue: [ ^ self scan2 ]. - currentCharacter == $= ifTrue: [ ^ self scanForTokenX2X3 ]. - currentCharacter == $> ifTrue: [ ^ self scanForTokenX2X2 ]. - currentCharacter == $[ ifTrue: [ ^ self scanForTokenX2X1 ]. + currentCharacter == $= ifTrue: [ ^ self scanForTokenX1X3 ]. + currentCharacter == $> ifTrue: [ ^ self scanForTokenX1X2 ]. + currentCharacter == $[ ifTrue: [ ^ self scanForTokenX1X1 ]. + ('#*' includes: currentCharacter) ifTrue: [ ^ self scan51 ]. ((currentCharacter between: Character tab and: Character lf) or: [ currentCharacter == Character cr or: [ currentCharacter == Character space ] ]) ifTrue: [ ^ self scan4 ]. @@ -1378,3 +1350,31 @@ HTMLScanner >> scanForTokenX2X5 [ currentCharacter between: $a and: $z ] ]) ifTrue: [ ^ self scan52 ]. ^ self scan1 ] + +{ #category : #generated } +HTMLScanner >> scanForTokenX2 [ + + self step. + currentCharacter == Character space ifTrue: [ self scanForTokenX2X1 ]. + currentCharacter == $" ifTrue: [ ^ self scan5 ]. + currentCharacter == $# ifTrue: [ ^ self scan8 ]. + currentCharacter == $' ifTrue: [ ^ self scan14 ]. + currentCharacter == $< ifTrue: [ ^ self scan10 ]. + currentCharacter isDigit ifTrue: [ ^ self scan16 ]. + ((currentCharacter between: Character tab and: Character lf) or: [ + currentCharacter == Character cr ]) ifTrue: [ ^ self scan4 ]. + ((currentCharacter between: $+ and: $?) or: [ + (currentCharacter between: $A and: $Z) or: [ + currentCharacter == $_ or: [ currentCharacter between: $a and: $z ] ] ]) + ifTrue: [ ^ self scan9 ]. + ^ self scan1 +] + +{ #category : #generated } +HTMLScanner >> scanForTokenX2X1 [ + + [ + self recordMatch: #( 6 ). + self step. + currentCharacter == Character space ] whileTrue +]