From mboxrd@z Thu Jan 1 00:00:00 1970 From: Brad Knotwell Subject: language support for m4 Date: Thu, 5 Apr 2018 06:35:46 +0000 (UTC) Message-ID: <1363290911.1944832.1522910146358@mail.yahoo.com> References: <1363290911.1944832.1522910146358.ref@mail.yahoo.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_1944831_899147019.1522910146358" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55425) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f3yV1-00015n-6L for emacs-orgmode@gnu.org; Thu, 05 Apr 2018 02:35:56 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f3yUw-0007h1-9D for emacs-orgmode@gnu.org; Thu, 05 Apr 2018 02:35:55 -0400 Received: from sonic304-20.consmr.mail.ne1.yahoo.com ([66.163.191.146]:34540) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1f3yUv-0007gS-LK for emacs-orgmode@gnu.org; Thu, 05 Apr 2018 02:35:50 -0400 List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: emacs-orgmode@gnu.org ------=_Part_1944831_899147019.1522910146358 Content-Type: multipart/alternative; boundary="----=_Part_1944830_1950550634.1522910146324" ------=_Part_1944830_1950550634.1522910146324 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Good evening all-- The attached file adds m4 support.=C2=A0 It was tested against org-9.1.7 an= d used ob-sed.el and ob-shell.el for inspiration.=C2=A0 Both code execution= and tangling have been tested with simple inputs as well as tables (easies= t way to verify correctness is to inspect the tangled output).=C2=A0 It was= good fun for an evening project (converting the tables to m4 list syntax w= as the trickiest part and required a foray into ob-shell.el; pcase is a nif= ty function). When putting it together, I debated between putting the definitions represe= nting variables in as -DNAME=3Dvalue pairs in the command-line or putting t= hem in the body of the generate file.=C2=A0 Even though it's a bit uglier, = I decided to put them in the body of the file as it makes the generated fil= e capable of being run by hand. Finally, thanks for the work on org-mode and babel.=C2=A0 Vanilla org-mode = has made my meeting notes are significantly easier and PDF exports look ter= rific.=C2=A0 Likewise, while I've written numerous documents using R/knitr,= I appreciate having a literate environment that supports additional langua= ges. --Brad ------=_Part_1944830_1950550634.1522910146324 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Good evening all--
The attached file adds m4 support.  It was tested against = org-9.1.7 and used ob-sed.el and ob-shell.el for inspiration.  Both co= de execution and tangling have been tested with simple inputs as well as ta= bles (easiest way to verify correctness is to inspect the tangled output).&= nbsp; It was good fun for an evening project (converting the tables to m4 l= ist syntax was the trickiest part and required a foray into ob-shell.el; pc= ase is a nifty function).

When putting it together= , I debated between putting the definitions representing variables in as -D= NAME=3Dvalue pairs in the command-line or putting them in the body of the g= enerate file.  Even though it's a bit uglier, I decided to put them in= the body of the file as it makes the generated file capable of being run b= y hand.

Finally, thanks for the work on org-mode a= nd babel.  Vanilla org-mode has made my meeting notes are significantl= y easier and PDF exports look terrific.  Likewise, while I've written = numerous documents using R/knitr, I appreciate having a literate environmen= t that supports additional languages.

