<!DOCTYPE html> | |
<html lang="en"> | |
<head> | |
<meta charset="UTF-8"> | |
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | |
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
<meta name="generator" content="Asciidoctor 2.0.10"> | |
<meta name="author" content="Acceleo 4 Syntax"> | |
<title>Acceleo</title> | |
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700"> | |
<style> | |
/* Asciidoctor default stylesheet | MIT License | https://asciidoctor.org */ | |
/* Uncomment @import statement to use as custom stylesheet */ | |
/*@import "https://fonts.googleapis.com/css?family=Open+Sans:300,300italic,400,400italic,600,600italic%7CNoto+Serif:400,400italic,700,700italic%7CDroid+Sans+Mono:400,700";*/ | |
article,aside,details,figcaption,figure,footer,header,hgroup,main,nav,section{display:block} | |
audio,video{display:inline-block} | |
audio:not([controls]){display:none;height:0} | |
html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%} | |
a{background:none} | |
a:focus{outline:thin dotted} | |
a:active,a:hover{outline:0} | |
h1{font-size:2em;margin:.67em 0} | |
abbr[title]{border-bottom:1px dotted} | |
b,strong{font-weight:bold} | |
dfn{font-style:italic} | |
hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0} | |
mark{background:#ff0;color:#000} | |
code,kbd,pre,samp{font-family:monospace;font-size:1em} | |
pre{white-space:pre-wrap} | |
q{quotes:"\201C" "\201D" "\2018" "\2019"} | |
small{font-size:80%} | |
sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline} | |
sup{top:-.5em} | |
sub{bottom:-.25em} | |
img{border:0} | |
svg:not(:root){overflow:hidden} | |
figure{margin:0} | |
fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em} | |
legend{border:0;padding:0} | |
button,input,select,textarea{font-family:inherit;font-size:100%;margin:0} | |
button,input{line-height:normal} | |
button,select{text-transform:none} | |
button,html input[type="button"],input[type="reset"],input[type="submit"]{-webkit-appearance:button;cursor:pointer} | |
button[disabled],html input[disabled]{cursor:default} | |
input[type="checkbox"],input[type="radio"]{box-sizing:border-box;padding:0} | |
button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0} | |
textarea{overflow:auto;vertical-align:top} | |
table{border-collapse:collapse;border-spacing:0} | |
*,*::before,*::after{-moz-box-sizing:border-box;-webkit-box-sizing:border-box;box-sizing:border-box} | |
html,body{font-size:100%} | |
body{background:#fff;color:rgba(0,0,0,.8);padding:0;margin:0;font-family:"Noto Serif","DejaVu Serif",serif;font-weight:400;font-style:normal;line-height:1;position:relative;cursor:auto;tab-size:4;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased} | |
a:hover{cursor:pointer} | |
img,object,embed{max-width:100%;height:auto} | |
object,embed{height:100%} | |
img{-ms-interpolation-mode:bicubic} | |
.left{float:left!important} | |
.right{float:right!important} | |
.text-left{text-align:left!important} | |
.text-right{text-align:right!important} | |
.text-center{text-align:center!important} | |
.text-justify{text-align:justify!important} | |
.hide{display:none} | |
img,object,svg{display:inline-block;vertical-align:middle} | |
textarea{height:auto;min-height:50px} | |
select{width:100%} | |
.center{margin-left:auto;margin-right:auto} | |
.stretch{width:100%} | |
.subheader,.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{line-height:1.45;color:#7a2518;font-weight:400;margin-top:0;margin-bottom:.25em} | |
div,dl,dt,dd,ul,ol,li,h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6,pre,form,p,blockquote,th,td{margin:0;padding:0;direction:ltr} | |
a{color:#2156a5;text-decoration:underline;line-height:inherit} | |
a:hover,a:focus{color:#1d4b8f} | |
a img{border:0} | |
p{font-family:inherit;font-weight:400;font-size:1em;line-height:1.6;margin-bottom:1.25em;text-rendering:optimizeLegibility} | |
p aside{font-size:.875em;line-height:1.35;font-style:italic} | |
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{font-family:"Open Sans","DejaVu Sans",sans-serif;font-weight:300;font-style:normal;color:#ba3925;text-rendering:optimizeLegibility;margin-top:1em;margin-bottom:.5em;line-height:1.0125em} | |
h1 small,h2 small,h3 small,#toctitle small,.sidebarblock>.content>.title small,h4 small,h5 small,h6 small{font-size:60%;color:#e99b8f;line-height:0} | |
h1{font-size:2.125em} | |
h2{font-size:1.6875em} | |
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.375em} | |
h4,h5{font-size:1.125em} | |
h6{font-size:1em} | |
hr{border:solid #dddddf;border-width:1px 0 0;clear:both;margin:1.25em 0 1.1875em;height:0} | |
em,i{font-style:italic;line-height:inherit} | |
strong,b{font-weight:bold;line-height:inherit} | |
small{font-size:60%;line-height:inherit} | |
code{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;font-weight:400;color:rgba(0,0,0,.9)} | |
ul,ol,dl{font-size:1em;line-height:1.6;margin-bottom:1.25em;list-style-position:outside;font-family:inherit} | |
ul,ol{margin-left:1.5em} | |
ul li ul,ul li ol{margin-left:1.25em;margin-bottom:0;font-size:1em} | |
ul.square li ul,ul.circle li ul,ul.disc li ul{list-style:inherit} | |
ul.square{list-style-type:square} | |
ul.circle{list-style-type:circle} | |
ul.disc{list-style-type:disc} | |
ol li ul,ol li ol{margin-left:1.25em;margin-bottom:0} | |
dl dt{margin-bottom:.3125em;font-weight:bold} | |
dl dd{margin-bottom:1.25em} | |
abbr,acronym{text-transform:uppercase;font-size:90%;color:rgba(0,0,0,.8);border-bottom:1px dotted #ddd;cursor:help} | |
abbr{text-transform:none} | |
blockquote{margin:0 0 1.25em;padding:.5625em 1.25em 0 1.1875em;border-left:1px solid #ddd} | |
blockquote cite{display:block;font-size:.9375em;color:rgba(0,0,0,.6)} | |
blockquote cite::before{content:"\2014 \0020"} | |
blockquote cite a,blockquote cite a:visited{color:rgba(0,0,0,.6)} | |
blockquote,blockquote p{line-height:1.6;color:rgba(0,0,0,.85)} | |
@media screen and (min-width:768px){h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2} | |
h1{font-size:2.75em} | |
h2{font-size:2.3125em} | |
h3,#toctitle,.sidebarblock>.content>.title{font-size:1.6875em} | |
h4{font-size:1.4375em}} | |
table{background:#fff;margin-bottom:1.25em;border:solid 1px #dedede} | |
table thead,table tfoot{background:#f7f8f7} | |
table thead tr th,table thead tr td,table tfoot tr th,table tfoot tr td{padding:.5em .625em .625em;font-size:inherit;color:rgba(0,0,0,.8);text-align:left} | |
table tr th,table tr td{padding:.5625em .625em;font-size:inherit;color:rgba(0,0,0,.8)} | |
table tr.even,table tr.alt{background:#f8f8f7} | |
table thead tr th,table tfoot tr th,table tbody tr td,table tr td,table tfoot tr td{display:table-cell;line-height:1.6} | |
h1,h2,h3,#toctitle,.sidebarblock>.content>.title,h4,h5,h6{line-height:1.2;word-spacing:-.05em} | |
h1 strong,h2 strong,h3 strong,#toctitle strong,.sidebarblock>.content>.title strong,h4 strong,h5 strong,h6 strong{font-weight:400} | |
.clearfix::before,.clearfix::after,.float-group::before,.float-group::after{content:" ";display:table} | |
.clearfix::after,.float-group::after{clear:both} | |
:not(pre):not([class^=L])>code{font-size:.9375em;font-style:normal!important;letter-spacing:0;padding:.1em .5ex;word-spacing:-.15em;background:#f7f7f8;-webkit-border-radius:4px;border-radius:4px;line-height:1.45;text-rendering:optimizeSpeed;word-wrap:break-word} | |
:not(pre)>code.nobreak{word-wrap:normal} | |
:not(pre)>code.nowrap{white-space:nowrap} | |
pre{color:rgba(0,0,0,.9);font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;line-height:1.45;text-rendering:optimizeSpeed} | |
pre code,pre pre{color:inherit;font-size:inherit;line-height:inherit} | |
pre>code{display:block} | |
pre.nowrap,pre.nowrap pre{white-space:pre;word-wrap:normal} | |
em em{font-style:normal} | |
strong strong{font-weight:400} | |
.keyseq{color:rgba(51,51,51,.8)} | |
kbd{font-family:"Droid Sans Mono","DejaVu Sans Mono",monospace;display:inline-block;color:rgba(0,0,0,.8);font-size:.65em;line-height:1.45;background:#f7f7f7;border:1px solid #ccc;-webkit-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em white inset;box-shadow:0 1px 0 rgba(0,0,0,.2),0 0 0 .1em #fff inset;margin:0 .15em;padding:.2em .5em;vertical-align:middle;position:relative;top:-.1em;white-space:nowrap} | |
.keyseq kbd:first-child{margin-left:0} | |
.keyseq kbd:last-child{margin-right:0} | |
.menuseq,.menuref{color:#000} | |
.menuseq b:not(.caret),.menuref{font-weight:inherit} | |
.menuseq{word-spacing:-.02em} | |
.menuseq b.caret{font-size:1.25em;line-height:.8} | |
.menuseq i.caret{font-weight:bold;text-align:center;width:.45em} | |
b.button::before,b.button::after{position:relative;top:-1px;font-weight:400} | |
b.button::before{content:"[";padding:0 3px 0 2px} | |
b.button::after{content:"]";padding:0 2px 0 3px} | |
p a>code:hover{color:rgba(0,0,0,.9)} | |
#header,#content,#footnotes,#footer{width:100%;margin-left:auto;margin-right:auto;margin-top:0;margin-bottom:0;max-width:62.5em;*zoom:1;position:relative;padding-left:.9375em;padding-right:.9375em} | |
#header::before,#header::after,#content::before,#content::after,#footnotes::before,#footnotes::after,#footer::before,#footer::after{content:" ";display:table} | |
#header::after,#content::after,#footnotes::after,#footer::after{clear:both} | |
#content{margin-top:1.25em} | |
#content::before{content:none} | |
#header>h1:first-child{color:rgba(0,0,0,.85);margin-top:2.25rem;margin-bottom:0} | |
#header>h1:first-child+#toc{margin-top:8px;border-top:1px solid #dddddf} | |
#header>h1:only-child,body.toc2 #header>h1:nth-last-child(2){border-bottom:1px solid #dddddf;padding-bottom:8px} | |
#header .details{border-bottom:1px solid #dddddf;line-height:1.45;padding-top:.25em;padding-bottom:.25em;padding-left:.25em;color:rgba(0,0,0,.6);display:-ms-flexbox;display:-webkit-flex;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap} | |
#header .details span:first-child{margin-left:-.125em} | |
#header .details span.email a{color:rgba(0,0,0,.85)} | |
#header .details br{display:none} | |
#header .details br+span::before{content:"\00a0\2013\00a0"} | |
#header .details br+span.author::before{content:"\00a0\22c5\00a0";color:rgba(0,0,0,.85)} | |
#header .details br+span#revremark::before{content:"\00a0|\00a0"} | |
#header #revnumber{text-transform:capitalize} | |
#header #revnumber::after{content:"\00a0"} | |
#content>h1:first-child:not([class]){color:rgba(0,0,0,.85);border-bottom:1px solid #dddddf;padding-bottom:8px;margin-top:0;padding-top:1rem;margin-bottom:1.25rem} | |
#toc{border-bottom:1px solid #e7e7e9;padding-bottom:.5em} | |
#toc>ul{margin-left:.125em} | |
#toc ul.sectlevel0>li>a{font-style:italic} | |
#toc ul.sectlevel0 ul.sectlevel1{margin:.5em 0} | |
#toc ul{font-family:"Open Sans","DejaVu Sans",sans-serif;list-style-type:none} | |
#toc li{line-height:1.3334;margin-top:.3334em} | |
#toc a{text-decoration:none} | |
#toc a:active{text-decoration:underline} | |
#toctitle{color:#7a2518;font-size:1.2em} | |
@media screen and (min-width:768px){#toctitle{font-size:1.375em} | |
body.toc2{padding-left:15em;padding-right:0} | |
#toc.toc2{margin-top:0!important;background:#f8f8f7;position:fixed;width:15em;left:0;top:0;border-right:1px solid #e7e7e9;border-top-width:0!important;border-bottom-width:0!important;z-index:1000;padding:1.25em 1em;height:100%;overflow:auto} | |
#toc.toc2 #toctitle{margin-top:0;margin-bottom:.8rem;font-size:1.2em} | |
#toc.toc2>ul{font-size:.9em;margin-bottom:0} | |
#toc.toc2 ul ul{margin-left:0;padding-left:1em} | |
#toc.toc2 ul.sectlevel0 ul.sectlevel1{padding-left:0;margin-top:.5em;margin-bottom:.5em} | |
body.toc2.toc-right{padding-left:0;padding-right:15em} | |
body.toc2.toc-right #toc.toc2{border-right-width:0;border-left:1px solid #e7e7e9;left:auto;right:0}} | |
@media screen and (min-width:1280px){body.toc2{padding-left:20em;padding-right:0} | |
#toc.toc2{width:20em} | |
#toc.toc2 #toctitle{font-size:1.375em} | |
#toc.toc2>ul{font-size:.95em} | |
#toc.toc2 ul ul{padding-left:1.25em} | |
body.toc2.toc-right{padding-left:0;padding-right:20em}} | |
#content #toc{border-style:solid;border-width:1px;border-color:#e0e0dc;margin-bottom:1.25em;padding:1.25em;background:#f8f8f7;-webkit-border-radius:4px;border-radius:4px} | |
#content #toc>:first-child{margin-top:0} | |
#content #toc>:last-child{margin-bottom:0} | |
#footer{max-width:100%;background:rgba(0,0,0,.8);padding:1.25em} | |
#footer-text{color:rgba(255,255,255,.8);line-height:1.44} | |
#content{margin-bottom:.625em} | |
.sect1{padding-bottom:.625em} | |
@media screen and (min-width:768px){#content{margin-bottom:1.25em} | |
.sect1{padding-bottom:1.25em}} | |
.sect1:last-child{padding-bottom:0} | |
.sect1+.sect1{border-top:1px solid #e7e7e9} | |
#content h1>a.anchor,h2>a.anchor,h3>a.anchor,#toctitle>a.anchor,.sidebarblock>.content>.title>a.anchor,h4>a.anchor,h5>a.anchor,h6>a.anchor{position:absolute;z-index:1001;width:1.5ex;margin-left:-1.5ex;display:block;text-decoration:none!important;visibility:hidden;text-align:center;font-weight:400} | |
#content h1>a.anchor::before,h2>a.anchor::before,h3>a.anchor::before,#toctitle>a.anchor::before,.sidebarblock>.content>.title>a.anchor::before,h4>a.anchor::before,h5>a.anchor::before,h6>a.anchor::before{content:"\00A7";font-size:.85em;display:block;padding-top:.1em} | |
#content h1:hover>a.anchor,#content h1>a.anchor:hover,h2:hover>a.anchor,h2>a.anchor:hover,h3:hover>a.anchor,#toctitle:hover>a.anchor,.sidebarblock>.content>.title:hover>a.anchor,h3>a.anchor:hover,#toctitle>a.anchor:hover,.sidebarblock>.content>.title>a.anchor:hover,h4:hover>a.anchor,h4>a.anchor:hover,h5:hover>a.anchor,h5>a.anchor:hover,h6:hover>a.anchor,h6>a.anchor:hover{visibility:visible} | |
#content h1>a.link,h2>a.link,h3>a.link,#toctitle>a.link,.sidebarblock>.content>.title>a.link,h4>a.link,h5>a.link,h6>a.link{color:#ba3925;text-decoration:none} | |
#content h1>a.link:hover,h2>a.link:hover,h3>a.link:hover,#toctitle>a.link:hover,.sidebarblock>.content>.title>a.link:hover,h4>a.link:hover,h5>a.link:hover,h6>a.link:hover{color:#a53221} | |
details,.audioblock,.imageblock,.literalblock,.listingblock,.stemblock,.videoblock{margin-bottom:1.25em} | |
details>summary:first-of-type{cursor:pointer;display:list-item;outline:none;margin-bottom:.75em} | |
.admonitionblock td.content>.title,.audioblock>.title,.exampleblock>.title,.imageblock>.title,.listingblock>.title,.literalblock>.title,.stemblock>.title,.openblock>.title,.paragraph>.title,.quoteblock>.title,table.tableblock>.title,.verseblock>.title,.videoblock>.title,.dlist>.title,.olist>.title,.ulist>.title,.qlist>.title,.hdlist>.title{text-rendering:optimizeLegibility;text-align:left;font-family:"Noto Serif","DejaVu Serif",serif;font-size:1rem;font-style:italic} | |
table.tableblock.fit-content>caption.title{white-space:nowrap;width:0} | |
.paragraph.lead>p,#preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:1.21875em;line-height:1.6;color:rgba(0,0,0,.85)} | |
table.tableblock #preamble>.sectionbody>[class="paragraph"]:first-of-type p{font-size:inherit} | |
.admonitionblock>table{border-collapse:separate;border:0;background:none;width:100%} | |
.admonitionblock>table td.icon{text-align:center;width:80px} | |
.admonitionblock>table td.icon img{max-width:none} | |
.admonitionblock>table td.icon .title{font-weight:bold;font-family:"Open Sans","DejaVu Sans",sans-serif;text-transform:uppercase} | |
.admonitionblock>table td.content{padding-left:1.125em;padding-right:1.25em;border-left:1px solid #dddddf;color:rgba(0,0,0,.6)} | |
.admonitionblock>table td.content>:last-child>:last-child{margin-bottom:0} | |
.exampleblock>.content{border-style:solid;border-width:1px;border-color:#e6e6e6;margin-bottom:1.25em;padding:1.25em;background:#fff;-webkit-border-radius:4px;border-radius:4px} | |
.exampleblock>.content>:first-child{margin-top:0} | |
.exampleblock>.content>:last-child{margin-bottom:0} | |
.sidebarblock{border-style:solid;border-width:1px;border-color:#dbdbd6;margin-bottom:1.25em;padding:1.25em;background:#f3f3f2;-webkit-border-radius:4px;border-radius:4px} | |
.sidebarblock>:first-child{margin-top:0} | |
.sidebarblock>:last-child{margin-bottom:0} | |
.sidebarblock>.content>.title{color:#7a2518;margin-top:0;text-align:center} | |
.exampleblock>.content>:last-child>:last-child,.exampleblock>.content .olist>ol>li:last-child>:last-child,.exampleblock>.content .ulist>ul>li:last-child>:last-child,.exampleblock>.content .qlist>ol>li:last-child>:last-child,.sidebarblock>.content>:last-child>:last-child,.sidebarblock>.content .olist>ol>li:last-child>:last-child,.sidebarblock>.content .ulist>ul>li:last-child>:last-child,.sidebarblock>.content .qlist>ol>li:last-child>:last-child{margin-bottom:0} | |
.literalblock pre,.listingblock>.content>pre{-webkit-border-radius:4px;border-radius:4px;word-wrap:break-word;overflow-x:auto;padding:1em;font-size:.8125em} | |
@media screen and (min-width:768px){.literalblock pre,.listingblock>.content>pre{font-size:.90625em}} | |
@media screen and (min-width:1280px){.literalblock pre,.listingblock>.content>pre{font-size:1em}} | |
.literalblock pre,.listingblock>.content>pre:not(.highlight),.listingblock>.content>pre[class="highlight"],.listingblock>.content>pre[class^="highlight "]{background:#f7f7f8} | |
.literalblock.output pre{color:#f7f7f8;background:rgba(0,0,0,.9)} | |
.listingblock>.content{position:relative} | |
.listingblock code[data-lang]::before{display:none;content:attr(data-lang);position:absolute;font-size:.75em;top:.425rem;right:.5rem;line-height:1;text-transform:uppercase;color:inherit;opacity:.5} | |
.listingblock:hover code[data-lang]::before{display:block} | |
.listingblock.terminal pre .command::before{content:attr(data-prompt);padding-right:.5em;color:inherit;opacity:.5} | |
.listingblock.terminal pre .command:not([data-prompt])::before{content:"$"} | |
.listingblock pre.highlightjs{padding:0} | |
.listingblock pre.highlightjs>code{padding:1em;-webkit-border-radius:4px;border-radius:4px} | |
.listingblock pre.prettyprint{border-width:0} | |
.prettyprint{background:#f7f7f8} | |
pre.prettyprint .linenums{line-height:1.45;margin-left:2em} | |
pre.prettyprint li{background:none;list-style-type:inherit;padding-left:0} | |
pre.prettyprint li code[data-lang]::before{opacity:1} | |
pre.prettyprint li:not(:first-child) code[data-lang]::before{display:none} | |
table.linenotable{border-collapse:separate;border:0;margin-bottom:0;background:none} | |
table.linenotable td[class]{color:inherit;vertical-align:top;padding:0;line-height:inherit;white-space:normal} | |
table.linenotable td.code{padding-left:.75em} | |
table.linenotable td.linenos{border-right:1px solid currentColor;opacity:.35;padding-right:.5em} | |
pre.pygments .lineno{border-right:1px solid currentColor;opacity:.35;display:inline-block;margin-right:.75em} | |
pre.pygments .lineno::before{content:"";margin-right:-.125em} | |
.quoteblock{margin:0 1em 1.25em 1.5em;display:table} | |
.quoteblock:not(.excerpt)>.title{margin-left:-1.5em;margin-bottom:.75em} | |
.quoteblock blockquote,.quoteblock p{color:rgba(0,0,0,.85);font-size:1.15rem;line-height:1.75;word-spacing:.1em;letter-spacing:0;font-style:italic;text-align:justify} | |
.quoteblock blockquote{margin:0;padding:0;border:0} | |
.quoteblock blockquote::before{content:"\201c";float:left;font-size:2.75em;font-weight:bold;line-height:.6em;margin-left:-.6em;color:#7a2518;text-shadow:0 1px 2px rgba(0,0,0,.1)} | |
.quoteblock blockquote>.paragraph:last-child p{margin-bottom:0} | |
.quoteblock .attribution{margin-top:.75em;margin-right:.5ex;text-align:right} | |
.verseblock{margin:0 1em 1.25em} | |
.verseblock pre{font-family:"Open Sans","DejaVu Sans",sans;font-size:1.15rem;color:rgba(0,0,0,.85);font-weight:300;text-rendering:optimizeLegibility} | |
.verseblock pre strong{font-weight:400} | |
.verseblock .attribution{margin-top:1.25rem;margin-left:.5ex} | |
.quoteblock .attribution,.verseblock .attribution{font-size:.9375em;line-height:1.45;font-style:italic} | |
.quoteblock .attribution br,.verseblock .attribution br{display:none} | |
.quoteblock .attribution cite,.verseblock .attribution cite{display:block;letter-spacing:-.025em;color:rgba(0,0,0,.6)} | |
.quoteblock.abstract blockquote::before,.quoteblock.excerpt blockquote::before,.quoteblock .quoteblock blockquote::before{display:none} | |
.quoteblock.abstract blockquote,.quoteblock.abstract p,.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{line-height:1.6;word-spacing:0} | |
.quoteblock.abstract{margin:0 1em 1.25em;display:block} | |
.quoteblock.abstract>.title{margin:0 0 .375em;font-size:1.15em;text-align:center} | |
.quoteblock.excerpt>blockquote,.quoteblock .quoteblock{padding:0 0 .25em 1em;border-left:.25em solid #dddddf} | |
.quoteblock.excerpt,.quoteblock .quoteblock{margin-left:0} | |
.quoteblock.excerpt blockquote,.quoteblock.excerpt p,.quoteblock .quoteblock blockquote,.quoteblock .quoteblock p{color:inherit;font-size:1.0625rem} | |
.quoteblock.excerpt .attribution,.quoteblock .quoteblock .attribution{color:inherit;text-align:left;margin-right:0} | |
table.tableblock{max-width:100%;border-collapse:separate} | |
p.tableblock:last-child{margin-bottom:0} | |
td.tableblock>.content>:last-child{margin-bottom:-1.25em} | |
td.tableblock>.content>:last-child.sidebarblock{margin-bottom:0} | |
table.tableblock,th.tableblock,td.tableblock{border:0 solid #dedede} | |
table.grid-all>thead>tr>.tableblock,table.grid-all>tbody>tr>.tableblock{border-width:0 1px 1px 0} | |
table.grid-all>tfoot>tr>.tableblock{border-width:1px 1px 0 0} | |
table.grid-cols>*>tr>.tableblock{border-width:0 1px 0 0} | |
table.grid-rows>thead>tr>.tableblock,table.grid-rows>tbody>tr>.tableblock{border-width:0 0 1px} | |
table.grid-rows>tfoot>tr>.tableblock{border-width:1px 0 0} | |
table.grid-all>*>tr>.tableblock:last-child,table.grid-cols>*>tr>.tableblock:last-child{border-right-width:0} | |
table.grid-all>tbody>tr:last-child>.tableblock,table.grid-all>thead:last-child>tr>.tableblock,table.grid-rows>tbody>tr:last-child>.tableblock,table.grid-rows>thead:last-child>tr>.tableblock{border-bottom-width:0} | |
table.frame-all{border-width:1px} | |
table.frame-sides{border-width:0 1px} | |
table.frame-topbot,table.frame-ends{border-width:1px 0} | |
table.stripes-all tr,table.stripes-odd tr:nth-of-type(odd),table.stripes-even tr:nth-of-type(even),table.stripes-hover tr:hover{background:#f8f8f7} | |
th.halign-left,td.halign-left{text-align:left} | |
th.halign-right,td.halign-right{text-align:right} | |
th.halign-center,td.halign-center{text-align:center} | |
th.valign-top,td.valign-top{vertical-align:top} | |
th.valign-bottom,td.valign-bottom{vertical-align:bottom} | |
th.valign-middle,td.valign-middle{vertical-align:middle} | |
table thead th,table tfoot th{font-weight:bold} | |
tbody tr th{display:table-cell;line-height:1.6;background:#f7f8f7} | |
tbody tr th,tbody tr th p,tfoot tr th,tfoot tr th p{color:rgba(0,0,0,.8);font-weight:bold} | |
p.tableblock>code:only-child{background:none;padding:0} | |
p.tableblock{font-size:1em} | |
ol{margin-left:1.75em} | |
ul li ol{margin-left:1.5em} | |
dl dd{margin-left:1.125em} | |
dl dd:last-child,dl dd:last-child>:last-child{margin-bottom:0} | |
ol>li p,ul>li p,ul dd,ol dd,.olist .olist,.ulist .ulist,.ulist .olist,.olist .ulist{margin-bottom:.625em} | |
ul.checklist,ul.none,ol.none,ul.no-bullet,ol.no-bullet,ol.unnumbered,ul.unstyled,ol.unstyled{list-style-type:none} | |
ul.no-bullet,ol.no-bullet,ol.unnumbered{margin-left:.625em} | |
ul.unstyled,ol.unstyled{margin-left:0} | |
ul.checklist{margin-left:.625em} | |
ul.checklist li>p:first-child>.fa-square-o:first-child,ul.checklist li>p:first-child>.fa-check-square-o:first-child{width:1.25em;font-size:.8em;position:relative;bottom:.125em} | |
ul.checklist li>p:first-child>input[type="checkbox"]:first-child{margin-right:.25em} | |
ul.inline{display:-ms-flexbox;display:-webkit-box;display:flex;-ms-flex-flow:row wrap;-webkit-flex-flow:row wrap;flex-flow:row wrap;list-style:none;margin:0 0 .625em -1.25em} | |
ul.inline>li{margin-left:1.25em} | |
.unstyled dl dt{font-weight:400;font-style:normal} | |
ol.arabic{list-style-type:decimal} | |
ol.decimal{list-style-type:decimal-leading-zero} | |
ol.loweralpha{list-style-type:lower-alpha} | |
ol.upperalpha{list-style-type:upper-alpha} | |
ol.lowerroman{list-style-type:lower-roman} | |
ol.upperroman{list-style-type:upper-roman} | |
ol.lowergreek{list-style-type:lower-greek} | |
.hdlist>table,.colist>table{border:0;background:none} | |
.hdlist>table>tbody>tr,.colist>table>tbody>tr{background:none} | |
td.hdlist1,td.hdlist2{vertical-align:top;padding:0 .625em} | |
td.hdlist1{font-weight:bold;padding-bottom:1.25em} | |
.literalblock+.colist,.listingblock+.colist{margin-top:-.5em} | |
.colist td:not([class]):first-child{padding:.4em .75em 0;line-height:1;vertical-align:top} | |
.colist td:not([class]):first-child img{max-width:none} | |
.colist td:not([class]):last-child{padding:.25em 0} | |
.thumb,.th{line-height:0;display:inline-block;border:solid 4px #fff;-webkit-box-shadow:0 0 0 1px #ddd;box-shadow:0 0 0 1px #ddd} | |
.imageblock.left{margin:.25em .625em 1.25em 0} | |
.imageblock.right{margin:.25em 0 1.25em .625em} | |
.imageblock>.title{margin-bottom:0} | |
.imageblock.thumb,.imageblock.th{border-width:6px} | |
.imageblock.thumb>.title,.imageblock.th>.title{padding:0 .125em} | |
.image.left,.image.right{margin-top:.25em;margin-bottom:.25em;display:inline-block;line-height:0} | |
.image.left{margin-right:.625em} | |
.image.right{margin-left:.625em} | |
a.image{text-decoration:none;display:inline-block} | |
a.image object{pointer-events:none} | |
sup.footnote,sup.footnoteref{font-size:.875em;position:static;vertical-align:super} | |
sup.footnote a,sup.footnoteref a{text-decoration:none} | |
sup.footnote a:active,sup.footnoteref a:active{text-decoration:underline} | |
#footnotes{padding-top:.75em;padding-bottom:.75em;margin-bottom:.625em} | |
#footnotes hr{width:20%;min-width:6.25em;margin:-.25em 0 .75em;border-width:1px 0 0} | |
#footnotes .footnote{padding:0 .375em 0 .225em;line-height:1.3334;font-size:.875em;margin-left:1.2em;margin-bottom:.2em} | |
#footnotes .footnote a:first-of-type{font-weight:bold;text-decoration:none;margin-left:-1.05em} | |
#footnotes .footnote:last-of-type{margin-bottom:0} | |
#content #footnotes{margin-top:-.625em;margin-bottom:0;padding:.75em 0} | |
.gist .file-data>table{border:0;background:#fff;width:100%;margin-bottom:0} | |
.gist .file-data>table td.line-data{width:99%} | |
div.unbreakable{page-break-inside:avoid} | |
.big{font-size:larger} | |
.small{font-size:smaller} | |
.underline{text-decoration:underline} | |
.overline{text-decoration:overline} | |
.line-through{text-decoration:line-through} | |
.aqua{color:#00bfbf} | |
.aqua-background{background:#00fafa} | |
.black{color:#000} | |
.black-background{background:#000} | |
.blue{color:#0000bf} | |
.blue-background{background:#0000fa} | |
.fuchsia{color:#bf00bf} | |
.fuchsia-background{background:#fa00fa} | |
.gray{color:#606060} | |
.gray-background{background:#7d7d7d} | |
.green{color:#006000} | |
.green-background{background:#007d00} | |
.lime{color:#00bf00} | |
.lime-background{background:#00fa00} | |
.maroon{color:#600000} | |
.maroon-background{background:#7d0000} | |
.navy{color:#000060} | |
.navy-background{background:#00007d} | |
.olive{color:#606000} | |
.olive-background{background:#7d7d00} | |
.purple{color:#600060} | |
.purple-background{background:#7d007d} | |
.red{color:#bf0000} | |
.red-background{background:#fa0000} | |
.silver{color:#909090} | |
.silver-background{background:#bcbcbc} | |
.teal{color:#006060} | |
.teal-background{background:#007d7d} | |
.white{color:#bfbfbf} | |
.white-background{background:#fafafa} | |
.yellow{color:#bfbf00} | |
.yellow-background{background:#fafa00} | |
span.icon>.fa{cursor:default} | |
a span.icon>.fa{cursor:inherit} | |
.admonitionblock td.icon [class^="fa icon-"]{font-size:2.5em;text-shadow:1px 1px 2px rgba(0,0,0,.5);cursor:default} | |
.admonitionblock td.icon .icon-note::before{content:"\f05a";color:#19407c} | |
.admonitionblock td.icon .icon-tip::before{content:"\f0eb";text-shadow:1px 1px 2px rgba(155,155,0,.8);color:#111} | |
.admonitionblock td.icon .icon-warning::before{content:"\f071";color:#bf6900} | |
.admonitionblock td.icon .icon-caution::before{content:"\f06d";color:#bf3400} | |
.admonitionblock td.icon .icon-important::before{content:"\f06a";color:#bf0000} | |
.conum[data-value]{display:inline-block;color:#fff!important;background:rgba(0,0,0,.8);-webkit-border-radius:100px;border-radius:100px;text-align:center;font-size:.75em;width:1.67em;height:1.67em;line-height:1.67em;font-family:"Open Sans","DejaVu Sans",sans-serif;font-style:normal;font-weight:bold} | |
.conum[data-value] *{color:#fff!important} | |
.conum[data-value]+b{display:none} | |
.conum[data-value]::after{content:attr(data-value)} | |
pre .conum[data-value]{position:relative;top:-.125em} | |
b.conum *{color:inherit!important} | |
.conum:not([data-value]):empty{display:none} | |
dt,th.tableblock,td.content,div.footnote{text-rendering:optimizeLegibility} | |
h1,h2,p,td.content,span.alt{letter-spacing:-.01em} | |
p strong,td.content strong,div.footnote strong{letter-spacing:-.005em} | |
p,blockquote,dt,td.content,span.alt{font-size:1.0625rem} | |
p{margin-bottom:1.25rem} | |
.sidebarblock p,.sidebarblock dt,.sidebarblock td.content,p.tableblock{font-size:1em} | |
.exampleblock>.content{background:#fffef7;border-color:#e0e0dc;-webkit-box-shadow:0 1px 4px #e0e0dc;box-shadow:0 1px 4px #e0e0dc} | |
.print-only{display:none!important} | |
@page{margin:1.25cm .75cm} | |
@media print{*{-webkit-box-shadow:none!important;box-shadow:none!important;text-shadow:none!important} | |
html{font-size:80%} | |
a{color:inherit!important;text-decoration:underline!important} | |
a.bare,a[href^="#"],a[href^="mailto:"]{text-decoration:none!important} | |
a[href^="http:"]:not(.bare)::after,a[href^="https:"]:not(.bare)::after{content:"(" attr(href) ")";display:inline-block;font-size:.875em;padding-left:.25em} | |
abbr[title]::after{content:" (" attr(title) ")"} | |
pre,blockquote,tr,img,object,svg{page-break-inside:avoid} | |
thead{display:table-header-group} | |
svg{max-width:100%} | |
p,blockquote,dt,td.content{font-size:1em;orphans:3;widows:3} | |
h2,h3,#toctitle,.sidebarblock>.content>.title{page-break-after:avoid} | |
#toc,.sidebarblock,.exampleblock>.content{background:none!important} | |
#toc{border-bottom:1px solid #dddddf!important;padding-bottom:0!important} | |
body.book #header{text-align:center} | |
body.book #header>h1:first-child{border:0!important;margin:2.5em 0 1em} | |
body.book #header .details{border:0!important;display:block;padding:0!important} | |
body.book #header .details span:first-child{margin-left:0!important} | |
body.book #header .details br{display:block} | |
body.book #header .details br+span::before{content:none!important} | |
body.book #toc{border:0!important;text-align:left!important;padding:0!important;margin:0!important} | |
body.book #toc,body.book #preamble,body.book h1.sect0,body.book .sect1>h2{page-break-before:always} | |
.listingblock code[data-lang]::before{display:block} | |
#footer{padding:0 .9375em} | |
.hide-on-print{display:none!important} | |
.print-only{display:block!important} | |
.hide-for-print{display:none!important} | |
.show-for-print{display:inherit!important}} | |
@media print,amzn-kf8{#header>h1:first-child{margin-top:1.25rem} | |
.sect1{padding:0!important} | |
.sect1+.sect1{border:0} | |
#footer{background:none} | |
#footer-text{color:rgba(0,0,0,.6);font-size:.9em}} | |
@media amzn-kf8{#header,#content,#footnotes,#footer{padding:0}} | |
</style> | |
</head> | |
<body class="article"> | |
<div id="header"> | |
<h1>Acceleo</h1> | |
<div class="details"> | |
<span id="author" class="author">Acceleo 4 Syntax</span><br> | |
</div> | |
<div id="toc" class="toc"> | |
<div id="toctitle">Table of Contents</div> | |
<ul class="sectlevel1"> | |
<li><a href="#_preface">1. Preface</a></li> | |
<li><a href="#_syntax">2. Syntax</a> | |
<ul class="sectlevel2"> | |
<li><a href="#_comment">2.1. Comment</a></li> | |
<li><a href="#_module">2.2. Module</a></li> | |
<li><a href="#_identifier">2.3. Identifier</a></li> | |
<li><a href="#_module_documentation">2.4. Module Documentation</a></li> | |
<li><a href="#_metamodel">2.5. Metamodel</a></li> | |
<li><a href="#_import">2.6. Import</a></li> | |
<li><a href="#_module_reference">2.7. Module Reference</a></li> | |
<li><a href="#_module_qualified_name">2.8. Module Qualified Name</a></li> | |
<li><a href="#_module_element">2.9. Module Element</a></li> | |
<li><a href="#_template">2.10. Template</a></li> | |
<li><a href="#_visibility">2.11. Visibility</a></li> | |
<li><a href="#_parameter">2.12. Parameter</a></li> | |
<li><a href="#_statement">2.13. Statement</a></li> | |
<li><a href="#_aql_expression">2.14. AQL Expression</a></li> | |
<li><a href="#_aql_type_literal">2.15. AQL Type Literal</a></li> | |
<li><a href="#_query">2.16. Query</a></li> | |
<li><a href="#_module_element_documentation">2.17. Module Element documentation</a></li> | |
</ul> | |
</li> | |
</ul> | |
</div> | |
</div> | |
<div id="content"> | |
<div class="sect1"> | |
<h2 id="_preface">1. Preface</h2> | |
<div class="sectionbody"> | |
<div class="paragraph"> | |
<p>This document describe the syntax of an Acceleo 4 module.</p> | |
</div> | |
<div class="paragraph"> | |
<p>The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a> (BNF).</p> | |
</div> | |
</div> | |
</div> | |
<div class="sect1"> | |
<h2 id="_syntax">2. Syntax</h2> | |
<div class="sectionbody"> | |
<div class="sect2"> | |
<h3 id="_comment">2.1. Comment</h3> | |
<div class="paragraph"> | |
<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generates nothing if placed directly or indirectly in a <a href="#_file_statement">File Statement</a>. For simplification comments will not be present in the BNF representation of the grammar.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_comment">Comment</a> = '[comment ' ... '/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module">2.2. Module</h3> | |
<div class="paragraph"> | |
<p>The module is the top level element of a .mtl file. It represent a namespace declaring <a href="#_template">Template</a> and <a href="#_query">Query</a>. The name of the module is qualified by the location of the file in the source folder.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module">Module</a> = | |
(<a href="#_module_documentation">Module Documentation</a>)* '[module ' <a href="#_identifier">Identifier</a> '(' <a href="#_metamodel">Metamodel</a> ',' (<a href="#_metamodel">Metamodel</a>)* ')' ('extends ' <a href="#_module_reference">Module Reference</a>)? '/]' | |
<a href="#_import">Import</a>* | |
<a href="#_module_element">Module Element</a>*</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_identifier">2.3. Identifier</h3> | |
<div class="paragraph"> | |
<p>An identifier is used to name elements that need to be identified, or reference element that can be identified.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module_documentation">2.4. Module Documentation</h3> | |
<div class="paragraph"> | |
<p>The module documentation should contains a description of the <a href="#_module">Module</a>.</p> | |
</div> | |
<div class="paragraph"> | |
<p>It can also contain metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module_documentation">Module Documentation</a> = | |
'[**' | |
... | |
('@author' ...)? | |
('@version' ...)? | |
('@since' ...)? | |
... | |
'/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_metamodel">2.5. Metamodel</h3> | |
<div class="paragraph"> | |
<p>This is the declaration of metamodels used by the module. Metamodels are referenced using their EPackage nsURI between simple quote.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_metamodel">Metamodel</a> = '\'' ... '\''</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_import">2.6. Import</h3> | |
<div class="paragraph"> | |
<p>This allows a module to import other <a href="#_module">Module</a> or service classes.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module_reference">2.7. Module Reference</h3> | |
<div class="paragraph"> | |
<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module_qualified_name">2.8. Module Qualified Name</h3> | |
<div class="paragraph"> | |
<p>A module’s name is qualified according to its location in the source folder of a project.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module_element">2.9. Module Element</h3> | |
<div class="paragraph"> | |
<p>A module element is either a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_template">2.10. Template</h3> | |
<div class="paragraph"> | |
<p>A template returns a String produced using its contained <a href="#_statement">Statement</a>, it can be called as a service. It can be preceded by a <a href="#_module_element_documentation">Module Element documentation</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_template">Template</a> = | |
'[template ' <a href="#_visibility">Visibility</a> <a href="#_identifier">Identifier</a> '(' <a href="#_parameter">Parameter</a>(',' <a href="#_parameter">Parameter</a>)* ')' ('?' <a href="#_aql_expression">AQL Expression</a>)? ('post (' <a href="#_aql_expression">AQL Expression</a> ')')? ']' | |
(<a href="#_statement">Statement</a>)* | |
'[/template]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_visibility">2.11. Visibility</h3> | |
<div class="paragraph"> | |
<p>The visibility defines the scope in which a <a href="#_module_element">Module Element</a> can be called as a service.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_parameter">2.12. Parameter</h3> | |
<div class="paragraph"> | |
<p>A parameter is used to pass a value from the caller to a callee. This value can be later referenced using its identifier.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_statement">2.13. Statement</h3> | |
<div class="paragraph"> | |
<p>A statement is a directive used to produce an output or control the execution flow.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_statement">Statement</a> = | |
<a href="#_file_statement">File Statement</a> | <a href="#_for_statement">For Statement</a> | <a href="#_if_statement">If Statement</a> | <a href="#_let_statement">Let Statement</a> | <a href="#_protected_area">Protected Area</a> | <a href="#_expression_statement">Expression Statement</a> | <a href="#_text_statement">Text Statement</a></code></pre> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_file_statement">2.13.1. File Statement</h4> | |
<div class="paragraph"> | |
<p>This statement is used to start the generation of a new file. Strings returned by a statement contained directly or indirectly in the execution flow, will be generated into that file.</p> | |
</div> | |
<div class="paragraph"> | |
<p>The file statement itself returns an empty String.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_file_statement">File Statement</a> = | |
'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']' | |
(<a href="#_statement">Statement</a>)* | |
'[/file]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_for_statement">2.13.2. For Statement</h4> | |
<div class="paragraph"> | |
<p>This statement loops over a list of values and return the concatenation of all returned String.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_for_statement">For Statement</a> = | |
'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']' | |
(<a href="#_statement">Statement</a>)* | |
'[/for]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_if_statement">2.13.3. If Statement</h4> | |
<div class="paragraph"> | |
<p>This statement create a branch in the execution flow and return the String of one of its branch according to the <a href="#_aql_expression">AQL Expression</a> evaluated to true. If a condition doesn’t evaluate to a boolean an empty String is generated and an error is logged.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_if_statement">If Statement</a> = | |
'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']' | |
(<a href="#_statement">Statement</a>)* | |
('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']' | |
(<a href="#_statement">Statement</a>)*)* | |
('[else]' | |
(<a href="#_statement">Statement</a>)*)? | |
'[/if]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_let_statement">2.13.4. Let Statement</h4> | |
<div class="paragraph"> | |
<p>This statement allows to compute one or more <a href="#_aql_expression">AQL Expression</a> and reference their value using an identifier. It can be used to improve readability of the template or increase performance when using the same <a href="#_aql_expression">AQL Expression</a> many times in a block of <a href="#_statement">Statement</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_let_statement">Let Statement</a> = | |
'[let ' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '=' <a href="#_aql_expression">AQL Expression</a> (',' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '=' <a href="#_aql_expression">AQL Expression</a>)* ']' | |
(<a href="#_statement">Statement</a>)*)? | |
'[/let]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_protected_area">2.13.5. Protected Area</h4> | |
<div class="paragraph"> | |
<p>This statement declares an identified area in the generated file. If the generated file exists and a protected area with the same identifier exists in its contents, then the existing content of this area is directly returned. If it doesn’t exist, then the concatenation of the body’s statements results is returned.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_protected_area">Protected Area</a> = | |
'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']' | |
(<a href="#_statement">Statement</a>)*)? | |
'[/protected]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_expression_statement">2.13.6. Expression Statement</h4> | |
<div class="paragraph"> | |
<p>This statement returns the String representation of the evaluation of its <a href="#_aql_expression">AQL Expression</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect3"> | |
<h4 id="_text_statement">2.13.7. Text Statement</h4> | |
<div class="paragraph"> | |
<p>This is any other text outside of '[' and ']'.</p> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_aql_expression">2.14. AQL Expression</h3> | |
<div class="paragraph"> | |
<p>This is an Acceleo Query Language expression. It is used to navigate through models and call services. In the context of Acceleo, <a href="#_template">Template</a> and <a href="#_query">Query</a> can be called as services.</p> | |
</div> | |
<div class="paragraph"> | |
<p>TODO link AQL documentation</p> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_aql_type_literal">2.15. AQL Type Literal</h3> | |
<div class="paragraph"> | |
<p>This is a type literal as defined in the Acceleo Query Language.</p> | |
</div> | |
<div class="paragraph"> | |
<p>TODO link AQL documentation</p> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_query">2.16. Query</h3> | |
<div class="paragraph"> | |
<p>A query references an <a href="#_aql_expression">AQL Expression</a> with parameters and can be called as a service. It can be preceded by a <a href="#_module_element_documentation">Module Element documentation</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_query">Query</a> = | |
'[query ' <a href="#_visibility">Visibility</a> <a href="#_identifier">Identifier</a> '(' <a href="#_parameter">Parameter</a>(',' <a href="#_parameter">Parameter</a>)* ')' ':' <a href="#_aql_type_literal">AQL Type Literal</a> '=' <a href="#_aql_expression">AQL Expression</a> '/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
<div class="sect2"> | |
<h3 id="_module_element_documentation">2.17. Module Element documentation</h3> | |
<div class="paragraph"> | |
<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p> | |
</div> | |
<div class="listingblock"> | |
<div class="content"> | |
<pre class="highlightjs highlight"><code data-lang="ebnf" class="language-ebnf hljs"><a href="#_module_element_documentation">Module Element documentation</a> = | |
'[**' | |
... | |
'@param ' ... | |
... | |
'/]'</code></pre> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
</div> | |
<div id="footer"> | |
<div id="footer-text"> | |
Last updated 2020-04-22 21:55:47 +0200 | |
</div> | |
</div> | |
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/styles/github.min.css"> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script> | |
<script>hljs.initHighlighting()</script> | |
<-- TODO there should be a better way to add the BNF language support... --> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/highlight.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.18.1/languages/ebnf.min.js"></script> | |
<script>hljs.initHighlighting()</script> | |
</body> | |
</html> |