[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
04/08: po: Avoid regexps when interpreting '\n' sequences.
From: |
guix-commits |
Subject: |
04/08: po: Avoid regexps when interpreting '\n' sequences. |
Date: |
Mon, 22 Jun 2020 18:04:31 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit 52b4524f4e87e16da6fb1475145685299f0febe0
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Mon Jun 22 23:29:25 2020 +0200
po: Avoid regexps when interpreting '\n' sequences.
This reduces the execution time of:
(call-with-input-file "po/doc/guix-manual.de.po" read-po-file)
from 4.7s to 4.0s.
* guix/build/po.scm (interpret-newline-escape): New procedure.
(parse-tree->assoc): Use it instead of 'regexp-substitute/global'.
---
guix/build/po.scm | 18 ++++++++++++++----
1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/guix/build/po.scm b/guix/build/po.scm
index 47ff675..6ad7b9c 100644
--- a/guix/build/po.scm
+++ b/guix/build/po.scm
@@ -1,5 +1,6 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2019 Julien Lepiller <julien@lepiller.eu>
+;;; Copyright © 2020 Ludovic Courtès <ludo@gnu.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -19,7 +20,6 @@
(define-module (guix build po)
#:use-module (ice-9 match)
#:use-module (ice-9 peg)
- #:use-module (ice-9 regex)
#:use-module (ice-9 textual-ports)
#:export (read-po-file))
@@ -41,9 +41,19 @@
(and (ignore "\"") (* str-chr) (ignore "\"")
(? (and (ignore (* whitespace)) content))))
+(define (interpret-newline-escape str)
+ "Replace '\\n' sequences in STR with a newline character."
+ (let loop ((str str)
+ (result '()))
+ (match (string-contains str "\\n")
+ (#f (string-concatenate-reverse (cons str result)))
+ (index
+ (let ((prefix (string-take str index)))
+ (loop (string-drop str (+ 2 index))
+ (append (list "\n" prefix) result)))))))
+
(define (parse-tree->assoc parse-tree)
"Converts a po PARSE-TREE to an association list."
- (define regex (make-regexp "\\\\n"))
(match parse-tree
('() '())
((entry parse-tree ...)
@@ -57,8 +67,8 @@
(('entry ('msgid msgid) 'msgstr)
(parse-tree->assoc parse-tree))
(('entry ('msgid msgid) ('msgstr msgstr))
- (acons (regexp-substitute/global #f regex msgid 'pre "\n" 'post)
- (regexp-substitute/global #f regex msgstr 'pre "\n" 'post)
+ (acons (interpret-newline-escape msgid)
+ (interpret-newline-escape msgstr)
(parse-tree->assoc parse-tree)))))))
(define (read-po-file port)
- branch master updated (62115b7 -> 96a95aa), guix-commits, 2020/06/22
- 02/08: doc: cookbook: Mention "guix hash -rx" for Git checkouts., guix-commits, 2020/06/22
- 04/08: po: Avoid regexps when interpreting '\n' sequences.,
guix-commits <=
- 06/08: self: Move statements after definitions in translation derivation., guix-commits, 2020/06/22
- 01/08: doc: cookbook: Clarify 'git-fetch' conventions., guix-commits, 2020/06/22
- 03/08: self: Speed up Texinfo cross-reference translation., guix-commits, 2020/06/22
- 07/08: self: Parallelize translation of the manual., guix-commits, 2020/06/22
- 05/08: po: Micro-optimize 'read-po-file'., guix-commits, 2020/06/22
- 08/08: doc: cookbook: Tweak intro to the REPL., guix-commits, 2020/06/22