-
Notifications
You must be signed in to change notification settings - Fork 4
/
CHANGES.txt
2209 lines (1379 loc) · 60.1 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
==============
lxml changelog
==============
2.2.9 (...)
==================
Bugs fixed
----------
* Work-around for libxml2 bug that can leave the HTML parser in a
non-functional state after parsing a severly broken document.
2.2.8 (2010-09-02)
==================
Bugs fixed
----------
* Crash in newer libxml2 versions when moving elements between
documents that had attributes on replaced XInclude nodes.
* Import fix for urljoin in Python 3.1+.
2.2.7 (2010-07-24)
==================
Bugs fixed
----------
* Crash in XSLT when generating text-only result documents with a
stylesheet created in a different thread.
2.2.6 (2010-03-02)
==================
Bugs fixed
----------
* Fixed several Python 3 regressions by building with Cython 0.11.3.
2.2.5 (2010-02-28)
==================
Features added
--------------
* Support for running XSLT extension elements on the input root node
(e.g. in a template matching on "/").
Bugs fixed
----------
* Crash in XPath evaluation when reading smart strings from a document
other than the original context document.
* Support recent versions of html5lib by not requiring its
``XHTMLParser`` in ``htmlparser.py`` anymore.
* Manually instantiating the custom element classes in
``lxml.objectify`` could crash.
* Invalid XML text characters were not rejected by the API when they
appeared in unicode strings directly after non-ASCII characters.
* lxml.html.open_http_urllib() did not work in Python 3.
* The functions ``strip_tags()`` and ``strip_elements()`` in
``lxml.etree`` did not remove all occurrences of a tag in all cases.
* Crash in XSLT extension elements when the XSLT context node is not
an element.
2.2.4 (2009-11-11)
==================
Bugs fixed
----------
* Static build of libxml2/libxslt was broken.
2.2.3 (2009-10-30)
==================
Features added
--------------
Bugs fixed
----------
* The ``resolve_entities`` option did not work in the incremental feed
parser.
* Looking up and deleting attributes without a namespace could hit a
namespaced attribute of the same name instead.
* Late errors during calls to ``SubElement()`` (e.g. attribute related
ones) could leave a partially initialised element in the tree.
* Modifying trees that contain parsed entity references could result
in an infinite loop.
* ``ObjectifiedElement.__setattr__`` created an empty-string child
element when the attribute value was rejected as a
non-unicode/non-ascii string
* Syntax errors in ``lxml.cssselect`` could result in misleading error
messages.
* Invalid syntax in CSS expressions could lead to an infinite loop in
the parser of ``lxml.cssselect``.
* CSS special character escapes were not properly handled in
``lxml.cssselect``.
* CSS Unicode escapes were not properly decoded in ``lxml.cssselect``.
* Select options in HTML forms that had no explicit ``value``
attribute were not handled correctly. The HTML standard dictates
that their value is defined by their text content. This is now
supported by lxml.html.
* XPath raised a TypeError when finding CDATA sections. This is now
fully supported.
* Calling ``help(lxml.objectify)`` didn't work at the prompt.
* The ``ElementMaker`` in lxml.objectify no longer defines the default
namespaces when annotation is disabled.
* Feed parser failed to honour the 'recover' option on parse errors.
* Diverting the error logging to Python's logging system was broken.
Other changes
-------------
2.2.2 (2009-06-21)
==================
Features added
--------------
* New helper functions ``strip_attributes()``, ``strip_elements()``,
``strip_tags()`` in lxml.etree to remove attributes/subtrees/tags
from a subtree.
Bugs fixed
----------
* Namespace cleanup on subtree insertions could result in missing
namespace declarations (and potentially crashes) if the element
defining a namespace was deleted and the namespace was not used by
the top element of the inserted subtree but only in deeper subtrees.
* Raising an exception from a parser target callback didn't always
terminate the parser.
* Only {true, false, 1, 0} are accepted as the lexical representation for
BoolElement ({True, False, T, F, t, f} not any more), restoring lxml <= 2.0
behaviour.
Other changes
-------------
2.2.1 (2009-06-02)
==================
Features added
--------------
* Injecting default attributes into a document during XML Schema
validation (also at parse time).
* Pass ``huge_tree`` parser option to disable parser security
restrictions imposed by libxml2 2.7.
Bugs fixed
----------
* The script for statically building libxml2 and libxslt didn't work
in Py3.
* ``XMLSchema()`` also passes invalid schema documents on to libxml2
for parsing (which could lead to a crash before release 2.6.24).
Other changes
-------------
2.2 (2009-03-21)
================
Features added
--------------
* Support for ``standalone`` flag in XML declaration through
``tree.docinfo.standalone`` and by passing ``standalone=True/False``
on serialisation.
Bugs fixed
----------
* Crash when parsing an XML Schema with external imports from a
filename.
2.2beta4 (2009-02-27)
=====================
Features added
--------------
* Support strings and instantiable Element classes as child arguments
to the constructor of custom Element classes.
* GZip compression support for serialisation to files and file-like
objects.
Bugs fixed
----------
* Deep-copying an ElementTree copied neither its sibling PIs and
comments nor its internal/external DTD subsets.
* Soupparser failed on broken attributes without values.
* Crash in XSLT when overwriting an already defined attribute using
``xsl:attribute``.
* Crash bug in exception handling code under Python 3. This was due
to a problem in Cython, not lxml itself.
* ``lxml.html.FormElement._name()`` failed for non top-level forms.
* ``TAG`` special attribute in constructor of custom Element classes
was evaluated incorrectly.
Other changes
-------------
* Official support for Python 3.0.1.
* ``Element.findtext()`` now returns an empty string instead of None
for Elements without text content.
2.2beta3 (2009-02-17)
=====================
Features added
--------------
* ``XSLT.strparam()`` class method to wrap quoted string parameters
that require escaping.
Bugs fixed
----------
* Memory leak in XPath evaluators.
* Crash when parsing indented XML in one thread and merging it with
other documents parsed in another thread.
* Setting the ``base`` attribute in ``lxml.objectify`` from a unicode
string failed.
* Fixes following changes in Python 3.0.1.
* Minor fixes for Python 3.
Other changes
-------------
* The global error log (which is copied into the exception log) is now
local to a thread, which fixes some race conditions.
* More robust error handling on serialisation.
2.2beta2 (2009-01-25)
=====================
Bugs fixed
----------
* Potential memory leak on exception handling. This was due to a
problem in Cython, not lxml itself.
* ``iter_links`` (and related link-rewriting functions) in
``lxml.html`` would interpret CSS like ``url("link")`` incorrectly
(treating the quotation marks as part of the link).
* Failing import on systems that have an ``io`` module.
2.1.5 (2009-01-06)
==================
Bugs fixed
----------
* Potential memory leak on exception handling. This was due to a
problem in Cython, not lxml itself.
* Failing import on systems that have an ``io`` module.
2.2beta1 (2008-12-12)
=====================
Features added
--------------
* Allow ``lxml.html.diff.htmldiff`` to accept Element objects, not
just HTML strings.
Bugs fixed
----------
* Crash when using an XPath evaluator in multiple threads.
* Fixed missing whitespace before ``Link:...`` in ``lxml.html.diff``.
Other changes
-------------
* Export ``lxml.html.parse``.
2.1.4 (2008-12-12)
==================
Bugs fixed
----------
* Crash when using an XPath evaluator in multiple threads.
2.0.11 (2008-12-12)
===================
Bugs fixed
----------
* Crash when using an XPath evaluator in multiple threads.
2.2alpha1 (2008-11-23)
======================
Features added
--------------
* Support for XSLT result tree fragments in XPath/XSLT extension
functions.
* QName objects have new properties ``namespace`` and ``localname``.
* New options for exclusive C14N and C14N without comments.
* Instantiating a custom Element classes creates a new Element.
Bugs fixed
----------
* XSLT didn't inherit the parse options of the input document.
* 0-bytes could slip through the API when used inside of Unicode
strings.
* With ``lxml.html.clean.autolink``, links with balanced parenthesis,
that end in a parenthesis, will be linked in their entirety (typical
with Wikipedia links).
Other changes
-------------
2.1.3 (2008-11-17)
==================
Features added
--------------
Bugs fixed
----------
* Ref-count leaks when lxml enters a try-except statement while an
outside exception lives in sys.exc_*(). This was due to a problem in
Cython, not lxml itself.
* Parser Unicode decoding errors could get swallowed by other
exceptions.
* Name/import errors in some Python modules.
* Internal DTD subsets that did not specify a system or public ID were
not serialised and did not appear in the docinfo property of
ElementTrees.
* Fix a pre-Py3k warning when parsing from a gzip file in Py2.6.
* Test suite fixes for libxml2 2.7.
* Resolver.resolve_string() did not work for non-ASCII byte strings.
* Resolver.resolve_file() was broken.
* Overriding the parser encoding didn't work for many encodings.
Other changes
-------------
2.0.10 (2008-11-17)
===================
Bugs fixed
----------
* Ref-count leaks when lxml enters a try-except statement while an
outside exception lives in sys.exc_*(). This was due to a problem in
Cython, not lxml itself.
2.1.2 (2008-09-05)
==================
Features added
--------------
* lxml.etree now tries to find the absolute path name of files when
parsing from a file-like object. This helps custom resolvers when
resolving relative URLs, as lixbml2 can prepend them with the path
of the source document.
Bugs fixed
----------
* Memory problem when passing documents between threads.
* Target parser did not honour the ``recover`` option and raised an
exception instead of calling ``.close()`` on the target.
Other changes
-------------
2.0.9 (2008-09-05)
==================
Bugs fixed
----------
* Memory problem when passing documents between threads.
* Target parser did not honour the ``recover`` option and raised an
exception instead of calling ``.close()`` on the target.
2.1.1 (2008-07-24)
==================
Features added
--------------
Bugs fixed
----------
* Crash when parsing XSLT stylesheets in a thread and using them in
another.
* Encoding problem when including text with ElementInclude under
Python 3.
Other changes
-------------
2.0.8 (2008-07-24)
==================
Features added
--------------
* ``lxml.html.rewrite_links()`` strips links to work around documents
with whitespace in URL attributes.
Bugs fixed
----------
* Crash when parsing XSLT stylesheets in a thread and using them in
another.
* CSS selector parser dropped remaining expression after a function
with parameters.
Other changes
-------------
2.1 (2008-07-09)
================
Features added
--------------
* Smart strings can be switched off in XPath (``smart_strings``
keyword option).
* ``lxml.html.rewrite_links()`` strips links to work around documents
with whitespace in URL attributes.
Bugs fixed
----------
* Custom resolvers were not used for XMLSchema includes/imports and
XInclude processing.
* CSS selector parser dropped remaining expression after a function
with parameters.
Other changes
-------------
* ``objectify.enableRecursiveStr()`` was removed, use
``objectify.enable_recursive_str()`` instead
* Speed-up when running XSLTs on documents from other threads
2.0.7 (2008-06-20)
==================
Features added
--------------
* Pickling ``ElementTree`` objects in lxml.objectify.
Bugs fixed
----------
* Descending dot-separated classes in CSS selectors were not resolved
correctly.
* ``ElementTree.parse()`` didn't handle target parser result.
* Potential threading problem in XInclude.
* Crash in Element class lookup classes when the __init__() method of
the super class is not called from Python subclasses.
Other changes
-------------
* Non-ASCII characters in attribute values are no longer escaped on
serialisation.
2.1beta3 (2008-06-19)
=====================
Features added
--------------
* Major overhaul of ``tools/xpathgrep.py`` script.
* Pickling ``ElementTree`` objects in lxml.objectify.
* Support for parsing from file-like objects that return unicode
strings.
* New function ``etree.cleanup_namespaces(el)`` that removes unused
namespace declarations from a (sub)tree (experimental).
* XSLT results support the buffer protocol in Python 3.
* Polymorphic functions in ``lxml.html`` that accept either a tree or
a parsable string will return either a UTF-8 encoded byte string, a
unicode string or a tree, based on the type of the input.
Previously, the result was always a byte string or a tree.
* Support for Python 2.6 and 3.0 beta.
* File name handling now uses a heuristic to convert between byte
strings (usually filenames) and unicode strings (usually URLs).
* Parsing from a plain file object frees the GIL under Python 2.x.
* Running ``iterparse()`` on a plain file (or filename) frees the GIL
on reading under Python 2.x.
* Conversion functions ``html_to_xhtml()`` and ``xhtml_to_html()`` in
lxml.html (experimental).
* Most features in lxml.html work for XHTML namespaced tag names
(experimental).
Bugs fixed
----------
* ``ElementTree.parse()`` didn't handle target parser result.
* Crash in Element class lookup classes when the __init__() method of
the super class is not called from Python subclasses.
* A number of problems related to unicode/byte string conversion of
filenames and error messages were fixed.
* Building on MacOS-X now passes the "flat_namespace" option to the C
compiler, which reportedly prevents build quirks and crashes on this
platform.
* Windows build was broken.
* Rare crash when serialising to a file object with certain encodings.
Other changes
-------------
* Non-ASCII characters in attribute values are no longer escaped on
serialisation.
* Passing non-ASCII byte strings or invalid unicode strings as .tag,
namespaces, etc. will result in a ValueError instead of an
AssertionError (just like the tag well-formedness check).
* Up to several times faster attribute access (i.e. tree traversal) in
lxml.objectify.
2.0.6 (2008-05-31)
==================
Features added
--------------
Bugs fixed
----------
* Incorrect evaluation of ``el.find("tag[child]")``.
* Windows build was broken.
* Moving a subtree from a document created in one thread into a
document of another thread could crash when the rest of the source
document is deleted while the subtree is still in use.
* Rare crash when serialising to a file object with certain encodings.
Other changes
-------------
* lxml should now build without problems on MacOS-X.
2.1beta2 (2008-05-02)
=====================
Features added
--------------
* All parse functions in lxml.html take a ``parser`` keyword argument.
* lxml.html has a new parser class ``XHTMLParser`` and a module
attribute ``xhtml_parser`` that provide XML parsers that are
pre-configured for the lxml.html package.
Bugs fixed
----------
* Moving a subtree from a document created in one thread into a
document of another thread could crash when the rest of the source
document is deleted while the subtree is still in use.
* Passing an nsmap when creating an Element will no longer strip
redundantly defined namespace URIs. This prevented the definition
of more than one prefix for a namespace on the same Element.
Other changes
-------------
* If the default namespace is redundantly defined with a prefix on the
same Element, the prefix will now be preferred for subelements and
attributes. This allows users to work around a problem in libxml2
where attributes from the default namespace could serialise without
a prefix even when they appear on an Element with a different
namespace (i.e. they would end up in the wrong namespace).
2.0.5 (2008-05-01)
==================
Features added
--------------
Bugs fixed
----------
* Resolving to a filename in custom resolvers didn't work.
* lxml did not honour libxslt's second error state "STOPPED", which
let some XSLT errors pass silently.
* Memory leak in Schematron with libxml2 >= 2.6.31.
Other changes
-------------
2.1beta1 (2008-04-15)
=====================
Features added
--------------
* Error logging in Schematron (requires libxml2 2.6.32 or later).
* Parser option ``strip_cdata`` for normalising or keeping CDATA
sections. Defaults to ``True`` as before, thus replacing CDATA
sections by their text content.
* ``CDATA()`` factory to wrap string content as CDATA section.
Bugs fixed
----------
* Resolving to a filename in custom resolvers didn't work.
* lxml did not honour libxslt's second error state "STOPPED", which
let some XSLT errors pass silently.
* Memory leak in Schematron with libxml2 >= 2.6.31.
* lxml.etree accepted non well-formed namespace prefix names.
Other changes
-------------
* Major cleanup in internal ``moveNodeToDocument()`` function, which
takes care of namespace cleanup when moving elements between
different namespace contexts.
* New Elements created through the ``makeelement()`` method of an HTML
parser or through lxml.html now end up in a new HTML document
(doctype HTML 4.01 Transitional) instead of a generic XML document.
This mostly impacts the serialisation and the availability of a DTD
context.
2.0.4 (2008-04-13)
==================
Features added
--------------
Bugs fixed
----------
* Hanging thread in conjunction with GTK threading.
* Crash bug in iterparse when moving elements into other documents.
* HTML elements' ``.cssselect()`` method was broken.
* ``ElementTree.find*()`` didn't accept QName objects.
Other changes
-------------
2.1alpha1 (2008-03-27)
======================
Features added
--------------
* New event types 'comment' and 'pi' in ``iterparse()``.
* ``XSLTAccessControl`` instances have a property ``options`` that
returns a dict of access configuration options.
* Constant instances ``DENY_ALL`` and ``DENY_WRITE`` on
``XSLTAccessControl`` class.
* Extension elements for XSLT (experimental!)
* ``Element.base`` property returns the xml:base or HTML base URL of
an Element.
* ``docinfo.URL`` property is writable.
Bugs fixed
----------
* Default encoding for plain text serialisation was different from
that of XML serialisation (UTF-8 instead of ASCII).
Other changes
-------------
* Minor API speed-ups.
* The benchmark suite now uses tail text in the trees, which makes the
absolute numbers incomparable to previous results.
* Generating the HTML documentation now requires Pygments_, which is
used to enable syntax highlighting for the doctest examples.
.. _Pygments: http://pygments.org/
Most long-time deprecated functions and methods were removed:
- ``etree.clearErrorLog()``, use ``etree.clear_error_log()``
- ``etree.useGlobalPythonLog()``, use
``etree.use_global_python_log()``
- ``etree.ElementClassLookup.setFallback()``, use
``etree.ElementClassLookup.set_fallback()``
- ``etree.getDefaultParser()``, use ``etree.get_default_parser()``
- ``etree.setDefaultParser()``, use ``etree.set_default_parser()``
- ``etree.setElementClassLookup()``, use
``etree.set_element_class_lookup()``
Note that ``parser.setElementClassLookup()`` has not been removed
yet, although ``parser.set_element_class_lookup()`` should be used
instead.
- ``xpath_evaluator.registerNamespace()``, use
``xpath_evaluator.register_namespace()``
- ``xpath_evaluator.registerNamespaces()``, use
``xpath_evaluator.register_namespaces()``
- ``objectify.setPytypeAttributeTag``, use
``objectify.set_pytype_attribute_tag``
- ``objectify.setDefaultParser()``, use
``objectify.set_default_parser()``
2.0.3 (2008-03-26)
==================
Features added
--------------
* soupparser.parse() allows passing keyword arguments on to
BeautifulSoup.
* ``fromstring()`` method in ``lxml.html.soupparser``.
Bugs fixed
----------
* ``lxml.html.diff`` didn't treat empty tags properly (e.g.,
``<br>``).
* Handle entity replacements correctly in target parser.
* Crash when using ``iterparse()`` with XML Schema validation.
* The BeautifulSoup parser (soupparser.py) did not replace entities,
which made them turn up in text content.
* Attribute assignment of custom PyTypes in objectify could fail to
correctly serialise the value to a string.
Other changes
-------------
* ``lxml.html.ElementSoup`` was replaced by a new module
``lxml.html.soupparser`` with a more consistent API. The old module
remains for compatibility with ElementTree's own ElementSoup module.
* Setting the XSLT_CONFIG and XML2_CONFIG environment variables at
build time will let setup.py pick up the ``xml2-config`` and
``xslt-config`` scripts from the supplied path name.
* Passing ``--with-xml2-config=/path/to/xml2-config`` to setup.py will
override the ``xml2-config`` script that is used to determine the C
compiler options. The same applies for the ``--with-xslt-config``
option.
2.0.2 (2008-02-22)
==================
Features added
--------------
* Support passing ``base_url`` to file parser functions to override
the filename of the file(-like) object.
Bugs fixed
----------
* The prefix for objectify's pytype namespace was missing from the set
of default prefixes.
* Memory leak in Schematron (fixed only for libxml2 2.6.31+).
* Error type names in RelaxNG were reported incorrectly.
* Slice deletion bug fixed in objectify.
Other changes
-------------
* Enabled doctests for some Python modules (especially ``lxml.html``).
* Add a ``method`` argument to ``lxml.html.tostring()``
(``method="xml"`` for XHTML output).
* Make it clearer that methods like ``lxml.html.fromstring()`` take a
``base_url`` argument.
2.0.1 (2008-02-13)
==================
Features added
--------------
* Child iteration in ``lxml.pyclasslookup``.
* Loads of new docstrings reflect the signature of functions and
methods to make them visible in API docs and ``help()``
Bugs fixed
----------
* The module ``lxml.html.builder`` was duplicated as
``lxml.htmlbuilder``
* Form elements would return None for ``form.fields.keys()`` if there
was an unnamed input field. Now unnamed input fields are completely
ignored.
* Setting an element slice in objectify could insert slice-overlapping
elements at the wrong position.
Other changes
-------------
* The generated API documentation was cleaned up and disburdened from
non-public classes etc.
* The previously public module ``lxml.html.setmixin`` was renamed to
``lxml.html._setmixin`` as it is not an official part of lxml. If
you want to use it, feel free to copy it over to your own source
base.
* Passing ``--with-xslt-config=/path/to/xslt-config`` to setup.py will
override the ``xslt-config`` script that is used to determine the C
compiler options.
2.0 (2008-02-01)
================
Features added
--------------
* Passing the ``unicode`` type as ``encoding`` to ``tostring()`` will
serialise to unicode. The ``tounicode()`` function is now
deprecated.
* ``XMLSchema()`` and ``RelaxNG()`` can parse from StringIO.
* ``makeparser()`` function in ``lxml.objectify`` to create a new
parser with the usual objectify setup.
* Plain ASCII XPath string results are no longer forced into unicode
objects as in 2.0beta1, but are returned as plain strings as before.
* All XPath string results are 'smart' objects that have a
``getparent()`` method to retrieve their parent Element.
* ``with_tail`` option in serialiser functions.
* More accurate exception messages in validator creation.
* Parse-time XML schema validation (``schema`` parser keyword).
* XPath string results of the ``text()`` function and attribute
selection make their Element container accessible through a