From mboxrd@z Thu Jan 1 00:00:00 1970 From: feng shu Subject: Re: [PATCH] (update) Add :caption attribute to #+ATTR_LATEX property Date: Sun, 30 Jun 2013 22:27:48 +0800 Message-ID: References: <878v1rstwt.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=f46d041827f48f156b04e05fea80 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:44294) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UtIbX-0007xz-BM for emacs-orgmode@gnu.org; Sun, 30 Jun 2013 10:27:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UtIbV-0001Pu-W3 for emacs-orgmode@gnu.org; Sun, 30 Jun 2013 10:27:51 -0400 Received: from mail-wi0-x229.google.com ([2a00:1450:400c:c05::229]:55503) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UtIbV-0001Pl-MT for emacs-orgmode@gnu.org; Sun, 30 Jun 2013 10:27:49 -0400 Received: by mail-wi0-f169.google.com with SMTP id c10so3266318wiw.4 for ; Sun, 30 Jun 2013 07:27:48 -0700 (PDT) In-Reply-To: <878v1rstwt.fsf@gmail.com> 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: Nicolas Goaziou Cc: emacs-orgmode@gnu.org --f46d041827f48f156b04e05fea80 Content-Type: multipart/alternative; boundary=f46d041827f48f156804e05fea7e --f46d041827f48f156804e05fea7e Content-Type: text/plain; charset=UTF-8 Hi version 3 patch, add document about :caption attribute. On Sun, Jun 30, 2013 at 7:46 PM, Nicolas Goaziou wrote: > Hello, > > feng shu writes: > > > This is the updated patch of "Add :caption attribute to #+ATTR_LATEX > > property" > > If possible, please include it to master > > Thanks for your patch. > > I agree that #+CAPTION isn't ready for complex caption commands (nor > that it should), so a :caption attribute may be useful. Though, it must > be documented in the manual (see "12.7.4 LaTeX specific attributes"). In > particular, documentation should insist on the fact that: > > 1. :caption attribute has precedence over #+caption keyword > 2. :caption attribute is only meaningful special caption commands, > i.e., this isn't the standard way to set a caption in Org. > 3. This is a raw command, nothing in it will be interpreted by Org. > > Here are some comments about the code: > > + (caption-from-attr-latex (plist-get (org-export-read-attribute > :attr_latex element) :caption))) > > You can use the following slightly shorter sexp: > > (caption-from-attr-latex (org-export-read-attribute :attr_latex element > :caption)) > > > + (if (and caption-from-attr-latex (not (equal > caption-from-attr-latex ""))) > > + (concat caption-from-attr-latex "\n") > > + (cond > > + ((and (not main) (equal label-str ""))) > > + ((not main) (concat label-str "\n")) > > + ;; Option caption format with short name. > > + (short (format "\\caption[%s]{%s%s}\n" > > + (org-export-data short info) > > + label-str > > + (org-export-data main info))) > > + ;; Standard caption format. > > + (t (format "\\caption{%s%s}\n" label-str (org-export-data main > info))))))) > > Here you can include the "then" part in the `cond', and use > `org-string-nw-p': > > (cond ((org-string-nw-p caption-from-attr-latex) > (concat caption-from-attr-latex "\n")) > ((and (not main) (equal label-str "")) "") > ...) > > > (defun org-latex-guess-inputenc (header) > > "Set the coding system in inputenc to what the buffer is. > > @@ -1655,7 +1658,7 @@ used as a communication channel." > > (cond ((and (not float) (plist-member attr :float)) nil) > > ((string= float "wrap") 'wrap) > > ((string= float "multicolumn") 'multicolumn) > > - ((or float (org-element-property :caption parent)) > > + ((or float (org-element-property :caption parent) > (plist-get attr :caption)) > > Be careful here: (plist-get attr :caption) will be non-nil if :caption > is set to the empty string. It may be bulkier to use: > > (org-string-nw-p (plist-get attr :caption)) > > > 'figure)))) > > (placement > > (let ((place (plist-get attr :placement))) > > @@ -2333,7 +2336,7 @@ This function assumes TABLE has `org' as its > `:type' property and > > ((and (not float) (plist-member attr :float)) nil) > > ((string= float "sidewaystable") "sidewaystable") > > ((string= float "multicolumn") "table*") > > - ((or float (org-element-property :caption table)) > > + ((or float (org-element-property :caption table) > (plist-get attr :caption)) > > Ditto. > > > Regards, > > -- > Nicolas Goaziou > --f46d041827f48f156804e05fea7e Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi

