From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jake Romer <jkrmr.io@gmail.com> Subject: Re: ox-md.el: Export TOC and Footnotes as Markdown rather than HTML Date: Sun, 21 Aug 2016 22:31:01 -0700 Message-ID: <CAJT_U1OscFV3dyrNaxVcSck0WYPpmm05hEJJr3kw0Tg3ZLy_Kg@mail.gmail.com> References: <CAJT_U1MpXdSoKd6ounOd6Fedior8F4nSEy_=ZF0RurNO7CcOXg@mail.gmail.com> <871t1z9ye1.fsf@saiph.selenimh> <CAJT_U1NcvQvu__xRS0dDLQCTXBWgFe=O6aARAa5xNCK2jgg9xw@mail.gmail.com> <87fuq6ujtz.fsf@saiph.selenimh> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a114dfab4bfdabc053aa25b46 Return-path: <emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org> Received: from eggs.gnu.org ([2001:4830:134:3::10]:49990) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from <jkrmr.io@gmail.com>) id 1bbhpV-0004UK-RR for emacs-orgmode@gnu.org; Mon, 22 Aug 2016 01:31:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from <jkrmr.io@gmail.com>) id 1bbhpT-0005Nw-9L for emacs-orgmode@gnu.org; Mon, 22 Aug 2016 01:31:25 -0400 Received: from mail-ua0-x229.google.com ([2607:f8b0:400c:c08::229]:36525) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from <jkrmr.io@gmail.com>) id 1bbhpS-0005Nq-W1 for emacs-orgmode@gnu.org; Mon, 22 Aug 2016 01:31:23 -0400 Received: by mail-ua0-x229.google.com with SMTP id 97so170374358uav.3 for <emacs-orgmode@gnu.org>; Sun, 21 Aug 2016 22:31:22 -0700 (PDT) In-Reply-To: <87fuq6ujtz.fsf@saiph.selenimh> List-Id: "General discussions about Org-mode." <emacs-orgmode.gnu.org> List-Unsubscribe: <https://lists.gnu.org/mailman/options/emacs-orgmode>, <mailto:emacs-orgmode-request@gnu.org?subject=unsubscribe> List-Archive: <http://lists.gnu.org/archive/html/emacs-orgmode/> List-Post: <mailto:emacs-orgmode@gnu.org> List-Help: <mailto:emacs-orgmode-request@gnu.org?subject=help> List-Subscribe: <https://lists.gnu.org/mailman/listinfo/emacs-orgmode>, <mailto:emacs-orgmode-request@gnu.org?subject=subscribe> Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: "Emacs-orgmode" <emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org> To: emacs-orgmode@gnu.org, Nicolas Goaziou <mail@nicolasgoaziou.fr> --001a114dfab4bfdabc053aa25b46 Content-Type: multipart/alternative; boundary=001a114dfab4bfdaa7053aa25b44 --001a114dfab4bfdaa7053aa25b44 Content-Type: text/plain; charset=UTF-8 Thanks for the pointers! I appreciate your patience -- I'm still a noob with Org :-) Here's the updated patch with entries in ORG-NEWS and the manual. Cheers, Jake On Mon, Aug 15, 2016 at 8:34 AM, Nicolas Goaziou <mail@nicolasgoaziou.fr> wrote: > Hello, > > Jake Romer <jkrmr.io@gmail.com> writes: > > > I'm not as familiar with Org's TOC facilities as I should be, so I'll > > update to handle these cases after some research. I want to avoid letting > > these patches get too big, too. > > See `org-html-toc' and `org-html--toc-text' for an illustration. > > > Here's the patch for generating the footnotes section as Markdown, let me > > know what you think. > > It looks good. However, I'm not able to apply them, they seem to be > created from a subdirectory instead of the root dir. > > > From 63d985425d3995985bd340fe195d8e25bd7f2cc6 Mon Sep 17 00:00:00 2001 > > From: Jake Romer <jkrmr@github.com> > > Date: Sat, 13 Aug 2016 11:45:34 -0400 > > Subject: [PATCH 1/4] Extract org-md-headline-title to generate title > > > > In order to generate a headline title in the preferred Markdown > > style ('atx or 'setext), I extracted this bit of logic from > > `org-md-headline'. > > > > Since `org-md-headline' doesn't process the headline for the footnotes > > section, extracting `org-md-headline-title' will allow us to generate > > the Footnote section header in the preferred Markdown style without > > duplicating the logic for doing so. > > > > As an enhancement, `org-md-headline-title' places the anchor tag above > > the section header. This makes it so that in a browser, clicking on the > > TOC entry for that section scrolls to the section header without > > obscuring it. > > > > Example generated section title: > > > > <a id="orgheadline1"></a> > > Great. However, you need to supply modified variables and functions > names in the commit message, e.g., > > * lisp/ox-md.el (org-md-headline-title): New function. > (org-md-headline): Use new function. > > > Summary of Changes > > ================== > > --- > > ox-md.el | 37 +++++++++++++++++++++++-------------- > > 1 file changed, 23 insertions(+), 14 deletions(-) > > > > diff --git a/ox-md.el b/ox-md.el > > index 0aaade6..4bd445c 100644 > > --- a/ox-md.el > > +++ b/ox-md.el > > @@ -216,20 +216,29 @@ a communication channel." > > (car (last (org-export-get-headline-number > > headline info)))) > > ".")))) > > - (concat bullet (make-string (- 4 (length bullet)) ?\s) heading > tags > > - "\n\n" > > - (and contents > > - (replace-regexp-in-string "^" " " contents))))) > > - ;; Use "Setext" style. > > - ((eq style 'setext) > > - (concat heading tags anchor "\n" > > - (make-string (length heading) (if (= level 1) ?= ?-)) > > - "\n\n" > > - contents)) > > - ;; Use "atx" style. > > - (t (concat (make-string level ?#) " " heading tags anchor "\n\n" > > - contents)))))) > > - > > + (concat bullet (make-string (- 4 (length bullet)) ?\s) heading > tags "\n\n" > > + (and contents (replace-regexp-in-string "^" " " > contents))))) > > + (t (concat (org-md-headline-title style level title anchor tags) > contents)))))) > > + > > + > > +;; Headline Title > > + > > +(defun org-md-headline-title (style level title &optional anchor tags) > > I suggest to name it `org-md--headline-title' to highlight the fact that > it is an internal function. > > > + "Generate a headline title in the preferred Markdown headline style. > > +STYLE is the preferred style ('atx or 'setext) > > +LEVEL is the header level. > > +TITLE is the headline title. > > +ANCHOR is the HTML anchor tag for the section as a string. > > +TAGS are the tags set on the section." > > + (let ((anchor-lines (if anchor (concat anchor "\n\n") nil))) > > (and anchor (concat anchor "\n\n")) > > > Subject: [PATCH 2/4] Add customizable footnotes-related variables > > > > Taking a cue from `ox-html.el', this patch adds > > `org-md-footnotes-section' and `org-md-footnote-format' to allow user > > customization of the formatting for the footnotes section and individual > > footnotes, respectively. > > Ditto (variable names...) > > > +(defcustom org-md-footnotes-section "%s%s" > > + "Format for the footnotes section. > > Format string for... > > > +The first %s placeholder will be replaced with the localized Footnotes > section > > +heading, the second with the contents of the Footnotes section." > > + :group 'org-export-md > > + :type 'string) > > You need to provide additional keywords, i.e., > > :version "25.1" > :package-version '(Org . "9.0") > > > > +(defcustom org-md-footnote-format "<sup>%s</sup>" > > + "The format for the footnote reference. > > +The %s will be replaced by the footnote reference itself." > > + :group 'org-export-md > > + :type 'string) > > Ditto. > > > Subject: [PATCH 3/4] Add footnote-generating functions > > > > Introduces the following functions: > > > > * `org-md-footnote-formatted' > > * `org-md-footnote-section' > > See above. > > > +;;;; Footnote Section > > + > > +(defun org-md-footnote-formatted (footnote info) > > Suggestion: `org-md--footnote-formatted' > > > + "Formats a single footnote entry FOOTNOTE. > > You should specify the data type for FOOTNOTE, i.e., a cons cell > > (number . definition) > > > +INFO is a plist with contextual information." > > + (let* ((fn-num (car footnote)) > > + (fn-text (cdr footnote)) > > + (fn-format (plist-get info :md-footnote-format)) > > + (fn-anchor (format "fn.%d" fn-num)) > > + (fn-href (format " href=\"#fnr.%d\"" fn-num)) > > + (fn-link-to-ref (org-html--anchor fn-anchor fn-num fn-href > info))) > > + (concat (format fn-format fn-link-to-ref) " " fn-text "\n"))) > > + > > +(defun org-md-footnote-section (info) > > + "Format the footnote section. > > +INFO is a plist used as a communication channel." > > + (let* ((fn-alist (org-export-collect-footnote-definitions info)) > > + (fn-alist (loop for (n type raw) in fn-alist collect > > + (cons n (org-trim (org-export-data raw > info))))) > > `cl-loop' > > > + (headline-style (plist-get info :md-headline-style)) > > + (section-title (org-html--translate "Footnotes" info))) > > + (when fn-alist > > + (format (plist-get info :md-footnotes-section) > > + (org-md-headline-title headline-style 1 section-title) > > + (mapconcat #'(lambda (fn) (org-md-footnote-formatted fn > info)) > > (mapconcat (lambda (fn) ...) ...) > > > + fn-alist > > + "\n"))))) > > + > > ;;;; Template > > > > (defun org-md-inner-template (contents info) > > -- > > 2.9.2 > > > > > > From a2e353da09d0db9bbde14641bd94e12e156a143c Mon Sep 17 00:00:00 2001 > > From: Jake Romer <jkrmr@github.com> > > Date: Sat, 13 Aug 2016 13:11:26 -0400 > > Subject: [PATCH 4/4] Update org-md-inner-template to Markdown footnotes > > > > Updates `org-md-inner-template' to use `org-md-footnotes-section' to > > generate a Markdown version of the footnotes section. > > > > Also appends `:md-footnote-format' and `md-footnotes-section' to the > > exporter :options-alist. > > --- > > ox-md.el | 15 +++++++++++++-- > > 1 file changed, 13 insertions(+), 2 deletions(-) > > > > diff --git a/ox-md.el b/ox-md.el > > index 19b8912..7d78ff7 100644 > > --- a/ox-md.el > > +++ b/ox-md.el > > @@ -105,7 +105,10 @@ The %s will be replaced by the footnote reference > itself." > > (src-block . org-md-example-block) > > (template . org-md-template) > > (verbatim . org-md-verbatim)) > > - :options-alist '((:md-headline-style nil nil org-md-headline-style))) > > + :options-alist > > + '((:md-headline-style nil nil org-md-headline-style) > > + (:md-footnote-format nil nil org-md-footnote-format) > > + (:md-footnotes-section nil nil org-md-footnotes-section))) > > These new parameters need to be documented in the manual: (info "(org) > Publishing options"). > > Would you mind providing an entry in ORG-NEWS and send again the patches > from root directory so I can apply them? > > Thank you! > > Regards, > > -- > Nicolas Goaziou > --001a114dfab4bfdaa7053aa25b44 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Thanks for the pointers! I appreciate your patience -- I&#= 39;m still a noob with Org :-)<div><br></div><div>Here's the updated pa= tch with entries in ORG-NEWS and the manual.</div><div><br></div><div>Cheer= s,</div><div><br></div><div>Jake</div><div><br></div><div><br></div><div cl= ass=3D"gmail_extra"><br><div class=3D"gmail_quote">On Mon, Aug 15, 2016 at = 8:34 AM, Nicolas Goaziou <span dir=3D"ltr"><<a href=3D"mailto:mail@nicol= asgoaziou.fr" target=3D"_blank">mail@nicolasgoaziou.fr</a>></span> wrote= :<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-le= ft:1px #ccc solid;padding-left:1ex"><span>Hello,<br> <br> Jake Romer <<a href=3D"mailto:jkrmr.io@gmail.com" target=3D"_blank">jkrm= r.io@gmail.com</a>> writes:<br> <br> </span><span>> I'm not as familiar with Org's TOC facilities as = I should be, so I'll<br> > update to handle these cases after some research. I want to avoid lett= ing<br> > these patches get too big, too.<br> <br> </span>See `org-html-toc' and `org-html--toc-text' for an illustrat= ion.<br> <span><br> > Here's the patch for generating the footnotes section as Markdown,= let me<br> > know what you think.<br> <br> </span>It looks good. However, I'm not able to apply them, they seem to= be<br> created from a subdirectory instead of the root dir.<br> <br> > From 63d985425d3995985bd340fe195d8e<wbr>25bd7f2cc6 Mon Sep 17 00:00:00= 2001<br> > From: Jake Romer <<a href=3D"mailto:jkrmr@github.com" target=3D"_bl= ank">jkrmr@github.com</a>><br> > Date: Sat, 13 Aug 2016 11:45:34 -0400<br> > Subject: [PATCH 1/4] Extract org-md-headline-title to generate title<b= r> ><br> > In order to generate a headline title in the preferred Markdown<br> > style ('atx or 'setext), I extracted this bit of logic from<br= > > `org-md-headline'.<br> ><br> > Since `org-md-headline' doesn't process the headline for the f= ootnotes<br> > section, extracting `org-md-headline-title' will allow us to gener= ate<br> > the Footnote section header in the preferred Markdown style without<br= > > duplicating the logic for doing so.<br> ><br> > As an enhancement, `org-md-headline-title' places the anchor tag a= bove<br> > the section header. This makes it so that in a browser, clicking on th= e<br> > TOC entry for that section scrolls to the section header without<br> > obscuring it.<br> ><br> > Example generated section title:<br> ><br> >=C2=A0 =C2=A0 =C2=A0<a id=3D"orgheadline1"></a><b= r> <br> Great. However, you need to supply modified variables and functions<br> names in the commit message, e.g.,<br> <br> * lisp/ox-md.el (org-md-headline-title): New function.<br> (org-md-headline): Use new function.<br> <br> >=C2=A0 =C2=A0 =C2=A0Summary of Changes<br> >=C2=A0 =C2=A0 =C2=A0=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D<br> > ---<br> >=C2=A0 ox-md.el | 37 +++++++++++++++++++++++-------<wbr>-------<br> >=C2=A0 1 file changed, 23 insertions(+), 14 deletions(-)<br> ><br> > diff --git a/ox-md.el b/ox-md.el<br> > index 0aaade6..4bd445c 100644<br> > --- a/ox-md.el<br> > +++ b/ox-md.el<br> > @@ -216,20 +216,29 @@ a communication channel."<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0(car (last (org-export-get-headline-numbe<wbr>r<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0headline info= ))))<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 "."))))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0(concat bullet (make-string (- 4 (length b= ullet)) ?\s) heading tags<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"\n\n&quo= t;<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and contents<= br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= (replace-regexp-in-string "^" "=C2=A0 =C2=A0 " content= s)))))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0;; Use "Setext" style.<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0((eq style 'setext)<br> > -=C2=A0 =C2=A0 =C2=A0(concat heading tags anchor "\n"<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(make-string (length = heading) (if (=3D level 1) ?=3D ?-))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"\n\n"<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0contents))<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0;; Use "atx" style.<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0(t (concat (make-string level ?#) " &= quot; heading tags anchor "\n\n"<br> > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0contents))))))= <br> > -<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0(concat bullet (make-string (- 4 (length b= ullet)) ?\s) heading tags "\n\n"<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(and contents = (replace-regexp-in-string "^" "=C2=A0 =C2=A0 " contents= )))))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0(t (concat (org-md-headline-title style le= vel title anchor tags) contents))))))<br> > +<br> > +<br> > +;; Headline Title<br> > +<br> > +(defun org-md-headline-title (style level title &optional anchor = tags)<br> <br> I suggest to name it `org-md--headline-title' to highlight the fact tha= t<br> it is an internal function.<br> <br> > +=C2=A0 "Generate a headline title in the preferred Markdown head= line style.<br> > +STYLE is the preferred style ('atx or 'setext)<br> > +LEVEL is the header level.<br> > +TITLE is the headline title.<br> > +ANCHOR is the HTML anchor tag for the section as a string.<br> > +TAGS are the tags set on the section."<br> > +=C2=A0 (let ((anchor-lines (if anchor (concat anchor "\n\n"= ) nil)))<br> <br> =C2=A0 (and anchor (concat anchor "\n\n"))<br> <br> > Subject: [PATCH 2/4] Add customizable footnotes-related variables<br> ><br> > Taking a cue from `ox-html.el', this patch adds<br> > `org-md-footnotes-section' and `org-md-footnote-format' to all= ow user<br> > customization of the formatting for the footnotes section and individu= al<br> > footnotes, respectively.<br> <br> Ditto (variable names...)<br> <br> > +(defcustom org-md-footnotes-section "%s%s"<br> > +=C2=A0 "Format for the footnotes section.<br> <br> Format string for...<br> <br> > +The first %s placeholder will be replaced with the localized Footnote= s section<br> > +heading, the second with the contents of the Footnotes section."= <br> <span>> + :group 'org-export-md<br> > +=C2=A0 :type 'string)<br> <br> </span>You need to provide additional keywords, i.e.,<br> <br> =C2=A0 :version "25.1"<br> =C2=A0 :package-version '(Org . "9.0")<br> <span><br> <br> > +(defcustom org-md-footnote-format "<sup>%s</sup>&quo= t;<br> > +=C2=A0 "The format for the footnote reference.<br> </span>> +The %s will be replaced by the footnote reference itself."= ;<br> <span>> +=C2=A0 :group 'org-export-md<br> > +=C2=A0 :type 'string)<br> <br> </span>Ditto.<br> <br> > Subject: [PATCH 3/4] Add footnote-generating functions<br> ><br> > Introduces the following functions:<br> ><br> > * `org-md-footnote-formatted'<br> > * `org-md-footnote-section'<br> <br> See above.<br> <br> > +;;;; Footnote Section<br> > +<br> > +(defun org-md-footnote-formatted (footnote info)<br> <br> Suggestion: `org-md--footnote-formatted'<br> <br> > +=C2=A0 "Formats a single footnote entry FOOTNOTE.<br> <br> You should specify the data type for FOOTNOTE, i.e., a cons cell<br> <br> =C2=A0 (number . definition)<br> <br> > +INFO is a plist with contextual information."<br> > +=C2=A0 (let* ((fn-num (car footnote))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-text (cdr footnote))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-format (plist-get info :md-foot= note-format))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-anchor (format "fn.%d"= ; fn-num))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-href (format " href=3D\&qu= ot;#fnr.%d\"" fn-num))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-link-to-ref (org-html--anchor f= n-anchor fn-num fn-href info)))<br> > +=C2=A0 =C2=A0 (concat (format fn-format fn-link-to-ref) " "= fn-text "\n")))<br> > +<br> > +(defun org-md-footnote-section (info)<br> > +=C2=A0 "Format the footnote section.<br> <span>> +INFO is a plist used as a communication channel."<br> > +=C2=A0 (let* ((fn-alist (org-export-collect-footnote-d<wbr>efinitions= info))<br> </span>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(fn-alist (loop for (n type = raw) in fn-alist collect<br> <span>> +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0(cons n (org-trim (org-export-data raw info)))))= <br> <br> </span>`cl-loop'<br> <br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(headline-style (plist-get info :md= -headline-style))<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(section-title (org-html--translate= "Footnotes" info)))<br> > +=C2=A0 =C2=A0 (when fn-alist<br> > +=C2=A0 =C2=A0 =C2=A0 (format (plist-get info :md-footnotes-section)<b= r> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (org-md-headline-tit= le headline-style 1 section-title)<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (mapconcat #'(la= mbda (fn) (org-md-footnote-formatted fn info))<br> <br> =C2=A0 (mapconcat (lambda (fn) ...) ...)<br> <br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0fn-alist<br> > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0= =C2=A0 =C2=A0 =C2=A0"\n")))))<br> <span>> +<br> >=C2=A0 ;;;; Template<br> ><br> >=C2=A0 (defun org-md-inner-template (contents info)<br> </span>> --<br> > 2.9.2<br> ><br> ><br> > From a2e353da09d0db9bbde14641bd94e1<wbr>2e156a143c Mon Sep 17 00:00:00= 2001<br> > From: Jake Romer <<a href=3D"mailto:jkrmr@github.com" target=3D"_bl= ank">jkrmr@github.com</a>><br> > Date: Sat, 13 Aug 2016 13:11:26 -0400<br> > Subject: [PATCH 4/4] Update org-md-inner-template to Markdown footnote= s<br> ><br> > Updates `org-md-inner-template' to use `org-md-footnotes-section&#= 39; to<br> > generate a Markdown version of the footnotes section.<br> ><br> > Also appends `:md-footnote-format' and `md-footnotes-section' = to the<br> > exporter :options-alist.<br> > ---<br> >=C2=A0 ox-md.el | 15 +++++++++++++--<br> >=C2=A0 1 file changed, 13 insertions(+), 2 deletions(-)<br> ><br> > diff --git a/ox-md.el b/ox-md.el<br> > index 19b8912..7d78ff7 100644<br> > --- a/ox-md.el<br> > +++ b/ox-md.el<br> > @@ -105,7 +105,10 @@ The %s will be replaced by the footnote reference= itself."<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (= src-block . org-md-example-block)<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (= template . org-md-template)<br> >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (= verbatim . org-md-verbatim))<br> > -=C2=A0 :options-alist '((:md-headline-style nil nil org-md-headli= ne-style)))<br> > +=C2=A0 :options-alist<br> > +=C2=A0 '((:md-headline-style nil nil org-md-headline-style)<br> > +=C2=A0 =C2=A0 (:md-footnote-format nil nil org-md-footnote-format)<br= > > +=C2=A0 =C2=A0 (:md-footnotes-section nil nil org-md-footnotes-section= )))<br> <br> These new parameters need to be documented in the manual: (info "(org)= <br> Publishing options").<br> <br> Would you mind providing an entry in ORG-NEWS and send again the patches<br= > from root directory so I can apply them?<br> <br> Thank you!<br> <br> Regards,<br> <span><font color=3D"#888888"><br> --<br> Nicolas Goaziou<br> </font></span></blockquote></div><br></div></div> --001a114dfab4bfdaa7053aa25b44-- --001a114dfab4bfdabc053aa25b46 Content-Type: application/octet-stream; name="render-fn-as-md.patch" Content-Disposition: attachment; filename="render-fn-as-md.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_is5lsf4f0 RnJvbSBjMWQ4NmQ4NzI4MDBkMzVkYzEzZTk1MjMzMzUxNTRhNmNjOWExMWNhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKYWtlIFJvbWVyIDxqa3JtckBnaXRodWIuY29tPgpEYXRlOiBT dW4sIDIxIEF1ZyAyMDE2IDE0OjA4OjI5IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gb3gtbWQuZWw6 IEV4cG9ydCBmb290bm90ZXMgc2VjdGlvbiBhcyBNYXJrZG93bgoKKiBsaXNwL294LW1kLmVsIChv cmctbWQtLWhlYWRsaW5lLXRpdGxlKTogTmV3IGZ1bmN0aW9uLiAgRXh0cmFjdCBsb2dpYwp1c2Vk IHRvIGdlbmVyYXRlIHNlY3Rpb24gaGVhZGVyIGluIHRoZSBwcmVmZXJyZWQgc3R5bGUgb2YKTWFy a2Rvd24gKGkuZS4sIHNldGV4dCBvciBhdHgpLgoob3JnLW1kLWhlYWRsaW5lKTogVXNlIGBvcmct bWQtaGVhZGxpbmUtdGl0bGUnIHRvIGdlbmVyYXRlIHNlY3Rpb24KaGVhZGVycy4KKG9yZy1tZC0t Zm9vdG5vdGUtZm9ybWF0dGVkKTogTmV3IGZ1bmN0aW9uLiAgRm9ybWF0IGEgc2luZ2xlIGZvb3Ru b3RlCmVudHJ5IGFzIE1hcmtkb3duLCB1c2luZyBIVE1MIG9ubHkgd2hlcmUgbmVjZXNzYXJ5Lgoo b3JnLW1kLWZvb3Rub3RlLXNlY3Rpb24pOiBOZXcgZnVuY3Rpb24uICBGb3JtYXQgdGhlIGZvb3Ru b3RlIHNlY3Rpb24sCmluY2x1ZGluZyB0aGUgc2VjdGlvbiB0aXRsZSB1c2luZyBgb3JnLW1kLS1o ZWFkbGluZS10aXRsZScgYW5kCmluZGl2aWR1YWwgZW50cmllcyB1c2luZyBgb3JnLW1kLS1mb290 bm90ZS1mb3JtYXR0ZWQnLgoob3JnLW1kLWlubmVyLXRlbXBsYXRlKTogVXBkYXRlIHRvIHVzZSBg b3JnLW1kLWZvb3Rub3RlLXNlY3Rpb24nLgoob3JnLW1kLWZvb3Rub3Rlcy1zZWN0aW9uKTogTmV3 IGN1c3RvbWl6YWJsZSB2YXJpYWJsZS4gIEZvcm1hdCBzdHJpbmcgZm9yCmZvb3Rub3RlcyBzZWN0 aW9uLgoob3JnLW1kLWZvb3Rub3RlLWZvcm1hdCk6IE5ldyBjdXN0b21pemFibGUgdmFyaWFibGUu ICBGb3JtYXQgc3RyaW5nIGZvcgppbmRpdmlkdWFsIGZvb3Rub3RlLgoKVXBkYXRlIG94LW1kLmVs IHRvIGV4cG9ydCB0aGUgRm9vdG5vdGVzIHNlY3Rpb24gYXMgTWFya2Rvd24sIHVzaW5nIEhUTUwK b25seSB3aGVyZSBuZWNlc3NhcnkgLSBuYW1lbHksIGluIGZvb3Rub3RlIGFuZCBmb290bm90ZSBy ZWZlcmVuY2UgbGlua3MuCi0tLQogZG9jL29yZy50ZXhpICB8ICAgMiArKwogZXRjL09SRy1ORVdT ICB8ICAxMSArKysrKysrCiBsaXNwL294LW1kLmVsIHwgMTAwICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0KIDMgZmlsZXMgY2hhbmdlZCwg OTcgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL29yZy50 ZXhpIGIvZG9jL29yZy50ZXhpCmluZGV4IDk4NjgxMTMuLjI2ZWYzNzYgMTAwNjQ0Ci0tLSBhL2Rv Yy9vcmcudGV4aQorKysgYi9kb2Mvb3JnLnRleGkKQEAgLTE0NDQ0LDYgKzE0NDQ0LDggQEAgaG93 ZXZlciwgb3ZlcnJpZGUgZXZlcnl0aGluZy4KIAogQG11bHRpdGFibGUge0Bjb2RlezptZC1oZWFk bGluZS1zdHlsZX19IHtAY29kZXtvcmctbWQtaGVhZGxpbmUtc3R5bGV9fQogQGl0ZW0gQGNvZGV7 Om1kLWhlYWRsaW5lLXN0eWxlfSBAdGFiIEBjb2Rle29yZy1tZC1oZWFkbGluZS1zdHlsZX0KK0Bp dGVtIEBjb2RlezptZC1mb290bm90ZS1mb3JtYXR9IEB0YWIgQGNvZGV7b3JnLW1kLWZvb3Rub3Rl LWZvcm1hdH0KK0BpdGVtIEBjb2RlezptZC1mb290bm90ZXMtc2VjdGlvbn0gQHRhYiBAY29kZXtv cmctbWQtZm9vdG5vdGVzLXNlY3Rpb259CiBAZW5kIG11bHRpdGFibGUKIAogQHN1YnN1YmhlYWRp bmcgT0RUIHNwZWNpZmljIHByb3BlcnRpZXMKZGlmZiAtLWdpdCBhL2V0Yy9PUkctTkVXUyBiL2V0 Yy9PUkctTkVXUwppbmRleCAyN2I2YWM5Li45MWE0NThiIDEwMDY0NAotLS0gYS9ldGMvT1JHLU5F V1MKKysrIGIvZXRjL09SRy1ORVdTCkBAIC0zNzMsNiArMzczLDEyIEBAIEl0IHJlcGxhY2VzIHRo ZSBkZXByZWNhdGVkIH5uZXh0fiBhcmd1bWVudCB0byB+b3JnLXByZXZpb3VzLWxpbmUtZW1wdHkt cH4uCiAqKiogfm9yZy1zaG93LWNoaWxkcmVufiAKIEl0IGlzIGEgZmFzdGVyIGltcGxlbWVudGF0 aW9uIG9mIH5vdXRsaW5lLXNob3ctY2hpbGRyZW5+LgogCisqKiogfm9yZy1tZC1oZWFkbGluZX4K K0dlbmVyYXRlcyBhIE1hcmtkb3duIHNlY3Rpb24gaGVhZGxpbmUgaW4gdGhlIHByZWZlcnJlZCBz dHlsZSAoU2V0ZXh0IG9yIEF0eCkuCisKKyoqKiB+b3JnLW1kLWZvb3Rub3RlLXNlY3Rpb25+CitF eHBvcnRzIGEgZm9vdG5vdGUgc2VjdGlvbiBhcyBNYXJrZG93bi4KKwogKiogUmVtb3ZlZCBmdW5j dGlvbnMKICoqKiB+b3JnLWFnZW5kYS1maWx0ZXItYnktdGFnLXJlZmluZX4gaGFzIGJlZW4gcmVt b3ZlZC4KIFVzZSB+b3JnLWFnZW5kYS1maWx0ZXItYnktdGFnfiBpbnN0ZWFkLgpAQCAtNTAzLDYg KzUwOSwxMSBAQCBtb2RpZmllZCBhbnl3YXkuCiBUaGV5IGFyZSBzdGlsbCBzdXBwb3J0ZWQgaW4g T3JnIDkuMCBidXQgd2lsbCBldmVudHVhbGx5IGJlIHJlbW92ZWQgaW4KIGEgbGF0ZXIgcmVsZWFz ZS4gIFVzZSB+ZmlsZX4gbGluayB0eXBlIGFsb25nIHdpdGggdW5pdmVyc2FsIGFyZ3VtZW50cwog dG8gZm9yY2Ugb3BlbmluZyBpdCBpbiBlaXRoZXIgRW1hY3Mgb3Igd2l0aCBzeXN0ZW0gYXBwbGlj YXRpb24uCisqKiogTWFya2Rvd24gZm9vdG5vdGUgZXhwb3J0IGN1c3RvbWl6YXRpb24KK1Zhcmlh YmxlcyB+b3JnLW1kLWZvb3Rub3Rlcy1zZWN0aW9ufiBhbmQgfm9yZy1tZC1mb290bm90ZS1mb3Jt YXR+CitpbnRyb2R1Y2VkIGZvciBveC1tZC5lbC4gIEJvdGggbmV3IHZhcmlhYmxlcyBkZWZpbmUg dGVtcGxhdGUgc3RyaW5ncword2hpY2ggY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIHRoZSBmb3Jt YXQgb2YgdGhlIGV4cG9ydGVkIGZvb3Rub3Rlcworc2VjdGlvbiBhbmQgaW5kaXZpZHVhbCBmb290 bm90ZXMsIHJlc3BlY3RpdmVseS4KICogVmVyc2lvbiA4LjMKIAogKiogSW5jb21wYXRpYmxlIGNo YW5nZXMKZGlmZiAtLWdpdCBhL2xpc3Avb3gtbWQuZWwgYi9saXNwL294LW1kLmVsCmluZGV4IDc2 MzVmYzcuLjQ2N2ZlNzMgMTAwNjQ0Ci0tLSBhL2xpc3Avb3gtbWQuZWwKKysrIGIvbGlzcC9veC1t ZC5lbApAQCAtNTEsNiArNTEsMjUgQEAgVGhpcyB2YXJpYWJsZSBjYW4gYmUgc2V0IHRvIGVpdGhl ciBgYXR4JyBvciBgc2V0ZXh0Jy4iCiAJICAoY29uc3QgOnRhZyAiVXNlIFwiU2V0ZXh0XCIgc3R5 bGUiIHNldGV4dCkpKQogCiAKKzs7OzsgRm9vdG5vdGVzCisKKyhkZWZjdXN0b20gb3JnLW1kLWZv b3Rub3Rlcy1zZWN0aW9uICIlcyVzIgorICAiRm9ybWF0IHN0cmluZyBmb3IgdGhlIGZvb3Rub3Rl cyBzZWN0aW9uLgorVGhlIGZpcnN0ICVzIHBsYWNlaG9sZGVyIHdpbGwgYmUgcmVwbGFjZWQgd2l0 aCB0aGUgbG9jYWxpemVkIEZvb3Rub3RlcyBzZWN0aW9uCitoZWFkaW5nLCB0aGUgc2Vjb25kIHdp dGggdGhlIGNvbnRlbnRzIG9mIHRoZSBGb290bm90ZXMgc2VjdGlvbi4iCisgOmdyb3VwICdvcmct ZXhwb3J0LW1kCisgOnR5cGUgJ3N0cmluZworIDp2ZXJzaW9uICIyNS4xIgorIDpwYWNrYWdlLXZl cnNpb24gJyhPcmcgLiAiOS4wIikpCisKKyhkZWZjdXN0b20gb3JnLW1kLWZvb3Rub3RlLWZvcm1h dCAiPHN1cD4lczwvc3VwPiIKKyAgIkZvcm1hdCBzdHJpbmcgZm9yIHRoZSBmb290bm90ZSByZWZl cmVuY2UuCitUaGUgJXMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgZm9vdG5vdGUgcmVmZXJlbmNl IGl0c2VsZi4iCisgIDpncm91cCAnb3JnLWV4cG9ydC1tZAorICA6dHlwZSAnc3RyaW5nCisgIDp2 ZXJzaW9uICIyNS4xIgorICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjkuMCIpKQorCiAMCiA7 OzsgRGVmaW5lIEJhY2stRW5kCiAKQEAgLTg5LDcgKzEwOCwxMCBAQCBUaGlzIHZhcmlhYmxlIGNh biBiZSBzZXQgdG8gZWl0aGVyIGBhdHgnIG9yIGBzZXRleHQnLiIKIAkJICAgICAoc3JjLWJsb2Nr IC4gb3JnLW1kLWV4YW1wbGUtYmxvY2spCiAJCSAgICAgKHRlbXBsYXRlIC4gb3JnLW1kLXRlbXBs YXRlKQogCQkgICAgICh2ZXJiYXRpbSAuIG9yZy1tZC12ZXJiYXRpbSkpCi0gIDpvcHRpb25zLWFs aXN0ICcoKDptZC1oZWFkbGluZS1zdHlsZSBuaWwgbmlsIG9yZy1tZC1oZWFkbGluZS1zdHlsZSkp KQorICA6b3B0aW9ucy1hbGlzdAorICAnKCg6bWQtaGVhZGxpbmUtc3R5bGUgbmlsIG5pbCBvcmct bWQtaGVhZGxpbmUtc3R5bGUpCisgICAgKDptZC1mb290bm90ZS1mb3JtYXQgbmlsIG5pbCBvcmct bWQtZm9vdG5vdGUtZm9ybWF0KQorICAgICg6bWQtZm9vdG5vdGVzLXNlY3Rpb24gbmlsIG5pbCBv cmctbWQtZm9vdG5vdGVzLXNlY3Rpb24pKSkKIAogDAogOzs7IEZpbHRlcnMKQEAgLTIxNSwyMCAr MjM3LDI5IEBAIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLiIKIAkJCSAgKGNhciAobGFzdCAob3Jn LWV4cG9ydC1nZXQtaGVhZGxpbmUtbnVtYmVyCiAJCQkJICAgICAgaGVhZGxpbmUgaW5mbykpKSkK IAkJCSAiLiIpKSkpCi0JICAoY29uY2F0IGJ1bGxldCAobWFrZS1zdHJpbmcgKC0gNCAobGVuZ3Ro IGJ1bGxldCkpID9ccykgaGVhZGluZyB0YWdzCi0JCSAgIlxuXG4iCi0JCSAgKGFuZCBjb250ZW50 cwotCQkgICAgICAgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiXiIgIiAgICAiIGNvbnRlbnRz KSkpKSkKLSAgICAgICA7OyBVc2UgIlNldGV4dCIgc3R5bGUuCi0gICAgICAgKChlcSBzdHlsZSAn c2V0ZXh0KQotCShjb25jYXQgaGVhZGluZyB0YWdzIGFuY2hvciAiXG4iCi0JCShtYWtlLXN0cmlu ZyAobGVuZ3RoIGhlYWRpbmcpIChpZiAoPSBsZXZlbCAxKSA/PSA/LSkpCi0JCSJcblxuIgotCQlj b250ZW50cykpCi0gICAgICAgOzsgVXNlICJhdHgiIHN0eWxlLgotICAgICAgICh0IChjb25jYXQg KG1ha2Utc3RyaW5nIGxldmVsID8jKSAiICIgaGVhZGluZyB0YWdzIGFuY2hvciAiXG5cbiIKLQkJ ICBjb250ZW50cykpKSkpKQotCisJICAoY29uY2F0IGJ1bGxldCAobWFrZS1zdHJpbmcgKC0gNCAo bGVuZ3RoIGJ1bGxldCkpID9ccykgaGVhZGluZyB0YWdzICJcblxuIgorCQkgIChhbmQgY29udGVu dHMgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiXiIgIiAgICAiIGNvbnRlbnRzKSkpKSkKKyAg ICAgICAodCAoY29uY2F0IChvcmctbWQtLWhlYWRsaW5lLXRpdGxlIHN0eWxlIGxldmVsIHRpdGxl IGFuY2hvciB0YWdzKSBjb250ZW50cykpKSkpKQorCisKKzs7IEhlYWRsaW5lIFRpdGxlCisKKyhk ZWZ1biBvcmctbWQtLWhlYWRsaW5lLXRpdGxlIChzdHlsZSBsZXZlbCB0aXRsZSAmb3B0aW9uYWwg YW5jaG9yIHRhZ3MpCisgICJHZW5lcmF0ZSBhIGhlYWRsaW5lIHRpdGxlIGluIHRoZSBwcmVmZXJy ZWQgTWFya2Rvd24gaGVhZGxpbmUgc3R5bGUuCitTVFlMRSBpcyB0aGUgcHJlZmVycmVkIHN0eWxl ICgnYXR4IG9yICdzZXRleHQpCitMRVZFTCBpcyB0aGUgaGVhZGVyIGxldmVsLgorVElUTEUgaXMg dGhlIGhlYWRsaW5lIHRpdGxlLgorQU5DSE9SIGlzIHRoZSBIVE1MIGFuY2hvciB0YWcgZm9yIHRo ZSBzZWN0aW9uIGFzIGEgc3RyaW5nLgorVEFHUyBhcmUgdGhlIHRhZ3Mgc2V0IG9uIHRoZSBzZWN0 aW9uLiIKKyAgKGxldCAoKGFuY2hvci1saW5lcyAoYW5kIGFuY2hvciAoY29uY2F0IGFuY2hvciAi XG5cbiIpKSkpCisgICAgOzsgVXNlICJTZXRleHQiIHN0eWxlCisgICAgKGlmIChhbmQgKGVxIHN0 eWxlICdzZXRleHQpICg8IGxldmVsIDMpKQorICAgICAgICAobGV0KiAoKHVuZGVybGluZS1jaGFy IChpZiAoPSBsZXZlbCAxKSA/PSA/LSkpCisgICAgICAgICAgICAgICAodW5kZXJsaW5lIChjb25j YXQgKG1ha2Utc3RyaW5nIChsZW5ndGggdGl0bGUpIHVuZGVybGluZS1jaGFyKSAiXG4iKSkpCisg ICAgICAgICAgKGNvbmNhdCAiXG4iIGFuY2hvci1saW5lcyB0aXRsZSB0YWdzICJcbiIgdW5kZXJs aW5lICJcbiIpKQorICAgICAgICA7OyBVc2UgIkF0eCIgc3R5bGUKKyAgICAgICAgKGxldCAoKGxl dmVsLW1hcmsgKG1ha2Utc3RyaW5nIGxldmVsID8jKSkpCisgICAgICAgICAgKGNvbmNhdCAiXG4i IGFuY2hvci1saW5lcyBsZXZlbC1tYXJrICIgIiB0aXRsZSB0YWdzICJcblxuIikpKSkpCiAKIDs7 OzsgSG9yaXpvbnRhbCBSdWxlCiAKQEAgLTQ2NSw2ICs0OTYsMzUgQEAgYSBjb21tdW5pY2F0aW9u IGNoYW5uZWwuIgogICBjb250ZW50cykKIAogCis7Ozs7IEZvb3Rub3RlIFNlY3Rpb24KKworKGRl ZnVuIG9yZy1tZC0tZm9vdG5vdGUtZm9ybWF0dGVkIChmb290bm90ZSBpbmZvKQorICAiRm9ybWF0 cyBhIHNpbmdsZSBmb290bm90ZSBlbnRyeSBGT09UTk9URS4KK0ZPT1ROT1RFIGlzIGEgY29ucyBj ZWxsIG9mIHRoZSBmb3JtIChudW1iZXIgLiBkZWZpbml0aW9uKS4KK0lORk8gaXMgYSBwbGlzdCB3 aXRoIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uIgorICAobGV0KiAoKGZuLW51bSAoY2FyIGZvb3Ru b3RlKSkKKyAgICAgICAgIChmbi10ZXh0IChjZHIgZm9vdG5vdGUpKQorICAgICAgICAgKGZuLWZv cm1hdCAocGxpc3QtZ2V0IGluZm8gOm1kLWZvb3Rub3RlLWZvcm1hdCkpCisgICAgICAgICAoZm4t YW5jaG9yIChmb3JtYXQgImZuLiVkIiBmbi1udW0pKQorICAgICAgICAgKGZuLWhyZWYgKGZvcm1h dCAiIGhyZWY9XCIjZm5yLiVkXCIiIGZuLW51bSkpCisgICAgICAgICAoZm4tbGluay10by1yZWYg KG9yZy1odG1sLS1hbmNob3IgZm4tYW5jaG9yIGZuLW51bSBmbi1ocmVmIGluZm8pKSkKKyAgICAo Y29uY2F0IChmb3JtYXQgZm4tZm9ybWF0IGZuLWxpbmstdG8tcmVmKSAiICIgZm4tdGV4dCAiXG4i KSkpCisKKyhkZWZ1biBvcmctbWQtZm9vdG5vdGUtc2VjdGlvbiAoaW5mbykKKyAgIkZvcm1hdCB0 aGUgZm9vdG5vdGUgc2VjdGlvbi4KK0lORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVuaWNh dGlvbiBjaGFubmVsLiIKKyAgKGxldCogKChmbi1hbGlzdCAob3JnLWV4cG9ydC1jb2xsZWN0LWZv b3Rub3RlLWRlZmluaXRpb25zIGluZm8pKQorICAgICAgICAgKGZuLWFsaXN0IChjbC1sb29wIGZv ciAobiB0eXBlIHJhdykgaW4gZm4tYWxpc3QgY29sbGVjdAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChjb25zIG4gKG9yZy10cmltIChvcmctZXhwb3J0LWRhdGEgcmF3IGluZm8pKSkpKQor ICAgICAgICAgKGhlYWRsaW5lLXN0eWxlIChwbGlzdC1nZXQgaW5mbyA6bWQtaGVhZGxpbmUtc3R5 bGUpKQorICAgICAgICAgKHNlY3Rpb24tdGl0bGUgKG9yZy1odG1sLS10cmFuc2xhdGUgIkZvb3Ru b3RlcyIgaW5mbykpKQorICAgICh3aGVuIGZuLWFsaXN0CisgICAgICAoZm9ybWF0IChwbGlzdC1n ZXQgaW5mbyA6bWQtZm9vdG5vdGVzLXNlY3Rpb24pCisgICAgICAgICAgICAgIChvcmctbWQtLWhl YWRsaW5lLXRpdGxlIGhlYWRsaW5lLXN0eWxlIDEgc2VjdGlvbi10aXRsZSkKKyAgICAgICAgICAg ICAgKG1hcGNvbmNhdCAobGFtYmRhIChmbikgKG9yZy1tZC0tZm9vdG5vdGUtZm9ybWF0dGVkIGZu IGluZm8pKQorICAgICAgICAgICAgICAgICAgICAgICAgIGZuLWFsaXN0CisgICAgICAgICAgICAg ICAgICAgICAgICAgIlxuIikpKSkpCisKIDs7OzsgVGVtcGxhdGUKIAogKGRlZnVuIG9yZy1tZC1p bm5lci10ZW1wbGF0ZSAoY29udGVudHMgaW5mbykKQEAgLTQ3Myw3ICs1MzMsMTUgQEAgQ09OVEVO VFMgaXMgdGhlIHRyYW5zY29kZWQgY29udGVudHMgc3RyaW5nLiAgSU5GTyBpcyBhIHBsaXN0CiBo b2xkaW5nIGV4cG9ydCBvcHRpb25zLiIKICAgOzsgTWFrZSBzdXJlIENPTlRFTlRTIGlzIHNlcGFy YXRlZCBmcm9tIHRhYmxlIG9mIGNvbnRlbnRzIGFuZAogICA7OyBmb290bm90ZXMgd2l0aCBhdCBs ZWFzdCBhIGJsYW5rIGxpbmUuCi0gIChvcmctdHJpbSAob3JnLWh0bWwtaW5uZXItdGVtcGxhdGUg KGNvbmNhdCAiXG4iIGNvbnRlbnRzICJcbiIpIGluZm8pKSkKKyAgKG9yZy10cmltIChjb25jYXQK KyAgICAgICAgICAgICA7OyBUYWJsZSBvZiBjb250ZW50cy4KKyAgICAgICAgICAgICAobGV0ICgo ZGVwdGggKHBsaXN0LWdldCBpbmZvIDp3aXRoLXRvYykpKQorICAgICAgICAgICAgICAgKHdoZW4g ZGVwdGggKG9yZy1odG1sLXRvYyBkZXB0aCBpbmZvKSkpCisgICAgICAgICAgICAgOzsgRG9jdW1l bnQgY29udGVudHMuCisgICAgICAgICAgICAgY29udGVudHMKKyAgICAgICAgICAgICAiXG4iCisg ICAgICAgICAgICAgOzsgRm9vdG5vdGVzIHNlY3Rpb24uCisgICAgICAgICAgICAgKG9yZy1tZC1m b290bm90ZS1zZWN0aW9uIGluZm8pKSkpCiAKIChkZWZ1biBvcmctbWQtdGVtcGxhdGUgKGNvbnRl bnRzIF9pbmZvKQogICAiUmV0dXJuIGNvbXBsZXRlIGRvY3VtZW50IHN0cmluZyBhZnRlciBNYXJr ZG93biBjb252ZXJzaW9uLgotLSAKMi45LjMKCg== --001a114dfab4bfdabc053aa25b46--