• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      ASCIIMathML結(jié)構(gòu)分析與應(yīng)用

      2018-01-16 12:34:48杜寧
      科技視界 2018年28期

      【摘 要】遵循W3C互聯(lián)網(wǎng)數(shù)學(xué)信息交換標(biāo)準(zhǔn)的開源腳本ASCIIMathML.js與MathPlayer插件共同實現(xiàn)了網(wǎng)頁公式從表義(Content)到呈現(xiàn)(Presentation)的轉(zhuǎn)換。分析ASCIIMathML.js的數(shù)據(jù)結(jié)構(gòu)、框架結(jié)構(gòu)及其運行機制,對于網(wǎng)頁公式的處理以及軟件的二次開發(fā)應(yīng)用,具有一定的參考價值。

      【關(guān)鍵詞】網(wǎng)頁公式;ASCIIMathML;MathML;MathPlayer

      中圖分類號: TP391 文獻標(biāo)識碼: A 文章編號: 2095-2457(2018)28-0071-002

      DOI:10.19694/j.cnki.issn2095-2457.2018.28.031

      【Abstract】The open source script ASCIIMathML.js, which follows the W3C Internet Mathematical Information Exchange Standard, together with the MathPlayer plug-in, implements the conversion of Web formulas from Content to Presentation. The analysis on the data structure, the frame structure and the operation mechanism of ASCIIMathML.js has certain value for the processing of Web formula and for the secondary development and application of software.

      【Key words】Web formula; ASCIIMathML; MathML; MathPlayer

      0 導(dǎo)言

      開源ASCIIMathML.js[1]腳本,兼容LaTex語法,與Design Science公司的網(wǎng)頁公式插件MathPlayer[2]合璧,實現(xiàn)了網(wǎng)頁公式從表義(Content)到呈現(xiàn)(Presentation)的轉(zhuǎn)換。文[3]對ASCIIMathML的語義符號、解析形式進行了探討,本文旨在分析ASCIIMathML的結(jié)構(gòu)及其運行機制,嘗試在此基礎(chǔ)上的初步應(yīng)用。

      1 ASCIIMathML的數(shù)據(jù)結(jié)構(gòu)分析

      ASCIIMathML的基本數(shù)據(jù)單元(以ASCIIMathML.js2.10為例),是一種結(jié)構(gòu)體,以input字段為keyword,形成有序線性表。語法如表1:

      例1:{input:"->",tag:"mo",output:"\u2192",tex:"rightarrow",ttype:CONST},

      此例中,表義字符串“->” 形象代表unicode字符\u2192(即→),對應(yīng)的LaTeX表義字符為“rightarrow”。該表義串被動態(tài)創(chuàng)建為mo對象,結(jié)構(gòu)類型為CONST。

      例2:{input:"\\cos",tag:"mi",output:"cos",ttype:UNARY,func:true},

      此例中,func:true表示此乃數(shù)學(xué)函數(shù),被處理為正體顯示。

      例3:{input:"\\frac",tag:"mfrac",output:"/",ttype:BINARY},

      此例中,tag:mfrac為分式結(jié)構(gòu),以BINARY對應(yīng)的結(jié)構(gòu)方式構(gòu)建此對象。

      2 ASCIIMathML程序框架分析

      在ASCIIMathML.js腳本中,包含ASCIIMathML、 LaTeXMathML和ASCIIsvg三部分。其中ASCIIMathML為基本處理(已棄用),LaTeXMathM是對LaTeX作兼容性擴展后形成,ASCIIsvg實現(xiàn)網(wǎng)頁圖形功能。下面簡析網(wǎng)頁公式主體LaTeXMathM的框架和運行機制。

      2.1 LaTeXMathML的基本程序極其功能

      LaTeXMathML框架由若干功能程序和輔助程序的構(gòu)成,其主要作用是解析公式表義字符串,創(chuàng)建對應(yīng)的math對象,然后由MathPlayer插件將這些math對象顯示在頁面上。

      值得一提的是LMgetSymbol函數(shù),它按input字段索引并返回表義字符在ASCIIMathML數(shù)據(jù)單元表中對應(yīng)的數(shù)據(jù)單元對象。

      2.2 LaTeXMathML運行機制示意圖

      LaTeXMathML以HTML文檔最頂層的body對象為入口,遞歸遍歷document對象的所有DOM結(jié)點。由結(jié)點的nodeValue屬性獲取文本串,再判斷、解析表義串,創(chuàng)建math對象。

      其中,遍歷由主控函數(shù)processNodeR以遞歸方式完成,解析公式文本串并創(chuàng)建math對象體系則由LMparseExpr,LMparseIexpr,LMparseSexpr等函數(shù)完成。

      3 ASCIIMathML結(jié)構(gòu)應(yīng)用示例

      以下是ASCIIMathML.js結(jié)構(gòu)與運行程序框架結(jié)構(gòu)的基礎(chǔ)上,一些應(yīng)用示例。

      3.1 補充特殊的字符

      ASCIIMathML提供了∴(unicode為2234)的簡捷輸入(冒號+點號)?,F(xiàn)補充∵(unicode為2235)的簡捷輸入(點號+冒號),可按照表1語法,在AMsymbols[]內(nèi)添加數(shù)據(jù)單元對象:

      {input:".:", tag:"mo", output:"\u2235", tex:"because", ttype:CONST},

      3.2 增添顏色處理

      很多時候需要渲染公式中的部分內(nèi)容的顏色,達到強調(diào)、引人注目之效果。以增添紅色為例,可在AMsymbols[]內(nèi)添加數(shù)據(jù)單元對象:

      {input:"mcRed",tag:"mstyle",atname:"color",atval:"red",tex:null,ttype:UNARY},

      仿此增加特定顏色,可滿足大多數(shù)個性化顏色需求。若需制訂一普適性的顏色方案,比如IE預(yù)定義顏色表,則可在LMgetSymbol函數(shù)中優(yōu)先識別,在該函數(shù)開頭增加代碼:

      s=/^mc[A-Z][a-z]+/.exec(st);//st為函數(shù)的傳入?yún)?shù),為結(jié)點的公式串

      if(s)return{input:s,tag:"mstyle",atname:"color",atval:s.slice(2),ttype:UNARY}

      此處,規(guī)定顏色語法為:mc+顏色單詞(首字母大寫),比如mcRed,mcGreen等。

      3.3 簡捷輸入矩陣、方程組、行列式等

      矩陣、方程組、行列式等是常見的公式類,ASCIIMathML.js的表義語法參見文[3]。顯然,這類表義語法的輸入極為不便??啥x如下的簡便、實用的表義語法:

      這需要在獲取DOM對象的nodeValue時,攔截公式字符串的處理,將表3的語法首先轉(zhuǎn)換為ASCIIMathML.js默認(rèn)語法。為此,在processNodeR函數(shù)中增加如下處理代碼:

      st= st.replace(/[\[\{\(\|]({.+?})[\|\)\}\]]/g,

      function (s,t){var b=s.slice(0,1),e=s.slice(-1),p=b=="{" ? "l":"c";

      return "\\left"+ (b=="{" ? "\\{":b)+ "\\begin{array}{"+ p + "}"+

      t.replace(/&/g,"\\\\").replace(/;/g,"}&{")+

      "\\end{array}\\right"+ (e=="}" ? ".":e);});

      實際應(yīng)用中,還應(yīng)作功能性的完善。比如,定界符尤其是{}的嵌套問題,矩陣(行列式、方程組)語法串識別性問題等。

      4 結(jié)語

      分析ASCIIMathML.js的數(shù)據(jù)結(jié)構(gòu)、運行框架結(jié)構(gòu),在此基礎(chǔ)上實現(xiàn)各種特定目標(biāo),可避免重復(fù)開發(fā),節(jié)約時間成本、開發(fā)成本,借他山之石,達實用之功。

      【參考文獻】

      [1]http://www.dessci.com/en/products/mathplayer/.

      [2]http://www.chapman.edu/~jipsen/mathml/ASCIIMathML.js.

      [3]杜寧.ASCIIMathML網(wǎng)頁公式解析結(jié)果分析[J].科技資訊2015(25):2-3.

      葫芦岛市| 平乐县| 南通市| 安阳市| 游戏| 黄骅市| 东平县| 油尖旺区| 台中县| 安平县| 祁东县| 北碚区| 平远县| 东丽区| 辽宁省| 泗阳县| 东山县| 进贤县| 潜山县| 台州市| 黎城县| 玛纳斯县| 台湾省| 龙里县| 饶平县| 萨迦县| 宁津县| 遵义县| 云霄县| 堆龙德庆县| 丰原市| 长乐市| 阿鲁科尔沁旗| 隆尧县| 理塘县| 句容市| 贡嘎县| 四子王旗| 淳化县| 佳木斯市| 凤庆县|