Commit graph

50 commits

Author SHA1 Message Date
57b2c6a135
Prepare for merge: Move all minidom-rs files into minidom-rs/
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2019-10-18 14:27:53 +02:00
5aee776f66 Update to edition 2018
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2019-09-13 03:18:07 +02:00
Emmanuel Gil Peyrot
17f902b503 Update to quick-xml 0.16. 2019-09-05 21:31:42 +02:00
Emmanuel Gil Peyrot
a91252c861 Make comments optional.
Add a default "comments" feature to transform comments into errors when
unset.

This is so that XMPP implementations don’t have to care about comments,
as they can’t happen in the stream.
2019-08-22 18:11:22 +02:00
aacfcc58b9
Change unnecessary mut variable to default immutable
Signed-off-by: Maxime “pep” Buquet <pep@bouah.net>
2019-06-12 18:22:51 +02:00
Emmanuel Gil Peyrot
f68826057b Fix clippy lints 2019-02-21 21:06:23 +01:00
lumi
f0dd03d633 Split Node off into its own module: node.rs 2018-12-23 15:59:13 +01:00
lumi
c5c8dee20a Get rid of IntoElements, replace it with Into<Node> and <T: Into<Node> IntoIterator<Item = T>. This is a backwards-incompatible change, but should require minimal changes.
Doing this splits the `append` method in `ElementBuilder` into two methods. `append` now appends exactly one node, while `append_all` appends an iterator of nodes.

Add `remove_child`, which removes the first child that has a specific name and namespace, then returns it if it exists.

Add a lot of convenience methods on `Node`: `as_text_mut`, `as_element_mut`, `into_text`, `into_element`.
2018-12-23 15:42:50 +01:00
lumi
fac64400f1 Put the tests in element.rs into a module block. 2018-05-29 16:22:22 +02:00
lumi
4f588f615d Fix CDATA handling, add relevant test, update CHANGELOG, bump version to 0.9.1. 2018-05-29 15:59:36 +02:00
Matt Bilker
96f223b7e3
bump version to 0.9.0 and upgrade quick-xml to 0.12.1 2018-04-10 21:01:18 -04:00
lumi
8924d2d594 Merge branch 'linkmauve/minidom-rs-failure'
# Conflicts:
#	src/tests.rs
2018-02-18 21:32:51 +01:00
Emmanuel Gil Peyrot
236582b24e update quick_xml and migrate from error-chain to failure 2018-02-18 20:45:09 +01:00
Yue Liu
f456600efd Support comment and write to quick-xml Writer 2018-01-09 23:29:48 -08:00
lumi
d079f0503a make sure that my tests actually work... 2018-01-01 14:34:24 +01:00
lumi
118bbb5462 add the spectest.xml from https://gitlab.com/lumi/minidom-rs/issues/8 2018-01-01 14:28:17 +01:00
lumi
cdb2cb8d86 try not to allocate memory when comparing ending tags with starting tags 2018-01-01 14:01:03 +01:00
lumi
0e76e5211d Merge branch 'compare-with-prefix' into 'master'
Compare with prefix

See merge request lumi/minidom-rs!23
2018-01-01 12:26:19 +00:00
Maxime “pep” Buquet
9959abbb25 Be explicit about quick-xml Events we are handling 2017-12-31 16:31:26 +00:00
Maxime “pep” Buquet
db70487a31 Change prefix fn to return Option<&str> 2017-12-31 15:24:28 +00:00
Maxime “pep” Buquet
9c498044ee element: Add tests for Element::from_reader 2017-12-31 07:19:24 +01:00
Maxime “pep” Buquet
e250e9cf2c Add doctest for prefix fn 2017-12-30 17:26:15 +01:00
Maxime “pep” Buquet
1c3a701d2e element: Fix element name comparison in from_reader
quick-xml's Events seem to always return prefixed names, and the
from_reader function, when comparing name of the pop-ed element, and
received event element, was using the unprefixed name to compare.
2017-12-30 17:26:15 +01:00
Emmanuel Gil Peyrot
df76bc147a fix clippy warnings 2017-11-12 19:58:07 +00:00
lumi
f4debf1bbf Merge branch 'tafia/minidom-rs-quick_xml_optim' 2017-11-08 18:19:05 +01:00
lumi
87a19e5e58 Merge branch 'element_has_ns' into 'master'
add Element::has_ns(&self, NS)

