26d7659d38878ae785579db1085f9ac7284b32f3
[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-keyword">return</span><span class="jsdoc-syntax">;  </span><span class="jsdoc-comment">// we really don't care about stray text...
150         </span><span class="jsdoc-syntax">}
151         </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">));
152     },
153     </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">)
154     {
155         </span><span class="jsdoc-var">this.flushHexStore</span><span class="jsdoc-syntax">();
156         </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">this.group.type</span><span class="jsdoc-syntax">) {
157             </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">;
158             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
159         }
160         </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">));
161         </span><span class="jsdoc-comment">// we actually don't care about ctrl words...
162         </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">;
163         </span><span class="jsdoc-comment">/*
164         var method = 'ctrl$' + cmd.value.replace(/-(.)/g, (_, char) =&gt; char.toUpperCase())
165         if (this[method]) {
166             this[method](cmd.param)
167         } else {
168             if (!this.group.get('ignorable')) process.emit('debug', method, cmd.param)
169         }
170         */
171     </span><span class="jsdoc-syntax">},
172     </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">) {
173         </span><span class="jsdoc-var">this.hexStore.push</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">cmd</span><span class="jsdoc-syntax">);
174     },
175     </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">) {
176         </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">);
177     },
178
179     </span><span class="jsdoc-comment">/*
180       _flush (done) {
181         if (this.text !== '\u0000') this.emitText()
182         done()
183       }
184       */
185
186
187     </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">)
188     {
189         </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">) {
190             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseEscapes</span><span class="jsdoc-syntax">;
191         } </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">) {
192             </span><span class="jsdoc-var">this.emitStartGroup</span><span class="jsdoc-syntax">();
193         } </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">) {
194             </span><span class="jsdoc-var">this.emitEndGroup</span><span class="jsdoc-syntax">();
195         } </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">) {
196             </span><span class="jsdoc-comment">// cr/lf are noise chars
197         </span><span class="jsdoc-syntax">} </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
198             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
199         }
200     },
201
202     </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">)
203     {
204         </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">) {
205             </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
206             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
207         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
208             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlSymbol</span><span class="jsdoc-syntax">;
209             </span><span class="jsdoc-var">this.parseControlSymbol</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
210         }
211     },
212     </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">)
213     {
214         </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">) {
215             </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
216             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText
217         </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">) {
218              </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
219         </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">) {
220             </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
221         </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">) {
222             </span><span class="jsdoc-var">this.emitIgnorable</span><span class="jsdoc-syntax">();
223             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
224         } </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">) {
225             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseHexChar</span><span class="jsdoc-syntax">;
226         } </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
227             </span><span class="jsdoc-var">this.emitFormula</span><span class="jsdoc-syntax">();
228             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
229         } </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
230             </span><span class="jsdoc-var">this.emitIndexSubEntry</span><span class="jsdoc-syntax">();
231             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
232         } </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">) {
233             </span><span class="jsdoc-var">this.emitEndParagraph</span><span class="jsdoc-syntax">();
234             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
235         } </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">) {
236             </span><span class="jsdoc-var">this.emitEndParagraph</span><span class="jsdoc-syntax">();
237             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
238         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
239             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlWord</span><span class="jsdoc-syntax">;
240             </span><span class="jsdoc-var">this.parseControlWord</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
241         }
242     },
243     </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">)
244     {
245         </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">)) {
246             </span><span class="jsdoc-var">this.hexChar </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
247             </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) {
248               </span><span class="jsdoc-var">this.emitHexChar</span><span class="jsdoc-syntax">();
249               </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
250             }
251             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
252         }
253         </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">);
254         </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
255
256     },
257     </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">)
258     {
259         </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">) {
260             </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
261             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
262         } </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">)) {
263             </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseControlWordParam</span><span class="jsdoc-syntax">;
264             </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
265         } </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">)) {
266           </span><span class="jsdoc-var">this.controlWord </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
267         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
268           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
269           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
270           </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
271         }
272     },
273     </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">) {
274         </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">)) {
275           </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">+= </span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">;
276         } </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">) {
277           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
278           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
279         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
280           </span><span class="jsdoc-var">this.emitControlWord</span><span class="jsdoc-syntax">();
281           </span><span class="jsdoc-var">this.parserState </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">;
282           </span><span class="jsdoc-var">this.parseText</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">c</span><span class="jsdoc-syntax">);
283         }
284     },
285
286
287
288
289     </span><span class="jsdoc-var">emitText </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
290         </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">) {
291             </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
292         }
293         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
294             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'text'</span><span class="jsdoc-syntax">,
295             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.text</span><span class="jsdoc-syntax">,
296             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
297             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
298             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
299         </span><span class="jsdoc-syntax">});
300         </span><span class="jsdoc-var">this.text </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''
301     </span><span class="jsdoc-syntax">},
302     </span><span class="jsdoc-var">emitControlWord </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
303     {
304         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
305         </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">) {
306             </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">);
307         } </span><span class="jsdoc-keyword">else </span><span class="jsdoc-syntax">{
308             </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
309                   </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'controlword'</span><span class="jsdoc-syntax">,
310                   </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.controlWord</span><span class="jsdoc-syntax">,
311                   </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">),
312                   </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
313                   </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
314                   </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
315             </span><span class="jsdoc-syntax">});
316         }
317         </span><span class="jsdoc-var">this.controlWord </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
318         </span><span class="jsdoc-var">this.controlWordParam </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''</span><span class="jsdoc-syntax">;
319     },
320     </span><span class="jsdoc-var">emitStartGroup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
321     {
322         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
323         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
324             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'groupstart'</span><span class="jsdoc-syntax">,
325             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
326             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
327             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
328         </span><span class="jsdoc-syntax">});
329     },
330     </span><span class="jsdoc-var">emitEndGroup </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
331     {
332         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
333         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
334             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'groupend'</span><span class="jsdoc-syntax">,
335             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
336             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
337             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
338         </span><span class="jsdoc-syntax">});
339     },
340     </span><span class="jsdoc-var">emitIgnorable </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
341     {
342         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
343         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
344             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'ignorable'</span><span class="jsdoc-syntax">,
345             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
346             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
347             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
348         </span><span class="jsdoc-syntax">});
349     },
350     </span><span class="jsdoc-var">emitHexChar </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">()
351     {
352         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
353         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
354             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'hexchar'</span><span class="jsdoc-syntax">,
355             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.hexChar</span><span class="jsdoc-syntax">,
356             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
357             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
358             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
359         </span><span class="jsdoc-syntax">});
360         </span><span class="jsdoc-var">this.hexChar </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">''
361     </span><span class="jsdoc-syntax">},
362     </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">)
363     {
364       </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
365       </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
366             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'error'</span><span class="jsdoc-syntax">,
367             </span><span class="jsdoc-var">value</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">message</span><span class="jsdoc-syntax">,
368             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
369             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col</span><span class="jsdoc-syntax">,
370             </span><span class="jsdoc-var">char</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos </span><span class="jsdoc-comment">//,
371             //stack: new Error().stack
372         </span><span class="jsdoc-syntax">});
373     },
374     </span><span class="jsdoc-var">emitEndParagraph </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function </span><span class="jsdoc-syntax">() {
375         </span><span class="jsdoc-var">this.emitText</span><span class="jsdoc-syntax">();
376         </span><span class="jsdoc-var">this.push</span><span class="jsdoc-syntax">({
377             </span><span class="jsdoc-var">type</span><span class="jsdoc-syntax">: </span><span class="jsdoc-string">'endparagraph'</span><span class="jsdoc-syntax">,
378             </span><span class="jsdoc-var">pos</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.cpos</span><span class="jsdoc-syntax">,
379             </span><span class="jsdoc-var">row</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.row</span><span class="jsdoc-syntax">,
380             </span><span class="jsdoc-var">col</span><span class="jsdoc-syntax">: </span><span class="jsdoc-var">this.col
381         </span><span class="jsdoc-syntax">});
382     }
383
384 } ;</span></code></body></html>