Age | Commit message (Expand) | Author |
2020-05-25 | tests: Test inputs of different lengths.•••* tests/base64.scm ("base64 random bytevector: base64-encode and
base64-decode are inverses of each other", "base64 random
bytevector: encoded output should not be more than 76 columns wide",
"base64 random bytevector: encoded output must only consist of
characters from the base64 alphabet"): Test inputs of different lengths.
* tests/quoted-printable.scm ("quoted-printable random bytevector:
quoted-printable-encode and quoted-printable-decode are inverses of
each other", "quoted-printable random bytevector: encoded output
should not be more than 76 columns wide", "quoted-printable random
bytevector: encoded output must only consist of printable ASCII
characters", "q-encoding random bytevector: q-encoding-encode and
q-encoding-decode are inverses of each other"): Test inputs of
different lengths.
| Arun Isaac |
2020-05-25 | email: Decode base64 bytevector without converting to string.•••The new base64 decoder can directly operate on bytevectors in addition
to strings. This feature may not remain forever, but it greatly
improves performance. So, it stays for now.
* email/email.scm (decode-body): Decode base64 encoded body directly
without converting to an intermediate string.
| Arun Isaac |
2020-05-25 | email: Do not filter base64 encoded bytes before decoding.•••The new base64 decoder skips invalid characters safely.
* email/email.scm (decode-body): Do not filter base64 encoded body to
remove invalid base64 characters.
| Arun Isaac |
2020-05-25 | base64: Reimplement from scratch.•••* email/base64.scm: Replace file.
| Arun Isaac |
2020-05-25 | utils: Do not match sequence byte by byte in read-bytes-till.•••* email/utils.scm (bytevector-match, bytevector-overlap,
lookahead-bytevector-n): New functions.
(read-bytes-till): Do not match sequence byte by byte. Process blocks
of bytes at a time.
| Arun Isaac |
2020-05-25 | utils: Introduce the not-end-let utility.•••* email/utils.scm (not-end-let): New macro.
* .dir-locals.el (scheme-mode): Indent not-end-let correctly.
| Arun Isaac |
2020-05-25 | utils: Do not return eof if matched at beginning.•••* email/utils.scm (read-while, read-bytes-till): Do not return eof if
matched at beginning. Return empty string or bytevector respectively.
* tests/utils.scm ("read-bytes-till returns empty bytevector on match
at beginning", "read-while returns empty string on match at
beginning"): New tests.
| Arun Isaac |
2019-12-16 | base64: Import only the required rnrs modules.•••* email/base64.scm: Import (rnrs arithmetic bitwise), (rnrs arithmetic
fixnums), (rnrs base), (rnrs bytevectors) and (rnrn io ports), not all
of (rnrs).
| Arun Isaac |
2019-12-04 | email: Handle blank Subject headers.•••* email/email.scm (post-process-fields): Treat blank Subject headers
as having the null string as value.
* tests/email.scm ("blank Subject header must be treated as having the
null string as value"): New test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-10-09 | email: Return keywords header as a list.•••* email/email.scm (parse-email-headers): Return keywords header as a
list of strings.
* tests/email.scm ("keywords header must be a list"): New test.
| Arun Isaac |
2019-10-08 | Reindent calls to call-with-port.•••* email/email.scm (body->mime-entities, email->headers+body): Reindent
calls to call-with-port.
* email/quoted-printable.scm (quoted-printable-encode,
q-encoding-encode): Reindent calls to call-with-port.
* tests/utils.scm ("read-bytes-till returns eof-object on end of
file"): Reindent call to call-with-port.
| Arun Isaac |
2019-10-08 | email: Override invalid charset more strongly.•••* email/email.scm (post-process-content-type): Use alist-combine to
override charset more strongly than just appending to the alist.
* tests/email.scm ("tolerate invalid charset"): Update test.
| Arun Isaac |
2019-10-08 | email: Introduce alist union utility.•••* email/utils.scm (alist-combine): New function.
(alist-delete*): Delete function.
* email/email.scm (add-default-headers,
add-default-mime-entity-headers): Use alist-combine.
| Arun Isaac |
2019-10-08 | email: Deduplicate post processing of header fields.•••* email/email.scm (post-process-fields): New function.
(parse-mime-entity, decode-body): Invoke post-process-fields.
| Arun Isaac |
2019-10-02 | email: Tolerate decoding errors in body.•••* email/email.scm (decode-body): Tolerate decoding errors in the body
using the substitute conversion strategy.
* tests/email.scm ("tolerate decoding errors in body"): New test.
| Arun Isaac |
2019-10-01 | email: Tolerate invalid charset.•••* email/email.scm (post-process-content-type): If charset is invalid,
assume default UTF-8 as charset.
* tests/email.scm ("tolerate invalid charset"): New test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-09-28 | email: Tolerate decoding errors in MIME encoded words.•••* email/email.scm (decode-mime-encoded-word): Tolerate decoding errors
in MIME encoded words using the substitute conversion strategy.
* tests/email.scm ("tolerate decoding errors in MIME encoded words"):
New test.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-09-28 | email: Remove duplicate unbracketed-angle-addr definition.•••* email/email.scm (unbracketed-angle-addr): Delete duplicate
definition.
| Arun Isaac |
2019-09-23 | email: Update mbox->emails docstring.•••The earlier docstring was one meant for read-next-email-in-mbox.
* email/email.scm (mbox->emails): Update docstring.
| Arun Isaac |
2019-09-23 | email: Add read-next-email-in-mbox docstring.•••* email/email.scm (read-next-email-in-mbox): Add docstring.
| Arun Isaac |
2019-09-23 | email: Tolerate non-ASCII non-UTF-8 characters in headers.•••* email/email.scm (email->headers+body): If non-ASCII non-UTF-8
characters occur in the headers, do not raise a decoding error. Work
around using the substitute conversion strategy.
* tests/email.scm ("tolerate non-ASCII characters in headers"): Rename
to "decode utf-8 characters in headers".
("tolerate non-ascii non-utf-8 characters in headers"): New test.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-09-17 | email: Tolerate non-ASCII characters in headers.•••We tolerate non-ASCII characters in headers in order to support Emacs
message mode parens style addresses.
* email/email.scm (email->headers+body): Read headers as UTF-8
characters.
* tests/email.scm ("tolerate non-ascii characters in headers"): New
tests.
Reported-by: Christopher Baines <mail@cbaines.net>
| Arun Isaac |
2019-08-07 | doc: Document mbox->emails.•••* doc/guile-email.texi (Reading Email): New chapter.
* email/email.scm (mbox->emails): Add docstring.
| Arun Isaac |
2019-08-07 | utils: Clarify read-while docstring.•••* email/utils.scm (read-while): Clarify docstring.
| Arun Isaac |
2019-07-28 | email: Improve comment about default charset.•••* email/email.scm (post-process-content-type): Mention that RFC6657
specifies UTF-8 as the default charset only for text/* media types.
| Arun Isaac |
2019-07-28 | email: Read mboxes as bytevectors.•••* email/email.scm (read-next-email-in-mbox): Read bytes from mboxes,
not characters.
| Arun Isaac |
2019-07-28 | utils: Return eof-object from read-bytes-till on end of file.•••* email/utils.scm (read-bytes-till): Return eof-object, not #vu8(), on
end of file.
* tests/utils.scm: New file.
* Makefile.am (SCM_TESTS): Register it.
| Arun Isaac |
2019-07-28 | email: Decode MIME entities without headers.•••* email/email.scm (email->headers+body): If there are no headers,
return "" as headers not an eof-object.
(parse-email-body): Parse headers of parent entity or email to
parse-mime-entity.
(add-default-mime-entity-headers): New function.
(parse-mime-entity): Use add-default-mime-entity-headers instead of
add-default-headers. Handle MIME entities without headers.
* tests/email.scm ("decode MIME entity without headers"): New test.
| Arun Isaac |
2019-07-28 | email: Support email with mixed encoding of characters.•••Prior to this, parse-email would accept email in the form of a
string. A string is constrained to use the same encoding for all its
characters whereas an email can have characters encoded using
different encoding schemes. Therefore, it is more correct that
parse-email deals with bytevectors instead of strings.
* email/utils.scm (read-bytes-till): New function.
* email/email.scm (body->mime-entities, email->headers+body,
decode-body): Deal with emails as bytevectors instead of strings.
(parse-mime-entity): Rename text argument to bv.
(parse-email, parse-email-body): Overload to handle input in the form
of a string or bytevector.
* doc/guile-email.texi (Parsing e-mail): Document overloading of
parse-email and parse-email-body.
* tests/email.scm ("handle truncated multipart message gracefully"):
Deal in bytevectors instead of strings.
("email with 8 bit encoding and non UTF-8 charset", "multipart email
with a 8 bit encoding and non UTF-8 charset part"): New tests.
* tests/email-with-8bit-encoding-and-non-utf8-charset,
tests/multipart-email-with-a-8bit-encoding-and-non-utf8-charset-part:
New files.
Reported-by: Jack Hill <jackhill@jackhill.us>
| Arun Isaac |
2019-07-26 | email: Match mime-entity-fields only against headers.•••* email/email.scm (parse-mime-entity): Match mime-entity-fields only
against the headers, not the whole email.
| Arun Isaac |
2019-07-26 | email: Import all of (email utils).•••* email/email.scm: Import all of (email utils), not a subset of the
exported functions.
| Arun Isaac |
2019-07-21 | email: Decode MIME encoded words in Subject header.•••Prior to this, MIME encoded words in the Subject header were not
decoded.
* email/email.scm (parse-email-headers): Decode MIME encoded words in
Subject header.
* tests/email.scm ("decode MIME encoded words in Subject header"): New
test.
Reported-by: Ricardo Wurmus <rekado@elephly.net>
| Arun Isaac |
2019-06-25 | email: Fix typo in docstring of parse-mime-entity.•••* email/email.scm (parse-mime-entity): Replace "a" with "an" in
docstring.
| Arun Isaac |
2018-11-13 | email: Support emacs message mode parens style addresses.•••* email/email.scm (define-comment-pattern, define-cfws-pattern,
define-dot-atom-pattern, define-domain-pattern,
define-addr-spec-pattern): New macros.
(captured-comment, captured-cfws, captured-dot-atom, captured-domain,
captured-addr-spec): New patterns.
(mailbox): Use captured-addr-spec instead of addr-spec.
(post-process-mailbox): Handle emacs message mode parens style addresses.
| Arun Isaac |
2018-11-13 | email: Discard angle brackets in address fields only.•••* email/email.scm (define-angle-addr): New macro.
(unbracketed-angle-addr): New pattern.
(name-addr): Use unbracketed-angle-addr instead of angle-addr.
(post-process-mailbox): Do not trim angle brackets from address. That
is now handled by the grammar itself.
| Arun Isaac |
2018-11-13 | email: Deduplicate email address parsing.•••* email/email.scm (post-process-mailbox): New function.
(parse-email-address): Call post-process-mailbox instead of
reimplementing address parsing using regular expressions.
(parse-email-headers): Call post-process-mailbox.
| Arun Isaac |
2018-11-13 | email: Fix typo in parse-email-address docstring.•••* email/email.scm (parse-email-address): Fix typo in examples in
parse-email-address docstring. The returned value must be an
association list of pairs, not of lists.
| Arun Isaac |
2018-10-02 | utils: Use else for the default cond clause.•••* email/utils.scm (read-while)[read-while-loop]: Use else, instead
of #t, for the default cond clause.
| Arun Isaac |
2018-10-01 | email: Do not discard trace fields.•••* email/email.scm (angle-addr): Capture "<" and ">".
(parse-email-headers): Do not discard trace fields. Trim "<" and ">"
from angle-addr in mailbox, but not from trace fields.
| Arun Isaac |
2018-10-01 | email: Handle truncated messages gracefully.•••* email/email.scm (body->mime-entities)[read-mime-entity]: Check for
eof-object so that truncated messages are handled gracefully without
raising an error.
| Arun Isaac |
2018-09-15 | quoted-printable: Use specific rnrs libraries.•••* email/quoted-printable.scm: Use (rnrs bytevectors) and (rnrs io
ports) instead of (rnrs).
| Arun Isaac |
2018-09-15 | quoted-printable: Use call-with-bytevector-output-port.•••* email/quoted-printable.scm (quoted-printable-decode): Use
call-with-bytevector-output-port instead of call-with-port and
open-bytevector-output-port.
| Arun Isaac |
2018-09-15 | quoted-printable: Q-encode #\? and #\_ with their ASCII values.•••* email/quoted-printable.scm (%q-encoding-literal-char-set,
%quoted-printable-literal-char-set): New variables.
(quoted-printable-encode): Move core encoding code to ...
(quoted-printable-style-encode): ... this new function.
(q-encoding-decode): Call quoted-printable-style-encode with the
appropriate literal-char-set instead of calling
quoted-printable-encode.
* tests/quoted-printable.scm (q-encoding of special characters): Add
to check for this bug.
| Arun Isaac |
2018-09-15 | quoted-printable: Encode #\= with its ASCII code.•••* email/quoted-printable.scm (quoted-printable-encode): Encode #\=
with its ASCII code.
* test/quoted-printable.scm (quoted-printable-encoding of =): Add test
to check for this bug.
| Arun Isaac |
2018-09-14 | quoted-printable: Encode printable ASCII characters to themselves.•••* email/quoted-printable.scm (quoted-printable-encode): Encode only
printable ASCII characters, that is, ASCII characters in the interval
[#\space, #\delete), to themselves.
| Arun Isaac |
2018-09-12 | quoted-printable: Add q-encoding-encode.•••* email/quoted-printable.scm (q-encoding-encode): New function.
* tests/quoted-printable.scm (q-encoding wikipedia example): Rename to
...
(q-encoding wikipedia example: decoding): ... this.
(q-encoding wikipedia example: encoding): New test.
| Arun Isaac |
2018-09-12 | Untabify and re-indent all sources.•••* build-aux/test-driver.scm, email/base64.scm, email/email.scm,
email/quoted-printable.scm, email/utils.scm,
tests/quoted-printable.scm: Untabify and re-indent.
| Arun Isaac |
2018-09-12 | quoted-printable: Add quoted-printable-encode.•••* email/quoted-printable.scm (quoted-printable-encode): New function.
* tests/quoted-printable.scm (quoted-printable wikipedia example):
Rename to ...
(quoted-printable wikipedia example: decoding): ... this.
(quoted-printable wikipedia example: encoding, quoted-printable
wikipedia example: encoded output should not be more than 76 columns
wide): New tests.
| Arun Isaac |
2018-09-12 | quoted-printable: Close port after use.•••* email/quoted-printable.scm (quoted-printable-decode): Close
bytevector port after use.
In cond, use else instead of #t for the default clause.
| Arun Isaac |
2018-09-08 | Initial commit. | Arun Isaac |