aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2021-10-24email: Handle unrecognized Content-Transfer-Encoding headers.Arun Isaac
* email/email.scm (handle-invalid-headers): New function. (parse-email-headers): Handle invalid headers. * tests/email.scm ("Assume application/octet-stream Content-Type if Content-Transfer-Encoding is unrecognized"): New test.
2021-10-24tests: Paginate tests/email.scm.Arun Isaac
tests/email.scm is getting really long. Pagination make it easier to understand. * tests/email.scm: Split into three pages---Emails, Email addresses and MIME encoded words.
2021-10-23build-aux: Read emails one by one from mbox corpora.Arun Isaac
Reading emails one by one avoids allocating memory for a list of emails. * build-aux/test-corpus.scm.in (read-next-email-in-mbox): New function. (test-corpus): Use port-transduce to read emails one by one.
2021-10-23build-aux: Write failed corpus test emails to filesystem.Arun Isaac
* build-aux/test-corpus.scm.in: Import (rnrs io ports), (srfi srfi-26), (srfi srfi-28), (srfi srfi-171), (ice-9 ftw) and (ice-9 match). (%fail-directory): New variable. (directory-files, write-failed-email): New function. Write failed corpus test emails to a "fail directory" specified on the command line.
2021-10-06website: Switch to high contrast.Arun Isaac
High contrast feels more readable. Low contrast makes me squint. * website/style.css (body): Remove color property. Let it be the default black.
2021-10-02README: Add Contributors section.Arun Isaac
* README.org (Contributors): New section.
2021-10-02email: Do not use an empty bytevector to test the charset.Mathieu Othacehe
Using an empty bytevector no longer throws an exception since Guile commit 5ea8c69e9153a970952bf6f0b32c4fad6a28e839. * email/email.scm (post-process-content-transfer-encoding): Use a bytevector of unit length to test the charset validity. Signed-off-by: Arun Isaac <arunisaac@systemreboot.net>
2021-09-28README: Use a dynamic block to list releases.Arun Isaac
* README.org (Download): Replace releases with dynamic block. * build-aux/build-website.el: Update dynamic blocks before exporting. (org-dblock-write:releases): New function.
2021-09-28build-aux: Do not create backup files when building website.Arun Isaac
* build-aux/build-website.el (make-backup-files): Set to nil.
2021-06-18README: Link repology badge to repology page.Arun Isaac
* README.org (Download): Link repology badge to repology page.
2021-06-18README: Link to the Guix data service.Arun Isaac
* README.org: Link to the Guix data service, instead of just mentioning it.
2021-06-18website: Make SVG badges clickable.Arun Isaac
* website/style.css (object): Set pointer-events to none.
2021-06-18.gitignore: Add files.Arun Isaac
* .gitignore: Add INSTALL, doc/.dirstamp, doc/guile-email.html, doc/guile-email.info, website.
2021-06-18Comment on website build and clean rules.Arun Isaac
* Makefile.am: Comment on website build and clean rules.
2021-06-18website: Widen to 900px.Arun Isaac
* website/style.css (body): Set max-width to 900px.
2021-06-18website: Reference external stylesheet.Arun Isaac
* website/style.css: New file. * Makefile.am (AM_MAKEINFOHTMLFLAGS): Set to --css-ref=/style.css. * build-aux/build-website.el (org-html-head): Set to <link> tag referencing external stylesheet.
2021-06-18build-aux: Move build-website.el into build-aux directory.Arun Isaac
* build-website.el: Move to build-aux/build-website.el. * Makefile.am (website/index.html): Use build-aux/build-website.el instead of build-website.el.
2021-06-18Configure path to emacs.Arun Isaac
* configure.ac: Check for emacs. * Makefile.am (website/index.html): Use EMACS from configure instead of emacs.
2021-06-18Use MKDIR_P.Arun Isaac
* Makefile.am (website/index.html): Use MKDIR_P instead of `mkdir -p'.
2021-06-18Copy manual to website in a separate target.Arun Isaac
* Makefile.am (website/manual/dev/en): New target. (website): Depend on website/manual/dev/en instead of building directly. Do not depend on phony target html.
2021-06-18website: Move releases into website directory.Arun Isaac
If the releases directory is already in the website directory, then we don't need to redundantly copy it while building the website. * releases: Move to website/releases. * Makefile.am (website): Do not copy releases. (clean-local): Do not clean website/releases.
2021-06-17README: Add nightly tests badge.Arun Isaac
* README.org: Add nightly tests badge, that is, for the "guile-email-nightly" job.
2021-06-15build-aux: Add corpus pull script.Arun Isaac
This is a follow-up to commit 7a78c23f6f2f1c32abb508563a700cd535b29ad1 adding a file that was missed out. * build-aux/pull-corpus.scm: New file.
2021-06-14Add corpus test scripts.Arun Isaac
* build-aux/pull-corpus.scm, build-aux/test-corpus.scm.in: New files. * configure.ac: Configure build-aux/test-corpus.scm. * .gitignore: Add build-aux/test-corpus.scm.
2021-06-13pre-inst-env: Rewrite pre-inst-env in scheme.Arun Isaac
Scheme code is more readable than arcane bash. * pre-inst-env.in: Rewrite in scheme.
2021-06-10doc: Update mbox->emails documentation.Arun Isaac
* doc/guile-email.texi (Reading Email): Update mbox->emails documentation.
2021-06-10build-website: Do not override org-html--svg-image.Arun Isaac
SVG image export works correctly out of the box in org. * build-website.el (org-html--svg-image): Delete function.
2021-06-10README: Add continuous integration badges.Arun Isaac
* README.org (ci-badge): New macro. Add continuous integration badges.
2021-03-15email: Use only cfws-captured-words in obs-phrase.Arun Isaac
* email/email.scm (obs-phrase): Replace word with cfws-captured-word. * tests/email.scm ("Parse names with more than two words"): New test.
2020-12-06website: Export svg using img tag.Arun Isaac
* build-website.el (org-html--svg-image): Override to export svg using an img tag instead of an object tag.
2020-12-06README: Add repology packaging status badge.Arun Isaac
* README.org (Download): Add repology packaging status badge.
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.