From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcin Borkowski Subject: Re: How to get list item depth within the exporter framework? Date: Wed, 29 Jul 2015 09:26:06 +0200 Message-ID: <87twsns9v9.fsf@mbork.pl> References: <87h9oq2evj.fsf@mbork.pl> <87h9opa3qp.fsf@berkeley.edu> Mime-Version: 1.0 Content-Type: text/plain Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:36339) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKLkq-0001IA-Hs for emacs-orgmode@gnu.org; Wed, 29 Jul 2015 03:26:24 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZKLkk-0002ht-TX for emacs-orgmode@gnu.org; Wed, 29 Jul 2015 03:26:20 -0400 Received: from mail.mojserwer.eu ([2a01:5e00:2:52::8]:49426) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZKLkk-0002hj-M7 for emacs-orgmode@gnu.org; Wed, 29 Jul 2015 03:26:14 -0400 Received: from localhost (localhost [127.0.0.1]) by mail.mojserwer.eu (Postfix) with ESMTP id E207D8F2003 for ; Wed, 29 Jul 2015 09:26:13 +0200 (CEST) Received: from mail.mojserwer.eu ([127.0.0.1]) by localhost (mail.mojserwer.eu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 569KgDUeD20q for ; Wed, 29 Jul 2015 09:26:11 +0200 (CEST) Received: from localhost (unknown [109.232.24.146]) by mail.mojserwer.eu (Postfix) with ESMTPSA id E00B48F2002 for ; Wed, 29 Jul 2015 09:26:10 +0200 (CEST) In-reply-to: <87h9opa3qp.fsf@berkeley.edu> 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-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org On 2015-07-27, at 19:51, Richard Lawrence wrote: > Hi Marcin, > > Marcin Borkowski writes: > >> as I mentioned, I'm writing a simple exporter. However, I stumbled on >> something apparently simple. How to get the current list level within >> org-whatever-item transcoder? > > I ran into this problem once; the solution I found was to just walk up > the AST via org-export-get-parent until you run out of parents. > > Something like this should work (untested, and probably needs to be > tweaked, as my Elisp is a little rusty): > > (defun find-depth (element) > "Find the depth of a (list) element during export." > (let ((parent (org-export-get-parent element))) > (case (org-element-type parent) > ('item (1+ (find-depth parent))) > ('plain-list (find-depth (org-export-get-parent parent))) > (t 1)))) > > Hope that helps! Sure it does! I'm ashamed I didn't think about this myself. Here's my take (I assume that ITEM is a plain-list item): --8<---------------cut here---------------start------------->8--- (defun org-item-get-level (item) "Get the level of ITEM, which should be an item in a plain list. Levels are indexed from 0." (let ((pparent (org-element-property :parent (org-element-property :parent item)))) (if (eq (org-element-type pparent) 'item) (1+ (org-item-get-level pparent)) 0))) --8<---------------cut here---------------end--------------->8--- It is a bit less general (and probably a bit faster), but for a plain-list item transcoder the generality doesn't matter. > Best, > Richard Best, -- Marcin Borkowski http://octd.wmi.amu.edu.pl/en/Marcin_Borkowski Faculty of Mathematics and Computer Science Adam Mickiewicz University