See merge request !16
2017-08-20 15:03:14 +00:00
Emmanuel Gil Peyrot
89ab8d9aca fix a FIXME, break value is now stable 2017-08-19 00:34:44 +01:00
Astro
8af3e50311 add Element::has_ns(&self, NS) 2017-08-19 01:17:45 +02:00
Astro
b141559081 rename namespaces mod to namespace_set 2017-08-13 17:29:38 +02:00
Astro
0148790a01 move NamespaceSet to namespaces mod 2017-08-13 02:35:24 +02:00
Astro
7d2699e08e NamespaceSet::set_parent(): don't require a full Element
by passing just a reference to a NamespaceSet we could reuse this for
xmlns elision in the serialization code.
2017-08-13 02:28:44 +02:00
Astro
98fd71fd3f NamespaceSet: rm unneeded cast 2017-08-13 02:26:45 +02:00
Astro
26f03c27ed optimize Element::write_to_inner() with CoW 2017-08-13 02:24:40 +02:00
Astro
a01cf553ae switch Element namespaces to NamespaceSet with parent reference 2017-08-13 02:24:34 +02:00
Astro
052c46635a escape text and attribute values 2017-08-12 02:05:18 +02:00
Johann Tuffe
444b78c63a unescape_and_decode_value for element attributes 2017-07-08 12:18:15 +08:00
Bastien Orivel
9cec9fce9b Replace xml-rs by quick_xml
quick_xml is way faster than xml-rs

Here is an example with a quick atom parser:
    With xml-rs:
        test parse_factorio_atom ... bench:   3,295,678 ns/iter (+/- 165,851)
    With quick_xml:
        test parse_factorio_atom ... bench:     203,215 ns/iter (+/- 13,485)

Unfortunately I had to break the API for this change to happen.
* Element::from_reader now takes `R: BufRead` instead of `R: Read`
* Element::write_to now takes `W: io::Write` instead of `EventWriter<W: Write>`

This migration also allow us to have a write_to function which assumes
we're already in a given namespace (see `write_to_in_namespace`).
2017-06-10 17:17:19 +02:00
lumi
508c971416 port error.rs to error_chain, bump version to 0.4.0 2017-05-22 19:20:01 +02:00
lumi
3341d7e692 turns out i was wrong and clippy was right, all hail clippy 2017-05-22 18:49:24 +02:00
lumi
dbcbe7cd9b make clippy happy 2017-05-22 18:45:43 +02:00
lumi
83d80dd235 Add iterators over attributes, nodes and text nodes. Clean up lots of code. Add as_element and as_text on Node. Add some inline annotations. 2017-05-14 16:38:56 +02:00
lumi
33f9dee31f move use std::iter::FromIterator to tests 2017-05-03 18:39:40 +02:00
Maxime “pep” Buquet
e9d33e5e7e Implement From<Element> for String and use it for fmt::Debug 2017-05-02 16:32:32 +01:00
Bastien Orivel
f87e2442d4 Use a BTreeMap<String, String> instead of a Vec<Attribute> to store attributes
This way we don't need to reimplement PartialEq for Element. It's also
way easier to get an attribute by name as we don't need to iterate over
every attribute to see if it exists.

The only side effect is that now, in the Debug output, attributes are
automatically sorted by names instead of being sorted by insertion
order.

Fixes #4
2017-04-26 23:44:58 +02:00
lumi
c6f9cc485f Merge branch 'Eijebong/minidom-rs-fix_namespaced_attributes'
# Conflicts:
#	src/tests.rs
2017-04-26 01:02:17 +02:00
Eijebong
0d0c4b76eb Fix the PartialEq implementation for Element
The order of attributes in an `Element` doesn't matter anymore.
`<elem a="b" c="d" />` and `<elem c="d" a="b" />` are now correctly
considered equal.

For that I had to derive `PartialOrd` and `Ord` for `Attribute`.
This allows us to sort cloned vectors of `Attribute` in the `PartialEq`
implementation and compare them instead of the struct `attributes`.

Fixes #3
2017-04-24 21:15:53 +02:00
Eijebong
6f0e88b25b Correctly add namespaced attributes to elements
Instead of adding the local_name of an attribute, if a prefix exists,
add prefix:local_name to allow users to retrieve it via the namespaced
key name.

For example, with this XML:
```
<?xml version="1.0" encoding="utf-8"?>
<root xml:lang="en" >
</root>
```

`root.attr("xml:lang").unwrap()` will now correctly return "en".
`root.attr("lang")` will not retrieve "xml:lang" value anymore.

This is a breaking change.

Fixes #2
2017-04-24 18:19:50 +02:00
Emmanuel Gil Peyrot
9af7d252d7 auto-close elements with no child 2017-04-01 13:34:08 +01:00
Emmanuel Gil Peyrot
f301f2cb10 make Debug on Element return valid XML 2017-04-01 13:34:08 +01:00
lumi
7c04aff416 overhauling the library, made tests pass 2017-03-08 20:34:17 +01:00