Fix: use sticky flag to avoid text slicing
This commit is contained in:
		
							parent
							
								
									53770c0db6
								
							
						
					
					
						commit
						6d411c01fc
					
				|  | @ -374,33 +374,30 @@ function createAppliesToLineWidget(cm) { | ||||||
|   function *findAppliesTo(posStart, posEnd) { |   function *findAppliesTo(posStart, posEnd) { | ||||||
|     const text = cm.getValue(); |     const text = cm.getValue(); | ||||||
|     const re = /^[\t ]*@-moz-document\s+/mg; |     const re = /^[\t ]*@-moz-document\s+/mg; | ||||||
|     const applyRe = /^(url|url-prefix|domain|regexp)\(((['"])(?:\\\\|\\\n|\\\3|[^\n])*?\3|[^)\n]*)\)[\s,]*/i; |     const applyRe = /(url|url-prefix|domain|regexp)\(((['"])(?:\\\\|\\\n|\\\3|[^\n])*?\3|[^)\n]*)\)[\s,]*/iyg; | ||||||
|     let preIndex = re.lastIndex = posStart; |  | ||||||
|     let match; |     let match; | ||||||
|     let pos = cm.posFromIndex(preIndex); |     re.lastIndex = posStart; | ||||||
|     while ((match = re.exec(text))) { |     while ((match = re.exec(text))) { | ||||||
|       if (match.index >= posEnd) { |       if (match.index >= posEnd) { | ||||||
|         return; |         return; | ||||||
|       } |       } | ||||||
|       pos = cm.findPosH(pos, match.index - preIndex, 'char'); |  | ||||||
|       const applies = []; |       const applies = []; | ||||||
|       let t = text.slice(re.lastIndex); |  | ||||||
|       let m; |       let m; | ||||||
|       let offset = 0; |       applyRe.lastIndex = re.lastIndex; | ||||||
|       while ((m = t.match(applyRe))) { |       while ((m = applyRe.exec(text))) { | ||||||
|         const apply = createApply( |         const apply = createApply( | ||||||
|           re.lastIndex + offset, |           m.index, | ||||||
|           m[1], |           m[1], | ||||||
|           unquote(m[2]), |           unquote(m[2]), | ||||||
|           unquote(m[2]) !== m[2] |           unquote(m[2]) !== m[2] | ||||||
|         ); |         ); | ||||||
|         applies.push(apply); |         applies.push(apply); | ||||||
|         t = t.slice(m[0].length); |         re.lastIndex = applyRe.lastIndex; | ||||||
|         offset += m[0].length; |  | ||||||
|       } |       } | ||||||
|       yield {pos, applies}; |       yield { | ||||||
|       preIndex = match.index; |         pos: cm.posFromIndex(match.index), | ||||||
|       re.lastIndex = text.length - t.length; |         applies | ||||||
|  |       }; | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user