Просмотр исходного кода

fix #717: support multiline expressions

calebboyd 11 лет назад
Родитель
Сommit
8de1bb8bd2
3 измененных файлов с 13 добавлено и 3 удалено
  1. 1 0
      .gitignore
  2. 6 3
      src/parsers/expression.js
  3. 6 0
      test/unit/specs/parsers/expression_spec.js

+ 1 - 0
.gitignore

@@ -3,5 +3,6 @@ test/unit/specs.js
 explorations
 node_modules
 .DS_Store
+.idea
 benchmarks/browser.js
 coverage

+ 6 - 3
src/parsers/expression.js

@@ -16,7 +16,7 @@ var keywords =
 
 var wsRE = /\s/g
 var newlineRE = /\n/g
-var saveRE = /[\{,]\s*[\w\$_]+\s*:|'[^']*'|"[^"]*"/g
+var saveRE = /[\{,]\s*[\w\$_]+\s*:|('[^']*'|"[^"]*")/g
 var restoreRE = /"(\d+)"/g
 var pathTestRE = /^[A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\]|\[\d+\])*$/
 var pathReplaceRE = /[^\w$\.]([A-Za-z_$][\w$]*(\.[A-Za-z_$][\w$]*|\['.*?'\]|\[".*?"\])*)/g
@@ -38,12 +38,15 @@ var saved = []
  * Save replacer
  *
  * @param {String} str
+ * @param {String} isString - str if matched as a string
  * @return {String} - placeholder with index
  */
 
-function save (str) {
+function save (str, isString) {
   var i = saved.length
-  saved[i] = str.replace(newlineRE, '\\n')
+  saved[i] = isString
+    ? str.replace(newlineRE, '\\n')
+    : str.replace(wsRE,'')
   return '"' + i + '"'
 }
 

+ 6 - 0
test/unit/specs/parsers/expression_spec.js

@@ -62,6 +62,12 @@ var testCases = [
     expected: 'inline hel\nlo',
     paths: ['a']
   },
+  {
+    //multiline expressions
+    exp: "{\n a: '35',\n b: c}",
+    scope:{c:32},
+    expected: { a : '35', b : 32 }
+  },
   {
     // dollar signs and underscore
     exp: "_a + ' ' + $b",