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
+]