version 3 patch, add document about :caption att= ribute.


On Sun, Jun 30, 2013 at 7:46 PM, Nicolas Goaziou <= n.goaziou@gmail.co= m> wrote:
Hello,

feng shu <tumashu@gmail.com>= writes:

> This is the updated patch of =C2=A0"Add :caption attribute to #+A= TTR_LATEX
> property"
> If possible, please include it to master

Thanks for your patch.

I agree that #+CAPTION isn't ready for complex caption commands (nor that it should), so a :caption attribute may be useful. Though, it must
be documented in the manual (see "12.7.4 LaTeX specific attributes&quo= t;). In
particular, documentation should insist on the fact that:

=C2=A0 1. :caption attribute has precedence over #+caption keyword
=C2=A0 2. :caption attribute is only meaningful special caption commands, =C2=A0 =C2=A0 =C2=A0i.e., this isn't the standard way to set a caption = in Org.
=C2=A0 3. This is a raw command, nothing in it will be interpreted by Org.<= br>
Here are some comments about the code:
> + =C2=A0 =C2=A0 =C2=A0(caption-from-attr-latex (plist-get (org-export-= read-attribute :attr_latex element) :caption)))

You can use the following slightly shorter sexp:

=C2=A0 (caption-from-attr-latex (org-export-read-attribute :attr_latex elem= ent :caption))

> + =C2=A0 =C2=A0(if (and caption-from-attr-latex (not (equal caption-fr= om-attr-latex "")))
> + =C2=A0 =C2=A0 (concat caption-from-attr-latex "\n")
> + =C2=A0 =C2=A0 =C2=A0(cond
> + =C2=A0 =C2=A0 =C2=A0 ((and (not main) (equal label-str "")= ))
> + =C2=A0 =C2=A0 =C2=A0 ((not main) (concat label-str "\n"))<= br> > + =C2=A0 =C2=A0 =C2=A0 ;; Option caption format with short name.
> + =C2=A0 =C2=A0 =C2=A0 (short (format "\\caption[%s]{%s%s}\n"= ;
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (org-= export-data short info)
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 label= -str
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (org-= export-data main info)))
> + =C2=A0 =C2=A0 =C2=A0 ;; Standard caption format.
> + =C2=A0 =C2=A0 =C2=A0 (t (format "\\caption{%s%s}\n" label-= str (org-export-data main info)))))))

Here you can include the "then" part in the `cond', and use `org-string-nw-p':

