mirror of
https://github.com/ultimatepp/ultimatepp.git
synced 2026-05-21 06:45:39 -06:00
.Skylark tutorial
git-svn-id: svn://ultimatepp.org/upp/trunk@5138 f0d560ea-af0d-0410-9eb7-867de7ffcac7
This commit is contained in:
parent
71ed4e901e
commit
711d716372
5 changed files with 184 additions and 4 deletions
|
|
@ -473,4 +473,4 @@ function, otherwise is unspecified).]
|
|||
:: [s0; [*C GetSysTime()]]
|
||||
:: [s0; Returns current time as map with `"second`", `"minute`", `"hour`",
|
||||
`"day`", `"month`" and `"year`" members.]}}&]
|
||||
[s0; ]
|
||||
[s0; ]]
|
||||
|
|
@ -19,5 +19,5 @@ COMPRESSED
|
|||
178,213,174,234,84,69,76,11,13,222,60,220,37,21,212,89,244,193,217,182,69,198,67,163,215,29,70,235,235,174,71,212,206,95,79,81,73,230,166,151,79,63,108,35,1,78,129,56,103,218,122,254,74,79,127,92,226,64,219,61,1,254,219,2,196,222,247,112,159,152,182,38,91,15,159,221,204,67,31,121,242,107,252,25,72,201,247,129,249,250,102,97,70,165,109,231,157,37,186,216,114,199,128,228,188,254,219,79,250,93,27,238,140,152,177,186,209,78,10,25,191,119,162,229,85,188,86,248,250,240,38,41,205,85,69,38,11,154,68,167,224,72,56,190,81,64,105,186,216,21,168,120,181,229,84,37,251,195,197,15,49,108,231,6,143,183,211,27,99,105,170,175,109,109,94,193,161,19,142,207,245,113,42,76,109,186,169,72,50,26,207,243,171,3,4,90,159,174,235,183,58,129,125,122,110,46,212,249,134,198,190,49,135,231,86,165,210,239,214,235,45,202,121,143,0,182,203,132,46,4,150,200,55,221,108,33,156,11,192,56,218,16,185,36,21,150,184,171,46,35,2,241,36,52,116,12,
|
||||
159,5,140,187,188,88,200,20,156,173,250,215,118,70,39,219,32,207,57,229,227,232,173,113,26,104,95,5,104,154,169,26,64,246,178,232,181,11,93,3,30,213,35,193,243,206,103,80,53,183,6,159,72,122,248,89,164,135,79,36,93,43,135,160,14,26,247,49,211,240,47,86,210,100,82,152,95,79,117,71,125,93,18,245,6,231,151,195,243,211,94,224,149,68,223,233,59,238,7,43,34,124,171,143,203,49,102,108,227,39,60,51,30,11,208,186,193,85,54,33,255,60,145,129,118,77,8,53,102,10,148,79,68,172,127,233,176,23,47,132,175,39,98,165,113,249,94,156,244,110,227,83,144,242,173,224,110,156,38,91,56,101,115,3,78,29,129,204,136,177,192,74,144,46,79,239,64,235,138,174,20,235,120,203,60,250,93,149,5,132,129,189,220,106,62,99,243,210,180,157,237,210,111,29,8,190,122,230,207,36,53,153,189,134,1,69,223,173,44,40,188,105,18,45,70,123,104,242,4,131,123,193,170,202,162,91,24,175,89,184,34,180,194,45,180,144,186,230,2,8,182,108,234,246,103,182,
|
||||
4,91,91,50,99,74,102,75,245,106,151,251,187,46,186,213,175,189,134,229,96,32,179,105,128,175,222,30,38,112,122,235,163,33,99,122,115,124,204,178,45,47,133,111,25,4,203,146,95,203,85,230,149,146,22,189,118,64,191,242,85,85,26,138,249,247,142,227,35,77,45,116,222,133,177,86,73,63,115,202,236,171,155,222,53,9,3,62,158,41,125,115,253,72,182,240,8,159,192,20,254,22,179,213,192,133,254,141,166,214,3,8,159,127,108,213,237,116,250,189,243,179,115,15,9,254,196,65,201,90,197,214,124,56,189,115,86,205,248,188,34,36,47,202,71,160,81,244,178,238,46,36,36,169,71,98,225,205,77,63,109,220,129,252,90,125,11,5,204,131,90,164,248,133,122,179,191,250,140,14,102,241,125,116,128,47,226,46,225,217,34,58,160,226,35,58,184,151,113,1,95,80,129,123,98,220,181,250,37,89,126,26,93,158,153,105,210,80,111,149,146,63,47,242,117,193,159,246,115,182,148,244,22,220,30,230,254,71,150,239,238,153,193,6,158,166,235,162,160,119,104,19,182,88,235,194,
|
||||
255,53,214,156,241,70,248,31,156,179,231,1,
|
||||
255,53,214,156,241,70,24,254,7,132,32,231,94,
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ file
|
|||
Base.witz,
|
||||
skylark.js,
|
||||
Info readonly separator,
|
||||
src.tpp,
|
||||
srcdoc.tpp;
|
||||
|
||||
custom() ".css",
|
||||
|
|
|
|||
80
uppsrc/Skylark/src.tpp/Witz$en-us.tpp
Normal file
80
uppsrc/Skylark/src.tpp/Witz$en-us.tpp
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
topic "Witz template language";
|
||||
[2 $$0,0#00000000000000000000000000000000:Default]
|
||||
[l288;i1120;a17;O9;~~~.1408;2 $$1,0#10431211400427159095818037425705:param]
|
||||
[a83;*R6 $$2,5#31310162474203024125188417583966:caption]
|
||||
[H4;b83;*4 $$3,5#07864147445237544204411237157677:title]
|
||||
[i288;O9;C2 $$4,6#40027414424643823182269349404212:item]
|
||||
[b42;a42;2 $$5,5#45413000475342174754091244180557:text]
|
||||
[l288;b17;a17;2 $$6,6#27521748481378242620020725143825:desc]
|
||||
[l321;C@5;1 $$7,7#20902679421464641399138805415013:code]
|
||||
[b2503;2 $$8,0#65142375456100023862071332075487:separator]
|
||||
[*@(0.0.255)2 $$9,0#83433469410354161042741608181528:base]
|
||||
[C2 $$10,0#37138531426314131251341829483380:class]
|
||||
[l288;a17;*1 $$11,11#70004532496200323422659154056402:requirement]
|
||||
[i417;b42;a42;O9;~~~.416;2 $$12,12#10566046415157235020018451313112:tparam]
|
||||
[b167;C2 $$13,13#92430459443460461911108080531343:item1]
|
||||
[i288;a42;O9;C2 $$14,14#77422149456609303542238260500223:item2]
|
||||
[*@2$(0.128.128)2 $$15,15#34511555403152284025741354420178:NewsDate]
|
||||
[l321;*C$7;2 $$16,16#03451589433145915344929335295360:result]
|
||||
[l321;b83;a83;*C$7;2 $$17,17#07531550463529505371228428965313:result`-line]
|
||||
[l160;*C+117 $$18,5#88603949442205825958800053222425:package`-title]
|
||||
[2 $$19,0#53580023442335529039900623488521:gap]
|
||||
[C2 $$20,20#70211524482531209251820423858195:class`-nested]
|
||||
[b50;2 $$21,21#03324558446220344731010354752573:Par]
|
||||
[{_}%EN-US
|
||||
[s2; Witz&]
|
||||
[s3; 1. Preprocessing&]
|
||||
[s0; &]
|
||||
[s0; First phase in compilation of witz templates is preprocessing.
|
||||
Preprocessing itself can be broken to include phase, when other
|
||||
template or template snippets are combined to form single body
|
||||
and subblock replacement phase, when all references to subblocks
|
||||
are replaced with defined subblocks.&]
|
||||
[s0; &]
|
||||
[s0; [@5 #include] [/ path]&]
|
||||
[s0; &]
|
||||
[s0; This attempts to retrieve and include another witz template
|
||||
into current body. Witz preprocessor attempts to retrieve language
|
||||
specific version of template first, then defaults to common version.&]
|
||||
[s0; &]
|
||||
[s0; [@5 #define] [/ id]&]
|
||||
[s0; &]
|
||||
[s0; This starts a new template subblock which ends with another
|
||||
subblock. First subblock (the one befure first #define is encountered)
|
||||
has [/ id] `"MAIN`". The value of `"MAIN`" subblock represents
|
||||
the template at the end of preprocessing process.&]
|
||||
[s0; &]
|
||||
[s0; [@5 #][/ id]&]
|
||||
[s0; &]
|
||||
[s0; Occurence of # followed by [/ id] that is neither `"include`"
|
||||
or `"define`" inserts a subblock defined by [@5 #define] [/ id].
|
||||
Thus process is recursive `- subblock keep replacing until there
|
||||
are no more #[/ id] in the block. If [/ id ]is encountered for which
|
||||
there is corresponding [@5 #define], it is replaced by empty text.
|
||||
If there are more definition for single id, the last one is used.&]
|
||||
[s0; &]
|
||||
[s0; Example:&]
|
||||
[s0; &]
|
||||
[s0; [* base.witz:]&]
|
||||
[s0; &]
|
||||
[s7; <html>&]
|
||||
[s7; <title>#TITLE</title>&]
|
||||
[s7; <body>#BODY</body>&]
|
||||
[s7; </html>&]
|
||||
[s7; &]
|
||||
[s7; #define TITLE Generic title&]
|
||||
[s0; &]
|
||||
[s0; [* page.witz:]&]
|
||||
[s0;* &]
|
||||
[s7; #include base&]
|
||||
[s7; #define TITLE The page title&]
|
||||
[s7; #define BODY&]
|
||||
[s7; <b><i>Hello world!</i></b>&]
|
||||
[s0; &]
|
||||
[s3; 2. Witz code&]
|
||||
[s0; &]
|
||||
[s0; Witz code is marked by `'`$`' character (the end of code within
|
||||
template is determined by syntax rules, in rare situations you
|
||||
might have to enclose expressions in parenthesis).&]
|
||||
[s0; &]
|
||||
[s0; ]]
|
||||
|
|
@ -112,7 +112,7 @@ be able to access it from your browser by entering &]
|
|||
[s0; 127.0.0.1:8001/myapp/params/1/2/3&]
|
||||
[s0; 127.0.0.1:8001/myapp/anythingelse&]
|
||||
[s0; 127.0.0.1:8001&]
|
||||
[s5; (last one should result in error `"Page not found`", as no such
|
||||
[s5; (last one should result in error `"Page not found`", as no matching
|
||||
handler is present)&]
|
||||
[s5; &]
|
||||
[s3; 2. Witz templates&]
|
||||
|
|
@ -194,5 +194,104 @@ and you start the application from theide. Note that [* path] is
|
|||
also used to search for static files.&]
|
||||
[s5; String values are normally HTML escaped; if you need to pass
|
||||
raw html code as parameter, you have to either use [@5 Raw ]C`+`+
|
||||
function in application logic or [@5 raw] function in witz.&]
|
||||
function in application logic or [@5 raw] function in Witz.&]
|
||||
[s5; &]
|
||||
[s3; 3. Witz links to handlers&]
|
||||
[s5; Skylark handlers are represented in witz templates as function
|
||||
calls returning `" quoted path that matches the handler path
|
||||
pattern. If pattern contains parameter placeholder, it is passed
|
||||
as argument of the function:&]
|
||||
[s7; &]
|
||||
[s7; #include <Skylark/Skylark.h>&]
|
||||
[s7; &]
|
||||
[s7; using namespace Upp;&]
|
||||
[s7; &]
|
||||
[s7; SKYLARK([* HomePage], `"`")&]
|
||||
[s7; `{&]
|
||||
[s7; -|http.RenderResult(`"Skylark03/index`");&]
|
||||
[s7; `}&]
|
||||
[s7; &]
|
||||
[s7; SKYLARK([* Page2], `"page2`")&]
|
||||
[s7; `{&]
|
||||
[s7; -|http.RenderResult(`"Skylark03/page2`");&]
|
||||
[s7; `}&]
|
||||
[s7; &]
|
||||
[s7; SKYLARK([* Param], `"paramtest/`*`")&]
|
||||
[s7; `{&]
|
||||
[s7; -|http(`"PARAM`", http`[0`]).RenderResult(`"Skylark03/param`");&]
|
||||
[s7; `}&]
|
||||
[s7; &]
|
||||
[s7; struct MyApp : SkylarkApp `{&]
|
||||
[s7; -|MyApp() `{&]
|
||||
[s7; -|-|root `= `"myapp`";&]
|
||||
[s7; -|#ifdef `_DEBUG&]
|
||||
[s7; -|-|prefork `= 0;&]
|
||||
[s7; -|-|use`_caching `= false;&]
|
||||
[s7; -|#endif&]
|
||||
[s7; -|`}&]
|
||||
[s7; `};&]
|
||||
[s7; &]
|
||||
[s7; CONSOLE`_APP`_MAIN&]
|
||||
[s7; `{&]
|
||||
[s7; #ifdef `_DEBUG&]
|
||||
[s7; -|StdLogSetup(LOG`_FILE`|LOG`_COUT);&]
|
||||
[s7; -|Ini`::skylark`_log `= true;&]
|
||||
[s7; #endif&]
|
||||
[s7; &]
|
||||
[s7; -|MyApp().Run();-|&]
|
||||
[s7; `}&]
|
||||
[s7; &]
|
||||
[s7; &]
|
||||
[s5; [* Skylark03/index.witz:]&]
|
||||
[s7; <html>&]
|
||||
[s7; <body>&]
|
||||
[s7; <a href`=`$Page2()>Link to page2</a><br>&]
|
||||
[s7; `$for(i in `[`"param`_test`", 123, `"param`_test3`"`])&]
|
||||
[s7; -|<a href`=`$Param(i)>Param test: `$i</a><br>&]
|
||||
[s7; `$endfor&]
|
||||
[s7; </body>&]
|
||||
[s7; </html>&]
|
||||
[s7; &]
|
||||
[s5; [* Skylark03/page2.witz:]&]
|
||||
[s7; <html>&]
|
||||
[s7; <body>&]
|
||||
[s7; <a href`=`$HomePage()>Back to index</a><br>&]
|
||||
[s7; </body>&]
|
||||
[s7; </html>&]
|
||||
[s7; &]
|
||||
[s5; [* Skylark03/index.witz:]&]
|
||||
[s7; <html>&]
|
||||
[s7; <body>&]
|
||||
[s7; <a href`=`$Page2()>Link to page2</a><br>&]
|
||||
[s7; `$for(i in `[`"param`_test`", 123, `"param`_test3`"`])&]
|
||||
[s7; -|<a href`=`$Param(i)>Param test: `$i</a><br>&]
|
||||
[s7; `$endfor&]
|
||||
[s7; </body>&]
|
||||
[s7; </html>&]
|
||||
[s7; &]
|
||||
[s7; &]
|
||||
[s3; 4. Combining Witz templates using #define and #include&]
|
||||
[s5; Witz templates can be parametrized using subblock [@5 #define]
|
||||
[/@5 id] and [@5 #][/@5 id] insertion and combined from several files
|
||||
using [@5 #include]:&]
|
||||
[s5; [* Skylark04/base.witz:]&]
|
||||
[s7; <html>&]
|
||||
[s7; <title>#TITLE</title>&]
|
||||
[s7; <body>&]
|
||||
[s7; #BODY&]
|
||||
[s7; </body>&]
|
||||
[s7; </html>&]
|
||||
[s7; &]
|
||||
[s7; #define TITLE Generic title&]
|
||||
[s7; &]
|
||||
[s7; &]
|
||||
[s5; [* Skylark04/index.witz:]&]
|
||||
[s7; #include Skylark04/base&]
|
||||
[s7; &]
|
||||
[s7; #define TITLE MyApp title&]
|
||||
[s7; &]
|
||||
[s7; #define BODY&]
|
||||
[s7; This is MyApp body html!&]
|
||||
[s7; &]
|
||||
[s7; &]
|
||||
[s5; ]]
|
||||
Loading…
Add table
Add a link
Reference in a new issue