vue.js 原始碼學習筆記 ----- fillter-parse.js

來源:互聯網
上載者:User

標籤:case   amp   als   str   --   port   bre   trim   style   

/* @flow */export function parseFilters (exp: string): string {  let inSingle = false  let inDouble = false  let inTemplateString = false  let inRegex = false  let curly = 0  let square = 0  let paren = 0  let lastFilterIndex = 0  let c, prev, i, expression, filters  for (i = 0; i < exp.length; i++) {    prev = c    c = exp.charCodeAt(i)    if (inSingle) {      if (c === 0x27 && prev !== 0x5C) inSingle = false    } else if (inDouble) {      if (c === 0x22 && prev !== 0x5C) inDouble = false    } else if (inTemplateString) {      if (c === 0x60 && prev !== 0x5C) inTemplateString = false    } else if (inRegex) {      if (c === 0x2f && prev !== 0x5C) inRegex = false    } else if (      c === 0x7C && // pipe      exp.charCodeAt(i + 1) !== 0x7C &&      exp.charCodeAt(i - 1) !== 0x7C &&      !curly && !square && !paren    ) {      if (expression === undefined) {        // first filter, end of expression        lastFilterIndex = i + 1        expression = exp.slice(0, i).trim()      } else {        pushFilter()      }    } else {      switch (c) {        case 0x22: inDouble = true; break         // "        case 0x27: inSingle = true; break         // ‘        case 0x60: inTemplateString = true; break // `        case 0x2f: inRegex = true; break          // /        case 0x28: paren++; break                 // (        case 0x29: paren--; break                 // )        case 0x5B: square++; break                // [        case 0x5D: square--; break                // ]        case 0x7B: curly++; break                 // {        case 0x7D: curly--; break                 // }      }    }  }  if (expression === undefined) {    expression = exp.slice(0, i).trim()  } else if (lastFilterIndex !== 0) {    pushFilter()  }  function pushFilter () {    (filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim())    lastFilterIndex = i + 1  }  if (filters) {    for (i = 0; i < filters.length; i++) {      expression = wrapFilter(expression, filters[i])    }  }  return expression}function wrapFilter (exp: string, filter: string): string {  const i = filter.indexOf(‘(‘)  if (i < 0) {    // _f: resolveFilter    return `_f("${filter}")(${exp})`  } else {    const name = filter.slice(0, i)    const args = filter.slice(i + 1)    return `_f("${name}")(${exp},${args}`  }}

 

vue.js 原始碼學習筆記 ----- fillter-parse.js

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.