=C2=A0 (cond ((org-string-nw-p caption-from-attr-latex)
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(concat caption-from-attr-latex "\n&= quot;))
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ((and (not main) (equal label-str "")= ) "")
=C2=A0 =C2=A0 =C2=A0 =C2=A0 ...)

> =C2=A0(defun org-latex-guess-inputenc (header)
> =C2=A0 =C2=A0"Set the coding system in inputenc to what the buffe= r is.
> @@ -1655,7 +1658,7 @@ used as a communication channel."
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 (cond ((and (n= ot float) (plist-member attr :float)) nil)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 ((string=3D float "wrap") 'wrap)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 ((string=3D float "multicolumn") 'multicolumn)
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 ((or float (org-element-property :caption parent))
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 ((or float (org-element-property :caption parent) (plist-get attr :capt= ion))

Be careful here: (plist-get attr :caption) will be non-nil if :caption
is set to the empty string. It may be bulkier to use:

=C2=A0 (org-string-nw-p (plist-get attr :caption))

> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0'figure))))
> =C2=A0 =C2=A0 =C2=A0 =C2=A0(placement
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 (let ((place (plist-get attr :placement)))=
> @@ -2333,7 +2336,7 @@ This function assumes TABLE has `org' as its= `:type' property and
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0((and (not float) (plist-member attr :float)) nil)
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0((string=3D float "sidewaystable") "sidewaystab= le")
> =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0((string=3D float "multicolumn") "table*")=
> - =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0((or float (org-element-property :caption table))
> + =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0((or float (org-element-property :caption table) (plist-get attr = :caption))

Ditto.


Regards,

--
Nicolas Goaziou

--f46d041827f48f156804e05fea7e-- --f46d041827f48f156b04e05fea80 Content-Type: application/octet-stream; name="0001-Add-caption-attribute-to-ATTR_LATEX-property.patch" Content-Disposition: attachment; filename="0001-Add-caption-attribute-to-ATTR_LATEX-property.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hikbzxwa0 RnJvbSBlMjQxMDM1MmM4YTI3MGNlMTczOTA4ZjU1ZmRmNTM3NmFjMzMxMjcyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGZW5nIFNodSA8dHVtYXNodUBnbWFpbC5jb20+CkRhdGU6IFNh dCwgMjkgSnVuIDIwMTMgMjM6MDQ6MDMgKzA4MDAKU3ViamVjdDogW1BBVENIXSBBZGQgYDpjYXB0 aW9uJyBhdHRyaWJ1dGUgdG8gIytBVFRSX0xBVEVYIHByb3BlcnR5CgoqIGxpc3Avb3gtbGF0ZXgu ZWwgKG9yZy1sYXRleC0tY2FwdGlvbi9sYWJlbC1zdHJpbmcpOiBBZGQgYWJpbGl0eSwKICB3aGlj aCBjYW4gYnVpbGQgYSBjYXB0aW9uIHN0cmluZyBmcm9tIGA6Y2FwdGlvbicgYXR0cmlidXRlIG9m ICMrQVRUUl9MQVRFWC4KKG9yZy1sYXRleC0taW5saW5lLWltYWdlKTogVGlueSBjaGFuZ2UuCihv cmctbGF0ZXgtLW9yZy10YWJsZSk6IFRpbnkgY2hhbmdlLgoqIGRvYy9vcmcudGV4aSAoQExhVGVY e30gc3BlY2lmaWMgYXR0cmlidXRlcyk6IEFkZCBgOmNhcHRpb24nIGF0dHJpYnV0ZSBkb2N1bWVu dC4KClRoaXMgZmVhdHVyZSBpcyB2ZXJ5IHVzZWZ1bCB3aGVuIHlvdSBleHBvcnQgb3JnIHRvIGxh dGV4IHdpdGggY3VzdG9tCmNhcHRpb24gY29tbWFuZCwgZm9yIGV4YW1wbGU6CgpcIytBVFRSX0xB VEVYOiA6Y2FwdGlvbiBcQmlUYWJsZUNhcHRpb257Y2FwdGlvbiAxfXtjYXB0aW9uIDJ9CnwtLS0r LS0tfAp8IHggfCB5IHwKfC0tLSstLS18CnwgMSB8IDIgfAp8LS0tKy0tLXwKLS0tCiBkb2Mvb3Jn LnRleGkgICAgIHwgICAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLQogbGlzcC9v eC1sYXRleC5lbCB8ICAgMzIgKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0KIDIg5Liq 5paH5Lu26KKr5L+u5pS577yM5o+S5YWlIDQ4IOihjCgrKe+8jOWIoOmZpCAxNiDooYwoLSkKCmRp ZmYgLS1naXQgYS9kb2Mvb3JnLnRleGkgYi9kb2Mvb3JnLnRleGkKaW5kZXggOWU0N2ExNy4uN2Qz NzhkYiAxMDA2NDQKLS0tIGEvZG9jL29yZy50ZXhpCisrKyBiL2RvYy9vcmcudGV4aQpAQCAtMTE1 OTksNiArMTE1OTksMTIgQEAgRW52aXJvbm1lbnQgdXNlZCBmb3IgdGhlIHRhYmxlLiAgSXQgY2Fu IGJlIHNldCB0byBhbnkgQExhVGVYe30gdGFibGUKIGVudmlyb25tZW50LCBsaWtlIEBjb2Rle3Rh YnVsYXJ4fSwgQGNvZGV7bG9uZ3RhYmxlfSwgQGNvZGV7YXJyYXl9LAogQGNvZGV7dGFidX0sIEBj b2Rle2JtYXRyaXh9QGVuZGRvdHN7fSAgSXQgZGVmYXVsdHMgdG8KIEBjb2Rle29yZy1sYXRleC1k ZWZhdWx0LXRhYmxlLWVudmlyb25tZW50fSB2YWx1ZS4KK0BpdGVtIDpjYXB0aW9uCitCeSBkZWZh dWx0LCB5b3Ugc2hvdWxkIHVzZSBAY29kZXsjK2NhcHRpb259IGtleXdvcmQgdG8gYWRkIGEgdGFi bGUgY2FwdGlvbi4KK0lmIHlvdSB3YW50IHRvIGFkZCBjYXB0aW9uIHdpdGggY29tcGxleCBvciBz cGVjaWFsIGxhdGV4IGNvbW1hbmRzLCB5b3UgY2FuIHVzZQorQGNvZGV7OmNhcHRpb259IGF0dHJp YnV0ZS4gSXQgd2lsbCBwcmVjZWRlbmNlIG92ZXIgQGNvZGV7IytjYXB0aW9ufSBrZXl3b3JkLgor SXQgc2hvdWxkIGJlIHNldCB3aXRoIHJhdyBsYXRleCBjb21tYW5kIGFuZCBub3RoaW5nIGluIGl0 IHdpbGwgYmUKK2ludGVycHJldGVkIGJ5IE9yZy4KIEBpdGVtIDpmbG9hdAogQGl0ZW14IDpwbGFj ZW1lbnQKIEZsb2F0IGVudmlyb25tZW50IGZvciB0aGUgdGFibGUuICBQb3NzaWJsZSB2YWx1ZXMg YXJlIEBjb2Rle3NpZGV3YXlzdGFibGV9LApAQCAtMTE2NTEsNiArMTE2NTcsMTggQEAgYSB0YWJs ZSB0aGF0IHdpbGwgc3BhbiBvdmVyIG11bHRpcGxlIHBhZ2VzLCBvciBhIG1hdHJpeCBwcm9kdWN0 OgogfCAzIHwgNCB8CiBAZW5kIGV4YW1wbGUKIAorCitXaGVuIGV4cG9ydCB0aGUgYmVsb3cgZXhh bXBsZSB0byBsYXRleCwgdGhlIHRhYmxlIGNhcHRpb24gd2lsbCBiZSBzZXQKK3dpdGggbGF0ZXgg Y29tbWFuZCBAY29kZXtcYmljYXB0aW9uQHtIZWFkaW5nIEFAfUB7SGVhZGluZyBCQH19IGluc3Rl YWQgb2YKK0Bjb2RleyMrQ0FQVElPTn0ga2V5d29yZHMuCisKK0BleGFtcGxlCisjK0NBUFRJT046 IEhlYWRpbmcgQworIytBVFRSX0xBVEVYOiA6Y2FwdGlvbiBcYmljYXB0aW9uQHtIZWFkaW5nIEFA fUB7SGVhZGluZyBCQH0KK3wgLi4uLi4gfCAuLi4uLiB8Cit8IC4uLi4uIHwgLi4uLi4gfAorQGVu ZCBleGFtcGxlCisKIEBzdWJzdWJoZWFkaW5nIEltYWdlcyBpbiBATGFUZVh7fSBleHBvcnQKIEBj aW5kZXggaW1hZ2VzLCBpbmxpbmUgaW4gQExhVGVYe30KIEBjaW5kZXggaW5saW5pbmcgaW1hZ2Vz IGluIEBMYVRlWHt9CkBAIC0xMTY2Myw5ICsxMTY4MSwxNyBAQCBUaWtaIChAdXJse2h0dHA6Ly9z b3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcGdmL30pIGltYWdlcywgaXQgd2lsbCBiZWNvbWUgYW4K IEBjb2Rle1xpbnB1dH0gbWFjcm8gd3JhcHBlZCB3aXRoaW4gYSBAY29kZXt0aWt6cGljdHVyZX0g ZW52aXJvbm1lbnQufS4KIAogWW91IGNhbiBzcGVjaWZ5IHNwZWNpZnkgaW1hZ2Ugd2lkdGggb3Ig aGVpZ2h0IHdpdGgsIHJlc3BlY3RpdmVseSwKLUBjb2Rlezp3aWR0aH0gYW5kIEBjb2RlezpoZWln aHR9IGF0dHJpYnV0ZXMuICBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGFkZCBhbnkKLW90aGVyIG9w dGlvbiB3aXRoIHRoZSBAY29kZXs6b3B0aW9uc30gYXR0cmlidXRlLCBhcyBzaG93biBpbiB0aGUg Zm9sbG93aW5nCi1leGFtcGxlOgorQGNvZGV7OndpZHRofSBhbmQgQGNvZGV7OmhlaWdodH0gYXR0 cmlidXRlcy4gSWYgeW91IHdhbnQgdG8gc2V0IGltYWdlCitjYXB0aW9uIHdpdGggc3BlY2lhbCBs YXRleCBjb21tYW5kLCB5b3UgY2FuIHVzZSBAY29kZXs6Y2FwdGlvbn0gYXR0cmlidXRlLAorZm9y IGV4YW1wbGU6CisKK0BleGFtcGxlCisjK0FUVFJfTEFURVg6IDpjYXB0aW9uIFxiaWNhcHRpb25A e0hlYWRpbmcgQUB9QHtIZWFkaW5nIEJAfQorW1suL2ltZy9zZWQtaHI0MDQ5LnBkZl1dCitAZW5k IGV4YW1wbGUKKworSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhZGQgYW55IG90aGVyIG9wdGlvbiB3 aXRoIHRoZSBAY29kZXs6b3B0aW9uc30KK2F0dHJpYnV0ZSwgYXMgc2hvd24gaW4gdGhlIGZvbGxv d2luZyBleGFtcGxlOgogCiBAZXhhbXBsZQogIytBVFRSX0xBVEVYOiA6d2lkdGggNWNtIDpvcHRp b25zIGFuZ2xlPTkwCmRpZmYgLS1naXQgYS9saXNwL294LWxhdGV4LmVsIGIvbGlzcC9veC1sYXRl eC5lbAppbmRleCAwOTkyOGE0Li5jZTA0ZDU3IDEwMDY0NAotLS0gYS9saXNwL294LWxhdGV4LmVs CisrKyBiL2xpc3Avb3gtbGF0ZXguZWwKQEAgLTg4MSwxNyArODgxLDE5IEBAIEZvciBub24tZmxv YXRzLCBzZWUgYG9yZy1sYXRleC0td3JhcC1sYWJlbCcuIgogCQkgICAgICAoZm9ybWF0ICJcXGxh YmVseyVzfSIKIAkJCSAgICAgIChvcmctZXhwb3J0LXNvbGlkaWZ5LWxpbmstdGV4dCBsYWJlbCkp KSkKIAkgKG1haW4gKG9yZy1leHBvcnQtZ2V0LWNhcHRpb24gZWxlbWVudCkpCi0JIChzaG9ydCAo b3JnLWV4cG9ydC1nZXQtY2FwdGlvbiBlbGVtZW50IHQpKSkKLSAgICAoY29uZAotICAgICAoKGFu ZCAobm90IG1haW4pIChlcXVhbCBsYWJlbC1zdHIgIiIpKSAiIikKLSAgICAgKChub3QgbWFpbikg KGNvbmNhdCBsYWJlbC1zdHIgIlxuIikpCi0gICAgIDs7IE9wdGlvbiBjYXB0aW9uIGZvcm1hdCB3 aXRoIHNob3J0IG5hbWUuCi0gICAgIChzaG9ydCAoZm9ybWF0ICJcXGNhcHRpb25bJXNdeyVzJXN9 XG4iCi0JCSAgICAob3JnLWV4cG9ydC1kYXRhIHNob3J0IGluZm8pCi0JCSAgICBsYWJlbC1zdHIK LQkJICAgIChvcmctZXhwb3J0LWRhdGEgbWFpbiBpbmZvKSkpCi0gICAgIDs7IFN0YW5kYXJkIGNh cHRpb24gZm9ybWF0LgotICAgICAodCAoZm9ybWF0ICJcXGNhcHRpb257JXMlc31cbiIgbGFiZWwt c3RyIChvcmctZXhwb3J0LWRhdGEgbWFpbiBpbmZvKSkpKSkpCisJIChzaG9ydCAob3JnLWV4cG9y dC1nZXQtY2FwdGlvbiBlbGVtZW50IHQpKQorCSAoY2FwdGlvbi1mcm9tLWF0dHItbGF0ZXggKG9y Zy1leHBvcnQtcmVhZC1hdHRyaWJ1dGUgOmF0dHJfbGF0ZXggZWxlbWVudCA6Y2FwdGlvbikpKQor ICAgIChjb25kICgob3JnLXN0cmluZy1udy1wIGNhcHRpb24tZnJvbS1hdHRyLWxhdGV4KQorCSAg IChjb25jYXQgY2FwdGlvbi1mcm9tLWF0dHItbGF0ZXggIlxuIikpCisJICAoKGFuZCAobm90IG1h aW4pIChlcXVhbCBsYWJlbC1zdHIgIiIpKSkKKwkgICgobm90IG1haW4pIChjb25jYXQgbGFiZWwt c3RyICJcbiIpKQorCSAgOzsgT3B0aW9uIGNhcHRpb24gZm9ybWF0IHdpdGggc2hvcnQgbmFtZS4K KwkgIChzaG9ydCAoZm9ybWF0ICJcXGNhcHRpb25bJXNdeyVzJXN9XG4iCisJCQkgKG9yZy1leHBv cnQtZGF0YSBzaG9ydCBpbmZvKQorCQkJIGxhYmVsLXN0cgorCQkJIChvcmctZXhwb3J0LWRhdGEg bWFpbiBpbmZvKSkpCisJICA7OyBTdGFuZGFyZCBjYXB0aW9uIGZvcm1hdC4KKwkgICh0IChmb3Jt YXQgIlxcY2FwdGlvbnslcyVzfVxuIiBsYWJlbC1zdHIgKG9yZy1leHBvcnQtZGF0YSBtYWluIGlu Zm8pKSkpKSkKIAogKGRlZnVuIG9yZy1sYXRleC1ndWVzcy1pbnB1dGVuYyAoaGVhZGVyKQogICAi U2V0IHRoZSBjb2Rpbmcgc3lzdGVtIGluIGlucHV0ZW5jIHRvIHdoYXQgdGhlIGJ1ZmZlciBpcy4K QEAgLTE2NTUsNyArMTY1Nyw5IEBAIHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgog CQkgIChjb25kICgoYW5kIChub3QgZmxvYXQpIChwbGlzdC1tZW1iZXIgYXR0ciA6ZmxvYXQpKSBu aWwpCiAJCQkoKHN0cmluZz0gZmxvYXQgIndyYXAiKSAnd3JhcCkKIAkJCSgoc3RyaW5nPSBmbG9h dCAibXVsdGljb2x1bW4iKSAnbXVsdGljb2x1bW4pCi0JCQkoKG9yIGZsb2F0IChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6Y2FwdGlvbiBwYXJlbnQpKQorCQkJKChvciBmbG9hdAorCQkJICAgICAob3Jn LWVsZW1lbnQtcHJvcGVydHkgOmNhcHRpb24gcGFyZW50KQorCQkJICAgICAob3JnLXN0cmluZy1u dy1wIChwbGlzdC1nZXQgYXR0ciA6Y2FwdGlvbikpKQogCQkJICdmaWd1cmUpKSkpCiAJIChwbGFj ZW1lbnQKIAkgIChsZXQgKChwbGFjZSAocGxpc3QtZ2V0IGF0dHIgOnBsYWNlbWVudCkpKQpAQCAt MjMzMyw3ICsyMzM3LDkgQEAgVGhpcyBmdW5jdGlvbiBhc3N1bWVzIFRBQkxFIGhhcyBgb3JnJyBh cyBpdHMgYDp0eXBlJyBwcm9wZXJ0eSBhbmQKIAkJCSAoKGFuZCAobm90IGZsb2F0KSAocGxpc3Qt bWVtYmVyIGF0dHIgOmZsb2F0KSkgbmlsKQogCQkJICgoc3RyaW5nPSBmbG9hdCAic2lkZXdheXN0 YWJsZSIpICJzaWRld2F5c3RhYmxlIikKIAkJCSAoKHN0cmluZz0gZmxvYXQgIm11bHRpY29sdW1u IikgInRhYmxlKiIpCi0JCQkgKChvciBmbG9hdCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNhcHRp b24gdGFibGUpKQorCQkJICgob3IgZmxvYXQKKwkJCSAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6Y2FwdGlvbiB0YWJsZSkKKwkJCSAgICAgIChvcmctc3RyaW5nLW53LXAgKHBsaXN0LWdldCBh dHRyIDpjYXB0aW9uKSkpCiAJCQkgICJ0YWJsZSIpKSkpKQogCSA7OyBFeHRyYWN0IG90aGVycyBk aXNwbGF5IG9wdGlvbnMuCiAJIChmb250c2l6ZSAobGV0ICgoZm9udCAocGxpc3QtZ2V0IGF0dHIg OmZvbnQpKSkKLS0gCjEuNy4xMC40Cgo= --f46d041827f48f156b04e05fea80--