From: Jean Louis <bugs@gnu.support>
To: Michael Heerdegen <michael_heerdegen@web.de>
Cc: Help GNU Emacs <help-gnu-emacs@gnu.org>
Subject: Re: How to tame compiler?
Date: Tue, 4 May 2021 00:39:33 +0300 [thread overview]
Message-ID: <YJBtlXFYywJUWvAd@protected.localdomain> (raw)
In-Reply-To: <87mttdwuas.fsf@web.de>
* Michael Heerdegen <michael_heerdegen@web.de> [2021-05-02 08:59]:
> Jean Louis <bugs@gnu.support> writes:
>
> > How do I go to create dynamical bindings? Help me.
>
> Newest Emacs versions have `dlet' to create dynamical bindings. Here is
> the definition:
>
> #+begin_src emacs-lisp
> (defmacro dlet (binders &rest body)
> "Like `let*' but using dynamic scoping."
> (declare (indent 1) (debug let))
> `(let (_)
> ,@(mapcar (lambda (binder)
> `(defvar ,(if (consp binder) (car binder) binder)))
> binders)
> (let* ,binders ,@body)))
> #+end_src
>
> Use that macro to create dynamical bindings where you really need, and
> rely on lexical binding else.
That really helped me, or I would be lost today.
As my `rcd-template-eval' function did work, but somehow, for unknown
reasons as indicated already by developers, it started misbehaving,
and variables sometimes interpolated, sometimes not, or maybe at
second invokation not.
And I had to enclose the variables in the function within `dlet' and
now it works well. But I have to tame compiler...
This function can now generate thousands of pages, pre-process it,
process with Markdown, Asciidoctor, txt2tags, Org mode, or however,
page is written (or not process...) and produce the output.
I guess it is very inefficient. Important is that it works.
(defun wrs-generate-page (page-id)
(dlet ((page (rcd-db-table-id-hash "pages" page-id cf-db))
(area (rcd-db-table-id-hash "areas" (gethash "pages_area" page) cf-db))
(template (rcd-db-table-id-hash "templates"
(or (gethash "pages_templates" page)
(gethash "areas_template" area))
cf-db))
(pages_title (gethash "pages_title" page))
(pages_keywords (gethash "pages_keywords" page))
(pages_description (gethash "pages_description" page))
(variables (make-hash-table :test 'equal))
(_ (hash-append variables (wrs-variables-hash nil nil nil 3)))
(_ (hash-append variables (wrs-variables-hash (gethash "pages_area" page))))
(_ (hash-append variables (wrs-variables-hash nil (gethash "templates_id" template))))
(language (rcd-db-get-entry "languages" "languages_extension"
(or (gethash "pages_language" page)
(gethash "areas_defaultlanguage" area))
cf-db))
(_ (puthash "languages_extension" language variables))
(_ (when (gethash "areas_company" area)
(puthash "areas_company"
(rcd-db-get-entry "accounts" "accounts_name"
(gethash "areas_company" area)
cf-db)
variables)))
(_ (hash-append variables page area template))
(text (rcd-template-eval (gethash "pages_content" page "") '("⟦" "⟧") variables))
(processor (gethash "templates_processor" template))
(text (wrs-process-text processor text))
(_ (puthash "pages_content" text variables))
(template (gethash "templates_content" template))
(open-graph-type "Article")
(html (rcd-template-eval template '("⟦" "⟧") variables))
(local-file (wrs-page-url page-id t)))
(string-to-file-force html local-file)))
--
Jean
Take action in Free Software Foundation campaigns:
https://www.fsf.org/campaigns
Sign an open letter in support of Richard M. Stallman
https://stallmansupport.org/
https://rms-support-letter.github.io/
prev parent reply other threads:[~2021-05-03 21:39 UTC|newest]
Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-04-22 14:43 How to tame compiler? Jean Louis
2021-04-22 14:46 ` Stefan Monnier
2021-04-22 15:47 ` Jean Louis
2021-04-22 16:06 ` Jean Louis
2021-04-30 13:31 ` Jorge P. de Morais Neto
2021-04-30 19:38 ` rcd-template-eval - was " Jean Louis
2021-04-30 19:48 ` rcd-template-eval, much is in Org mode Jean Louis
2021-04-30 20:06 ` Tassilo Horn
2021-04-30 22:08 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 23:04 ` Org mode rant Jean Louis
2021-05-01 0:46 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 6:10 ` Jean Louis
2021-05-01 6:34 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 9:41 ` On markdown images Jean Louis
2021-05-01 9:59 ` Yuri Khan
2021-05-01 10:18 ` Jean Louis
2021-05-01 11:09 ` Yuri Khan
2021-05-01 11:25 ` Jean Louis
2021-05-02 19:30 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-03 5:43 ` Yuri Khan
2021-05-03 17:08 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-03 23:22 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-04 2:39 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 5:00 ` Org mode rant Bastien
2021-05-01 5:10 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 9:16 ` Jean Louis
2021-05-01 10:06 ` Bastien
2021-05-01 10:42 ` Jean Louis
2021-05-01 10:10 ` Bastien
2021-05-01 11:19 ` Jean Louis
2021-05-01 13:48 ` [External] : " Drew Adams
2021-05-01 14:05 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 10:10 ` Bastien
2021-04-30 20:23 ` eval myths - Re: How to tame compiler? Jean Louis
2021-04-30 22:11 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 23:07 ` Jean Louis
2021-05-01 0:28 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 8:13 ` tomas
2021-04-30 22:06 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 22:20 ` Stefan Monnier
2021-04-30 22:31 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-04-30 22:50 ` Stefan Monnier
2021-04-30 22:56 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 0:44 ` Michael Heerdegen
2021-05-01 3:49 ` Stefan Monnier
2021-05-01 4:55 ` Michael Heerdegen
2021-05-01 6:34 ` Jean Louis
2021-05-01 13:38 ` Stefan Monnier
2021-05-01 16:19 ` Jean Louis
2021-05-02 5:41 ` Michael Heerdegen
2021-05-02 7:37 ` Jean Louis
2021-05-02 7:45 ` Jean Louis
2021-05-02 9:06 ` tomas
2021-05-02 11:18 ` Jean Louis
2021-05-02 12:24 ` tomas
2021-05-02 18:17 ` Jean Louis
2021-05-02 12:06 ` Stages of WWW development compared to Emacs Lisp development Jean Louis
2021-05-02 16:51 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02 18:37 ` Jean Louis
2021-05-02 16:45 ` How to tame compiler? Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02 22:29 ` Stefan Monnier
2021-05-02 23:14 ` Jean Louis
2021-05-03 1:58 ` Eduardo Ochs
2021-05-03 6:51 ` Eval in templates - " Jean Louis
2021-05-01 4:53 ` Michael Heerdegen
2021-05-01 7:05 ` Jean Louis
2021-05-01 7:59 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-01 6:03 ` Jean Louis
2021-05-01 6:17 ` Emanuel Berg via Users list for the GNU Emacs text editor
2021-05-02 5:58 ` Michael Heerdegen
2021-05-02 6:54 ` Jean Louis
2021-05-03 21:39 ` Jean Louis [this message]
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://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YJBtlXFYywJUWvAd@protected.localdomain \
--to=bugs@gnu.support \
--cc=help-gnu-emacs@gnu.org \
--cc=michael_heerdegen@web.de \
/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.
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).