public inbox archive for pandoc-discuss@googlegroups.com
 help / color / mirror / Atom feed
From: Albert Krewinkel <albert+pandoc-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
To: pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
Subject: Re: logging.lua and 'light userdata'
Date: Mon, 23 Jan 2023 11:49:54 +0100	[thread overview]
Message-ID: <87bkmpldx5.fsf@zeitkraut.de> (raw)
In-Reply-To: <CAEe_xxjsmxwx4B_f1j4buVT8P+cdVdVw4q8dbtxiuJNoXsNweQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

I've opened https://github.com/jgm/pandoc/issues/8574 for this. We can't
really change the return values of `pandoc.utils.types` for Inlines and
Blocks, as that would break a lot of filters. But we can still strive to
make the output more consistent.

"'William Lupton' via pandoc-discuss" <pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> writes:

> (Creating a new thread with cleaned-up history. Sorry for hijacking
> your thread ChrisD!)
>
> I've merged a small update to logging.lua (just removing the leading
> 'userdata: ' when reporting light userdata values).
>
> Thanks for the explanation Albert. I don't suppose that you really
> want to change the behaviour of pandoc.utils.type(), so I'm not
> really inclined to create an issue suggesting that you should do so.
> However (if you like) I could create an issue suggesting that it be
> slightly more fully documented (e.g., giving some examples of what it
> would return for various pandoc.xxx types).
>
> As for your other earlier suggestion (creating an issue to suggest a
> custom `__pairs` metamethod on PANDOC_WRITER_OPTIONS), would that fix
> the issue? The 0x0 values aren't associated with top-level keys of
> PANDOC_WRITER_OPTIONS, they're (for example) within highlight_style
> (see below). I can't help feeling that we should either do nothing or
> else do something that would work for arbitrary structures (not just
> for PANDOC_WRITER_OPTIONS). Given that I've worked around the problem
> in logging.lua I'd be quite happy to do nothing.
>
> A specific point about the items that have 0x0 values: these are all
> items that have no value, so is it the end of the world if they are
> simply omitted? Mightn't that be more
> whatever-the-lua-equivalent-of-pythonic-is? Yes pairs() won't visit
> them, but an attempt to access them will return nil as expected.
>
> WriterOptions {
>   cite_method: "citeproc"
>   ...
>   highlight_style: {
>     background-color: 0x0
>     line-number-background-color: 0x0
>     line-number-color: "#aaaaaa"
>     text-color: 0x0
>     ...
>
> On Sat, 21 Jan 2023 at 13:18, Albert Krewinkel <
> albert+pandoc-9EawChwDxG8hFhg+JK9F0w@public.gmane.org> wrote:
>
>    
>     "'William Lupton' via pandoc-discuss" <
>     pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> writes:
>    
>     > pandoc.utils.type() return values seem to be a little
>     inconsistent.
>     > For example, it can return:
>     >
>     >     'List' ... for pandoc.List (note: logging.lua leaves this
>     alone)
>     >     'pandoc Xxx' ... for pandoc.Row etc. (note: logging.lua
>     replaces
>     >     the space with a dot)
>     >     'HsLua.JSON.array' ... presumably for arrays that have come
>     via a
>     >     JSON library
>    
>     Thank you for digging and asking! It's great to have more
>     eyeballs in
>     this part of the code.
>    
>     A bit of background: all types have a corresponding entry in the
>     Lua
>     "registry", a global table that contains all sorts of info. The
>     Lua
>     manual states "you should use as key a string containing your
>     library
>     name", hence the "pandoc" and "HsLua" prefixes. Additional
>     inconsistencies are cause by the fact that I didn't follow the
>     Lua
>     manual's advice in the beginning, as name clashes with other
>     packages
>     where not really a concern of mine.
>    
>     > I was toying with not indicating HsLua.JSON.array (i.e.,
>     showing it
>     > like any other table) but perhaps it's better just to report
>     things
>     > as they are. Can any other HsLua.JSON.xxx values be returned,
>     e.g.,
>     > why not HsLua.JSON.object or indeed HsLua.JSON.
>     > {boolean,number,string,null}?
>    
>     There's a technical reason for this: we must be able to
>     round-trip
>     from JSON to Lua to JSON. Both JSON arrays and objects are
>     represented
>     as Lua tables, but how can we know whether an empty Lua table `{}
>     `
>     represents an empty array or an empty object? We solve this by
>     assigning
>     a metatable/type to array values.
>    
>     I guess we could also do this for JSON objects, but the advantage
>     is
>     less clear in that case: being able to add metamethods like
>     `insert`
>     makes sense for lists, but not for objects: String fields can
>     shadow any
>     method, which would most likely lead to subtle bugs. E.g.,
>     `obj:merge(obj2)` would stop working if `obj` has a key `merge`.
>     Adding a metatable to objects would therefore be little more than
>     performance degrading overhead.
>    
>     The other JSON types, boolean, numbers, and strings, map directly
>     to the
>     respective Lua types of the same name, and pandoc.utils.type will
>     report
>     the Lua type name in those cases.
>    
>     Anyway, please do open issues for any inconsistencies you find.
>     We may
>     want to keep some of those old names to keep error messages more
>     readable, but consistency would be nice to have, too.
>    
>     > On Fri, 20 Jan 2023 at 16:33, William Lupton <
>     > wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org> wrote:
>     >
>     >     Update: Until today, logging.lua assumed that pairs() would
>     work
>     >     on all userdata. Option 2 (my favourite) should work well
>     if
>     >     there are ever any other types of userdata (not sure
>     whether
>     >     there ever will be).
>     >   
>     >     On Fri, 20 Jan 2023 at 16:29, William Lupton <
>     >     wlupton-QSt+ys/nuMyEUIsrzH9SikB+6BGkLq7r@public.gmane.org> wrote:
>     >   
>     >         Thanks Albert. I expect I'll raise an issue. I assume
>     >         that this is the only use of light userdata?
>     >       
>     >         Looking more closely (why didn't I do this before?) I
>     see
>     >         that tostring() returns 'userdata: 0x0' for these
>     values, so
>     >         I think it makes sense to report them as one of:
>     >             Whatever tostring() returns
>     >             As above with the leading 'userdata: ' removed     
>          
>     >                    <--- probably my favourite
>     >             As above with '0x0' reported as 'nil' (not sure
>     about
>     >             this)
>     >       
>     >         On Fri, 20 Jan 2023 at 16:05, ChrisD <
>     >         cd34-gg-4SSc53hpTiu9TMao6EloiEEOCMrvLtNR@public.gmane.org> wrote:
>     >       
>     >             On 1/20/2023 2:54 AM, 'William Lupton' via
>     pandoc-discuss
>     >             wrote:
>     >             > I investigated, and parts of the writer options
>     are
>     >             "light userdata" (I hadn't heard of that). I've
>     committed
>     >             and merged a fix that will report such items as "
>     >             <pointer>". You can now list most of the writer
>     options
>     >             (just a few colors show as <pointer>).
>     >           
>     >             Your update works well. (I didn't know about light
>     >             userdata either.) Thanks!
>
>
> On Fri, 20 Jan 2023 at 15:59, Albert Krewinkel <
> albert+pandoc-9EawChwDxG8hFhg+JK9F0w@public.gmane.org> wrote:
>
>    
>     "'William Lupton' via pandoc-discuss" <
>     pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org> writes:
>    
>     > Re this:
>     >
>     >> Also, I tried to print the value of PANDOC_WRITER_OPTIONS, but
>     > wlupton's logging.lua errors on it (bad argument #1 to 'for
>     iterator'
>     > (table expected, got light userdata))
>     >
>     > I investigated, and parts of the writer options are "light
>     userdata"
>     > (I hadn't heard of that). I've committed and merged a fix that
>     will
>     > report such items as "<pointer>". You can now list most of the
>     writer
>     > options (just a few colors show as <pointer>).
>     >
>     > I'm not sure whether the use of light userdata is intentional
>     here
>     > (this isn't a 3.0 thing; it was already the case in previous
>     > versions). Albert?
>    
>     Let's call it semi-intentional: what happens is that we go via
>     JSON to
>     create the Lua representation of the writer options. The problem
>     is
>     that, if a JSON value is `null`, we can't use `nil` in Lua
>     because that
>     would make the key "disappear", i.e., it would not show up when
>     iterating through the resulting table with `pairs`. So, in an
>     effort to
>     gain compatibility with the very popular Lua library "cjson", we
>     represent `null` values as C null pointers. Hence the "light
>     userdata".
>    
>     The one solution I can think of is to set a custon `__pairs`
>     metamethod
>     on PANDOC_WRITER_OPTIONS. That would allow us to set the missing
>     values
>     to `nil`, while still having `pairs(PANDOC_WRITER_OPTIONS)` list
>     all
>     supported keys. Please feel free to raise an issue for this on
>     GitHub.
>
>  


-- 
Albert Krewinkel
GPG: 8eed e3e2 e8c5 6f18 81fe  e836 388d c0b2 1f63 1124

-- 
You received this message because you are subscribed to the Google Groups "pandoc-discuss" group.
To unsubscribe from this group and stop receiving emails from it, send an email to pandoc-discuss+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To view this discussion on the web visit https://groups.google.com/d/msgid/pandoc-discuss/87bkmpldx5.fsf%40zeitkraut.de.


      parent reply	other threads:[~2023-01-23 10:49 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-01-19 13:44 Lua filter to process chunkedhtml output ChrisD
     [not found] ` <d5298c4a-9427-8f5b-c646-6370a3f998df-4SSc53hpTiu9TMao6EloiEEOCMrvLtNR@public.gmane.org>
2023-01-19 17:12   ` John MacFarlane
     [not found]     ` <1D22B433-211B-4033-8A63-F637F52B2008-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2023-01-19 17:14       ` John MacFarlane
2023-01-19 21:32       ` ChrisD
     [not found]         ` <f761231d-87ea-6bfb-38c3-99eb15184263-4SSc53hpTiu9TMao6EloiEEOCMrvLtNR@public.gmane.org>
2023-01-20  9:54           ` 'William Lupton' via pandoc-discuss
     [not found]             ` <CAEe_xxiQAz2MVihALKGes6Ai=UrOPKgkvGq19ULiLsjBhTuTbQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-01-20 15:46               ` Albert Krewinkel
2023-01-20 16:05               ` ChrisD
     [not found]                 ` <fbca8e05-fed7-39e1-08f0-0498c399f33f-4SSc53hpTiu9TMao6EloiEEOCMrvLtNR@public.gmane.org>
2023-01-20 16:29                   ` 'William Lupton' via pandoc-discuss
     [not found]                     ` <CAEe_xxiJdneKg+uqja3tdaWzQSWmc5NfO0aMFKaUGa_W1U5+qg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-01-20 16:33                       ` 'William Lupton' via pandoc-discuss
     [not found]                         ` <CAEe_xxhhsG_NA+PL+5A2TyHHqNOC-=sdi1jX-NYunf9fsHtH1A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-01-21 12:28                           ` 'William Lupton' via pandoc-discuss
     [not found]                             ` <CAEe_xxjkBZfgeh5jDbZNDNrFbG4SKTA0S9qjzaEXgxTr5BZVNw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-01-21 12:33                               ` Albert Krewinkel
     [not found]                                 ` <87fsc4koud.fsf-9EawChwDxG8hFhg+JK9F0w@public.gmane.org>
2023-01-21 17:41                                   ` logging.lua and 'light userdata' 'William Lupton' via pandoc-discuss
     [not found]                                     ` <CAEe_xxjsmxwx4B_f1j4buVT8P+cdVdVw4q8dbtxiuJNoXsNweQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2023-01-23 10:49                                       ` Albert Krewinkel [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87bkmpldx5.fsf@zeitkraut.de \
    --to=albert+pandoc-9eawchwdxg8hfhg+jk9f0w@public.gmane.org \
    --cc=pandoc-discuss-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).