(TARGET_JVM) set the correct defaults for NaN and Infinity
[mono.git] / mcs / class / System.XML / Mono.Xml.Xsl / ChangeLog
1 2005-12-13  Andrew Skiba  <andrews@mainsoft.com>
2
3         * XslDecimalFormat.jvm.cs: set correct defaults for NaN and Infinity
4
5 2005-11-30  Atsushi Enomoto  <atsushi@ximian.com>
6
7         * ScriptCompilerInfo.cs : (VBCompilerInfo) There was a space between
8           '#' and 'ExternalResource'. bug #75789 should be fixed.
9
10 2005-11-23  Vladimir Krasnov  <vladimirk@mainsoft.com>
11
12         * XslKey.cs: fixed KeyIndexTable.Evaluate method, changed
13         XPathNavigator given to GetNodesByValue()
14
15 2005-11-17  Atsushi Enomoto  <atsushi@ximian.com>
16
17         * XslCompiledContext.cs : since XsltContextInfo is struct, having
18           an array of this type and setting fields of each struct didn't
19           make sense. It thus blocked expected PreserveWhitespace behavior.
20
21 2005-10-24  Atsushi Enomoto  <atsushi@ximian.com>
22
23         * Compiler.cs : (FromString(s, hashtable)) pull default namespace
24           from the table for LRE (don't consider it as ""; spec. 7.1.2)
25           Fixed bug #76530.
26
27 2005-09-16  Atsushi Enomoto  <atsushi@ximian.com>
28
29         * ScriptCompilerInfo.cs : Compile correct replacement result.
30           Fixed bug #76116.
31
32 2005-09-10  Atsushi Enomoto  <atsushi@ximian.com>
33
34         * Compiler.cs : (Compile) check children only when it is the document
35           element. Fixed bug #76046.
36
37 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
38
39         * ScriptCompilerInfo.cs : It should not be "#line" when the source is
40           not C#. It should fix bug #75789.
41
42 2005-08-05  Atsushi Enomoto  <atsushi@ximian.com>
43
44         * XslKey.cs : Fixed match pattern in xsl:key to check attribute nodes.
45           To minimize attribute iteration, use Pattern.EvaluatedNodeType.
46           Fixed bug #75709.
47
48 2005-07-29  Atsushi Enomoto  <atsushi@ximian.com>
49
50         * XslFunctions.cs : XslTransform recovers from errors on document
51           resolution. Fixed bug #75663.
52
53 2005-06-06  Atsushi Enomoto  <atsushi@ximian.com>
54
55         * HtmlEmitter.cs : Boolean attribute values should be omitted, but
56           only for related elements.
57
58 2005-05-07  Atsushi Enomoto  <atsushi@ximian.com>
59
60         * MSXslScriptManager.cs : it should ignore compiler warnings. This
61           fixes bug #74859.
62
63 2005-04-07  Andrew Skiba  <andrews@mainsoft.com>
64
65         * XslDecimalFormat.jvm.cs : added
66  
67 2005-03-31  Atsushi Enomoto  <atsushi@ximian.com>
68
69         * MSXslScriptManager.cs : added TARGET_JVM switch (that does not
70           support CodeDom). Use Guid.ToString("N").
71
72 2005-03-31  Atsushi Enomoto  <atsushi@ximian.com>
73
74         * Compiler.cs : removed extraneous using_directive.
75
76 2005-03-25  Atsushi Enomoto  <atsushi@ximian.com>
77
78         * XslKey.cs : the iterator does not require sorting (already sorted).
79           Removed unused code.
80
81 2005-03-23  Atsushi Enomoto  <atsushi@ximian.com>
82
83         * XslStylesheet.cs :
84           Variables are stored per stylesheet and added to compiler after
85           all of the contents are processed (handle import precedence).
86           Imports are now processed in prior to other contents (incorrect
87           imports are now rejected). After imports, process includes to 
88           process nested imports. In-process included stylesheets are 
89           temporarily stored in including stylesheet.
90           Handle keys like variables are handled.
91           Added Compile() that is splitted from .ctor().
92         * Compiler.cs :
93           Store keys in compiler and compiled stylesheet.
94           Duplicate variables in imports are now overriden as expected.
95         * XsltCompiledContext.cs : use CompiledStylesheet.ResolveKey().
96
97 2005-03-22  Atsushi Enomoto  <atsushi@ximian.com>
98
99         * XslTransformProcessor.cs : now it looks safe to remove SetContext()
100           from each EvaluateXXX() methods.
101         * MsxslScriptManager.cs : not to leave reference to stylesheet
102           navigator, pass current node to Compile().
103         * XslCompiledContext.cs : Added GetNavCache() that returns reusable
104           navigator cache for each pattern, to avoid Clone() and not to leave
105           reference to already-done instance navigator.
106
107 2005-03-22  Atsushi Enomoto  <atsushi@ximian.com>
108
109         * Compiler.cs : Now it holds XPath parser and XSLT pattern parser.
110         * XslKey.cs : Use XSLT pattern parser for match.
111           UsePattern is now "Use" (it is not a pattern). 
112           Reimplemented Evaluate() to make full use of index table.
113           Added Matches() to handle shorter match evaluation. For const value
114           for key (e.g. key patterns), it could avoid Evaluate().
115         * XsltCompiledContext.cs : Added MatchesKey() that just delegates to
116           new KeyIndexTable.Matches().
117         * XslFunctions.cs : Added PatternMatches() that just delegates to new
118           XsltCompiledContext.MatchesKey().
119
120 2005-03-22  Atsushi Enomoto  <atsushi@ximian.com>
121
122         * GenericOutputter.cs : commented out warned fields.
123
124 2005-03-15  Atsushi Enomoto  <atsushi@ximian.com>
125
126         * XslKey.cs : removed last ListIterator.ctor() argument.
127           Reverted the last commit that changed internal key index change 
128           from ArrayList to Hashtable. Avoid clone in CollectIndex().
129           Sort results in Evaluate() before passing list to ListIterator.
130         * XslFunctions.cs : removed last ListIterator.ctor() argument.
131
132 2005-03-14  Atsushi Enomoto  <atsushi@ximian.com>
133
134         * XslKey.cs,
135           XsltCompiledContext.cs,
136           XslFunctions.cs,
137           XslTransformProcessor.cs : Now dynamic context key index table is 
138           separate from XslKey static context. Added KeyIndexTable class and
139           store it into XsltCompiledContext with hash name-table mapping.
140           Cache map from statically-named key to index table.
141           Use Hashtable for internal key cache instead of ArrayList.
142
143 2005-03-14  Atsushi Enomoto  <atsushi@ximian.com>
144
145         * XslKey.cs : fixed node iteration on collecting key indices which
146           could have resulted in an infinite loop.
147
148 2005-03-14  Atsushi Enomoto  <atsushi@ximian.com>
149
150         * XslDecimalFormat.cs : in some cases it does not throw format
151           exception.
152
153 2005-03-11  Atsushi Enomoto  <atsushi@ximian.com>
154
155         * XsltCompiledContext.cs,
156           XslStylesheet.cs : Fixed significant performance loss on whitespace
157           handling.
158
159 2005-03-11  Atsushi Enomoto  <atsushi@ximian.com>
160
161         * XslKey.cs : removed unused NeedAbsoluteMatching.
162         * XslFunctions.cs : Added Peer (for peer & subtree optimization).
163           Added some missing ToString() overrides.
164
165 2005-03-09  Atsushi Enomoto  <atsushi@ximian.com>
166
167         * XslStylesheet.cs, XslCompiledContext.cs : Fixed PreserveWhitespace()
168           to work fine with xsl:*-space attributes as expected.
169         * XslTransformProcessor.cs : PreserveWhitespace() in this file is 
170           actually nothing. It should not use XsltContext.PreserveWhitespace()
171           because this method is used to control output, while the referenced
172           method is used to control source document.
173
174 2005-03-09  Atsushi Enomoto  <atsushi@ximian.com>
175
176         * XslTemplate.cs : First non-element content were incorrectly ignored.
177
178 2005-03-09  Atsushi Enomoto  <atsushi@ximian.com>
179
180         * XslFunctions.cs, Compiler.cs : Eliminated XPathNavigatorNsm class
181           to reduce references to stylesheet XPathNavigator. To accomplish it,
182           IStaticXsltContext does not declare GetNsm() anymore. All xslt
183           function types now directly hold IStaticXsltContext.
184         * XslStylesheet.cs : removed "Compiler c" field.
185           Removed unused properties.
186
187 2005-03-08  Atsushi Enomoto  <atsushi@ximian.com>
188
189         * GenericOutputter.cs : When WriteStartElement() requires to add
190           new namespace declaration, _currentNamespaceDecls needs to be set.
191
192 2005-03-08  Atsushi Enomoto  <atsushi@ximian.com>
193
194         * GenericOutputter.cs : for duplicate attribute in an element, no need
195           to keep previous prefix.
196
197 2005-03-08  Atsushi Enomoto  <atsushi@ximian.com>
198
199         * GenericOutputter.cs : Prefix "xml" is only allowed to the fixed XML
200           namespace. Rewrite prefix only when there is non-empty namespace.
201
202 2005-03-07  Atsushi Enomoto  <atsushi@ximian.com>
203
204         * XslStylesheet.cs : Now namespace aliases are collected in prior to
205           all other toplevel elements. Removed unused code.
206
207 2005-03-07  Atsushi Enomoto  <atsushi@ximian.com>
208
209         * GenericOutputter.cs : compute attribute prefix only when actual
210           emission. Fixed some cases that namespace output was missing.
211
212 2005-03-07  Atsushi Enomoto  <atsushi@ximian.com>
213
214         * GenericOutputter.cs : no need to use two collections to store
215           pending attributes. Just use ordered ListDictionary.
216           newNamespace.Add(int) causes extraneous boxing.
217
218 2005-03-07  Atsushi Enomoto  <atsushi@ximian.com>
219
220         * XslTransformProcessor.cs : renamed TryElementNamespacesOutput() to
221           OutputLiteralNamespaceUriNodes() so that everyone can understand
222           what it means and when it should be invoked.
223
224 2005-03-04  Atsushi Enomoto  <atsushi@ximian.com>
225
226         * Compiler.cs : added another CompileTemplateContent() which is
227           requred in xsl:for-each. Commented out unused method.
228
229 2005-03-03  Atsushi Enomoto  <atsushi@ximian.com>
230
231         * XslStylesheet.cs, XslTransformProcessor.cs : exclude-element-prefix
232           in stylesheet should be considered in TryElementNamespacesOutput().
233           ParseQNameListAttribute() is not properly working for filling
234           namespaces.
235
236 2005-03-02  Atsushi Enomoto  <atsushi@ximian.com>
237
238         * XslStylesheet.cs : included stylesheet could be literal result 
239           element as stylesheet (see the spec 2.6.1).
240
241 2005-03-02  Atsushi Enomoto  <atsushi@ximian.com>
242
243         * GenericOutputter.cs : On WriteStartElement(), prefix should be an
244           empty string when nsURI is empty.
245         * HtmlEmitter.cs : non-HTML elements in default namespace are treated
246           unlike xml but like span, as written in the spec 16.2.
247
248 2005-03-02  Atsushi Enomoto  <atsushi@ximian.com>
249
250         * XslCompiledContext.cs, XslTransformProcessor.cs :
251           According to errata E25, those namespaces 1) that has the same
252           name as current element's prefix, or an empty name when current
253           element's namespace URI is empty, are not written to output.
254           So added current element information to XPathContext and added
255           prefix parameter to PushElementState(), added xsl:copy check to
256           TryElementNamespacesOutput().
257           http://www.w3.org/1999/11/REC-xslt-19991116-errata/
258
259 2005-02-26  Atsushi Enomoto <atsushi@ximian.com>
260
261         * XslFunctions.cs : unparsed-entity-uri() should return SYSTEM ID
262           instead of BaseURI.
263
264 2005-02-25  Atsushi Enomoto <atsushi@ximian.com>
265
266         * XslTemplate.cs : According to the spec 5.7, it is an error for 
267           xsl:template to have 'mode' without 'match'.
268
269 2005-02-24  Atsushi Enomoto <atsushi@ximian.com>
270
271         * Compiler.cs : added ns lookup with nsDecls Hashtable.
272
273 2005-02-24  Atsushi Enomoto <atsushi@ximian.com>
274
275         * XslStylesheet.cs : It should consider "#default" in namespace-alias.
276
277 2005-02-23  Atsushi Enomoto <atsushi@ximian.com>
278
279         * GenericOutputter.cs : It should not attempt to write prefix "xml" and
280           namespace "http://www.w3.org/XML/1998/namespace".
281
282 2005-02-21  Atsushi Enomoto <atsushi@ximian.com>
283
284         * XmlWriterEmitter.cs : PI nodes are normalized as to not contain "?>".
285         * HtmlEmitter.cs : CDATA nodes are written just as text.
286         * GenericOutputter.cs : custom format are treated just as XML output.
287
288 2005-02-17  Atsushi Enomoto <atsushi@ximian.com>
289
290         * Outputter.cs,
291           TextOutputter.cs,
292           GenericOutputter.cs : removed WriteStartDocument(), WriteEndDocument()
293           and WriteState. Writing XML declaration is done inside
294           DetermineOutputMethod().
295
296 2005-02-17  Atsushi Enomoto <atsushi@ximian.com>
297
298         * Compiler.cs : reverted previous fix, since it should be done
299           in XslTransformProcessor with root stylesheet.
300         * XslTransformProcessor.cs : In TryElementNamespacesOutput(),
301           don't output alias namespaces. And now consider null exclusions.
302
303 2005-02-17  Atsushi Enomoto <atsushi@ximian.com>
304
305         * Compiler.cs : don't return alias namespaces in GetNamespacesToCopy().
306
307 2005-02-16  Atsushi Enomoto <atsushi@ximian.com>
308
309         * Compiler.cs : GetNamespacesToCopy() should also find for non-local
310           namespace nodes. Patch by Andrew Skiba with some fixes.
311         * XslTransformProcessor.cs : Patch by Andrew Skiba.
312           TryStylesheetNamespaceOutput() is now TryElementNamespacesOutput()
313           as to handle all namespace nodes to copy in stylesheet nodes.
314           Global parameterss are evaluated before global variables. 
315         * XmlOutputter.cs : removed unused code.
316
317         Pending items:
318
319         * Actually variables and params should check reference recursion.
320             This patch incompletely fixes the problem.
321         * Those operations that considers excluded-result-prefixes must
322           also check those attributes of its ancestors.
323
324 2005-02-10  Atsushi Enomoto <atsushi@ximian.com>
325
326         * XmlWriterEmitter.cs : String.Replace() was insufficient for
327           sequential candidates for replacement. Patch by Andrew Skiba.
328
329 2005-02-10  Atsushi Enomoto <atsushi@ximian.com>
330
331         * GenericOutputter.cs : don't output extraneous xml declaration.
332           fix by Andrew Skiba.
333
334 2005-02-09  Atsushi Enomoto <atsushi@ximian.com>
335
336         * XslStylesheet.cs : MS implementation had chosen to recover from 
337           the error, in the way specified in the spec 7.7.1. Patch by Andrew
338           Skiba.
339
340 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
341
342         * XslTemplate.cs : if input is literal result element, it could result
343           in ArgumentException. Patch by Andrew Skiba.
344
345 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
346
347         * XslFunctions.cs : Fixed unparsed-entity-uri() that might result in
348           NullReferenceException. Patch by Andrew Skiba.
349
350 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
351
352         * XslOutput.cs : MS.NET recovers from unknown encoding according to
353           XSLT spec 16.1. Patch by Andrew Skiba.
354
355 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
356
357         * HtmlEmitter.cs : patch by Andrew Skiba.
358           Remove extra element prefix output. simplify attribute prefix output.
359           Attribute output might have resulted in invalid element stack peek.
360           Output specified media type if any.
361
362 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
363
364         * Compiler.cs : Patch by Andrew Skiba.
365           wrap internal exception with XsltCompileException.
366           Raise an error for not-found document URI.
367           QName might contain sequential whitespaces and thus could be empty.
368
369 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
370
371         * XslAttributeSet.cs : just ignore other kind of nodes than element
372           in its content. Fix by Andrew Skiba.
373
374 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
375
376         * XslOutput.cs : for html and text output mode, just set internal
377           omitXmlDeclaration status true. Patch by Andrew Skiba.
378
379 2005-02-08  Atsushi Enomoto <atsushi@ximian.com>
380
381         * XslFunctions.cs : fixed line ending mixture.
382
383 2005-02-03  Atsushi Enomoto <atsushi@ximian.com>
384
385         * ScriptCompilerInfo.cs : XsltCompileException->XsltException, just
386           to make test pass.
387
388 2004-12-22  Atsushi Enomoto <atsushi@ximian.com>
389
390         * XslFunction.cs,
391           Compiler.cs : XmlResolver.ResolveUri() may return null.
392
393 2004-12-01  Atsushi Enomoto  <atsushi@ximian.com>
394
395         * Compiler.cs : XPathNavigatorNsm needed more love. Clone() does not
396           make sense here.
397
398 2004-12-01  Atsushi Enomoto  <atsushi@ximian.com>
399
400         * Compiler.cs : don't create XPathNavigatorNsm for every GetNsm() call.
401
402 2004-11-26  Atsushi Enomoto  <atsushi@ximian.com>
403
404         * XslKey.cs, XslStylesheet.cs, MSXslScriptManager.cs :
405           warning elimination.
406
407 2004-11-24  Atsushi Enomoto  <atsushi@ximian.com>
408
409         * XslStylesheet.cs : removed unused fields.
410         * XslOutput.cs : removed members for XSLT 2.0 (won't be implemented in
411           this class).
412
413 2004-11-08  Atsushi Enomoto  <atsushi@ximian.com>
414
415         * Compiler.cs, XslTransformProcessor.cs :
416           when creating XmlTextReader, reuse XmlNameTable.
417
418 2004-11-05  Atsushi Enomoto  <atsushi@ximian.com>
419
420         * Compiler.cs : Changes that reflects CompiledExpression changes.
421
422 2004-10-04  Atsushi Enomoto  <atsushi@ximian.com>
423
424         * HtmlEmitter.cs : TH tag is not regarded as HTML tag.
425           This fixes bug #67390.
426
427 Thu Sep 9 07:09:11 PDT 2004 Paolo Molaro <lupus@ximian.com>
428
429         * ScriptCompilerInfo.cs: avoid using a .cctor and fix precomp.
430
431 2004-06-18  Atsushi Enomoto  <atsushi@ximian.com>
432
433         * Debug.cs, HtmlEmitter.cs, MSXslScriptManager.cs,
434           ScriptCompilerInfo.cs, XslFunctions.cs, XslTemplate.cs
435           : Globalization. Removed unused code.
436
437 2004-06-14  Atsushi Enomoto  <atsushi@ximian.com>
438
439         * XslKey.cs : Key-value search in absolute path search was 
440           insufficient.
441
442 2004-06-14  Atsushi Enomoto  <atsushi@ximian.com>
443
444         * HtmlEmitter.cs : Correct URL escape implementation.
445
446 2004-06-06  Atsushi Enomoto  <atsushi@ximian.com>
447
448         * XslTransformProcessor.cs : On document() function, close the 
449           XmlTextReader opened from uri string.
450
451 2004-06-03  Atsushi Enomoto  <atsushi@ximian.com>
452
453         * Compiler.cs,
454           GenericOutputter.cs : XmlNamespaceManager.LookupPrefix() allows only
455           atomized names. Fixed XPathNavigatorNsm.LookupNamespace() that 
456           should override another overload.
457
458 2004-05-25  Lluis Sanchez Gual  <lluis@ximian.com>
459
460         * ScriptCompilerInfo.cs: the name used to load the Microsoft.JScript
461           assembly should not include the .dll extension.
462
463 2004-05-20  Atsushi Enomoto  <atsushi@ximian.com>
464
465         * Compiler.cs :
466           - CompilePattern() now throws XsltCompileException for invalid
467             pattern, and add error location support.
468           - In Compiler.TryGetFunction(), compare namespace URI, not prefix.
469             Now it returns MSXslNodeSet instance (for msxsl:node-set).
470         * Debug.cs : don't throw System.Exception.
471         * XslFunctions.cs : Added MSXslNodeSet class.
472         * XslTemplate.cs : reflected CompilePattern() change.
473         * XslTransformProcessor.cs : don't throw System.Exception.
474         * XsltCompiledContext.cs : don't throw System.Exception.
475
476 2004-05-12  Atsushi Enomoto  <atsushi@ximian.com>
477
478         * XmlOutputter.cs,
479           XslOutput.cs,
480           XslStylesheet.cs : made classes/enums internal.
481
482 2004-04-24  Atsushi Enomoto  <atsushi@ximian.com>
483
484         * Attribute.cs, Compiler.cs, Debug.cs, Emitter.cs, 
485           MSXslScriptCompiler.cs, Outputter.cs, XslAttributeSet.cs,
486           XslDecimalFormat.cs, XslKey.cs, XslStylesheet.cs, XslTemplate.cs,
487           XslTransformProcessor.cs : Make extra classes internal.
488
489         * XslKey.cs : It should require sorting.
490         * Debug.cs : Just avoid debug output. Only who want to output should
491           turn it on.
492
493 2004-04-24  Atsushi Enomoto  <atsushi@ximian.com>
494
495         * GenericOutputter.cs : Culture-independency fix. 
496           Replaced StringCollection to ArrayList.
497         * XslOutput.cs : Culture-independency fix.
498
499 2004-04-12  Atsushi Enomoto  <atsushi@ximian.com>
500
501         * Compiler.cs : When BaseURI is an empty string, it should not try to
502           create Uri instance. This will fix bug #56832, but not sure.
503         * XslFunctions.cs : for XsltDocument.Resolve(), did the same.
504         * HtmlEmitter.cs : Environment.NewLine was incorrectly used (it 
505           should be the TextReader's NewLine).
506         * MSXslScriptManager.cs : Should raise an error when the prefix which
507           was specified by "implements-prefix" was not found.
508
509 2004-03-27  Atsushi Enomoto  <atsushi@ximian.com>
510
511         * ScriptCompilerInfo.cs : #line directive now holds dummy filename
512           when BaseURI for msxsl:script node is not available. This fixes
513           bug #56070.
514           Don't output line number in the error message, when it is 0.
515
516 2004-03-27  Atsushi Enomoto  <atsushi@ximian.com>
517
518         * Compiler.cs : Supply NameTable to base ctor() of XPathNavigatorNsm.
519
520 2004-03-22 Atsushi Enomoto <atsushi@ximian.com>
521
522         * Compiler.cs, 
523           XslAttributeSet.cs,
524           XslFunctions,
525           XslTransformProcessor.cs :
526           Throw specific types of exceptions instead of Exception.
527         * XslFunctions.cs, XsltCompiledContext.cs :
528           added node argument for XsltExtensionFunction ctor() etc.
529
530 2004-03-22 Atsushi Enomoto <atsushi@ximian.com>
531
532         * ScriptCompilerInfo.cs : Modified compilation processing. Now it uses
533           CodeDom. Compilation error should be caught. This fixes bug #55875.
534
535 2004-03-13 Atsushi Enomoto <atsushi@ximian.com>
536
537         * XslStylesheet.cs : "version" attribute is also required for embedded
538           stylesheet.
539
540 2004-03-13 Atsushi Enomoto <atsushi@ximian.com>
541
542         * Compiler.cs,
543           XslStylesheet.cs : Reject xsl element other than stylesheet and
544           transform. Check mandatory version attribute (only for existence).
545
546 2004-03-07 Atsushi Enomoto <atsushi@ximian.com>
547
548         * MSXslScriptManager.cs : if extension namespace was not found in
549           the script, just return null. Patch by Joshua Tauberer.
550
551 2004-03-01 Atsushi Enomoto <atsushi@ximian.com>
552
553         * XslLiteralElement.cs : quick fix for ArgumentNullException which
554           was because of the combination of non-namespaced instances and
555           exclude-result-prefixes.
556
557 2004-02-17 Atsushi Enomoto <atsushi@ximian.com>
558
559         * XsltCompiledContext.cs : Extracted XslFunctions and changed namespace
560           from Mono.Xml.Xsl.Functions to Mono.Xml.Xsl.
561         * XslFunctions.cs : hereby Added.
562         * Compiler.cs : Removed deleted usingdecl.
563
564 2004-02-16 Atsushi Enomoto <atsushi@ximian.com>
565
566         * XslTransformProcessor.cs : Bugfix. Stored keys should be cleared.
567         * XslKey.cs : Added ExprKeyContainer expression type, which is 
568           designed to be matched at any level.
569         * Compiler.cs : support for ExprKeyContainer.
570
571 2004-02-16 Atsushi Enomoto <atsushi@ximian.com>
572
573         * XslKey.cs : Now it collects key and matching nodes at the first
574           evaluation time. After that, we can just get them from the table.
575         * Compiler.cs : Added KeyCompilationMode. It is used to prevent
576           prohibited key() usage in "match" and "use" attributes in xsl:key.
577           Modified accessibility of some classes.
578         * GenericOutputter.cs,
579           HtmlEmitter.cs,
580           TextEmitter.cs,
581           TextOutputter.cs,
582           XmlWriterEmitter.cs : made classes internal.
583         * XslOutput.cs : support line info for exception.
584         * XsltCompiledContext.cs : implemented CompareDocument() - so easily.
585
586 2004-02-13 Atsushi Enomoto <atsushi@ximian.com>
587
588         * XsltCompiledContext.cs : fixed the length of context info array.
589
590 2004-02-10 Atsushi Enomoto <atsushi@ximian.com>
591
592         * XsltCompiledContext.cs :
593           replaced EnumeratorIterator with ListIterator
594
595 2004-02-08 Atsushi Enomoto <atsushi@ximian.com>
596
597         * GenericOutputter.cs,
598           XslAttributeSet.cs,
599           XslStylesheet.cs,
600           XslTemplate.cs : tiny foreach elimination.
601
602 2004-01-16 Atsushi Enomoto <atsushi@ximian.com>
603
604         * XslOutput.cs : Reverted. default encoding should be utf-8.
605
606 2004-01-14  Jackson Harper <jackson@ximian.com>
607
608         * GenericOutputter.cs: Add constructors that do not take an
609         encoding to fix build.
610         
611 2004-01-14 Atsushi Enomoto <atsushi@ximian.com>
612
613         * XmlWriterEmitter.cs : It now uses WriteProcessingInstruction() to
614           write XML declaration. It means that output supports non document
615           entity. This fixes bug #52729.
616         * Emitter.cs, TextEmitter.cs, HtmlEmitter.cs, XmlWriterEmitter.cs :
617           modified WriteStartDocument() signature to receive Encoding.
618         * GenericOutputter.cs : 
619           - Added .ctor() which receives Encoding. (It is used for TextWriter 
620             output to get actual encoding.)
621           - Added .ctor() to take an boolean argument which indicates it is
622             variable content or not. (When variable, it does not call 
623             WriteStartDocument().)
624         * XslKey.cs,
625           XsltCompiledContext.cs : comment out WriteLine().
626         * XslOutput.cs : set default encoding utf-16.
627
628 2004-01-08  Nick Drochak <ndrochak@ieee.org>
629
630         * XsltCompiledContext.cs: Remove unused variable and unreachable code.
631
632 2003-12-26 Atsushi Enomoto <atsushi@ximian.com>
633
634         * XslDecimalFormat.cs : implemented format-number() other than number
635           grouping.
636         * XsltCompiledContext.cs : Modified XsltFormatNumber.Evaluate() to
637           catch ArgumentException which will be thrown by formatting process.
638
639 2003-12-23 Atsushi Enomoto <atsushi@ximian.com>
640
641         * ScriptCompilerInfo.cs : Use "mjs" as JScript compiler.
642
643 2003-12-20 Ben Maurer  <bmaurer@users.sourceforge.net>
644
645         * XsltCompiledContext.cs: Remove workaround now that monodoc
646         is fixed.
647
648 2003-12-20 Atsushi Enomoto <atsushi@ximian.com>
649
650         * XslStylesheet.cs : considering xsl:imports, we can't handle namespace
651           aliases at compilation time, so evaluate at the first run-time.
652
653 2003-12-18 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
654
655         * GenericOutputter.cs : support for runtime-determined output type.
656         * HtmlEmitter.cs : Fixed invalid doctype output.
657           Fixed incorrect double attribute output on non-HTML elements.
658           Improved indentation. Fixed "selected" attribute output.
659           Don't have to convert "'" to "&apos;".
660         * XmlWriterEmitter.cs : Now don't output incorrect doctype.
661           Escapes CDATA section text "]]>" to "...]]]]><![CDATA[>..." .
662         * XslStylesheet.cs, XsltCompiledContext.cs :
663           space resolution consideration for import and wildcard.
664
665 2003-12-18 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
666
667         * Compiler.cs, XslTransformProcessor.cs :
668           Use XmlValidatingReader to support id() for external stylesheets.
669         * XslKey.cs, XsltCompiledContext.cs :
670           to evaluate MatchPattern and UsePattern, SetContext() is required.
671         * XslTemplate.cs : Forgot to commit. Change is below(12/16).
672
673 2003-12-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
674
675         * Emitter.cs, HtmlEmitter.cs, XmlWriterEmitter.cs :
676           Added WriteWhitespace().
677         * GenericOutputter.cs, XslTemplate.cs : Call above.
678         * XslTransformProcessor.cs : Changed NodesetStack to ArrayList since
679           CurrentNode in for-each context have to be pulled at evaluation.
680
681 2003-12-16 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
682
683         * XsltCompiledContext.cs : Temporarily allow incorrectly resolved
684           function for bugzilla #52144. It should be reverted soon.
685
686 2003-12-12 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
687
688         * ScriptCompilerInfo.cs : SecurityManager.ResolvePolicy() was not 
689           implemented yet.
690         * MSMslScriptManager.cs : modified generated assembly class to be unique
691           through running AppDomain.
692         * XsltCompiledContext.cs : XsltExtensionFunction.Invoke() has to cast
693           arguments to actual argument types. Bugzilla #51450 should be fixed.
694
695 2003-12-12 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
696
697         * HtmlEmitter.cs : Fixed incorrect character entity output.
698
699 2003-12-11 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
700
701         * Added ScriptCompilerInfo.cs.
702         * MSXslScriptManager.cs : Fixed *true* author's name.
703           Implemented basic msxsl:script support.
704         * Compiler.cs : Added Evidence member.
705
706 2003-12-07 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
707
708         * Compiler.cs : Check stylesheet recursion. Check decimal-format name.
709         * GenericOutputter.cs, Outputter.cs, TextOutputter.cs :
710           Added WriteWhitespace() to assure not writing whitespaces as cdata.
711         * XslAttributeSet.cs : Error check if attribute-set contains other than
712           xsl:attribute.  Error should be XsltException.
713         * XslDecimalFormat.cs : Complete equality check.  Allow just one
714           character value for some attributes.
715         * XslStylesheet.cs : Made whitespace control setting overridable.
716           Added Version property (for the future compatibility mode).
717           Check unrecongnized top level element.
718         * XslTemplate.cs : Check priority as a number.
719         * XslTransformProcessor.cs : PushCDataState is now PushElementState, 
720           for xsl:preserve-space and xsl:strip-space support.
721         * XsltCompiledContext.cs : Implemented PreserveWhitespace() (far from
722           incomplete), PushScope and Pop
723
724 2003-12-03 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
725
726         * HtmlEmitter.cs : CloseStartElement is needed almost everywhere.
727
728 2003-12-02 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
729
730         * Compiler.cs : In FromListString(), it should use default ns,
731           not unqualified one.
732         * GenericOutputter.cs : CheckState() - attribute's Prefix should take
733           precedence.  Doctype should be written even if SYSTEM id is absent.
734           Fixed possible multiple xmlns output.
735         * HtmlEmitter.cs :
736           - Encoding output using META element.
737           - Doctype name is fixed (html).
738           - Double quotation on PUBLIC and SYSTEM missing.
739           - Fixed incorrect tag name check for IMG.
740           - '>' should not be escaped.
741         * XmlWriterEmitter.cs :
742           Added newline before doctype.  In WriteComment(), "--" and tail
743           '-' are not allowed (it escapes, while XmlWriter simply rejects).
744         * XslTransformProcessor.cs : cdata-section-elements should enclose
745           direct child tests only.   Added PreserveWhitespace() (incomplete).
746         * XsltCompiledContext.cs : Implemented PreserveWhitespace() (incomplete).
747
748 2003-11-28 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
749
750         * IdPattern.cs : This should work against multiple ids.
751
752 2003-11-27 Ben Maurer  <bmaurer@users.sourceforge.net>
753
754         * Compiler.cs
755         * MSXslScriptManager.cs
756         * XslStylesheet.cs
757         * XslTransformProcessor.cs
758         * XsltCompiledContext.cs: Some work on msxsl script.
759
760 2003-11-24 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
761
762         (in general: cdata-section-elements support, correct document() 
763         base uri handling, and so on)
764         * Compiler.cs : Use XmlSpace.Preserve to parse included stylesheet.
765           And move to document element.  Added XslNameUtil.FromListString().
766         * Emitter.cs, HtmlEmitter.cs, TextEmitter.cs XmlWriterEmitter.cs :
767           Added WriteCDataSection().
768         * Outputter.cs, GenericOutputter.cs, TextOutputter.cs :
769           Added InsideCDataSection.
770         * GenericOutputter.cs :
771           In .ctor(), WriteState should be succeeded from output XmlWriter.
772           WriteNamespaceDecl() now drops declaration identical to existing one.
773           Removed obsolete htmlEmulation.
774         * XslOutput.cs : Added CDataSectionElements support.
775         * XslStylesheet.cs : Added BaseUri, StyleDocument and PrefixInEffect().
776         * XslTransformProcessor.cs :
777           Added Output and CurrentOutputUri. TryStylesheetNamespaceOutput()
778           now considers xsl:exclude-element-prefixes on literal element.
779           Added PushCDataState() and PopCDataState().
780         * XsltCompiledContext.cs : When base uri of document() target is empty,
781           then it should use stylesheet's BaseURI, not that of current document.
782
783 2003-11-21 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
784
785         * Compiler.cs : Modified decimal-format comparison code.
786         * Outputter.cs,
787           TextOutputter.cs,
788           GenericOutputter.cs : Added WriteState. Now WriteStartDocument() will
789           be called only when required. 
790         * HtmlEmitter.cs : Improved indentation stuff.
791         * XslDecimalFormat.cs : Added incomplete implementation of 
792           CheckSameAs() and FormatNumber().
793         * XslStylesheet.cs,
794           XslTransformProcessor.cs : Changed XslStylesheet.StylesheetNamespaces
795           from StringDictionary to ArrayList of QName (to keep order).
796
797 2003-11-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
798
799         * XsltCompiledContext.cs : XsltGenerateId.Evaluate() should consider
800           node type (i.e. attribute and namespace). Removed extraneous Clone().
801           Fixed XsltKey.Evaluate() to use MoveToNextAttribute to iterate attrs.
802
803 2003-11-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
804
805         * Compiler.cs : Changed Keys from ArrayList to Hashtable.
806           XslStylesheet.cs : Added Keys support here.
807         * XslTransformProcessor.cs : Should call SetContext() to expressions
808           before evaluating current nodes.
809         * XsltCompiledContext.cs : 1) XsltDocument.GetDocument() should use
810           xsltContext. 2) XsltKey exposes KeyName, Field and NamespaceManager
811           for KeyPattern. It now uses CompiledStyle.FindKeys().
812
813 2003-11-13 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
814
815         * GenericOutputter.cs : Added HTML output support. Closer xmlns handling
816           to Xalan tests and MS.NET implementation (only for test convenience).
817         * XslOutput.cs : Indent holds string rathen than bool. Its default value
818           varies in the context. When method="html", then default is "yes".
819         * XslTransformProcessor.cs : Extension element prefixes should not 
820           be written as stylesheet namespaces.
821         * XsltCompiledContext.cs : Return type of generate-id() is string.
822           Implemented unparsed-entity-uri().
823
824 2003-11-02 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
825
826         * Compiler.cs : More complete attribute set gathering.
827           GetNamespacesToCopy() should only return Local namespaces.
828         * GenericOutputter.cs : Added support for indentation.
829           Added easy hack for html output.
830           More correct Prefix handling (considers already defined ones).
831           Namespace emmission is moved to CheckState().
832         * Emitter.cs, XmlWriterEmitter.cs, GenericOutputter.cs, Outputter.cs :
833           Added WriteFullEndElement(). (i.e. IsEmptyElement support)
834         * GenericOutputter.cs, Outputter.cs :
835           Added CanProcessAttributes property for 
836           use-attribute-sets of xsl:copy.
837         * XslStylesheet.cs : Added support for stylesheet-defined xmlns decls.
838           Added support for exclude-result-prefixes.
839         * XslTransformProcessor.cs : Added support for stylesheet-defined xmlns.
840
841 2003-10-30 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
842
843         * Compiler.cs : It is not important, but attribute order became closer
844           to MS.NET and Xalan (assuming from OASIS tests).
845
846 2003-10-30 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
847
848         * GenericOutputter.cs : Attribute wasn't overwritten its properties
849           because Attribute is struct it was let to another local variable.
850
851 2003-09-28 Ben Maurer  <bmaurer@users.sourceforge.net>
852
853         * GenericOutputter.cs: make html output a warning, because doing
854         xml will be right most of the time.
855
856 2003-09-28 Ben Maurer  <bmaurer@users.sourceforge.net>
857
858         * Debug.cs: comment out {Enter, Exit}Navigator. Haven't had bugs
859         here for a long time and it hurts thread safty and memory
860         allocation.
861
862 2003-09-21 Ben Maurer  <bmaurer@users.sourceforge.net>
863
864         * Compiler.cs: save the parser (will reduce memory allocation when
865         Jackson's jay patch is committed).
866
867 2003-09-20 Ben Maurer  <bmaurer@users.sourceforge.net>
868
869         * Attribute.cs: Change to struct. Remove QName class.
870         * GenericOutputter.cs: use an Attribute [] rather than an
871         ArrayList. Allows us not to allocate Attributes, which is great
872         for speed. Roll our own allocation.
873
874 2003-09-20 Ben Maurer  <bmaurer@users.sourceforge.net>
875
876         * Compiler.cs: add GetNsm to main class as well.
877
878 2003-09-20 Ben Maurer  <bmaurer@users.sourceforge.net>
879
880         * Compiler.cs (ParseAvtAttribute): Get the attribue using our
881         internal version so we get null if the attr doesnt exist.
882
883 2003-09-17 Ben Maurer  <bmaurer@users.sourceforge.net>
884
885         * Compiler.cs (IStaticXsltContext.TryGetVariable): handle the case
886         where curVarScope == null
887
888 2003-09-16 Ben Maurer  <bmaurer@users.sourceforge.net>
889
890         * Compiler.cs: 
891         - Better handling of empty attributes (vs not being specified)
892         - Bug in handling #default
893         
894 2003-09-15 Ben Maurer  <bmaurer@users.sourceforge.net>
895
896         * Compiler.cs: Off by one when parsing localname of QName 
897         * XslAttributeSet.cs: must evaluate used attr sets *BEFORE*
898         children (so that they get overriden)
899
900 2003-09-15 Ben Maurer  <bmaurer@users.sourceforge.net>
901
902         * GenericOutputter.cs: Output attributes in order recieved; not
903         required by spec, but useful for running test cases.
904
905 2003-09-14 Oleg Tkachenko <oleg@tkachenko.com>
906
907         * GenericOutputter.cs - fix bug with outputting state.
908         * Emitter.cs, TextEmitter.cs, XmlWriterEmitter.cs, Outputter.cs, 
909         * TextOutputter.cs - get rid of WriteStartAttribute/WriteEndAttribute.  
910
911 2003-09-13 Ben Maurer  <bmaurer@users.sourceforge.net>
912
913         * Compiler.cs, XslKey.cs, XslTransformProcessor.cs: dont clone
914         exprs on use, pass to nav.
915
916 2003-09-13 Ben Maurer  <bmaurer@users.sourceforge.net>
917
918         * Compiler.cs: pass satic context to Pattern ctor.
919
920 2003-08-30 Oleg Tkachenko <oleg@tkachenko.com>
921
922         * New files: 
923         GenericOutputter.cs - generic Outputter implementation,
924         Attribute.cs - represents outputted attribute,
925         Emitter.cs - abstract output emitter,
926         TextEmitter.cs - text emitter,
927         XmlWriterEmitter.cs - emitter to XmlWriter.
928         * Checking of duplicating attributes is done in GenericOutputter.
929         * Namespace outputting logic is implemented in GenericOutputter.
930         * Outputter.cs: Writing namespace declarations is delegated to 
931         derived classes (GenericOutputter).
932         * XslOutput.cs: standalone flag is now 3-value enum (NONE, YES, NO).                    
933          
934 2003-08-21 Ben Maurer  <bmaurer@users.sourceforge.net>
935
936         * XslTransformProcessor.cs: evaluate variables at beginning
937         when / is current node.
938
939 2003-08-21 Ben Maurer  <bmaurer@users.sourceforge.net>
940
941         * Compiler.cs, XsltCompiledContext.cs, XslTransformProcessorcs:
942         Fix up namespace handeling
943
944 2003-08-20 Ben Maurer  <bmaurer@users.sourceforge.net>
945
946         * Compiler.cs, XslStylesheet.cs, XsltCompiledContext.cs: Stubs for
947         format-number.
948         * XslDecimalFormat.cs: Stub for decimal-format.
949
950 2003-08-20 Ben Maurer  <bmaurer@users.sourceforge.net>
951
952         * TextOutputter.cs: Add option to ignore element content (Oleg).
953
954 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
955
956         * Compiler.cs: Really give null for blank avt's
957
958 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
959
960         * Compiler.cs: Fixed lre/lre04.
961
962 2003-08-19 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
963
964         * Compiler.cs : Fixed XslNameUtil.FromString() so that unprefixed name
965           won't have default namespace. See http://www.w3.org/TR/xslt#qname
966
967 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
968
969         * XslTransformProcessor.cs: add support for resolving documents.
970         * XsltCompiledContext: add support for document () function.
971
972 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
973
974         * Outputter.cs, TextOutputter.cs, XmlOutputter.cs: Implement some
975         of the abstract methods in Outputter, making them call other
976         functions with default values, remove impl's in derived classes.
977
978 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
979
980         * Outputter.cs: s/Close/Done
981         * TextOutputter.cs, XmlOutputter.cs: Flush, don't close the backing.
982         * XslTransformProcessor.cs: Flush output when popping, pop at end.
983
984 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
985
986         * Outputter.cs: Add support for namespaces.
987
988 2003-08-19 Ben Maurer  <bmaurer@users.sourceforge.net>
989
990         * Compiler.cs, XslOutput.cs, XslStylesheet.cs,
991         XslTransformProcessor.cs: move output logic from XslStylesheet to
992         Compiler.
993
994 2003-08-18 Ben Maurer  <bmaurer@users.sourceforge.net>
995
996         * XslOutput.cs: add support for encoding.
997
998 2003-08-18 Ben Maurer  <bmaurer@users.sourceforge.net>
999
1000         * *.cs: Support for xsl:output. (Oleg)
1001
1002 2003-08-17 Ben Maurer  <bmaurer@users.sourceforge.net>
1003
1004         * Compiler.cs: handle extension and excluded namespaces.
1005
1006 2003-08-17 Ben Maurer  <bmaurer@users.sourceforge.net>
1007
1008         * XsltCompiledContext.cs, Compiler.cs: copy the XPathNavigator
1009         from the stylesheet for correct namespace resolution.
1010
1011 2003-08-14 Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
1012
1013         * Compiler.cs : 1) Changed public .ctor() to receive Evidence argument 
1014           introduced in .NET 1.1. 2) XmlResolver object is required for 'res'.
1015
1016 2003-08-07 Ben Maurer  <bmaurer@users.sourceforge.net>
1017
1018         * XslTransformProcessor.cs: Add a table to detect when an object
1019         is busy.
1020         * XslAttributeSet.cs: Use the above table. Dont throw nullref
1021         exception when no use-attribute-sets are specified.
1022
1023 2003-08-04 Ben Maurer  <bmaurer@users.sourceforge.net>
1024
1025         * Compiler.cs: Add support for boolean attributes (yes/no).
1026
1027 2003-08-04 Ben Maurer  <bmaurer@users.sourceforge.net>
1028
1029         * Compiler.cs: Add method LocalNameOf, to get the local name of a
1030         string.
1031         * XslTransformProcessor.cs: Support for setting the XmlResolver.
1032
1033 2003-08-01 Ben Maurer  <bmaurer@users.sourceforge.net>
1034
1035         * Compiler.cs, XslAttributeSet.cs: Handle attribute set merging
1036
1037 2003-08-01 Ben Maurer  <bmaurer@users.sourceforge.net>
1038
1039         * XslTransformProcessor.cs: Add EvaluateNumber method.
1040
1041 2003-07-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1042
1043         * XsltCompiledContext.cs: Implement more functions.
1044
1045 2003-07-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1046
1047         * Compiler.cs: Add support for key, utility function to parse
1048         QName's from the XsltContext. Store keys in the CompiledStyle, not
1049         in the Stylesheet.
1050         * XslKey.cs: Real implementation
1051         * XslStylesheet.cs: Move the keys to CompiledStyle.
1052         * XsltCompiledContext.cs: Implement the key function
1053
1054 2003-07-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1055
1056         * XsltCompiledContext.cs: Hmm, maybe I should actually *enable*
1057         the functions ;-). Also wrote current ().
1058
1059 2003-07-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1060
1061         * XsltCompiledContext.cs: Remove excess conversion stuff. It is
1062         done in XPath. Add stubs for XSLT functions.
1063
1064 2003-07-31 Ben Maurer  <bmaurer@users.sourceforge.net>
1065
1066         * Compiler.cs: To resolve a variable you now need to pass the
1067         processor, so that it can be passed to IsEvaluated. A local will
1068         only be resolved if it has already been evaluated.
1069         * XsltCompiledContext.cs: Pass along the processor.
1070         
1071 2003-07-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1072
1073         * Compiler.cs, XslTemplate.cs, XslTransformProcessor.cs: Store
1074         variable values in the XslTransformProcessor.
1075         * XsltCompiledContext.cs: If the scope is null, don't look there!
1076         * Debug.cs: New method Assert
1077
1078 2003-07-30 Ben Maurer  <bmaurer@users.sourceforge.net>
1079
1080         * Compiler.cs, XsltCompiledContext.cs: Remove verbose messages
1081         * XslTransformProcessor.cs: Use strongtyped evaluation, using new
1082         internal methods in XPathNavigator. Remove verbose debugging messages.
1083
1084 2003-07-29 Ben Maurer  <bmaurer@users.sourceforge.net>
1085
1086         * Initial Checkin
1087