@@ -18,17 +18,122 @@ var parameter_hunter = function () {
18
18
style_modifier_hunter = new smh ( ) ,
19
19
pattern_assembler = new pa ( ) ;
20
20
21
+ function paramToJson ( pString ) {
22
+ var paramStringWellFormed = '' ;
23
+ var paramStringTmp ;
24
+ var colonPos ;
25
+ var delimitPos ;
26
+ var quotePos ;
27
+ var paramString = pString ;
28
+
29
+ do {
30
+
31
+ //if param key is wrapped in single quotes, replace with double quotes.
32
+ paramString = paramString . replace ( / ( ^ \s * [ \{ | \, ] \s * ) ' ( [ ^ ' ] + ) ' ( \s * \: ) / , '$1"$2"$3' ) ;
33
+
34
+ //if params key is not wrapped in any quotes, wrap in double quotes.
35
+ paramString = paramString . replace ( / ( ^ \s * [ \{ | \, ] \s * ) ( [ ^ \s " ' \: ] + ) ( \s * \: ) / , '$1"$2"$3' ) ;
36
+
37
+ //move param key to paramStringWellFormed var.
38
+ colonPos = paramString . indexOf ( ':' ) ;
39
+
40
+ //except to prevent infinite loops.
41
+ if ( colonPos === - 1 ) {
42
+ colonPos = paramString . length - 1 ;
43
+ }
44
+ else {
45
+ colonPos += 1 ;
46
+ }
47
+ paramStringWellFormed += paramString . substring ( 0 , colonPos ) ;
48
+ paramString = paramString . substring ( colonPos , paramString . length ) . trim ( ) ;
49
+
50
+ //if param value is wrapped in single quotes, replace with double quotes.
51
+ if ( paramString [ 0 ] === '\'' ) {
52
+ quotePos = paramString . search ( / [ ^ \\ ] ' / ) ;
53
+
54
+ //except for unclosed quotes to prevent infinite loops.
55
+ if ( quotePos === - 1 ) {
56
+ quotePos = paramString . length - 1 ;
57
+ }
58
+ else {
59
+ quotePos += 2 ;
60
+ }
61
+
62
+ //prepare param value for move to paramStringWellFormed var.
63
+ paramStringTmp = paramString . substring ( 0 , quotePos ) ;
64
+
65
+ //unescape any escaped single quotes.
66
+ paramStringTmp = paramStringTmp . replace ( / \\ ' / g, '\'' ) ;
67
+
68
+ //escape any double quotes.
69
+ paramStringTmp = paramStringTmp . replace ( / " / g, '\\"' ) ;
70
+
71
+ //replace the delimiting single quotes with double quotes.
72
+ paramStringTmp = paramStringTmp . replace ( / ^ ' / , '"' ) ;
73
+ paramStringTmp = paramStringTmp . replace ( / ' $ / , '"' ) ;
74
+
75
+ //move param key to paramStringWellFormed var.
76
+ paramStringWellFormed += paramStringTmp ;
77
+ paramString = paramString . substring ( quotePos , paramString . length ) . trim ( ) ;
78
+ }
79
+
80
+ //if param value is wrapped in double quotes, just move to paramStringWellFormed var.
81
+ else if ( paramString [ 0 ] === '"' ) {
82
+ quotePos = paramString . search ( / [ ^ \\ ] " / ) ;
83
+
84
+ //except for unclosed quotes to prevent infinite loops.
85
+ if ( quotePos === - 1 ) {
86
+ quotePos = paramString . length - 1 ;
87
+ }
88
+ else {
89
+ quotePos += 2 ;
90
+ }
91
+
92
+ //move param key to paramStringWellFormed var.
93
+ paramStringWellFormed += paramString . substring ( 0 , quotePos ) ;
94
+ paramString = paramString . substring ( quotePos , paramString . length ) . trim ( ) ;
95
+ }
96
+
97
+ //if param value is not wrapped in quotes, move everthing up to the delimiting comma to paramStringWellFormed var.
98
+ else {
99
+ delimitPos = paramString . indexOf ( ',' ) ;
100
+
101
+ //except to prevent infinite loops.
102
+ if ( delimitPos === - 1 ) {
103
+ delimitPos = paramString . length - 1 ;
104
+ }
105
+ else {
106
+ delimitPos += 1 ;
107
+ }
108
+ paramStringWellFormed += paramString . substring ( 0 , delimitPos ) ;
109
+ paramString = paramString . substring ( delimitPos , paramString . length ) . trim ( ) ;
110
+ }
111
+
112
+ //break at the end.
113
+ if ( paramString . length === 1 ) {
114
+ paramStringWellFormed += paramString . trim ( ) ;
115
+ paramString = '' ;
116
+ break ;
117
+ }
118
+
119
+ } while ( paramString ) ;
120
+
121
+ return paramStringWellFormed ;
122
+ }
123
+
21
124
function findparameters ( pattern , patternlab ) {
125
+
22
126
if ( pattern . parameteredPartials && pattern . parameteredPartials . length > 0 ) {
23
- //compile this partial immediately, essentially consuming it.
24
127
128
+ //compile this partial immeadiately, essentially consuming it.
25
129
pattern . parameteredPartials . forEach ( function ( pMatch ) {
26
130
//find the partial's name and retrieve it
27
131
var partialName = pMatch . match ( / ( [ \w \- \. \/ ~ ] + ) / g) [ 0 ] ;
28
132
var partialPattern = pattern_assembler . get_pattern_by_key ( partialName , patternlab ) ;
29
133
30
134
//if we retrieved a pattern we should make sure that its extendedTemplate is reset. looks to fix #190
31
135
partialPattern . extendedTemplate = partialPattern . template ;
136
+
32
137
if ( patternlab . config . debug ) {
33
138
console . log ( 'found patternParameters for ' + partialName ) ;
34
139
}
@@ -37,15 +142,7 @@ var parameter_hunter = function () {
37
142
var leftParen = pMatch . indexOf ( '(' ) ;
38
143
var rightParen = pMatch . indexOf ( ')' ) ;
39
144
var paramString = '{' + pMatch . substring ( leftParen + 1 , rightParen ) + '}' ;
40
-
41
- //if param keys are wrapped in single quotes, replace with double quotes.
42
- var paramStringWellFormed = paramString . replace ( / ( ' ) ( [ ^ ' ] + ) ( ' ) ( \s * \: ) / g, '"$2"$4' ) ;
43
-
44
- //if params keys are not wrapped in any quotes, wrap in double quotes.
45
- paramStringWellFormed = paramStringWellFormed . replace ( / ( [ \{ | , ] \s * ) ( [ ^ \s " ' \: ] + ) ( \s * \: ) / g, '$1"$2"$3' ) ;
46
-
47
- //if param values are wrapped in single quotes, replace with double quotes.
48
- paramStringWellFormed = paramStringWellFormed . replace ( / ( \: \s * ) ( ' ) ( [ ^ ' ] + ) ( ' ) / g, '$1"$3"' ) ;
145
+ var paramStringWellFormed = paramToJson ( paramString ) ;
49
146
50
147
var paramData = { } ;
51
148
var globalData = { } ;
0 commit comments