Newbie questions about Pliant

Newbie questions about Pliant

Nesting style files

Can figure out how to include one style file inside the other.
Message posted by maybe Boris Reitman on 2006/11/09 17:44:37
File: a.style
--------------------------------------
module "/pliant/language/compiler.pli"
module "/pliant/protocol/http/style/common.pli"
module "/pliant/protocol/http/server.pli"
module "b.style"

public
  tag_prototype mytag1 xxx
    attr xxx Str
    void

style_setup
  tag_html mytag1
    mytag2
      text xxx
----------------------------------------

File: b.style
----------------------------------------
module "/pliant/language/compiler.pli"
module "/pliant/protocol/http/style/common.pli"
module "/pliant/protocol/http/server.pli"

public
  tag_prototype mytag2
    body

style_setup
  tag_html_open mytag2
    write "<font color=red>"
  tag_html_close mytag2
    write "</font>"
----------------------------------------

File: test_a.page
----------------------------------------
style "a.style"
mytag1 "hello world
----------------------------------------

I expect "hello world" to show in red, but it shows in black.
This is the html output:

--------------------------
<mytag2>hello world</mytag2>
--------------------------

It doesn't know how to render mytag2.

Also, can you please explain how "style", "style_setup", and "tag_html*" are handled.
At what point are tag_html* noticed and compiled ?

Thanks,
Boris
Message posted by hubert.tonneau on 2006/11/09 19:42:47
Each new tag such as 'mytag1' and 'mytag2' in your example,
is assigned a set of pointers indices in the HtmlPage content data structure
(more precisely in it's tag_stack field).
At any time of the .page execution, the pointers will point to the function
truely producing the tag HTML output.
So, in a .page, the true code executed by a 'mytag1' or 'mytag2' instruction
will be: fetch the function thanks to it's pointer in the tag_stack field,
and execute it.

'style_setup' is an easy way to say:
here are the new bindings.
A binding is changing a pointer in tag_stack field of HtmlPage.

'tag_html_open' and 'tag_html_close' are convienient ways to provide the
functions truely providing HTML output and perform the bindings.

'style' instruction in a .page does two things:
. include the specified module
. tels that the 'style_setup' section of the included module must be executed
  before starting to execute the .page content

So, in your example you just need to add a
style "b.style"
instruction in your .page so that the 'style_setup' bloc of b.style will be
executed, so that the 'mytag2' binding will be performed.