--Brad
=
------=_Part_1944830_1950550634.1522910146324-- ------=_Part_1944831_899147019.1522910146358 Content-Type: application/octet-stream Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="ob-m4.el" Content-ID: Ozs7IG9iLW00LmVsIC0tLSBCYWJlbCBGdW5jdGlvbnMgZm9yIG00IHNjcmlwdHMgICAgLSotIGxl eGljYWwtYmluZGluZzogdDsgLSotCgo7OyBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KCjs7IEF1dGhvcjogQnJhZCBLbm90d2VsbAo7OyBLZXl3 b3JkczogbGl0ZXJhdGUgcHJvZ3JhbW1pbmcsIHJlcHJvZHVjaWJsZSByZXNlYXJjaAo7OyBWZXJz aW9uOiAwLjEuMAoKOzsgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIEVtYWNzLgoKOzsgR05VIEVt YWNzIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKOzsgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBhcyBwdWJsaXNoZWQgYnkKOzsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0 ZXIgdmVyc2lvbi4KCjs7IEdOVSBFbWFjcyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0 IGl0IHdpbGwgYmUgdXNlZnVsLAo7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCjs7IEdOVSBHZW5lcmFsIFB1Ymxp YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgo7OyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo7OyBhbG9uZyB3aXRoIEdO VSBFbWFjcy4gIElmIG5vdCwgc2VlIDxodHRwczovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCgo7 OzsgQ29tbWVudGFyeToKCjs7IFByb3ZpZGVzIGEgd2F5IHRvIGV2YWx1YXRlIG00IHNjcmlwdHMg aW4gT3JnIG1vZGUuCgo7OzsgVXNhZ2U6Cgo7OyBBZGQgdG8geW91ciBFbWFjcyBjb25maWc6Cgo7 OyAob3JnLWJhYmVsLWRvLWxvYWQtbGFuZ3VhZ2VzCjs7ICAnb3JnLWJhYmVsLWxvYWQtbGFuZ3Vh Z2VzCjs7ICAnKChtNCAuIHQpKSkKCjs7IEluIGFkZGl0aW9uIHRvIHRoZSBub3JtYWwgaGVhZGVy IGFyZ3VtZW50cywgb2ItbTQgYWxzbyBwcm92aWRlcwo7OyB0d28gc3BlY2lmaWMgb3B0aW9uczoK OzsgIDpjbWQtbGluZSAtLSBhbGxvd3MgYSB1c2VyIHRvIGFwcGVuZCBhcmd1bWVudHMgdG8gdGhl IGNhbGwKOzsgIDpwcmVmaXgtYnVpbGRpbnMgLS0gY2FsbHMgd2l0aCB0aGUgLVAgb3B0aW9uIHRv IGF1dG9tYXRpY2FsbHkKOzsgICAgICAgcHJlZml4IGFsbCBidWlsdC1pbiBtYWNyb3Mgd2l0aCAn bTRfJwo7OyBOb3RlOiAgaXQgaXMgYSBiYWQgaWRlYSB0byBleHBsaWNpdGx5IHBhc3MgdGhlICIt UCIgb3B0aW9uIGluCjs7IDpjbWQtbGluZSB0byBlbmFibGUgcHJlZml4aW5nIGFzIGFueSBhcmd1 bWVudHMgc3BlY2lmaWVkIHZpYQo7OyA6dmFyIE5BTUU9dmFsdWUgd2lsbCBiZSBwcmVmaXhlZCBp bmNvcnJlY3RseS4KOzsKOzsgRXhwbGFpbmluZyB0aGlzIHdpdGggYSBiaXQgbW9yZSBkZXRhaWws IGFsbCA6dmFyIE5BTUU9dmFsdWUgYXJndW1lbnRzIGFyZQo7OyBwcmVwZW5kZWQgdG8gdGhlIGJv ZHkgYXMgZGVmaW5pdGlvbnM6Cjs7ICAgICBkZWZpbmUoTkFNRSx2YWx1ZSkKOzsgICAgICAgICAg ICBvcgo7OyAgICAgbTRfZGVmaW5lKE5BTUUsdmFsdWUpIGlmZiA6cHJlZml4LWJ1aWx0aW5zIGlz IHNldAo7Owo7OyBOb3RlOiAgdGhlIDpwcmVmaXgtYnVpbHRpbiBvcHRpb24gaXMgaW5jb21wYXRp YmxlIHdpdGggUG9zaXgKOzsgICAgICAgIGNvbXBsaWFudCBtNCBpbXBsZW1lbnRhdGlvbnMuICBU aGlzIGlzIGZpbmUgZm9yIHR3byByZWFzb25zOgo7OyAgICAgKiBhbnlvbmUgdXNpbmcgYSBQb3Np eCBjb21wbGlhbnQgdXRpbGl0eSBpcyBmaW5lIGJ5IGRlZmF1bHQgYXMKOzsgICAgICAgdGhlIC1Q IG9wdGlvbiBpcyBvbWl0dGVkCjs7ICAgICAqIEdOVSdzIG00IGltcGxlbWVudGF0aW9uIGlzIChl c3NlbnRpYWxseSkgc3RhbmRhcmQgYXQgdGhpcyBwb2ludAoocmVxdWlyZSAnb2IpCgooZGVmdmFy IG9yZy1iYWJlbC1tNC1jb21tYW5kICJtNCIKICAiTmFtZSBvZiB0aGUgbTQgZXhlY3V0YWJsZSBj b21tYW5kLiIpCgooZGVmdmFyIG9yZy1iYWJlbC10YW5nbGUtbGFuZy1leHRzKQooYWRkLXRvLWxp c3QgJ29yZy1iYWJlbC10YW5nbGUtbGFuZy1leHRzICcoIm00IiAuICJtNCIpKQoKKGRlZmNvbnN0 IG9yZy1iYWJlbC1oZWFkZXItYXJnczptNAogICcoKDpjbWQtbGluZSAuIDphbnkpCiAgICAoOnBy ZWZpeC1idWlsdGlucykpCiAgIk00IHNwZWNpZmljIGhlYWRlciBhcmd1bWVudHMuIikKCihkZWZ2 YXIgb3JnLWJhYmVsLWRlZmF1bHQtaGVhZGVyLWFyZ3M6bTQgJygpCiAgIkRlZmF1bHQgYXJndW1l bnRzIGZvciBldmFsdWF0aW5nIGEgbTQgc291cmNlIGJsb2NrLiIpCgo7OyBidWlsZCB0aGUgcGFz c2VkLWluIG1hY3JvIGRlZmluaXRpb25zIGFzIGEgc2luZ2xlIHN0cmluZyB0byBwcmVwZW5kIHRv IHRoZSBib2R5Cjs7IHRoZSBob2N1cy1wb2N1cyB3aXRoIDpwcmVmaXgtYnVpbHRpbnMgaXMgbmVj ZXNzYXJ5IGZvciB0aGUgLVAgb3B0aW9uIHRvIHdvcmsKCihkZWZ1biBfX29yZy1iYWJlbC1tNC1w cmVmaXggKHBhcmFtcykgKGlmIChhc3NxIDpwcmVmaXgtYnVpbHRpbnMgcGFyYW1zKSAibTRfIikp CihkZWZ1biBvcmctYmFiZWwtLXZhcmlhYmxlLWFzc2lnbm1lbnQ6bTRfZ2VuZXJpYyAocGFyYW1z IHZhcm5hbWUgdmFsdWVzKQogIChjb25jYXQgKF9fb3JnLWJhYmVsLW00LXByZWZpeCBwYXJhbXMp CgkgICJkZWZpbmUoIiAoZm9ybWF0ICIlcyIgdmFybmFtZSkgIiwiIChmb3JtYXQgIiVzIiB2YWx1 ZXMpICIpIgoJICAoX19vcmctYmFiZWwtbTQtcHJlZml4IHBhcmFtcykKCSAgImRubFxuIikpCgoo ZGVmdW4gb3JnLWJhYmVsLS12YXJpYWJsZS1hc3NpZ25tZW50Om00X2xpc3QgKHBhcmFtcyB2YXJu YW1lIHZhbHVlcykKICAoY29uY2F0IChfX29yZy1iYWJlbC1tNC1wcmVmaXggcGFyYW1zKQoJICAi ZGVmaW5lKCIgKGZvcm1hdCAiJXMsWyIgdmFybmFtZSkKCSAgKG1hcGNvbmNhdCAobGFtYmRhICh2 YWx1ZSkKCQkgICAgICAgKGlmICg9IChsZW5ndGggdmFsdWUpIDEpIChmb3JtYXQgIiVzIiAoY2Fy IHZhbHVlKSkKCQkgICAgICAgKGNvbmNhdCAiWyIKCQkJICAgICAgIChtYXBjb25jYXQgKGxhbWJk YSAoeCkgKGZvcm1hdCAiJXMiIHgpKSB2YWx1ZSAiLCIpCgkJCSAgICAgICAiXSIpKSkgdmFsdWVz ICIsIikKCSAgIl0pIiAoX19vcmctYmFiZWwtbTQtcHJlZml4IHBhcmFtcykgImRubFxuIikpCgoo ZGVmdW4gb3JnLWJhYmVsLS12YXJpYWJsZS1hc3NpZ25tZW50czptNCAocGFyYW1zIHZhcm5hbWVz IHZhbHVlcykKICAiUmVwcmVzZW50IHRoZSBwYXJhbWV0ZXJzIGFzIG00IGRlZmluaXRpb25zIgog IChwY2FzZSB2YWx1ZXMKICAgIChgKCxfIC4gLF8pIChvcmctYmFiZWwtLXZhcmlhYmxlLWFzc2ln bm1lbnQ6bTRfbGlzdCBwYXJhbXMgdmFybmFtZXMgdmFsdWVzKSkKICAgIChfIChvcmctYmFiZWwt LXZhcmlhYmxlLWFzc2lnbm1lbnQ6bTRfZ2VuZXJpYyBwYXJhbXMgdmFybmFtZXMgdmFsdWVzKSkp KQoKKGRlZnVuIG9yZy1iYWJlbC12YXJpYWJsZS1hc3NpZ25tZW50czptNCAocGFyYW1zKQogIChh cHBseSAnY29uY2F0IChtYXBjYXIgKGxhbWJkYSAocGFpcikgKG9yZy1iYWJlbC0tdmFyaWFibGUt YXNzaWdubWVudHM6bTQKCQkJCQkgcGFyYW1zIChjYXIgcGFpcikgKGNkciBwYWlyKSkpCgkJCSAo b3JnLWJhYmVsLS1nZXQtdmFycyBwYXJhbXMpKSkpCgo7OyByZXF1aXJlZCB0byBtYWtlIHRhbmds aW5nIHdvcmsKOzsgdGhlIGZpbmFsICJcbiIgaXMgcmVxdWlyZWQgdG8gbWFrZSBtNCB3b3JrIGFz IHRoZSBib2R5IGRvZXNuJ3QgZW5kIGluIGEgbmV3bGluZQooZGVmdW4gb3JnLWJhYmVsLWV4cGFu ZC1ib2R5Om00IChib2R5IHBhcmFtcykKICAiRXhwYW5kIEJPRFkgYWNjb3JkaW5nIHRvIFBBUkFN UywgcmV0dXJuIHRoZSBleHBhbmRlZCBib2R5LiIKICAoY29uY2F0IChvcmctYmFiZWwtdmFyaWFi bGUtYXNzaWdubWVudHM6bTQgcGFyYW1zKSBib2R5ICJcbiIpKQoKKGRlZnVuIG9yZy1iYWJlbC1l eGVjdXRlOm00IChib2R5IHBhcmFtcykKICAiRXhlY3V0ZSBhIGJsb2NrIG9mIG00IGNvZGUgd2l0 aCBPcmcgQmFiZWwuCkJPRFkgaXMgdGhlIHNvdXJjZSBpbnNpZGUgYSBtNCBzb3VyY2UgYmxvY2sg YW5kIFBBUkFNUyBpcyBhbgphc3NvY2lhdGlvbiBsaXN0IG92ZXIgdGhlIHNvdXJjZSBibG9jayBj b25maWd1cmF0aW9ucy4gIFRoaXMKZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGBvcmctYmFiZWwtZXhl Y3V0ZS1zcmMtYmxvY2snLiIKICAobWVzc2FnZSAiZXhlY3V0aW5nIG00IHNvdXJjZSBjb2RlIGJs b2NrIikKICAobGV0KiAoKHJlc3VsdC1wYXJhbXMgKGNkciAoYXNzcSA6cmVzdWx0LXBhcmFtcyBw YXJhbXMpKSkKICAgICAgICAgKGNtZC1saW5lIChjZHIgKGFzc3EgOmNtZC1saW5lIHBhcmFtcykp KQoJIChwcmVmaXgtYnVpbHRpbnMgKGFzc3EgOnByZWZpeC1idWlsdGlucyBwYXJhbXMpKQoJIChj b2RlLWZpbGUgKGxldCAoKGZpbGUgKG9yZy1iYWJlbC10ZW1wLWZpbGUgIm00LSIpKSkKICAgICAg ICAgICAgICAgICAgICAgICh3aXRoLXRlbXAtZmlsZSBmaWxlCgkJCShpbnNlcnQgKG9yZy1iYWJl bC1leHBhbmQtYm9keTptNCBib2R5IHBhcmFtcykgZmlsZSkpIGZpbGUpKQoJIChzdGRpbiAobGV0 ICgoc3RkaW4gKGNkciAoYXNzcSA6c3RkaW4gcGFyYW1zKSkpKQoJCSAgICh3aGVuIHN0ZGluCgkJ ICAgICAobGV0ICgodG1wIChvcmctYmFiZWwtdGVtcC1maWxlICJtNC1zdGRpbi0iKSkKCQkJICAg KHJlcyAob3JnLWJhYmVsLXJlZi1yZXNvbHZlIHN0ZGluKSkpCgkJICAgICAgICh3aXRoLXRlbXAt ZmlsZSB0bXAKCQkJIChpbnNlcnQgcmVzKSkKCQkgICAgICAgdG1wKSkpKQogICAgICAgICAoY21k IChtYXBjb25jYXQgIydpZGVudGl0eQoJCQkgKHJlbXEgbmlsCgkJCSAgICAgICAobGlzdCBvcmct YmFiZWwtbTQtY29tbWFuZAoJCQkJICAgICBjbWQtbGluZSAoaWYgcHJlZml4LWJ1aWx0aW5zICIt UCIpICI8IiBjb2RlLWZpbGUpKQoJCQkgIiAiKSkpCiAgICAob3JnLWJhYmVsLXJlYXNzZW1ibGUt dGFibGUKICAgICAobGV0ICgocmVzdWx0cwogICAgICAgICAgICAoY29uZAogICAgICAgICAgICAg KHN0ZGluICh3aXRoLXRlbXAtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAoY2FsbC1wcm9j ZXNzLXNoZWxsLWNvbW1hbmQgY21kIHN0ZGluIChjdXJyZW50LWJ1ZmZlcikpCiAgICAgICAgICAg ICAgICAgICAgICAoYnVmZmVyLXN0cmluZykpKQogICAgICAgICAgICAgKHQgKG9yZy1iYWJlbC1l dmFsIGNtZCAiIikpKSkpCiAgICAgICAod2hlbiByZXN1bHRzCiAgICAgICAgIChvcmctYmFiZWwt cmVzdWx0LWNvbmQgcmVzdWx0LXBhcmFtcwoJICAgcmVzdWx0cwoJICAgKGxldCAoKHRtcCAob3Jn LWJhYmVsLXRlbXAtZmlsZSAibTQtcmVzdWx0cy0iKSkpCgkgICAgICh3aXRoLXRlbXAtZmlsZSB0 bXAgKGluc2VydCByZXN1bHRzKSkKCSAgICAgKG9yZy1iYWJlbC1pbXBvcnQtZWxpc3AtZnJvbS1m aWxlIHRtcCkpKSkpCiAgICAgKG9yZy1iYWJlbC1waWNrLW5hbWUKICAgICAgKGNkciAoYXNzcSA6 Y29sbmFtZS1uYW1lcyBwYXJhbXMpKSAoY2RyIChhc3NxIDpjb2xuYW1lcyBwYXJhbXMpKSkKICAg ICAob3JnLWJhYmVsLXBpY2stbmFtZQogICAgICAoY2RyIChhc3NxIDpyb3duYW1lLW5hbWVzIHBh cmFtcykpIChjZHIgKGFzc3EgOnJvd25hbWVzIHBhcmFtcykpKSkpKQoKKHByb3ZpZGUgJ29iLW00 KQo7Ozsgb2ItbTQuZWwgZW5kcyBoZXJlCgo7OyBUZXN0IGV4YW1wbGVzIGJlbG93Ogo7Owo7Owo7 OyAjK2JlZ2luX3NyYyBtNCA6cmVzdWx0cyBvdXRwdXQgOnZhciBYWFhYPSdoZWxsbycgOnZhciBZ WVlZPSd3b3JsZCcKOzsgZGVmaW5lKHRoaXMxLCBvbmUgd2lsbCBleHBhbmQpZG5sCjs7IG00X2Rl ZmluZSh0aGlzMixvbmUgd2lsbCBub3QgZXhwYW5kKW00X2RubAo7OyB0aGlzMQo7OyB0aGlzMgo7 OyBYWFhYCjs7IFlZWVkKOzsgWlpaWgo7OyAjK2VuZF9zcmMKCjs7ICMrUkVTVUxUUzoKOzsgOiBt NF9kZWZpbmUodGhpczIsb25lIHdpbGwgbm90IGV4cGFuZCltNF9kbmwKOzsgOiBvbmUgd2lsbCBl eHBhbmQKOzsgOiB0aGlzMgo7OyA6IGhlbGxvCjs7IDogd29ybGQKOzsgOiBaWlpaCgo7OyAjK2Jl Z2luX3NyYyBtNCA6cHJlZml4LWJ1aWx0aW5zIDpyZXN1bHRzIG91dHB1dCA6dmFyIFhYWFg9J2hl bGxvJyA6dmFyIFlZWVk9J3dvcmxkJwo7OyBkZWZpbmUodGhpczEsIG9uZSB3aWxsIG5vdCBleHBh bmQpZG5sCjs7IG00X2RlZmluZSh0aGlzMixvbmUgd2lsbCBleHBhbmQpbTRfZG5sCjs7IHRoaXMx Cjs7IHRoaXMyCjs7IFhYWFgKOzsgWVlZWQo7OyBaWlpaCjs7ICMrZW5kX3NyYwoKOzsgIytSRVNV TFRTOgo7OyA6IGRlZmluZSh0aGlzMSwgb25lIHdpbGwgbm90IGV4cGFuZClkbmwKOzsgOiB0aGlz MQo7OyA6IG9uZSB3aWxsIGV4cGFuZAo7OyA6IGhlbGxvCjs7IDogd29ybGQKOzsgOiBaWlpaCg== ------=_Part_1944831_899147019.1522910146358-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nicolas Goaziou Subject: Re: language support for m4 Date: Thu, 05 Apr 2018 16:58:38 +0200 Message-ID: <871sft4s4h.fsf@nicolasgoaziou.fr> References: <1363290911.1944832.1522910146358.ref@mail.yahoo.com> <1363290911.1944832.1522910146358@mail.yahoo.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:54235) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1f4YU8-0006C3-2o for emacs-orgmode@gnu.org; Fri, 06 Apr 2018 17:01:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1f4YU5-0007Jw-1a for emacs-orgmode@gnu.org; Fri, 06 Apr 2018 17:01:24 -0400 Received: from relay4-d.mail.gandi.net ([217.70.183.196]:33583) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1f4YU4-0007Iv-Rl for emacs-orgmode@gnu.org; Fri, 06 Apr 2018 17:01:20 -0400 In-Reply-To: <1363290911.1944832.1522910146358@mail.yahoo.com> (Brad Knotwell's message of "Thu, 5 Apr 2018 06:35:46 +0000 (UTC)") List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" To: Brad Knotwell Cc: emacs-orgmode@gnu.org Hello, Brad Knotwell writes: > The attached file adds m4 support.=C2=A0 It was tested against org-9.1.7 > and used ob-sed.el and ob-shell.el for inspiration.=C2=A0 Both code > execution and tangling have been tested with simple inputs as well as > tables (easiest way to verify correctness is to inspect the tangled > output).=C2=A0 It was good fun for an evening project (converting the > tables to m4 list syntax was the trickiest part and required a foray > into ob-shell.el; pcase is a nifty function). > When putting it together, I debated between putting the definitions > representing variables in as -DNAME=3Dvalue pairs in the command-line or > putting them in the body of the generate file.=C2=A0 Even though it's a b= it > uglier, I decided to put them in the body of the file as it makes the > generated file capable of being run by hand. Thank you. Some comments follow. First, what is your status wrt FSF papers. If you haven't signed them, this can go in contrib/ until it is sorted out. > ;; Copyright (C) 2015-2018 Free Software Foundation, Inc. The copyright years are probably not accurate. > ;; build the passed-in macro definitions as a single string to prepend to= the body > ;; the hocus-pocus with :prefix-builtins is necessary for the -P option t= o work Could you make two separate sentences? The above is a bit annoying to grok. > (defun __org-babel-m4-prefix (params) (if (assq :prefix-builtins params) = "m4_")) The name of the function is not right. It should probably be `org-babel--m4-prefix'. Also, it needs a docstring. Nitpick: (and (assq :prefix-builtins params) "m4_") > (defun org-babel--variable-assignment:m4_generic (params varname values) Ditto about the missing docstring. > (concat (__org-babel-m4-prefix params) > "define(" (format "%s" varname) "," (format "%s" values) ")" > (__org-babel-m4-prefix params) > "dnl\n")) (format "define(%s,%s)" varname values) > > (defun org-babel--variable-assignment:m4_list (params varname values) Ditto. > (concat (__org-babel-m4-prefix params) > "define(" (format "%s,[" varname) Per above: (format "define(%s,[%s])" varname (mapconcat ...)) > (mapconcat (lambda (value) > (if (=3D (length value) 1) (format "%s" (car value)) (and (=3D (length value) 1) (format "%s" (car values))) Aren't `values' strings already? > (concat "[" > (mapconcat (lambda (x) (format "%s" x)) value ",") > "]"))) values ",") > "])" (__org-babel-m4-prefix params) "dnl\n")) > > (defun org-babel--variable-assignments:m4 (params varnames values) > "Represent the parameters as m4 definitions" > (pcase values > (`(,_ . ,_) (org-babel--variable-assignment:m4_list params varnames v= alues)) > (_ (org-babel--variable-assignment:m4_generic params varnames values)= ))) > > (defun org-babel-variable-assignments:m4 (params) > (apply 'concat (mapcar (lambda (pair) (org-babel--variable-assignments:= m4 > params (car pair) (cdr pair))) > (org-babel--get-vars params)))) (apply #'concat ...) =20=20 > > ;; required to make tangling work > ;; the final "\n" is required to make m4 work as the body doesn't end in = a newline Missing capitals and full stops. > ;; Test examples below: These could go into a "test-ob-m4.el" file. Regards, --=20 Nicolas Goaziou