more styling
[roojs1] / docs / src / Roo_rtf_Parser.js.html
1 <html><head><title>Roo/rtf/Parser.js</title><link rel="stylesheet" type="text/css" href="../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/**
2  *
3  *
4  * based on this https://github.com/iarna/rtf-parser
5  * it's really only designed to extract pict from pasted RTF 
6  *
7  * usage:
8  *
9  *  var images = new Roo.rtf.Parser().parse(a_string).filter(function(g) { return g.type == 'pict'; });
10  *  
11  *
12  */
13
14
15
16
17
18 </span><span class="jsdoc-var">Roo.rtf.Parser </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">) {
19     </span><span class="jsdoc-comment">//super({objectMode: true})
20     </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
21     </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
22
23     </span><span class="jsdoc-comment">// these are for interpeter...
24     </span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">= {};
25     </span><span class="jsdoc-comment">///this.parserState = this.parseTop
26     </span><span class="jsdoc-var">this.groupStack </span><span class="jsdoc-syntax">= [];
27     </span><span class="jsdoc-var">this.hexStore </span><span class="jsdoc-syntax">= [];
28     </span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">;
29
30     </span><span class="jsdoc-var">this.groups </span><span class="jsdoc-syntax">= []; </span><span class="jsdoc-comment">// where we put the return.
31
32     </span><span class="jsdoc-keyword">for </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">ii </span><span class="jsdoc-syntax">= 0; </span><span class="jsdoc-var">ii </span><span class="jsdoc-syntax">&lt; </span><span class="jsdoc-var">text.length</span><span class="jsdoc-syntax">; ++</span><span class="jsdoc-var">ii</span><span class="jsdoc-syntax">) {
33         ++</span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">;
34
35         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">ii</span><span class="jsdoc-syntax">] === </span><span class="jsdoc-string">'\n'</span><span class="jsdoc-syntax">) {
36             ++</span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">;
37             </span><span class="jsdoc-var">this.col </span><span class="jsdoc-syntax">= 1;
38         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
39             ++</span><span class="jsdoc-var">this.col</span><span class="jsdoc-syntax">;
40         }
41         </span><span class="jsdoc-var">this.parserState</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">text</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">ii</span><span class="jsdoc-syntax">]);
42     }
43
44
45
46 };
47 </span><span class="jsdoc-var">Roo.rtf.Parser.prototype </span><span class="jsdoc-syntax">= {
48     </span><span class="jsdoc-var">text </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">, </span><span class="jsdoc-comment">// string being parsed..
49     </span><span class="jsdoc-var">controlWord </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
50     </span><span class="jsdoc-var">controlWordParam </span><span class="jsdoc-syntax">:  </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
51     </span><span class="jsdoc-var">hexChar </span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">,
52     </span><span class="jsdoc-var">doc </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
53     </span><span class="jsdoc-var">group</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
54     </span><span class="jsdoc-var">groupStack </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
55     </span><span class="jsdoc-var">hexStore </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
56
57
58     </span><span class="jsdoc-var">cpos </span><span class="jsdoc-syntax">: 0,
59     </span><span class="jsdoc-var">row </span><span class="jsdoc-syntax">: 1, </span><span class="jsdoc-comment">// reportin?
60     </span><span class="jsdoc-var">col </span><span class="jsdoc-syntax">: 1, </span><span class="jsdoc-comment">//
61
62
63     </span><span class="jsdoc-var">push </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">)
64     {
65         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">m </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">'cmd'</span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">el.type</span><span class="jsdoc-syntax">;
66         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">typeof</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">]) == </span><span class="jsdoc-string">'undefined'</span><span class="jsdoc-syntax">) {
67             </span><span class="jsdoc-var">Roo.log</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'invalid cmd:' </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">el.type</span><span class="jsdoc-syntax">);
68             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
69         }
70         </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">[</span><span class="jsdoc-var">m</span><span class="jsdoc-syntax">](</span><span class="jsdoc-var">el</span><span class="jsdoc-syntax">);
71         </span><span class="jsdoc-comment">//Roo.log(el);
72     </span><span class="jsdoc-syntax">},
73     </span><span class="jsdoc-var">flushHexStore </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
74     {
75         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.hexStore.length </span><span class="jsdoc-syntax">&lt; 1) {
76             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
77         }
78         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">hexstr </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.hexStore.map</span><span class="jsdoc-syntax">(
79             </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
80                 </span><span class="jsdoc-keyword">return </span><span class="jsdoc-var">cmd.value</span><span class="jsdoc-syntax">;
81         })</span><span class="jsdoc-var">.join</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">);
82
83         </span><span class="jsdoc-var">this.group.addContent</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Hex</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">hexstr </span><span class="jsdoc-syntax">));
84
85
86         </span><span class="jsdoc-var">this.hexStore.splice</span><span class="jsdoc-syntax">(0)
87
88     },
89
90     </span><span class="jsdoc-var">cmdgroupstart </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
91     {
92         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
93         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">) {
94             </span><span class="jsdoc-var">this.groupStack.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">);
95         }
96          </span><span class="jsdoc-comment">// parent..
97         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
98             </span><span class="jsdoc-var">this.group </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Document</span><span class="jsdoc-syntax">();
99             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
100
101         }
102         </span><span class="jsdoc-var">this.group </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Group</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">);
103     },
104     </span><span class="jsdoc-var">cmdignorable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
105     {
106         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
107         </span><span class="jsdoc-var">this.group.ignorable </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">;
108     },
109     </span><span class="jsdoc-var">cmdendparagraph </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">()
110     {
111         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
112         </span><span class="jsdoc-var">this.group.addContent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Paragraph</span><span class="jsdoc-syntax">());
113     },
114     </span><span class="jsdoc-var">cmdgroupend </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
115     {
116         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
117         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">endingGroup </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">;
118
119
120         </span><span class="jsdoc-var">this.group </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.groupStack.pop</span><span class="jsdoc-syntax">();
121         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">) {
122             </span><span class="jsdoc-var">this.group.addChild</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">endingGroup</span><span class="jsdoc-syntax">);
123         }
124
125
126
127         </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">doc </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.group </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">this.doc</span><span class="jsdoc-syntax">;
128         </span><span class="jsdoc-comment">//if (endingGroup instanceof FontTable) {
129         //  doc.fonts = endingGroup.table
130         //} else if (endingGroup instanceof ColorTable) {
131         //  doc.colors = endingGroup.table
132         //} else if (endingGroup !== this.doc &amp;&amp; !endingGroup.get('ignorable')) {
133         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">endingGroup.ignorable </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">) {
134             </span><span class="jsdoc-comment">//code
135             </span><span class="jsdoc-var">this.groups.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">endingGroup</span><span class="jsdoc-syntax">);
136            </span><span class="jsdoc-comment">// Roo.log( endingGroup );
137         </span><span class="jsdoc-syntax">}
138             </span><span class="jsdoc-comment">//Roo.each(endingGroup.content, function(item)) {
139             //    doc.addContent(item);
140             //}
141             //process.emit('debug', 'GROUP END', endingGroup.type, endingGroup.get('ignorable'))
142         //}
143     </span><span class="jsdoc-syntax">},
144     </span><span class="jsdoc-var">cmdtext </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">)
145     {
146         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
147         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.group</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// an RTF fragment, missing the {\rtf1 header
148             //this.group = this.doc
149         </span><span class="jsdoc-syntax">}
150         </span><span class="jsdoc-var">this.group.addContent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Span</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">));
151     },
152     </span><span class="jsdoc-var">cmdcontrolword </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">)
153     {
154         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
155         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.group.type</span><span class="jsdoc-syntax">) {
156             </span><span class="jsdoc-var">this.group.type </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">cmd.value</span><span class="jsdoc-syntax">;
157             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
158         }
159         </span><span class="jsdoc-var">this.group.addContent</span><span class="jsdoc-syntax">(</span><span class="jsdoc-keyword">new </span><span class="jsdoc-var">Roo.rtf.Ctrl</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">));
160         </span><span class="jsdoc-comment">// we actually don't care about ctrl words...
161         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">;
162         </span><span class="jsdoc-comment">/*
163         var method = 'ctrl$' + cmd.value.replace(/-(.)/g, (_, char) =&gt; char.toUpperCase())
164         if (this[method]) {
165             this[method](cmd.param)
166         } else {
167             if (!this.group.get('ignorable')) process.emit('debug', method, cmd.param)
168         }
169         */
170     </span><span class="jsdoc-syntax">},
171     </span><span class="jsdoc-var">cmdhexchar </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
172         </span><span class="jsdoc-var">this.hexStore.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">);
173     },
174     </span><span class="jsdoc-var">cmderror </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">) {
175         </span><span class="jsdoc-keyword">throw new </span><span class="jsdoc-var">Exception </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd.value</span><span class="jsdoc-syntax">);
176     },
177
178     </span><span class="jsdoc-comment">/*
179       _flush (done) {
180         if (this.text !== '\u0000') this.emitText()
181         done()
182       }
183       */
184
185
186     </span><span class="jsdoc-var">parseText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)
187     {
188         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\\'</span><span class="jsdoc-syntax">) {
189             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseEscapes</span><span class="jsdoc-syntax">;
190         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'{'</span><span class="jsdoc-syntax">) {
191             </span><span class="jsdoc-var">this.emitStartGroup</span><span class="jsdoc-syntax">();
192         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'}'</span><span class="jsdoc-syntax">) {
193             </span><span class="jsdoc-var">this.emitEndGroup</span><span class="jsdoc-syntax">();
194         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\x0A' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\x0D'</span><span class="jsdoc-syntax">) {
195             </span><span class="jsdoc-comment">// cr/lf are noise chars
196         </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
197             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
198         }
199     },
200
201     </span><span class="jsdoc-var">parseEscapes</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)
202     {
203         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\\' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'{' </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'}'</span><span class="jsdoc-syntax">) {
204             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
205             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
206         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
207             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlSymbol</span><span class="jsdoc-syntax">;
208             </span><span class="jsdoc-var">this.parseControlSymbol</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
209         }
210     },
211     </span><span class="jsdoc-var">parseControlSymbol</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)
212     {
213         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'~'</span><span class="jsdoc-syntax">) {
214             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'\u00a0'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// nbsp
215             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText
216         </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'-'</span><span class="jsdoc-syntax">) {
217              </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'\u00ad'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// soft hyphen
218         </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'_'</span><span class="jsdoc-syntax">) {
219             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-string">'\u2011'</span><span class="jsdoc-syntax">; </span><span class="jsdoc-comment">// non-breaking hyphen
220         </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'*'</span><span class="jsdoc-syntax">) {
221             </span><span class="jsdoc-var">this.emitIgnorable</span><span class="jsdoc-syntax">();
222             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
223         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">&quot;'&quot;</span><span class="jsdoc-syntax">) {
224             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseHexChar</span><span class="jsdoc-syntax">;
225         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'|'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// formula cacter
226             </span><span class="jsdoc-var">this.emitFormula</span><span class="jsdoc-syntax">();
227             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
228         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">':'</span><span class="jsdoc-syntax">) { </span><span class="jsdoc-comment">// subentry in an index entry
229             </span><span class="jsdoc-var">this.emitIndexSubEntry</span><span class="jsdoc-syntax">();
230             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
231         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\x0a'</span><span class="jsdoc-syntax">) {
232             </span><span class="jsdoc-var">this.emitEndParagraph</span><span class="jsdoc-syntax">();
233             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
234         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">'\x0d'</span><span class="jsdoc-syntax">) {
235             </span><span class="jsdoc-var">this.emitEndParagraph</span><span class="jsdoc-syntax">();
236             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
237         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
238             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlWord</span><span class="jsdoc-syntax">;
239             </span><span class="jsdoc-var">this.parseControlWord</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
240         }
241     },
242     </span><span class="jsdoc-var">parseHexChar</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)
243     {
244         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(/^[A-Fa-f0-9]$/</span><span class="jsdoc-var">.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)) {
245             </span><span class="jsdoc-var">this.hexChar </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
246             </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.hexChar.length </span><span class="jsdoc-syntax">&gt;= 2) {
247               </span><span class="jsdoc-var">this.emitHexChar</span><span class="jsdoc-syntax">();
248               </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
249             }
250             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
251         }
252         </span><span class="jsdoc-var">this.emitError</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">&quot;Invalid character \&quot;&quot; </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-string">&quot;\&quot; in hex literal.&quot;</span><span class="jsdoc-syntax">);
253         </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
254
255     },
256     </span><span class="jsdoc-var">parseControlWord </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)
257     {
258         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">) {
259             </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
260             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
261         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(/^[-\d]$/</span><span class="jsdoc-var">.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)) {
262             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlWordParam</span><span class="jsdoc-syntax">;
263             </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
264         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(/^[A-Za-z]$/</span><span class="jsdoc-var">.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)) {
265           </span><span class="jsdoc-var">this.controlWord </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
266         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
267           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
268           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
269           </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
270         }
271     },
272     </span><span class="jsdoc-var">parseControlWordParam </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">) {
273         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(/^\d$/</span><span class="jsdoc-var">.test</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">)) {
274           </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
275         } </span><span class="jsdoc-keyword">else if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">' '</span><span class="jsdoc-syntax">) {
276           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
277           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
278         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
279           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
280           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
281           </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
282         }
283     },
284
285
286
287
288     </span><span class="jsdoc-var">emitText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
289         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) {
290             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
291         }
292         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
293             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text'</span><span class="jsdoc-syntax">,
294             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.text</span><span class="jsdoc-syntax">,
295             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
296             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
297             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
298         </span><span class="jsdoc-syntax">});
299         </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''
300     </span><span class="jsdoc-syntax">},
301     </span><span class="jsdoc-var">emitControlWord </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
302     {
303         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
304         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.controlWord </span><span class="jsdoc-syntax">=== </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">) {
305             </span><span class="jsdoc-var">this.emitError</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">'empty control word'</span><span class="jsdoc-syntax">);
306         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
307             </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
308                   </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'controlword'</span><span class="jsdoc-syntax">,
309                   </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.controlWord</span><span class="jsdoc-syntax">,
310                   </span><span class="jsdoc-var">param</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-string">'' </span><span class="jsdoc-syntax">&amp;&amp; </span><span class="jsdoc-var">Number</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.controlWordParam</span><span class="jsdoc-syntax">),
311                   </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
312                   </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
313                   </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
314             </span><span class="jsdoc-syntax">});
315         }
316         </span><span class="jsdoc-var">this.controlWord </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
317         </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
318     },
319     </span><span class="jsdoc-var">emitStartGroup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
320     {
321         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
322         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
323             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'groupstart'</span><span class="jsdoc-syntax">,
324             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
325             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
326             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
327         </span><span class="jsdoc-syntax">});
328     },
329     </span><span class="jsdoc-var">emitEndGroup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
330     {
331         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
332         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
333             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'groupend'</span><span class="jsdoc-syntax">,
334             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
335             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
336             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
337         </span><span class="jsdoc-syntax">});
338     },
339     </span><span class="jsdoc-var">emitIgnorable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
340     {
341         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
342         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
343             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'ignorable'</span><span class="jsdoc-syntax">,
344             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
345             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
346             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
347         </span><span class="jsdoc-syntax">});
348     },
349     </span><span class="jsdoc-var">emitHexChar </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
350     {
351         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
352         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
353             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'hexchar'</span><span class="jsdoc-syntax">,
354             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.hexChar</span><span class="jsdoc-syntax">,
355             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
356             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
357             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
358         </span><span class="jsdoc-syntax">});
359         </span><span class="jsdoc-var">this.hexChar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''
360     </span><span class="jsdoc-syntax">},
361     </span><span class="jsdoc-var">emitError </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">message</span><span class="jsdoc-syntax">)
362     {
363       </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
364       </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
365             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'error'</span><span class="jsdoc-syntax">,
366             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">message</span><span class="jsdoc-syntax">,
367             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
368             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col</span><span class="jsdoc-syntax">,
369             </span><span class="jsdoc-var">char</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos </span><span class="jsdoc-comment">//,
370             //stack: new Error().stack
371         </span><span class="jsdoc-syntax">});
372     },
373     </span><span class="jsdoc-var">emitEndParagraph </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
374         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
375         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
376             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'endparagraph'</span><span class="jsdoc-syntax">,
377             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
378             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
379             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
380         </span><span class="jsdoc-syntax">});
381     }
382
383 } ;</span></code></body></html>