unofficial mirror of guix-devel@gnu.org 
 help / color / mirror / code / Atom feed
From: "pelzflorian (Florian Pelz)" <pelzflorian@pelzflorian.de>
To: julien lepiller <julien@lepiller.eu>
Cc: guix-devel@gnu.org
Subject: Re: Translating to Chinese, Spanish and Japanese (and more)
Date: Tue, 6 Feb 2018 11:19:07 +0100	[thread overview]
Message-ID: <20180206101907.w3hrdtdew7ovlxco@floriannotebook> (raw)
In-Reply-To: <20180206101750.nanwvypco7tvq3ci@floriannotebook>


[-- Attachment #1.1: Type: text/plain, Size: 19 bytes --]

Forgot attachment.

[-- Attachment #1.2: 0001-page-Allow-for-creating-multiple-files-as-variants-f.patch --]
[-- Type: text/plain, Size: 3505 bytes --]

From 4a30c23a339278947db0cebbf26c80ce1585e561 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@pelzflorian.de>
Date: Mon, 5 Feb 2018 13:08:14 +0100
Subject: [PATCH 1/2] page: Allow for creating multiple files as variants for
 each page.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------2.16.1"

This is a multi-part message in MIME format.
--------------2.16.1
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit


* haunt/page.scm: Adapt write-page to optionally build multiple
                  variants and add helper function to transform file
                  names.
---
 haunt/page.scm | 50 +++++++++++++++++++++++++++++++++++++++++++++-----
 1 file changed, 45 insertions(+), 5 deletions(-)


--------------2.16.1
Content-Type: text/x-patch; name="0001-page-Allow-for-creating-multiple-files-as-variants-f.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0001-page-Allow-for-creating-multiple-files-as-variants-f.patch"

diff --git a/haunt/page.scm b/haunt/page.scm
index 85b2ae6..1dfb123 100644
--- a/haunt/page.scm
+++ b/haunt/page.scm
@@ -32,6 +32,7 @@
             page-file-name
             page-contents
             page-writer
+            variant->file-name
             write-page))
 
 (define-record-type <page>
@@ -41,10 +42,49 @@
   (contents page-contents)
   (writer page-writer))
 
