I see this going wrong with =heading level 1 already. I like the numbers in =headN too, by the way, as it makes inconsistencies easier to spot.
> And then replaced [...] and [=...] and /.../ and *...* with their more > POD-like: L[...], C[...], I[...] and B[...] with a bare [foo] working as > a "I have no idea what I'm linking to, but do the right thing" sort of > wikiness, where L[...] is a more structured, POD-like link. For example:
L[] C[] I[] B[] are all hard to read. With <>, the weight is evenly distributed, while with [], the weight is on the outside, next to that capital letter that is just as large.
Visual comparison:
L[] C[] I[] B[] # I is worst L<> C<> I<> B<>
So if [] is going to be used, may I suggest using lc letters with it then?
l[] c[] i[] b[] L[] C[] I[] B[] L<> C<> I<> B<>
Still not great, but better IMO. Why are <> bad, by the way? Can't we just change the meaning to be qq-like, that is: with nested content? That means only for non-unicode >><< you need extra angle brackets.
Or maybe we introduce [] as an alternative for <>.
Also, how is C[@*INC[-1]] parsed? # I find this very hard to parse, # visually
Likewise, %?INC{something}?
Two possible sources of inspiration for the whole documentation thing:
* Text::MetaMarkup * Paragraphs CAN begin with a block level html tag, "h1: heading" * Inline HTML tags can be used as "{b:bold}" * Paragraph starting with * is a list * Paragraph starting with # is comment * Verbatim paragraphs simply start with "pre:" * No support for tables yet
Upon reading this, it is unclear to me whether you have read about the Kwid format or you are simply guessing that Kwid is the same syntax used by Kwiki.
It is not the same format at all. Kwid is merely /inspired/ by Kwiki, which in turn is inspired by the (more usenix) features of modern wiki languages. It is more fair to say that Kwid is much more inspired by Pod than Kwiki.
To create Kwid I carefully studied the POD information model (the semantic tree that POD parses to). Kwid uses the exact same info model. This means that switching between the two without loss of information is possible.
This makes the Kwid experiment much less risky, since it will be trivial to convert in either direction.
As to the syntax, care has been taken to ensure that all the corner cases are covered. And also covered elegantly.
Some people have argued that Kwid is only a syntactic change to Pod. I would argue that they are correct. :) But this does not mean it is not an important change. Kwid has an emphasis on minimizing the markup, and using the markup one might use to discuss programming in everyday email. This is hard to do in POD, but very easy to do in Kwid. Thus a bug win.
It is also wrong to imply that important semantic changes cannot be made in the future. Things like introspection and transclusion. But that is not the current concern.
In reality, Kwid does vary ever so slightly in semantics from POD. But only in cases where POD seemed to have a wart. For instance Kwid allows named hyperlinks: [The Pugs Source|http://svn.openfoundry.org/pugs].
Cheers, Brian
On 15/03/05 11:46 -0500, Aaron Sherman wrote:
> Wherein I propose (to the wrong list, sigh) a re-envisioning of Kwid in > a more POD-like form.
> I did leave out some POD markup forms. Assume that, if I did not mention > them, then I think they should keep the same prefix character (e.g. X<>)
Content-Description: Forwarded message - Re: [RFC] A more extensible/flexible POD (ROUGH-DRAFT)
> From: Aaron Sherman <a...@ajs.com> > Date: Tue, 15 Mar 2005 11:43:39 -0500 > To: Stevan Little <ste...@iinteractive.com> > Cc: perl6-compi...@perl.org > Subject: Re: [RFC] A more extensible/flexible POD (ROUGH-DRAFT) > X-Mailer: Ximian Evolution 1.4.6 (1.4.6-2)
> On Tue, 2005-03-15 at 09:37, Stevan Little wrote: > > On Mar 15, 2005, at 12:54 AM, Nigel Hamilton wrote:
> > > There is a need for a higher level 'structural' documentation that > > > hypertext is well suited to cover - something that spans more than one > > > module. This will be especially important for CPan6 and connecting > > > versions, and modules into bigger 'packages'.
> > Agreed as well. It would be nice if CPAN6 or CP6AN or FreePAN (or > > whatever it will eventually be called) have a more sophisticated > > linking/documentation system which goes beyond the actual single > > module. I even think this would be possible in the current CPAN if we > > could get the L<> construct fixed, but that is another issue.
> Actually, I don't think that's at all another issue. It's the core of > what you're talking about. L<> gives you the ability to link, and in > several different ways. It's also broken in Perl 5, which makes a > replacement sound attractive, but fixing it solves for much of that > need.
> Taking a cue from the wiki world makes sense to me. Kwid is almost ideal > as far as I can tell in that it:
> a) Does everything POD does > b) Is backward compatible with Perl 5 in that it can be ignored by the > parser in the same way. > c) Makes many things easier
> Now, it does need some tweaking, I think, but nothing too severe. It > just makes a few things harder, and a few other things non-POD-like for > no particular reason. I like C<POD> for the ease of including keywords > in C<perl> documentation. It's also B<trivial> to I<recognize> all > markup quickly (visually or programmaticly).
> Kwid /on the other hand/ makes it a bit harder to [=find] that markup, > and is *thus* not quite as easy to de-parse visually.
> I'd be thrilled if we just changed the "."-introduced things to > "="-introduced things:
> = heading level 1 > == heading level 2 > =begin list > * You don't really need the begin > * But it doesn't hurt > * and it allows > some(code()) > to appear inside a list item. > * Hmmm > =end list
> And then replaced [...] and [=...] and /.../ and *...* with their more > POD-like: L[...], C[...], I[...] and B[...] with a bare [foo] working as > a "I have no idea what I'm linking to, but do the right thing" sort of > wikiness, where L[...] is a more structured, POD-like link. For example:
> = Proposed Kwid Changes > == Introduction > It is my I[goal] to introduce an easier to use (for [POD] users) > version of [Kwid], and impose it B[mercilessly] on the heathen > masses!
> Markup can consist of C[[]]-delimited text such as C[[Kwid]] or > a prefixed C[[]]-delimited text such as C[C[Kwid]]. Possible > prefixes are: > =begin list > *= L > A structured link ala POD C[L<>] > *= B, I > Bold or italics > *= C > Code > =end list > Anywhere a C[[]] can be used, a C[{}] can also be used. This is > useful when you need to enclose unbalanced C[{], C[}], C{[}, > or C{]} characters.
> All formatting is introduced with C[=for] just as in POD, so:
> =for html <hr />
> works as you might expect. C[=begin] is similar, but introduces > a block, ended by C[=end]
> =for html,xhtml,xml <img src="foo.png" alt="A foo!" /> > =begin !html,xhtml,xml > You can't see the image, but it would be pretty! > =end !html,xhtml,xml
> Notice the use of C[!format[,format...]] to indicate all formats > not listed.
> "comment" is the null format, so you can always introduce a > C[=for comment] or C[=begin comment], but lines which start with > C[#] are always treated as comments anyway.
> Lists are introduced with C[=begin list], which is a special > format. A list can be numbered, bulletted or defintion-style. > Each type is introduced differently, e.g.:
> *1 numbered > * bullets > *= term > definition
> Only a C[1] can follow the C[*]. So, your numbered list would > look like:
> *1 First > *1 Second > *1 Third
> This tells Kwid to number your items, but does not allow strange > things like:
> *2 First prime > *3 Second prime > *5 Third prime
> For that, you need C[*=]
> Thoughts?
> > Well, not everyone likes HTML (although I can't imagine why).
> * It's hard for humans to read > * It imposes too much display-think on what should be content-think > * It is not a proper super-set of the other documentation formats.
> XHTML addresses some of this, but still provides far too much > display-oriented power for a high-level markup like POD or Kwid.
> -- > Aaron Sherman <a...@ajs.com> > Senior Systems Engineer and Toolsmith > "It's the sound of a satellite saying, 'get me down!'" -Shriekback
On Wed, Mar 16, 2005 at 12:00:28PM -0500, Aaron Sherman wrote:
> The one obvious thing to POD users is the replacement of <> with [] or > {}. Why is this? Because < and > are used in un-balanced ways in a large > number of situations, so they should not be the primary bracketing > constructs.
Actually, I quite like <> as the bracketing characters. They are visually distinctive, they connect well with their adjacent C/X/L/etc without visually merging into it (compare L<foo> with L[foo]), and in the circumstance that you want to bracket an unbalanced bracket, you just double (triple, whatever) up and add some space:
On Tue, 2005-03-15 at 13:48, Brian Ingerson wrote: > Aaron,
> Upon reading this, it is unclear to me whether you have read about the > Kwid format or you are simply guessing that Kwid is the same syntax > used by Kwiki.
I read the Kwid documentation from the Pugs distribution in depth.
To create Kwid I carefully studied the POD information model (the semantic tree that POD parses to). Kwid uses the exact same info model. This means that switching between the two without loss of information is possible.
I noted that in my original message.
This makes the Kwid experiment much less risky
Risk was not my concern. My concern was a Wiki-like model which is inconsistent with many of the goals of POD. POD is intended to be PLAIN OLD documentation. Kwid breaks this model of simplicity by introducing unique boundary characters for many types of operations, and by making the overall presentation more complex.
While I appreciate several features of Kwid, I feel that it should not replace POD without first adopting a POD-like simplicity.
Some people have argued that Kwid is only a syntactic change to Pod. I would argue that they are correct.
They are demonstrably wrong. You cannot Parse Kwid correctly by changing the syntax of a POD parser.
For example, the behavior of
* foo bar
Is totally dependent on what context it is enclosed in (.list or top-level). This cannot be emulated with simple syntactic changes to a POD parser.
Interestingly, this is one of the main benefits of Kwid, IMHO.
Re-read what I wrote and think about it. I think you'll find that it avoids some of the major pitfalls of old-POD and incorporates all of the useful features of Kwid while maintaining a simplicity that is as elegant as POD's.
POD 1:1 mappings:
POD My Kwid Proposal x<...> x[...] or x{...} (where x is C, B, I, X, L, etc) =item * * =item foo *= foo =item n *1 =for someformat =for someformat =over n =begin list
The one obvious thing to POD users is the replacement of <> with [] or {}. Why is this? Because < and > are used in un-balanced ways in a large number of situations, so they should not be the primary bracketing constructs. Also because the visual cue to many users of POD is that it's SGML-like, and that way lies danger, since POD's <>-bracketed constructs are not intended to be balanced.
Also, there should be a "=begin block" which in HTML would be <blockquote>, and in POD would be "=over n".
Kwid 1:1 mappings:
Kwid My Kwid Proposal * * .list =begin list ... =end list .someformat =begin someformat ... =end someformat .comment =begin comment ... =end comment [generic] [generic]
Extensions I proposed:
=begin x,y,z Section used only in the given formats =begin !x,y,z Section NOT used in the given formats
As you can see, what I proposed IS a simple syntactic transformation of Kwid.
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
On Wed, 2005-03-16 at 12:25, David Storrs wrote: > I quite like <> as the bracketing characters. They are > visually distinctive, they connect well with their adjacent C/X/L/etc > without visually merging into it (compare L<foo> with L[foo]), and in > the circumstance that you want to bracket an unbalanced bracket, you > just double (triple, whatever) up and add some space:
> C<< $x > $y >>
> Looks pretty clear to me.
You are confusing aesthetics with usability. Yes, the above looks clear, but then I have to type "C<< " and " >>" just to tell the POD parser that there might be unbalanced < or > characters in my string. You're failing to apply Larry's rules of Perl 6. Huffman and the "easy things easy, while hard things are possible" principles demand that a common case not require copious extra gunk, and noting could be simpler than:
C[$x > $y] is about as B[easy] as it gets in [Perl]
vs:
C<< $x > $y >> is about as B<easy> as it gets in L[Perl|perl]
without going full Wikish:
[=$x > $y] is about as *easy* as it gets in [Perl]
However, saving a couple of keystrokes and cleaning up the above text is inconsequential compared to the massive savings in terms of taking advantage of the legions of people who are learning Wiki syntax these days. Making POD *more* Wiki-like without sacrificing useful features of POD is invaluable in terms of tech writers and other non-Perl-programmers writing useful docs in POD!
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
> On Tue, 2005-03-15 at 13:48, Brian Ingerson wrote: > > Aaron,
> > Upon reading this, it is unclear to me whether you have read about the > > Kwid format or you are simply guessing that Kwid is the same syntax > > used by Kwiki.
> I read the Kwid documentation from the Pugs distribution in depth.
> To create Kwid I carefully studied the POD information model > (the semantic tree that POD parses to). Kwid uses the exact same > info model. This means that switching between the two without > loss of information is possible.
> I noted that in my original message.
> This makes the Kwid experiment much less risky
> Risk was not my concern. My concern was a Wiki-like model which is > inconsistent with many of the goals of POD. POD is intended to be PLAIN > OLD documentation.
I think consistency with "goals" is fine, but consistency with the "data model" is more important. POD has a very nice data model that maps well to other formats. It is really well done. So logic stands that any format which can map cleanly to POD and yet offer an advantages to the author is a benefit to the author without needing to retool the extensions. Further any dialect can be converted to any other without information or structure loss.
POD's syntax is certainly good enough, but doesn't match the way that people commonly write structured prose; especially in this era of text based formatting such as in wikis. POD's syntax /elegance/ also tends to break down into workarounds too fast in edge cases.
NOTE: POD does have some minor warts in the data model, but they can be fixed later on.
> Kwid breaks this model of simplicity by introducing unique boundary > characters for many types of operations, and by making the overall > presentation more complex.
Let's look at an example and explore the rationale:
Pod uses this syntax B<bold stuff> which is fine, but it is a very common idiom to use *bold stuff* outside of Pod. Usenet posts, email, irc, etc. People use this, they grok it, and lots of tools grok it as well. (I'm thinking irc clients as an example).
So how do we get *there* formally and avoid making a mess where * is just supposed to be an asterisk?
Kwid does this by formally changing
X<...>
into
{X...X}
Where `X` is any Pod code like `B`, `I` or `C`. Since there are only 3 codes in common use (ignore `L` for a second), Kwid thus uses {*bold*} {/italic/} and {`code`}.
This has a subtle but significant advantage over X<...>. The difference is that instead of the ending marker being '>' it is 'X}', which is orders of magnitude less likely to show up in the content being escaped. This means you avoid the X<< ... >> mess almost entirely.
But the better part of this is that the Kwid forms can be relaxed to drop the curlies in most cases. This technique uses the principle of "hugging". So you can say *$a = $b * $c* and get the bolded equation since the middle * isn't hugging anything. Hugging is a nontrivial heuristic, but let's just say it Does The Right Thing. And if you aren't sure just say {*$a = $b * $c*}. ie, just add some curlies to what you already have.
*Bold* and /italics/ are rather obvious, intuitive and commonly used. Backticks for `code` was chosen because backticks are rarely used in code. Except of course when writing about Kwid itself. But to get C<`code`> you just go to the curlies: {``code``}. Simple. Backticks also seem to be right visually, but that's just my opinion.
For L<...>, I decided to use the very common wiki idiom of [...] for a link. Everything in the `...` is the same as Pod.
I is purely subjective whether Kwid's overall presentation is more or less complex than Pod's. Kwid attempts to elegantly move towards the modern internet era of social software, with the hope that those participating in those arenas might feel more at home.
> While I appreciate several features of Kwid, I feel that it should not > replace POD without first adopting a POD-like simplicity.
> Some people have argued that Kwid is only a syntactic change to > Pod. I would argue that they are correct.
> They are demonstrably wrong. You cannot Parse Kwid correctly by changing > the syntax of a POD parser.
> For example, the behavior of
> * foo > bar
The behaviour of this is completely consistent. You may need to reread the perlkwid document for it has recently changed.
ie
* foo bar * baz boom
matches
* foo bar * baz boom
matches
.list * foo bar * baz boom .list.
The explicit `.list` is only needed when the parser cannot guess from the context.
...
I would encourage those interested in further fleshing out Kwid to join irc://irc.freenode.net/#kwid where all of this is actively being discussed.
> On Wed, 2005-03-16 at 12:25, David Storrs wrote:
> > I quite like <> as the bracketing characters. They are > > visually distinctive, they connect well with their adjacent C/X/L/etc > > without visually merging into it (compare L<foo> with L[foo]), and in > > the circumstance that you want to bracket an unbalanced bracket, you > > just double (triple, whatever) up and add some space:
> > C<< $x > $y >>
> > Looks pretty clear to me.
> You are confusing aesthetics with usability. Yes, the above looks clear, > but then I have to type "C<< " and " >>" just to tell the POD parser > that there might be unbalanced < or > characters in my string. You're > failing to apply Larry's rules of Perl 6. Huffman and the "easy things > easy, while hard things are possible" principles demand that a common > case not require copious extra gunk, and noting could be simpler than:
> C[$x > $y] is about as B[easy] as it gets in [Perl]
> vs:
> C<< $x > $y >> is about as B<easy> as it gets in L[Perl|perl]
> without going full Wikish:
> [=$x > $y] is about as *easy* as it gets in [Perl]
vs Kwid:
`$x > $y` is about as *easy* as it gets in [Perl]
Did you really read `perlkwid.kwid`? There is simply no mention of `[=...]` as a markup option, which makes me wonder where you got it from?
> However, saving a couple of keystrokes and cleaning up the above text is > inconsequential compared to the massive savings in terms of taking > advantage of the legions of people who are learning Wiki syntax these > days. Making POD *more* Wiki-like without sacrificing useful features of > POD is invaluable in terms of tech writers and other > non-Perl-programmers writing useful docs in POD!
On Wed, 2005-03-16 at 14:17, Brian Ingerson wrote: > Kwid does this by formally changing
> X<...>
> into
> {X...X}
Ok, where is THAT proposal?! I'm reading the doc that's in doc/perlkwid.kwid in the pugs source tree. Hmmm... odd, I just did an update and it's GONE now... was I looking at some phantom doc that had an old spec for Kwid?!
> Where `X` is any Pod code like `B`, `I` or `C`. Since there are only 3 > codes in common use (ignore `L` for a second), Kwid thus uses {*bold*} > {/italic/} and {`code`}.
Well, I'm personally not fond of the bare-bracketting with {}, but as long as it's not a stand-alone /italic/ like it was in the original doc, that sounds fine. Why {/foo/} is more readable than I[foo], I'm not sure... but I'll try to take your word for it.
> For L<...>, I decided to use the very common wiki idiom of [...] for a > link. Everything in the `...` is the same as Pod.
There, I think you're making a small mistake, but not a huge one. I'd separate out magical wiki-like [foo] from pedantic, pod-like L[foo] so that you can get either one. Wiki's [foo] is like a URN, where POD's L[foo] is more in tune with a relative URL.
> > While I appreciate several features of Kwid, I feel that it should not > > replace POD without first adopting a POD-like simplicity.
> > Some people have argued that Kwid is only a syntactic change to > > Pod. I would argue that they are correct.
> > They are demonstrably wrong. You cannot Parse Kwid correctly by changing > > the syntax of a POD parser. > The behaviour of this is completely consistent. You may need to reread the > perlkwid document for it has recently changed.
* Bullet list. 1. Numbered list. Other Term/definition lists
? In POD, that would be:
=item *
Bullet list
=item 1
Numbered list.
=item Other
Term/definition lists
> I would encourage those interested in further fleshing out Kwid to join > irc://irc.freenode.net/#kwid where all of this is actively being > discussed.
Sorry, no access to IRC at work. If the specification of core pieces of P6 are being done off-list, why is there a list?
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
On Wed, 2005-03-16 at 14:24, Brian Ingerson wrote: > vs Kwid:
> `$x > $y` is about as *easy* as it gets in [Perl]
> Did you really read `perlkwid.kwid`?
Yes, and can you please stop asking that question? I read it several times, and you're starting to get just this side of insulting. If I got something wrong, fine, say so. Stop trying to dismiss everything else I've said by suggesting that I'm completely uninformed.
> There is simply no mention > of `[=...]` as a markup option, which makes me wonder where you > got it from?
I got it from that document.... or so I thought. Since it's now deleted, I'm no longer sure. Having a reference again would be nice. It's hard to have a conversation about a document that does not exist.
Ok, that said PLEASE DO NOT USE UNBALANCED CHARACTERS TO DELIMIT! Please, for the love of all that is valid input to any scanner / parser anywhere, do not re-introduce quoting hell. Really. Please. Don't. I'll buy you a beer. I swear, just put the unbalanced operator down and step back.
Sorry, but I use POD specifically because it makes my life simple. Introducing unbalanced quotes into it would remove that functionality. A few examples:
"And then I says, `Mabel,' I says, `shut up.'"
The ``` character is no longer used.
And of course, TONS of Gnu documentation which uses the TeX-friendly:
This is the way you ``quote'' things.
which means cutting-and-pasting such docs is now much more labor-intensive.
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
> On Wed, 2005-03-16 at 14:17, Brian Ingerson wrote:
> > Kwid does this by formally changing
> > X<...>
> > into
> > {X...X}
> Ok, where is THAT proposal?! I'm reading the doc that's in > doc/perlkwid.kwid in the pugs source tree. Hmmm... odd, I just did an > update and it's GONE now... was I looking at some phantom doc that had > an old spec for Kwid?!
Sorry, it has been moved around the pugs source tree a bit. It is currently swinging from the documentation branch:
ext/Pugs-Documentation/perlkwid.kwid
> > Where `X` is any Pod code like `B`, `I` or `C`. Since there are only 3 > > codes in common use (ignore `L` for a second), Kwid thus uses {*bold*} > > {/italic/} and {`code`}.
FYI, it turns out that at least one modern format, [Markdown|http://daringfireball.net/projects/markdown/syntax], uses backticks for code. Markdown doesn't really map to the Pod space very well, but it has a few gems...
> Well, I'm personally not fond of the bare-bracketting with {}, but as > long as it's not a stand-alone /italic/ like it was in the original doc, > that sounds fine. Why {/foo/} is more readable than I[foo], I'm not > sure... but I'll try to take your word for it.
In short you don't need to worry about I[[ $foo[3] ]]. Since the ending marker is '/}', you only ever need to worry about escaping anything but '/}' itself. I might as well show how that would be done:
Those are 3 possible ways to make I<foo /} bar>. Note that '{ ' and ' }' are the "asis" or "leave me alone" indicators. But the real point is that '/}' is rather unlikely to ever show up in italics outside this discussion.
> > For L<...>, I decided to use the very common wiki idiom of [...] for a > > link. Everything in the `...` is the same as Pod.
> There, I think you're making a small mistake, but not a huge one. I'd > separate out magical wiki-like [foo] from pedantic, pod-like L[foo] so > that you can get either one. Wiki's [foo] is like a URN, where POD's > L[foo] is more in tune with a relative URL.
So I will give a little extra info on this...
The idea is to DWIM and there is a lot you can do with the `[...|.../...]` syntax. Pod's strict syntax is:
L<text|resource/"section">
/Text/ is obviously the text that should render. /Resource/ can be a local manpage (ie another Pod document) and then /section/ is a section in that doc. If /resource/ is empty, the current document is assumed.
/Resource/ can also be a fully qualified url and in that case section does not apply.
For some reason Pod does not allow L<text|url> but there seems to be no obvious reason. (This is the the only major thing where Kwid strays from Pod's info model).
I am not certain what use case `L[...]` could get you that isn't already covered by `[...]`.
* And perhaps most importantly, keep the items consistent: either use "=item *" for all of them, to produce bullets; or use "=item 1.", "=item 2.", etc., to produce numbered lists; or use "=item foo", "=item bar", etc. -- namely, things that look nothing like bullets or numbers.
In Kwid, therefore, this:
* Bullet list. + Numbered list. - Other Term/definition lists
would produce 3 single item lists. You can obviously switch types in sublists:
* Bullet list. ++ Numbered list. * another bullet -- Other Term/definition lists
> > I would encourage those interested in further fleshing out Kwid to join > > irc://irc.freenode.net/#kwid where all of this is actively being > > discussed.
> Sorry, no access to IRC at work. If the specification of core pieces of > P6 are being done off-list, why is there a list?
Honestly this project was started as an /experiment/ and was not intended to distract p6l. Kwid requires no extra input from the language side as long as:
=kwid ... =cut
is ignored by the interpreter. This turns out to be the case with both `perl` (Perl 5) and `pugs`. I am fine with some mailing list discussion but I would rather spend the cycles on a reference implementation that could be easily modified later.
> On Wed, 2005-03-16 at 14:24, Brian Ingerson wrote:
> > vs Kwid:
> > `$x > $y` is about as *easy* as it gets in [Perl]
> > Did you really read `perlkwid.kwid`?
> Yes, and can you please stop asking that question? I read it several > times, and you're starting to get just this side of insulting. If I got > something wrong, fine, say so. Stop trying to dismiss everything else > I've said by suggesting that I'm completely uninformed.
Aaron, /please/ take no offense. I just don't understand where you picked `[=...]` up other than that is the (hated) syntax artifact of the original `CGI::Kwiki`. I don't recall ever using it in regards to Kwid. I'm sure there's a reasonable explanation. :)
> > There is simply no mention > > of `[=...]` as a markup option, which makes me wonder where you > > got it from?
> I got it from that document.... or so I thought. Since it's now deleted, > I'm no longer sure. Having a reference again would be nice. It's hard to > have a conversation about a document that does not exist.
> Ok, that said PLEASE DO NOT USE UNBALANCED CHARACTERS TO DELIMIT! > Please, for the love of all that is valid input to any scanner / parser > anywhere, do not re-introduce quoting hell. Really. Please. Don't. I'll > buy you a beer. I swear, just put the unbalanced operator down and step > back.
A beer is tempting...
> Sorry, but I use POD specifically because it makes my life simple. > Introducing unbalanced quotes into it would remove that functionality. A > few examples:
> "And then I says, `Mabel,' I says, `shut up.'"
> The ``` character is no longer used.
> And of course, TONS of Gnu documentation which uses the TeX-friendly:
> This is the way you ``quote'' things.
No problem with this example. `` doesn't /hug/ anything so it shows up asis. Cutting and pasting LaTeX doesn't mess anything up in this regard. But really, you'll likely refactor it to:
This is the way you "quote" things.
Since `` and '' don't do anything for you in either Pod or Kwid.
On Wed, Mar 16, 2005 at 01:30:04PM -0500, Aaron Sherman wrote: > On Wed, 2005-03-16 at 12:25, David Storrs wrote:
> > I quite like <> as the bracketing characters. They are > > visually distinctive, they connect well with their adjacent C/X/L/etc > > without visually merging into it (compare L<foo> with L[foo]), and in > > the circumstance that you want to bracket an unbalanced bracket, you > > just double (triple, whatever) up and add some space:
> > C<< $x > $y >>
> > Looks pretty clear to me.
> You are confusing aesthetics with usability.
No, I am relating simplicity and consistency to usability. If it costs two extra keystrokes, I'm cool with that.
> and noting could be simpler than:
> C[$x > $y] is about as B[easy] as it gets in [Perl]
C[$x[0] > $y] # hmmm...parser ok with that? C[$x[0] > $] # hmmm...error, but what was intended: $y] or $]]?
C<< $x[0] > $y >> # parser's ok (so's the human) C<< $x[0] > $ >> # oh, obviously $y was intended
> However, saving a couple of keystrokes and cleaning up the above text is > inconsequential compared to
"...the power of the Force." Sorry, had to say it.
> the massive savings in terms of taking > advantage of the legions of people who are learning Wiki syntax these > days. Making POD *more* Wiki-like without sacrificing useful features of > POD is invaluable in terms of tech writers and other > non-Perl-programmers writing useful docs in POD!
Here's the real crux of your argument, and the real crux of my problem with this approach. I don't like Wiki syntax; to me, it seems arbitrary and non-unified. I use Wikis, I run one, I recognize their usefulness. I just don't like them.
Here are some of the formatting rules for TWiki (the Wiki version I use):
1) Elements of a bulleted list must match /^ {3}\* / 2) Elements of a numbered list must match /^ {3}1 / 3) Headings must match /^----*\++/. Number of +s determines level 4) *bold* 5) /italic/ 6) =fixed font= 7) <verbatim> put text to be rendered as-is here </verbatim>
What is the organizing priciple? What similarities do they have? Quick, what level heading is this: +++++ ? And this is just the beginning...I didn't even get into the weird cases like ==bold fixed font== and __bold italic__, which have no perceptible relation to their component pieces (I would have expected */bold italics/*). Yes, it's powerful and it can do useful things, but as soon as I stray from the most basic stuff I find myself going back to the docs to look up how it's done.
Contrast this to POD (I'm not trying for point-to-point equivalence):
1) All formatting starts with = in the first column. 2) Every POD command must have a blank line above and below it. 3) A list of any type starts with =over N and finishes with =back 4) List items are denoted with =item X where X is either * (bullets), an int (numbered), or word/phrase. Use only one type per list. 5) Headings are denoted by =head1, =head2, etc 6) Formatting effects are done with X<text> where X is one of: B (bold), C (code), I (italics). You may also use X<< text >> or X<<< text >>> if you have < or > in your text. 7) Text that is indented will be rendered as-is in fixed width font.
Aside from links, that's pretty much the entire perlpodtut boiled down into 7 bullets; a little experimentation to get the hang of it and it all holds together nicely, easy to remember.
I freely admit that the link syntax in POD is difficult to manage and not as powerful as it could be.
--Dks
PS I'm subscribed to the list so feel free to just reply there; I don't need a personal copy as well.
On Wed, 2005-03-16 at 13:42 -0800, Brian Ingerson wrote:
First off, thanks for your kind responses. I'm sure I just got confused by some web page I was looking at, and overwrote part of my stack that I'd just populated from the Kwid doc. And thanks also for pointing me to the Kwid docs where they live now.
> In short you don't need to worry about I[[ $foo[3] ]]. Since the ending > marker is '/}', you only ever need to worry about escaping anything but > '/}' itself. I might as well show how that would be done:
We're suffering a major disconnect over the nature of bracketting.
I see no reason to I[[ $foo[3] ]] at all.
That would simply be I[$foo[3]] ... we are using a real parser here, no? I can't imagine basing this on some pile of regexps, and we all have "matched the balanced brackets" tools at our disposal, regardless of what parser / parser-generator we're using these days.
Here's a simple Parse::RecDescent grammar for my proposal, so that we can talk about it in more reasonable terms. Please note that I'm TERRIBLE with P::RD, so I'm sure someone can figure out why I keep ending up with the string "text_chunk" in my resulting syntax tree ;-)
See attached program and sample input. Just run parseajskwid.pl on ajskwid.kwid.
> For some reason Pod does not allow L<text|url> but there seems to be no > obvious reason. (This is the the only major thing where Kwid strays from > Pod's info model).
That's not POD's info model, that's POD's implementation limitation.
> I am not certain what use case `L[...]` could get you that isn't already > covered by `[...]`.
I'm very happy with the modern Wiki convention (keep in mind, when we talk about Wiki, we're talking about something that's either nearly as old as or older than the Web, depending on what you count as it's birth) of using [...] as a sort of magical indexer. Like I said elsewhere, you might have:
[Kwid] in your document.
This is a hint that you expect there to be a thing named "Kwid" somewhere and you wish that somewhere to be applied thusly:
L[Kwid|somewhere] in your document.
Where L[Kwid] would simply fail because it is as strict as POD, and it won't find L[Kwid|perlkwid].
I'm not thrilled with it (again, too many special characters that people might have thought they could get away with using in their documentation), but it's not too bad at all.
> > Sorry, no access to IRC at work. If the specification of core pieces of > > P6 are being done off-list, why is there a list?
> Honestly this project was started as an /experiment/ and was not > intended to distract p6l. Kwid requires no extra input from the language > side as long as:
> =kwid > ... > =cut
Well, look over AJS Kwid, and see what you think. The bullet syntax you give could work fine as a replacement for what I demonstrate, but I think everything else is pretty much 1:1. Now it's just a matter of: do you make it Wikiish or PODish?
David Storrs <dsto...@dstorrs.com> wrote: > Aside from links, that's pretty much the entire perlpodtut boiled down > into 7 bullets; a little experimentation to get the hang of it and it > all holds together nicely, easy to remember.
Yes, yes, yes.
Pod is one of the things Perl 5 did almost exactly right. It's simple, intuitive, and stays out of your way. It gives you most of the formatting primitives you actually *need*, and nicely balances the need for easy-to-remember and easy-to-type formatting codes with the need to avoid using them on accident. It's a very clean, low-punctuation format, which makes it visually distinctive from the surrounding code.
Specifically, I like the use of angle brackets in Pod. Angle brackets are simple, distinctive shapes; they remain wide in variable-width fonts; they're associated with formatting codes in my (HTML-influenced) mind. The most common use of them in Perl 5--method call/dereference--is going away in Perl 6, which makes them even more usable. (I never have a problem correctly marking up C<< $foo > $bar
>>, but occasionally I carelessly type C<$foo->bar>.)
Pod needs incremental improvements--tables, (maybe) footnotes, simpler links, tweaks to =begin/=end, etc. Pod does *not* need to be ripped out and replaced with something very different, especially something that involves adding "line noise" to documents intended for human consumption.
In my mind at least, Pod has five goals: 1. Simple. 2. Adequate. 3. Easy to write. 4. Easy to convert. 5. Readable without a formatter.
#5 may be last on the list, but it's not least.
-- Brent 'Dax' Royal-Gordon <br...@brentdax.com> Perl and Parrot hacker
"I used to have a life, but I liked mail-reading so much better."
On Thu, 2005-03-17 at 02:17 -0800, Brent 'Dax' Royal-Gordon wrote: > David Storrs <dsto...@dstorrs.com> wrote: > > Aside from links, that's pretty much the entire perlpodtut boiled down > > into 7 bullets; a little experimentation to get the hang of it and it > > all holds together nicely, easy to remember.
> Yes, yes, yes. Pod is one of the things Perl 5 did almost exactly right.
Absolutely, and that's why I'd like to see more POD details preserved.
> It's simple, intuitive, and stays out of your way. It gives you most of > the formatting primitives you actually *need*, and nicely balances the > need for easy-to-remember and easy-to-type formatting codes with the > need to avoid using them on accident. It's a very clean, > low-punctuation format, which makes it visually distinctive from the > surrounding code.
This is the spirit in which I've absorbed some of Kwid into my proposal only where it supports those goals. I've removed some extra formatting characters because I thought that they added too many chances for overlap with real documentation. I've also searched my local PODs to see where AJS Kwid would overlap POD and cause problems (6.4% of my local PODs, for example, start some lines with "*", which would be a minor, but notable problem, but 13.1% start a line with "-" which is a larger problem, thus my "*1" which could easily be "*-" if we prefer that).
> Specifically, I like the use of angle brackets in Pod. Angle brackets > are simple, distinctive shapes; they remain wide in variable-width
This is aesthetic preference. I could cite the reasons that I have an aesthetic preference for the other syntax, but the reality is that angle brackets aren't angle brackets; they are less-than (E<lt>) and greater- than signs (E<gt>). We ignore this fact at our peril, and the hacks in pod syntax (e.g. C<< < >>) to get around this are glaring anti- huffmanisms.
> The most common use of them in Perl 5--method call/dereference--is > going away in Perl 6
Hmm, I remain unconvinced of that as the most common use, especially with the copious use of =>. Still, in my local source tree you're right, though by < a factor of 2.
Perl 6 also adds new uses of E<gt> and E<lt> for pipelining, and further expands the usefulness of the => operator as a pair constructor. Rules also add new uses of these characters, but those are balanced, so improving POD with a real grammar specification would solve for that.
> Pod needs incremental improvements--tables
Oops, forgot that one. I'll add it tonight, when I get home from work.
> (maybe) footnotes
Good point, and I'd add that to X[...] rather than introducing something new, personally.
> simpler links, tweaks to =begin/=end, etc.
I think everything you list above is EXACTLY AJS Kwid, with one exception, which is the dreaded paradigm shift of using [] instead of <>
Much as it may be an EMOTIONAL sticking point, it's a very minor thing. If we can agree on everything else, and I suspect we can, then let's come back to that.
> Pod does *not* need to be ripped > out and replaced with something very different,
yes, yes, yes!
> especially something > that involves adding "line noise" to documents intended for human > consumption.
yes, yes, yes!
Thanks Brent, I'm not sure if you intended your mail as an endorsement, but other than one sticking point, you and I appear to be on the same page. Thank you for your message.
On Wed, 2005-03-16 at 15:09 -0800, David Storrs wrote: > C[$x[0] > $y] # hmmm...parser ok with that? > C[$x[0] > $] # hmmm...error, but what was intended: $y] or $]]?
In the former case, it's fine. See the grammar I sent last night.
In the latter case, you would get balanced-[] matching, and given how hard it is for PERL to do the right thing, there, I think it's fair to fall back on "only perl can parse perl", and just do what the eye suggests is correct. Remember that POD (and thus Kwid) are not intended to be Perl-specific, just Perl-friendly. You can always:
C{$x[0] > $]}
If you need unbalanced []s
That said, I'd be ok with something like Z[name|text] and Z{name|...} for doing external grammars, but it'd still have to live inside one of the balanced operators correctly.
Please also note that as a side-effect of using extract_bracketed in my grammar,
C[\]]
works. This introduces escaping which may or may not be good. It was not a conscious decision, just a side-effect. I PREFER:
C{]}
Which also works.
> C<< $x[0] > $y >> # parser's ok (so's the human) > C<< $x[0] > $ >> # oh, obviously $y was intended
By the same token:
C[ $x[0] > $y ] # Parser's ok C[ $x[0] > $ ] # Parser's ok... human might care
> > the massive savings in terms of taking > > advantage of the legions of people who are learning Wiki syntax these > > days. Making POD *more* Wiki-like without sacrificing useful features of > > POD is invaluable in terms of tech writers and other > > non-Perl-programmers writing useful docs in POD!
> Here's the real crux of your argument, and the real crux of my problem > with this approach. I don't like Wiki syntax; to me, it seems > arbitrary and non-unified.
Agreed.
> I use Wikis, I run one, I recognize their usefulness. I just don't like them.
Fair enough. I don't like them either, for many reasons. I like them in equal measure. It's a bit like sendmail ;-)
> Here are some of the formatting rules for TWiki (the Wiki version I > use):
> 1) Elements of a bulleted list must match /^ {3}\* / > 2) Elements of a numbered list must match /^ {3}1 / > 3) Headings must match /^----*\++/. Number of +s determines level > 4) *bold* > 5) /italic/ > 6) =fixed font= > 7) <verbatim> put text to be rendered as-is here </verbatim>
> What is the organizing priciple? What similarities do they have?
Yes, yes, yes. I agree. See AJS Kwid. Please.
> Contrast this to POD (I'm not trying for point-to-point equivalence):
> 1) All formatting starts with = in the first column.
Add ONE new item to that list: *
> 2) Every POD command must have a blank line above and below it.
Why do you want TWO ways of determining commands? I can see requiring a blank line above OR below, just for readability, but not both. I'm a POD lover. I've used POD since the mid-90s and I'm THRILLED with it. However, there's that nagging problem with having to type:
\n\n=head1 Foo\n\n=head2 Introduction\n\nTopics:\n\n=over 5\n \n=item *\n\nFoo vs. Bar\n\n=item *\n\nC<\n>\n
AJS Kwid:
\n= Foo\n\n== Introduction\n\nTopics:\n* Foo vs Bar\n* C[\n]\n
> 3) A list of any type starts with =over N and finishes with =back
Again, you're asking for a second way to determine what point 1 already told you. If this were code, I might buy that, but it's documentation. We like documentation. We want to encourage documentation and =over ain't the way to encourage nothing ;-)
If you prefer a requirement for a leading blank line for readability, I could see that, and we could talk about it. I do see the value in "=begin list/=end list", but only in cases like this:
=begin list * a * b =end list
=begin list * Apples * Grapes =end list
Where you wish to make it clear that you are ending the first list.
Which do you find more readable:
=over 5
=item C<--help>
Help is given
=item C<--verbose>
Verbosity is given
=item C<--debug>
Debugging is done
=back
vs:
=begin list
*= C[--help] Help is given
*= C[--verbose] Verbosity is given
*= C[--debug] Debugging is done
=end list
Replace *= with + and =begin list with .list and =end list with .list. for the original Kwid proposal.
> 4) List items are denoted with =item X where X is either * (bullets), > an int (numbered), or word/phrase. Use only one type per list. > 5) Headings are denoted by =head1, =head2, etc > 6) Formatting effects are done with X<text> where X is one of: > B (bold), C (code), I (italics). You may also use > X<< text >> or X<<< text >>> if you have < or > in your text. > 7) Text that is indented will be rendered as-is in fixed width font.
There's a 1:1 mapping with all of the above except for the <> vs []/{} and "=head1 heading" vs "= heading", which are simply syntactic transformations. If you want "=head1", then you can add a pre-processor, or we could even have a "=begin head1 / =end head1" for the formatting bondage crowd.
> PS I'm subscribed to the list so feel free to just reply there; I > don't need a personal copy as well.
Ok, will do. Some people filter mail such that a reply to them CCed is seen as "personal" (I do this, for example), some don't. Glad to do what you're comfortable with.
> This is aesthetic preference. I could cite the reasons that I have an > aesthetic preference for the other syntax, but the reality is that angle > brackets aren't angle brackets; they are less-than (E<lt>) and greater- > than signs (E<gt>). We ignore this fact at our peril, and the hacks in > pod syntax (e.g. C<< < >>) to get around this are glaring anti- > huffmanisms.
Other than awareness, this really doesn't have a point to it.
In ASCII, ' was meant as an apostrophe, but we use it as a quote.
Yen was never meant to have anything to do with zipping.
Guillemets originally had nothing to do with parallelization.
The hacks for square brackets are exactly the same. Think of how C[@foo[0]] would be parsed without nesting. And if you say nesting fixes all, then consider C["]"] as a counter-example. Are you willing to parse code in a "simple" documentation format?
> > Pod needs incremental improvements--tables > Oops, forgot that one. I'll add it tonight, when I get home from work.
See PodTables in the Pugs wiki.
> > Pod does *not* need to be ripped out and replaced with something > > very different, > yes, yes, yes!
Agreed.
> > especially something that involves adding "line noise" to documents > > intended for human consumption. > yes, yes, yes!
Agreed, though I like *bold*, /italic/, _underline_ and `code` very much. I'd like an option to enable it.
> On Wed, 2005-03-16 at 13:42 -0800, Brian Ingerson wrote:
> Well, look over AJS Kwid, and see what you think. The bullet syntax you > give could work fine as a replacement for what I demonstrate, but I > think everything else is pretty much 1:1. Now it's just a matter of: do > you make it Wikiish or PODish?
Aaron,
I think AJS Kwid is fine if it fits your brain. It doesn't fit mine in much the same way that Kwid doesn't fit yours, in much the same way that Pod doesn't quite fit either of ours.
The interesting thing to me is that all 3 syntaxes map over the same data model and thus are easily interchangable. The other interesting thing is that all three could be supported without affecting the Perl5 or Perl6 syntax proper.
Sam "mugwump" Vilain refers to each of these syntaxes as /Pod dialects/. He is working on more formally defining the common model or "AST" that these dialects map to.
Given that, I am going to continue working on the Kwid dialect and developing the Kwid tools I have started. The ideas in AJS Kwid seem too different to incorporate without muddying the Kwid vision. I encourage you work on the AJS Kwid dialect too. I would guess that the Kwid tools I'm working on, when completed, could be easily adapted to AJS Kwid.
Cheers, Brian
PS All my work thus far is available in the pugs repository.
On Thu, 2005-03-17 at 09:54, Juerd wrote: > > > Pod needs incremental improvements--tables > > Oops, forgot that one. I'll add it tonight, when I get home from work.
> See PodTables in the Pugs wiki.
Or see the archive of this list, where we hammered it out previously.
YMMV. I'll have the second revision available sometime tonight, I think, hopefully with an AJS Kwid to KwidData to POD translator (lossy, but still mostly workable).
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
On Thu, 2005-03-17 at 12:28, Brian Ingerson wrote: > The interesting thing to me is that all 3 syntaxes map over the same > data model and thus are easily interchangable. The other interesting > thing is that all three could be supported without affecting the Perl5 > or Perl6 syntax proper.
If any of the above was news to you, then I suggest you take another look at why POD (and more generally, any abstract markup language) exists. If any of the above were NOT true, it would be contrary to the entire point of an abstract, layout-neutral markup language.
It is, however, contrary to the spirit of POD for you or me to continue much further down this road (see below).
> Sam "mugwump" Vilain refers to each of these syntaxes as /Pod dialects/. > He is working on more formally defining the common model or "AST" that > these dialects map to.
Why? Seriously, why on earth do you want to encourage the proliferation of variant markup languages?! There aren't enough?
My effort here was to try to PREVENT the proliferation (e.g. by Kwid and POD butting heads and ending up in a stalemate). The only problem is that, presented with a compromise, the Kwid folks seem to be content to ADD it to the list of variants rather than, in fact, compromise and collapse the list.
I'll continue only as far as is needed to propose this in full as an example parser / converter, and then I'm going to stop. My goal is not to proliferate the number of markups further, and I'd MUCH rather see Perl 6 rely on POD than fragment the SINGLE MOST IMPORTANT TASK in creating code to share with the world: documentation.
If I'm left on a desert island with POD, then the only part I'll lament is the desert island.
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
Aaron Sherman <a...@ajs.com> wrote: > > Specifically, I like the use of angle brackets in Pod. Angle brackets > > are simple, distinctive shapes; they remain wide in variable-width
> This is aesthetic preference. I could cite the reasons that I have an > aesthetic preference for the other syntax, but the reality is that angle > brackets aren't angle brackets; they are less-than (E<lt>) and greater- > than signs (E<gt>). We ignore this fact at our peril,
Only in name. Years of HTML and Perl have trained me to treat these as bracketing constructs, and Perl 6 is set to increase that use.
> and the hacks in > pod syntax (e.g. C<< < >>) to get around this are glaring anti- > huffmanisms.
Whatever bracketing character we decide to use, there will always be occasions where we need to use it in an unbalanced way within a formatting code. (Though I do admit that angle brackets are more likely to be unbalanced than other characters.)
The problem I have with square brackets specifically is that they get lost really easily, especially in variable-width fonts. Gmail, for example, displays e-mail in a sans-serif font, and virtually all such fonts have narrow square brackets. The square brackets in your examples were visually lost in the surrounding text--without spaces, square brackets are invisible. That's okay when you're subscripting, because your brain doesn't really need them to understand what's going on, but it's not when you're applying and reading formatting codes.
Further, although Perl 6 is the time to make such a change, I'm not convinced the change is really necessary. We might be able to avoid a few uses of C<< >>, but is that a big enough win to change *yet another* aspect of Perl? Especially an aspect programmers can--and traditionally did--ignore?
> > The most common use of them in Perl 5--method call/dereference--is > > going away in Perl 6
> Hmm, I remain unconvinced of that as the most common use, especially > with the copious use of =>. Still, in my local source tree you're right, > though by < a factor of 2.
Are you looking at your entire source tree, or just the Pod in it? The code in Pod--and especially the short snippets of code typically included in a C<> construct--is very different from arbitrary Perl code.
> Perl 6 also adds new uses of E<gt> and E<lt> for pipelining, and further > expands the usefulness of the => operator as a pair constructor. Rules > also add new uses of these characters, but those are balanced, so > improving POD with a real grammar specification would solve for that.
I definitely support intelligently defining the way Pod handles angle brackets which aren't part of a formatting code. I also think writing a reference grammar would be an excellent idea.
> Thanks Brent, I'm not sure if you intended your mail as an endorsement, > but other than one sticking point, you and I appear to be on the same > page. Thank you for your message.
I intended my e-mail to be an endorsement of Pod as it exists, with extensions rather than a redesign. I think you have mostly the right idea, but I really don't think switching to square brackets is necessary.
By the way, I think I've seen a few people suggest some sort of syntax-switching mechanism for "Pod6". The day people have to think about what dialect of Pod they're using is the day Pod dies as a useful documentation language.
-- Brent 'Dax' Royal-Gordon <br...@brentdax.com> Perl and Parrot hacker
"I used to have a life, but I liked mail-reading so much better."
On Thu, 2005-03-17 at 16:39, Juerd wrote: > Aaron Sherman skribis 2005-03-17 16:30 (-0500): > > > See PodTables in the Pugs wiki. > > Or see the archive of this list, where we hammered it out previously.
> Since when is anything in Perl 6, except its name, set in stone?
> PodTables is a more detailed and more consistent approach to a > suggestion I did long time ago.
I think you're thinking of something else. I'm talking about Luke's proposal from this very list, back in Aug, which was a followup on Larry's comments about my proposal, and which I agreed was far better than what I had suggested in the first place.
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
On Thu, 2005-03-17 at 17:07, Brent 'Dax' Royal-Gordon wrote: > Aaron Sherman <a...@ajs.com> wrote: > > and the hacks in > > pod syntax (e.g. C<< < >>) to get around this are glaring anti- > > huffmanisms.
> Whatever bracketing character we decide to use, there will always be > occasions where we need to use it in an unbalanced way within a > formatting code.
Absolutely yes. See C[...] vs C{...} vs C[\]]
I'm pointing out that the ROUTINE case is to need < and > in unbalanced ways. Hence we have names for them that to not involve the words "open", "close", "left" or "right". We could name "[", "fobit", but then people would automatically call "]" a "right-fobit" or a "close-fobit". We look at a piece of code or documentation that contains an un-balanced fobit and we get a little chill because it's WRONG somehow. THAT is the kind of balanced operator you want to tie your documentation to.
> > > The most common use of them in Perl 5--method call/dereference--is > > > going away in Perl 6
> > Hmm, I remain unconvinced of that as the most common use, especially > > with the copious use of =>. Still, in my local source tree you're right, > > though by < a factor of 2.
> Are you looking at your entire source tree, or just the Pod in it? > The code in Pod--and especially the short snippets of code typically > included in a C<> construct--is very different from arbitrary Perl > code.
I EXPLICITLY ignored POD. I don't have the find+perl that I used handy any more, but I was counting state every time I saw an "^=[hoib]" and decrementing state every time I saw an "^=cut" so that I only counted code... I probably caught some strange gunk after __END__ and __DATA__ tags, but not enough to throw the stats that far off.
It was 23k vs. 44k.
> > Perl 6 also adds new uses of E<gt> and E<lt> for pipelining, and further > > expands the usefulness of the => operator as a pair constructor. Rules > > also add new uses of these characters, but those are balanced, so > > improving POD with a real grammar specification would solve for that.
> I definitely support intelligently defining the way Pod handles angle > brackets which aren't part of a formatting code. I also think writing > a reference grammar would be an excellent idea.
Already done, see my previous message. It's still brain-dead in some places, and I need to re-work it to correctly handle nested operations (e.g. B[I[...]]), but I'll have that soon. It will also, I've decided, parse POD. Just as Perl 6 parses Perl 5 by recognizing the first few statements, AJS Kwid will recognize "=head.*" as an indication that POD is being used, and parse it into KwidData internally so that the same tools could be used.
I'm stopping once it works. I'm not looking to fork POD. If people don't like the proposal, once they can play around with it, then I'll drop it.
-- Aaron Sherman <a...@ajs.com> Senior Systems Engineer and Toolsmith "It's the sound of a satellite saying, 'get me down!'" -Shriekback
Aaron Sherman wrote: >>Sam "mugwump" Vilain refers to each of these syntaxes as /Pod dialects/. >>He is working on more formally defining the common model or "AST" that >>these dialects map to. > Why? Seriously, why on earth do you want to encourage the proliferation > of variant markup languages?! There aren't enough? > My effort here was to try to PREVENT the proliferation (e.g. by Kwid and > POD butting heads and ending up in a stalemate). The only problem is > that, presented with a compromise, the Kwid folks seem to be content to > ADD it to the list of variants rather than, in fact, compromise and > collapse the list. > I'll continue only as far as is needed to propose this in full as an > example parser / converter, and then I'm going to stop. My goal is not > to proliferate the number of markups further, and I'd MUCH rather see > Perl 6 rely on POD than fragment the SINGLE MOST IMPORTANT TASK in > creating code to share with the world: documentation.
Well, I don't think anyone wants to see as many POD dialects as there are wiki text formats (BBCode, anyone?). Maybe there will be something very close to the original POD, but with a verbose way of making tables, and an enhanced linking syntax. But otherwise identical to the original Perl 5 POD.
Note that POD dialects, and differing POD conventions already exist in Perl 5 and are in common use. They were designed in the original POD with the =for tag. At the moment, tools like `pod2html' have to be heavily aware of the POD dialect, which I think is sub-optimal when it comes to some of the really interesting things people have achieved with POD. Look at MarkOv's OODoc, or Test::Inline, for instance.
All I'm trying to do is giving these beasts a name, and defining a mechanism by which they can be used by tools that only know how to deal with "standard" documents - thus giving users the freedom to define a local convention if one of them doesn't quite fit their needs.
Using a local Subversion repository, and Request Tracker, and want to be able to put hyperlinks in POD to refer to these entities? No problem, just extend the dialect and add a link style. Then select from a dozen output tools or variants to see which one works for you.