summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2020-12-06tests: Return a list of Received headers for trace.Arun Isaac
* tests/email.scm ("Trace with only one Received header should be a list of received traces, not a single received trace"): New test.
2020-12-06tests: Parse obsolete Received header.Arun Isaac
* tests/email.scm ("Parse obsolete Received header"): New test.
2020-12-05tests: Add example from RFC5322 A.6.3.Arun Isaac
* tests/email.scm ("RFC5322 A.6.3. Obsolete white space and comments"): New test.
2020-12-05email: Indent better.Arun Isaac
* email/email.scm (define-cfws-pattern): Indent better.
2020-12-05email: Give higher precedence to obsolete id-left, id-right patterns.Arun Isaac
* email/email.scm (id-left, id-right): Give higher precedence to obsolete patterns.
2020-12-05email: Support remaining obsolete specification.Arun Isaac
* email/email.scm (obs-phrase-list, obs-utext, obs-unstruct, obs-optional): New macros. (unstructured, in-reply-to, references, keywords, optional-field): Include obsolete patterns.
2020-12-05email: Support obsolete Received header.Arun Isaac
* email/email.scm (received): Include obsolete pattern. (parse-mime-entity): Post process obsolete received forms.
2020-12-05email: Do not capture cfws in atoms and dot-atoms.Arun Isaac
* email/email.scm (define-atom-pattern): Do not capture cfws unless specified. (atom): Do not specify cfws. (define-dot-atom-pattern): Do not capture cfws. (define-word-pattern): New macro. (cfws-captured-atom, cfws-captured-word): New patterns. (obs-phrase): Use cfws-captured-word. (received-token): Capture all. (parse-mime-entity): Post process received and received-token. * tests/email.scm ("parse email headers"): Fix test.
2020-12-05email: Support obsolete date and time.Arun Isaac
* email/email.scm (obs-day-of-week, obs-day, obs-year, obs-hour, obs-minute, obs-second, obs-zone): New macros. (day-of-week, day, year, hours, minutes, seconds, zone): Include obsolete pattern. (parse-email-headers): Handle obsolete two and three digit years, and alphabetic time zone specifiers. * tests/email.scm ("RFC5322 A.6.2. Obsolete dates"): New test.
2020-12-05email: Support obsolete addressing.Arun Isaac
* email/email.scm (obs-qp, obs-fws, obs-no-ws-ctl, obs-ctext, obs-qtext, obs-phrase, obs-local-part, obs-dtext, obs-domain, obs-domain-list, obs-route, obs-angle-addr, captured-atom, captured-obs-domain, captured-domain, obs-mbox-list, obs-group-list, obs-addr-list, obs-id-left, obs-id-right): New patterns. (quoted-pair, fws, ctext, qtext, phrase, dtext, define-angle-addr-pattern, mailbox-list, group-list, address-list, define-field-pattern, from, sender, bcc, id-left, id-right, resent-from, resent-sender, resent-bcc, obs-resent-rply): Include obsolete pattern. (define-printable-ascii-character-pattern-with-obsolete, define-atom-pattern, define-obs-domain-pattern): New macros. (define-domain-pattern): Accept obs-domain as a new argument. (fields): Include obs-resent-rply. * tests/email.scm ("RFC5322 A.6.1. Obsolete addressing"): New test. ("parse email addresses with period in name"): Mark as passing.
2020-12-04tests: Parse email addresses with period in name.Arun Isaac
* tests/email.scm ("parse email addresses with period in name"): New test. Reported-by: Ricardo Wurmus <rekado@elephly.net>
2020-08-12README: Switch from mailing list to public inbox.Arun Isaac
We are switching from the old mailman managed mailing list to a new public inbox. It is simpler to maintain and better suited for small projects. * README.org (Contributing): Switch from mailing list to public inbox.
2020-05-25tests: Test inputs of different lengths.Arun Isaac
* 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.
2020-05-25email: Decode base64 bytevector without converting to string.Arun Isaac
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.
2020-05-25email: Do not filter base64 encoded bytes before decoding.Arun Isaac
The new base64 decoder skips invalid characters safely. * email/email.scm (decode-body): Do not filter base64 encoded body to remove invalid base64 characters.
2020-05-25tests: Add tests for (email base64).Arun Isaac
* tests/encoding.scm: Move common code for encoding tests to this new file. * tests/quoted-printable.scm: Load encoding.scm. * tests/base64.scm: New file. * Makefile.am (SCM_TESTS): Register tests/base64.scm.
2020-05-25base64: Reimplement from scratch.Arun Isaac
* email/base64.scm: Replace file.
2020-05-25utils: Do not match sequence byte by byte in read-bytes-till.Arun Isaac
* 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.
2020-05-25utils: Introduce the not-end-let utility.Arun Isaac
* email/utils.scm (not-end-let): New macro. * .dir-locals.el (scheme-mode): Indent not-end-let correctly.
2020-05-25utils: Do not return eof if matched at beginning.Arun Isaac
* 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.
2020-05-07Add minimal CSS styling to website.Arun Isaac
* build-website.el (org-html-head): Add minimal CSS.
2019-12-22Release version 0.2.2.v0.2.2Arun Isaac
* NEWS: Update news. * README.org (Download): Link to guile-email 0.2.2 tarball. * configure.ac: Bump to version 0.2.2. * releases/guile-email-0.2.2.tar.lz, releases/guile-email-0.2.2.tar.lz.asc: New files.
2019-12-21tests: Return References header with only one reference as a singleton list.Arun Isaac
* tests/email.scm ("References header with only one reference must be a singleton list, not a string"): New test.
2019-12-21README: Advertise usage in the Guix data service.Arun Isaac
* README.org: Advertise usage in the Guix data service.
2019-12-16tests: Log test results to stderr.Arun Isaac
* build-aux/test-driver.scm.in (my-gnu-runner): Log colorized test results to stderr.
2019-12-16Support upcoming guile 3.0.Arun Isaac
* configure.ac: Check for guile 3.0 before checking for guile 2.2.
2019-12-16Remove custom code checking for guild.Arun Isaac
* configure.ac: Remove custom code checking for guild.
2019-12-16tests: Implement custom test runner group begin and end functions.Arun Isaac
* build-aux/test-driver.scm.in (my-gnu-runner): Add custom test-runner on-group-begin and on-group-end functions. Accept log file port as an argument.
2019-12-16base64: Import only the required rnrs modules.Arun Isaac
* email/base64.scm: Import (rnrs arithmetic bitwise), (rnrs arithmetic fixnums), (rnrs base), (rnrs bytevectors) and (rnrn io ports), not all of (rnrs).
2019-12-16Use guild instead of guile-tools.Arun Isaac
* Makefile.am (.scm.go): Use guild instead of guile-tools to build scm files.
2019-12-04tests: Title case header name.Arun Isaac
* tests/email.scm ("Keywords header must be a list"): Title case header name. Remove unnecessary blank line.
2019-12-04email: Handle blank Subject headers.Arun Isaac
* 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>
2019-10-09email: Return keywords header as a list.Arun Isaac
* 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.
2019-10-08Reindent calls to call-with-port.Arun Isaac
* 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.
2019-10-08Add .dir-locals.el.Arun Isaac
* .dir-locals.el: New file.
2019-10-08email: Override invalid charset more strongly.Arun Isaac
* 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.
2019-10-08email: Introduce alist union utility.Arun Isaac
* 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.
2019-10-08email: Deduplicate post processing of header fields.Arun Isaac
* email/email.scm (post-process-fields): New function. (parse-mime-entity, decode-body): Invoke post-process-fields.
2019-10-08tests: Compare email headers disregarding order.Arun Isaac
* tests/email.scm (alist=?, body=?, email=?, mime-entity=?): New functions. (test-alist=, test-email=): New macros. ("parse email headers", "tolerate invalid charset", "tolerate decoding errors in body"): Use test-alist=. ("RFC5322 A.1.1. A message from one person to another with simple addressing", "parse email headers", "RFC2046 5.1.1. Common syntax", "decode MIME entity without headers", "multipart email with a 8 bit encoding and non UTF-8 charset part", "decode utf-8 characters in headers", "tolerate non-ascii non-utf-8 characters in headers", "tolerate decoding errors in body"): Use test-email=.
2019-10-02email: Tolerate decoding errors in body.Arun Isaac
* 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.
2019-10-01email: Tolerate invalid charset.Arun Isaac
* 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>
2019-09-28email: Tolerate decoding errors in MIME encoded words.Arun Isaac
* 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>
2019-09-28email: Remove duplicate unbracketed-angle-addr definition.Arun Isaac
* email/email.scm (unbracketed-angle-addr): Delete duplicate definition.
2019-09-23Release version 0.2.1.v0.2.1Arun Isaac
* NEWS: Update news. * README.org (Download): Add guile-email-0.2.1 tarball. * configure.ac: Bump version to 0.2.1. * releases/guile-email-0.2.1.tar.lz, releases/guile-email-0.2.1.tar.lz.asc: New files.
2019-09-23email: Update mbox->emails docstring.Arun Isaac
The earlier docstring was one meant for read-next-email-in-mbox. * email/email.scm (mbox->emails): Update docstring.
2019-09-23email: Add read-next-email-in-mbox docstring.Arun Isaac
* email/email.scm (read-next-email-in-mbox): Add docstring.
2019-09-23email: Tolerate non-ASCII non-UTF-8 characters in headers.Arun Isaac
* 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>
2019-09-17Install go files in libdir.Arun Isaac
Guile looks for compiled go files in libdir. So, put them there. * Makefile.am (godir): Set to libdir, instead of moddir.
2019-09-17Add guix.scm.Arun Isaac
* guix.scm: New file.
2019-09-17email: Tolerate non-ASCII characters in headers.Arun Isaac
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>