Affects Version/s: 0.4.0
Fix Version/s: None
The `normalize` method on IRI objects escapes ":" and "@" in path segments, which doesn't seem to comply with the ABNF rules given in the IRI RFC (RFC 3987 section 2.2. <http://tools.ietf.org/html/rfc3987#section-2.2>).
It seems that `isegment` explicitly allows for ":" and "@", according to:
isegment = *ipchar
ipchar = iunreserved / pct-encoded / sub-delims / ":" / "@"
The `normalize` method encodes each segment by filtering on `CharUtils.Profile.IPATHNODELIMS`, via `CharUtils.is_ipathnodelims`, which uses `is_ipath` && `!isGenDelim`.
The effect is that this (groovy):
println new IRI("http://example.org/publ/1999:175").normalize()
println new IRI("http://email@example.com").normalize()
, where I would expect no escaping at all. Note that:
println new java.net.URI("http://example.org/publ/1999:175").normalize()
println new java.net.URI("http://firstname.lastname@example.org").normalize()
results in the expected:
Since an ipath is composed of "/"-separated isegments (with some specifics regarding absolute, rootless and noscheme), perhaps a solution would be to rework `is_ipath` into calls fully mimicking these ABNF rules, and use `UrlEncoding.encode(..., Profile.IPATH.filter())` in `IRI.normalize(path)`?