diff --git a/ext/lexbor/lexbor/url/url.c b/ext/lexbor/lexbor/url/url.c index dcea861f7cb..bbb3b5bbd3c 100644 --- a/ext/lexbor/lexbor/url/url.c +++ b/ext/lexbor/lexbor/url/url.c @@ -4442,9 +4442,9 @@ lxb_url_api_hash_set(lxb_url_t *url, lxb_url_parser_t *parser, return status; } -lxb_status_t -lxb_url_serialize(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx, - bool exclude_fragment) +static lxb_status_t +lxb_url_serialize_body(lxb_unicode_idna_t *idna, const lxb_url_t *url, lexbor_serialize_cb_f cb, + void *ctx, bool exclude_fragment) { lxb_status_t status; const lexbor_str_t *str; @@ -4484,7 +4484,12 @@ lxb_url_serialize(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx, lexbor_serialize_write(cb, at_str.data, at_str.length, ctx, status); } - status = lxb_url_serialize_host(&url->host, cb, ctx); + if (idna != NULL) { + status = lxb_url_serialize_host_unicode(idna, &url->host, cb, ctx); + } else { + status = lxb_url_serialize_host(&url->host, cb, ctx); + } + if (status != LXB_STATUS_OK) { return status; } @@ -4529,6 +4534,20 @@ lxb_url_serialize(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx, return LXB_STATUS_OK; } +lxb_status_t +lxb_url_serialize(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx, + bool exclude_fragment) +{ + return lxb_url_serialize_body(NULL, url, cb, ctx, exclude_fragment); +} + +lxb_status_t +lxb_url_serialize_idna(lxb_unicode_idna_t *idna, const lxb_url_t *url, lexbor_serialize_cb_f cb, + void *ctx, bool exclude_fragment) +{ + return lxb_url_serialize_body(idna, url, cb, ctx, exclude_fragment); +} + lxb_status_t lxb_url_serialize_scheme(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx) diff --git a/ext/lexbor/lexbor/url/url.h b/ext/lexbor/lexbor/url/url.h index 2bf2d7c3f59..58952a0f910 100644 --- a/ext/lexbor/lexbor/url/url.h +++ b/ext/lexbor/lexbor/url/url.h @@ -403,6 +403,10 @@ LXB_API lxb_status_t lxb_url_serialize(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx, bool exclude_fragment); +LXB_API lxb_status_t +lxb_url_serialize_idna(lxb_unicode_idna_t *idna, const lxb_url_t *url, lexbor_serialize_cb_f cb, + void *ctx, bool exclude_fragment); + LXB_API lxb_status_t lxb_url_serialize_scheme(const lxb_url_t *url, lexbor_serialize_cb_f cb, void *ctx);