PMario,

Thanks for this explanation. It was very helpful.

On Sunday, July 11, 2021 at 10:06:08 AM UTC-4 PMario wrote:

> Hi David, 
>
> I hope you feel better now ;)
>
> So the only thing I can do here is : Try to explain how the parser 
> algorithm works, so that you can see, why it behaves the way as it does. 
>
> ===========================
>
> The tiddlywiki parser knows 2 types of rules
>
>  - block rules   and
>  - inline rules
>
> For the whole tiddler content it always starts with "block mode" and 
> starts to "scan" for "block rules". If a block is found it switches to 
> "inline mode" and starts to look for "inline rules". ... I call this the 
> "context" here in the post.
>
> Here comes some ''bold'' text.  
>
> It detects the whole text as a paragraph "block" ... which will be 
> rendered like this: ->   Here comes some *bold* text 
>
> As HTML code it looks like this:  <p>Here comes some 
> <strong>bold</strong> text.</p> 
>
> The P element defines the "block"
> The ''bold'' wikitext is an *inline-rule* per definition.
>
> That make sense. right?
>
> --------------
>
> So the question now is, how does the parser detect different blocks of 
> text,  to create paragraph tags around them. ... We all know this rule: 2 
> NewLines .. will split 2 text elements into separated paragraphs. 
>
> eg: 
>
> paragraph 1
>
> paragraph 2
>
> That makes sense. right?
> ---------------------
>
> text 1
> text 2
>
> Doesn't contain 2 new-lines but 1 ... It's inline mode and it will be 
> translated to the following HTML code
>
> <p>text 1
> text 2</p>
>
> You can see the new-line is still there BUT HTML ignores whitespace per 
> specification. ... So the browser shows the text like this
>
> text 1text 2
>
> So it's not a TW problem, it's the browser that follows the rules. ... 
> TiddlyWiki has a wikitext rule to compensate this problem 
> <https://tiddlywiki.com/#Hard%20Linebreaks%20in%20WikiText>. 
> Hard-Linebreaks
>
> """
> text 1
> text 2 
> """
>
> Which creates this: <p>text 1<br>text 2<br></p> which tells the browser 
> to add line-breaks.  
>
> A second method to achieve a similar result is Hard linebreaks with CSS 
> <https://tiddlywiki.com/#Hard%20Linebreaks%20with%20CSS:[[Hard%20Linebreaks%20with%20CSS]]%20[[Hard%20Linebreaks%20with%20CSS%20-%20Example]]>.
>   
> Which works well for wikitext. It may cause problems with macros and 
> widgets.
>
> ================================
>
> You may say: BUT the following macros only have 1 new-line between them. 
>
> <<macrocall>>
> <<macrocall2>>
>
> I say: Yes, you are right. ... But *macros *and *transclusions *have to 
> be able to inherit the mode from their context. ... eg: 
>
> \define bold(text) ''$text$''
>
> Here comes some <<bold bold>> text. 
>
> The parser starts at line 1 character 1 and detects some text. The "end 
> marker" for text blocks is .... 2 new-lines
> After the block of text is detected, it switches to *inline-mode*. 
>
> It detects the macro within this context, so the macro is rendered in 
> inline mode.
>
> The text is translated to the following HTML code: <p>Here comes some 
> <strong>bold</strong> text.</p> 
>
> That's what we expect. Right?  
>
> ----------
>
> As written above macros and transclusions do inherit the mode from their 
> context. 
>
> Back to your example: Let's have a look at the "context" here. ... 
>
> \define macrocall() aaa
> \define macrocall2() bbb
>
> <<macrocall>>
> <<macrocall2>>
>
> The context is the whole tiddler body, which starts as block mode. 
> Then the parser detects the start << and the end >> of a macro in line 1. 
> ... There is no other info
> The mode is still block mode, that's why the macro is rendered in block 
> mode like this: <p>aaa</p>
> The parser detects macro start / end in line 2, which will be rendered 
> like this: <p>bbb</p>   
>
> That may not be, what you expected, but the behaviour is consistent. 
> Humans may see the 2 macros as 1 block. ... The wiki parser does not. 
>
> Try this a)
>
> xxxx - <<macrocall>>
> <<macrocall2>>
>
> and this b)
>
> xxxx - <<macrocall>>
>
> <<macrocall2>>
>
> ------------
>
> add a) You can see that it detects some text in front of macro 1. So macro 
> 1 and macro 2 will be part of the text block and will be rendered in 
> inline-mode
> HTML output
>
> <p>xxxx - aaa
> bbb
> </p> 
>
>
>
> add b) Now the xxxx text and macro 1 belong together and macro 2 gets it's 
> own block. 
> HTML output
>
> <p>xxxx - aaa</p><p>bbb</p> 
>
> --------------------
>
> If you compare the HTML output with my descriptions, you will see the 
> algorithm is consistent. ... BUT it may not always be what we expect. 
>
> I hope my descriptions are good enough to show how the "block" and 
> "inline" detection works.  
>
> have fun!
> mario
>

-- 
You received this message because you are subscribed to the Google Groups 
"TiddlyWiki" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/tiddlywiki/905b7ed9-3998-4a35-bf22-5c4ea63fb0c9n%40googlegroups.com.

Reply via email to