From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp2 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id 2VKnJlF55l5ELwAA0tVLHw (envelope-from ) for ; Sun, 14 Jun 2020 19:24:01 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp2 with LMTPS id sGYmIlF55l53WwAAB5/wlQ (envelope-from ) for ; Sun, 14 Jun 2020 19:24:01 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 19D4E9400B1 for ; Sun, 14 Jun 2020 19:24:01 +0000 (UTC) Received: from localhost ([::1]:54016 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jkYEa-0007bz-49 for larch@yhetil.org; Sun, 14 Jun 2020 15:24:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:51552) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkYE2-0007b9-IJ for emacs-orgmode@gnu.org; Sun, 14 Jun 2020 15:23:26 -0400 Received: from relay5-d.mail.gandi.net ([217.70.183.197]:42229) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jkYDz-00008B-Bq for emacs-orgmode@gnu.org; Sun, 14 Jun 2020 15:23:26 -0400 X-Originating-IP: 185.131.40.67 Received: from localhost (40-67.ipv4.commingeshautdebit.fr [185.131.40.67]) (Authenticated sender: admin@nicolasgoaziou.fr) by relay5-d.mail.gandi.net (Postfix) with ESMTPSA id 6BB001C0003; Sun, 14 Jun 2020 19:23:18 +0000 (UTC) From: Nicolas Goaziou To: Mario Frasca Subject: Re: [PATCH] allow for multiline headers References: <87wo4bhpkx.fsf@nicolasgoaziou.fr> <87tuzeehk2.fsf@nicolasgoaziou.fr> Mail-Followup-To: Mario Frasca , emacs-orgmode@gnu.org Date: Sun, 14 Jun 2020 21:23:17 +0200 In-Reply-To: (Mario Frasca's message of "Sat, 13 Jun 2020 18:03:27 -0500") Message-ID: <87a715e9ju.fsf@nicolasgoaziou.fr> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Received-SPF: pass client-ip=217.70.183.197; envelope-from=mail@nicolasgoaziou.fr; helo=relay5-d.mail.gandi.net X-detected-operating-system: by eggs.gnu.org: First seen = 2020/06/14 13:30:31 X-ACL-Warn: Detected OS = Linux 3.11 and newer X-Spam_score_int: -25 X-Spam_score: -2.6 X-Spam_bar: -- X-Spam_report: (-2.6 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=_AUTOLEARN X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: emacs-orgmode@gnu.org Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of emacs-orgmode-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=emacs-orgmode-bounces@gnu.org X-Spam-Score: -1.01 X-TUID: QMBp4eXkNVZc Hello, Mario Frasca writes: > On 13/06/2020 17:18, Nicolas Goaziou wrote: >> Unit tests are not worth a formal definition. However, "test-ox.el" >> contains unit tests. > > I'm not sure what you mean by the first sentence I mean that, even though unit tests are great, and certainly welcome, we first and foremost need a clear definition of a table header. This concept is suggested in the manual, and more accurately defined in ox.el. It would be nice to define it properly in the syntax. > but I found the header tests in the test-ox.el file, and added one > where multiple lines header is accepted.=C2=A0 is it related enough as to > be included in my proposal? Sure. > I can move the org-table-collapse-header function from org-table.el to > org-plot.el, but to me it makes little sense, relegating a generic > function to a sub-module: others will look for the functionality in > org-table, not see it, and duplicate the function somewhere else. This doesn't seem to be a generic function, but a very specific one. More on this below. > + (setq glue (or glue " ")) > + (setq max-header-lines (or max-header-lines 4)) Please use `let' instead of `setq' whenever possible, e.g., here. > + (while (equal 'hline (car table)) equal -> eq > + (setq table (cdr table))) (pop table) > + (let* ((trailer table) > + (header-lines (cl-loop for line in table > + until (equal line 'hline) > + collect line > + do (setq trailer (cdr trailer))))) You couldn't resist.=20 This could be extracted as an independent function, which would return the header, or nil. We can also imagine a function returning a cons cell (HEADER . BODY), both HEADER and BODY being list of rows (possibly empty). Note that the function may be more complicated than the above, because, in the following tables | a | | b | or |---| | a | | b | |---| there's a body, but no header. It depends on the definition chosen for headers. > + (if (and trailer (<=3D (length header-lines) max-header-lines)) > + (cons (apply #'cl-mapcar > + #'(lambda (&rest x) The #', aka, `function', is just noise before `lambda'. --> (lambda (&rest x)) > + (org-trim > + (mapconcat #'identity x glue))) > + header-lines) > + trailer) > + table))) Here you are going further than setting the definition for tables headers. You imply that: | header line 1 | | header line 2 | |---------------| | body | is equivalent to | header line 1 header line 2 | |-----------------------------| | body | I'm not so sure this is a good idea. It might be a good idea for Org Plot, I don't know, but generally speaking, is it? Regards, --=20 Nicolas Goaziou