-(define (write-page page output-directory)
-  "Write PAGE to OUTPUT-DIRECTORY."
+(define (variant->file-name variant base-file-name)
+  (let ((variant-as-text
+         (with-output-to-string
+           (lambda ()
+             (display variant))))
+        (period-index
+         (string-rindex base-file-name #\.)))
+    (if period-index
+        (string-append
+         (string-take base-file-name
+                      period-index)
+         "."
+         variant-as-text
+         "."
+         (string-drop base-file-name
+                      (1+ period-index)))
+        (string-append
+         base-file-name
+         "."
+         variant-as-text))))
+
+(define* (write-page page output-directory
+                     #:optional
+                     variants
+                     (variant-namer variant->file-name))
+  "Write PAGE to OUTPUT-DIRECTORY.  If VARIANTS are given, the page
+contents may be a procedure that given a page variant returns what
+data to write.  Otherwise the page contents must be the data to
+write."
+  (define (write-content-variant content-variant file-name)
+    (let ((output (string-append output-directory "/" file-name)))
+      (mkdir-p (dirname output))
+      (call-with-output-file output
+        (cut writer content-variant <>))))
   (match page
     (($ <page> file-name contents writer)
-     (let ((output (string-append output-directory "/" file-name)))
-       (mkdir-p (dirname output))
-       (call-with-output-file output (cut writer contents <>))))))
+     (if (and variants (not (null? variants)) (procedure? contents))
+         (for-each
+          (lambda (variant)
+            (let ((name (variant-namer variant file-name))
+                  (content-variant (contents variant)))
+              (when content-variant
+                (format #t " variant '~a'~%" name)
+                (write-contents content-variant name))))
+          variants)
+         (write-contents contents file-name)))))

--------------2.16.1--



[-- Attachment #1.3: 0002-site-Allow-specifying-variants-in-which-to-create-ea.patch --]
[-- Type: text/plain, Size: 3695 bytes --]

From 1391e8c3990ed25f9a5a09ce67ef055e975bc317 Mon Sep 17 00:00:00 2001
From: Florian Pelz <pelzflorian@pelzflorian.de>
Date: Mon, 5 Feb 2018 13:13:14 +0100
Subject: [PATCH 2/2] site: Allow specifying variants in which to create each
 page.
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="------------2.16.1"

This is a multi-part message in MIME format.
--------------2.16.1
Content-Type: text/plain; charset=UTF-8; format=fixed
Content-Transfer-Encoding: 8bit


* haunt/site.scm: Add variants for which to create pages.
---
 haunt/site.scm | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)


--------------2.16.1
Content-Type: text/x-patch; name="0002-site-Allow-specifying-variants-in-which-to-create-ea.patch"
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="0002-site-Allow-specifying-variants-in-which-to-create-ea.patch"

diff --git a/haunt/site.scm b/haunt/site.scm
index 48573e2..a321bbf 100644
--- a/haunt/site.scm
+++ b/haunt/site.scm
@@ -44,6 +44,7 @@
             site-make-slug
             site-readers
             site-builders
+            site-variants
             site-post-slug
             build-site
 
@@ -52,7 +53,8 @@
 
 (define-record-type <site>
   (make-site title domain posts-directory file-filter build-directory
-             default-metadata make-slug readers builders)
+             default-metadata make-slug readers builders variants
+             variant-namer)
   site?
   (title site-title)
   (domain site-domain)
@@ -62,7 +64,9 @@
   (default-metadata site-default-metadata)
   (make-slug site-make-slug)
   (readers site-readers)
-  (builders site-builders))
+  (builders site-builders)
+  (variants site-variants)
+  (variant-namer site-variant-namer))
 
 (define* (site #:key
                (title "This Place is Haunted")
@@ -73,7 +77,9 @@
                (default-metadata '())
                (make-slug post-slug)
                (readers '())
-               (builders '()))
+               (builders '())
+               (variants '())
+               (variant-namer variant->file-name))
   "Create a new site object.  All arguments are optional:
 
 TITLE: The name of the site
@@ -86,9 +92,12 @@ DEFAULT-METADATA: An alist of arbitrary default metadata for posts
 whose keys are symbols
 MAKE-SLUG: A procedure generating a file name slug from a post
 READERS: A list of reader objects for processing posts
-BUILDERS: A list of procedures for building pages from posts"
+BUILDERS: A list of procedures for building pages from posts
+VARIANTS: Variants for which to build the site’s pages
+VARIANT-NAMER: Procedure to turn variant and file name into a new name"
   (make-site title domain posts-directory file-filter build-directory
-             default-metadata make-slug readers builders))
+             default-metadata make-slug readers builders variants
+             variant-namer))
 
 (define (site-post-slug site post)
   "Return a slug string for POST using the slug generator for SITE."
@@ -109,7 +118,9 @@ BUILDERS: A list of procedures for building pages from posts"
     (for-each (match-lambda
                ((? page? page)
                 (format #t "writing page '~a'~%" (page-file-name page))
-                (write-page page build-dir))
+                (write-page page build-dir
+                            (site-variants site)
+                            (site-variant-namer site)))
                ((? asset? asset)
                 (format #t "copying asset '~a' → '~a'~%"
                         (asset-source asset)

--------------2.16.1--



[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  reply	other threads:[~2018-02-06 10:19 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-02-05  9:07 Translating to Chinese, Spanish and Japanese (and more) Pjotr Prins
2018-02-05  9:28 ` julien lepiller
2018-02-05  9:41   ` pelzflorian (Florian Pelz)
2018-02-05 12:26     ` Ricardo Wurmus
2018-02-05 14:47       ` pelzflorian (Florian Pelz)
2018-02-05 17:21         ` Ricardo Wurmus
2018-02-05 14:44     ` pelzflorian (Florian Pelz)
2018-02-06 10:17       ` pelzflorian (Florian Pelz)
2018-02-06 10:19         ` pelzflorian (Florian Pelz) [this message]
2018-03-29 10:22           ` julien lepiller
2018-04-21 15:41             ` pelzflorian (Florian Pelz)
2018-02-05 10:19   ` Ludovic Courtès
2018-02-05 10:49     ` pelzflorian (Florian Pelz)

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180206101907.w3hrdtdew7ovlxco@floriannotebook \
    --to=pelzflorian@pelzflorian.de \
    --cc=guix-devel@gnu.org \
    --cc=julien@lepiller.eu \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).