Add language and migration documentation

Change-Id: I63530cd6a62511b962a1cb306aa370eba6a4ee85
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/AQL/index.html
similarity index 64%
copy from acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
copy to acceleo-aql/org.eclipse.acceleo.aql.doc/doc/AQL/index.html
index 88c6333..c0c398b 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/AQL/index.html
@@ -1,962 +1,476 @@
-<!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="Yvan Lussaud">
-<title>Acceleo 4 User Guide</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>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-</head>
-<body class="article">
-<div id="header">
-<h1>Acceleo 4 User Guide</h1>
-<div class="details">
-<span id="author" class="author">Yvan Lussaud</span><br>
-<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>
-</div>
-<div id="toc" class="toc">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_introduction">1. Introduction</a></li>
-<li><a href="#_module_authoring">2. Module authoring</a>
-<ul class="sectlevel2">
-<li><a href="#_acceleo_4_syntax">2.1. Acceleo 4 syntax</a></li>
-<li><a href="#_white_spaces">2.2. White spaces</a></li>
-</ul>
-</li>
-<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>
-<ul class="sectlevel2">
-<li><a href="#_parsing">3.1. Parsing</a></li>
-<li><a href="#_validation">3.2. Validation</a></li>
-<li><a href="#_completion">3.3. Completion</a></li>
-<li><a href="#_generation">3.4. Generation</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_introduction">1. Introduction</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_module_authoring">2. Module authoring</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-<div class="sect2">
-<h3 id="_acceleo_4_syntax">2.1. Acceleo 4 syntax</h3>
-<div class="paragraph">
-<p>This section describe the syntax of an Acceleo 4 module. The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a>.</p>
-</div>
-<div class="sect3">
-<h4 id="_comment">2.1.1. Comment</h4>
-<div class="paragraph">
-<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generate 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_comment">Comment</a> = '[comment ' &#8230;&#8203; '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module">2.1.2. Module</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module">Module</a> =</p>
-</div>
-<div class="paragraph">
-<p>(<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>')? '/]'</p>
-</div>
-<div class="paragraph">
-<p><a href="#_import">Import</a>*</p>
-</div>
-<div class="paragraph">
-<p><a href="#_module_element">Module Element</a>*</p>
-</div>
-</div>
-</div>
-<div class="paragraph">
-<p>An example can be found TODO. An other examples of this section</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_identifier">2.1.3. Identifier</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_documentation">2.1.4. Module Documentation</h4>
-<div class="paragraph">
-<p>The module documentation should contains a description of the <a href="#_module">Module</a>. It also can contains metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_documentation">Module Documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>('@author' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@version' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@since' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_metamodel">2.1.5. Metamodel</h4>
-<div class="paragraph">
-<p>This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_metamodel">Metamodel</a> = '\'' &#8230;&#8203; '\''</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_import">2.1.6. Import</h4>
-<div class="paragraph">
-<p>This allow to import other <a href="#_module">Module</a> or service classes.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_reference">2.1.7. Module Reference</h4>
-<div class="paragraph">
-<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_qualified_name">2.1.8. Module Qualified Name</h4>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element">2.1.9. Module Element</h4>
-<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="paragraph">
-<p><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_template">2.1.10. Template</h4>
-<div class="paragraph">
-<p>A template returns a String produced using 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_template">Template</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[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> ')')? ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/template]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_visibility">2.1.11. Visibility</h4>
-<div class="paragraph">
-<p>The visibility define the scope where the <a href="#_template">Template</a> or <a href="#_query">Query</a> can be called as a service.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</p>
-</div>
-</div>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><strong>private</strong>: visible only in the current <a href="#_module">Module</a>.</p>
-</li>
-<li>
-<p><strong>protected</strong>: visible in the current <a href="#_module">Module</a> and <a href="#_module">Module</a> that extend it directly or indirectly.</p>
-</li>
-<li>
-<p><strong>public</strong>: visible in the current <a href="#_module">Module</a>, <a href="#_module">Module</a> that extend it directly or indirectly, and <a href="#_module">Module</a> that import the containing <a href="#_module">Module</a>.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_parameter">2.1.12. Parameter</h4>
-<div class="paragraph">
-<p>A parameter is used to pass a value from the caller. This value can be later referenced using its name.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_statement">2.1.13. Statement</h4>
-<div class="paragraph">
-<p>A statement is a directive used to produce an output or control the execution flow.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_statement">Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p><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></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_file_statement">2.1.14. 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. It returns an empty String.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_file_statement">File Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/file]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_for_statement">2.1.15. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_for_statement">For Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/for]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_if_statement">2.1.16. 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&#8217;t evaluate to a boolean an empty String is generated and an error is logged.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_if_statement">If Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)<strong>)</strong></p>
-</div>
-<div class="paragraph">
-<p>('[else]'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/if]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_let_statement">2.1.17. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_let_statement">Let Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[let ' <a href="#Identifier&gt; ('=' &lt;&lt;AQL Type Literal">[Identifier&gt; ('=' &lt;&lt;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>)* ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/let]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_protected_area">2.1.18. Protected Area</h4>
-<div class="paragraph">
-<p>This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn&#8217;t exist the concatenation of statement String is returned.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_protected_area">Protected Area</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/protected]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_expression_statement">2.1.19. Expression Statement</h4>
-<div class="paragraph">
-<p>This statement returns the String representation of the evaluation of the <a href="#_aql_expression">AQL Expression</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_text_statement">2.1.20. Text Statement</h4>
-<div class="paragraph">
-<p>This is any other text outside of '[' and ']'.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_aql_expression">2.1.21. AQL Expression</h4>
-<div class="paragraph">
-<p>This is an Acceleo query language expression. It&#8217;s 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="sect3">
-<h4 id="_aql_type_literal">2.1.22. AQL Type Literal</h4>
-<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="sect3">
-<h4 id="_query">2.1.23. Query</h4>
-<div class="paragraph">
-<p>A query reference an <a href="#_aql_expression">AQL Expression</a> with parameter 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><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> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element_documentation">2.1.24. Module Element documentation</h4>
-<div class="paragraph">
-<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_element_documentation">Module Element documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'@param ' &#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_white_spaces">2.2. White spaces</h3>
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_parsing">3.1. Parsing</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_validation">3.2. Validation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_completion">3.3. Completion</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_generation">3.4. Generation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-04-14 16:05:04 +0200
-</div>
-</div>
-</body>
+<!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">

+<title>Untitled</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">

+</div>

+<div id="content">

+<div class="paragraph">

+<p>Acceleo Query Language (AQL) User Guide</p>

+</div>

+<div class="exampleblock">

+<div class="content">

+<div class="paragraph">

+<p>Yvan Lussaud &lt;<a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a>&gt;

+:Author Initials: YLU

+:toc:

+:icons:

+:numbered:

+:website: TODO</p>

+</div>

+<div class="paragraph">

+<p>Introduction</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>TODO</pre>

+</div>

+</div>

+</div>

+</div>

+</div>

+<div id="footer">

+<div id="footer-text">

+Last updated 2020-04-15 10:31:45 +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>

+</body>

 </html>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/index.html
similarity index 67%
copy from acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
copy to acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/index.html
index 88c6333..6cfaf7a 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/index.html
@@ -1,962 +1,537 @@
-<!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="Yvan Lussaud">
-<title>Acceleo 4 User Guide</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>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-</head>
-<body class="article">
-<div id="header">
-<h1>Acceleo 4 User Guide</h1>
-<div class="details">
-<span id="author" class="author">Yvan Lussaud</span><br>
-<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>
-</div>
-<div id="toc" class="toc">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_introduction">1. Introduction</a></li>
-<li><a href="#_module_authoring">2. Module authoring</a>
-<ul class="sectlevel2">
-<li><a href="#_acceleo_4_syntax">2.1. Acceleo 4 syntax</a></li>
-<li><a href="#_white_spaces">2.2. White spaces</a></li>
-</ul>
-</li>
-<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>
-<ul class="sectlevel2">
-<li><a href="#_parsing">3.1. Parsing</a></li>
-<li><a href="#_validation">3.2. Validation</a></li>
-<li><a href="#_completion">3.3. Completion</a></li>
-<li><a href="#_generation">3.4. Generation</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_introduction">1. Introduction</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_module_authoring">2. Module authoring</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-<div class="sect2">
-<h3 id="_acceleo_4_syntax">2.1. Acceleo 4 syntax</h3>
-<div class="paragraph">
-<p>This section describe the syntax of an Acceleo 4 module. The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a>.</p>
-</div>
-<div class="sect3">
-<h4 id="_comment">2.1.1. Comment</h4>
-<div class="paragraph">
-<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generate 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_comment">Comment</a> = '[comment ' &#8230;&#8203; '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module">2.1.2. Module</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module">Module</a> =</p>
-</div>
-<div class="paragraph">
-<p>(<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>')? '/]'</p>
-</div>
-<div class="paragraph">
-<p><a href="#_import">Import</a>*</p>
-</div>
-<div class="paragraph">
-<p><a href="#_module_element">Module Element</a>*</p>
-</div>
-</div>
-</div>
-<div class="paragraph">
-<p>An example can be found TODO. An other examples of this section</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_identifier">2.1.3. Identifier</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_documentation">2.1.4. Module Documentation</h4>
-<div class="paragraph">
-<p>The module documentation should contains a description of the <a href="#_module">Module</a>. It also can contains metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_documentation">Module Documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>('@author' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@version' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@since' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_metamodel">2.1.5. Metamodel</h4>
-<div class="paragraph">
-<p>This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_metamodel">Metamodel</a> = '\'' &#8230;&#8203; '\''</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_import">2.1.6. Import</h4>
-<div class="paragraph">
-<p>This allow to import other <a href="#_module">Module</a> or service classes.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_reference">2.1.7. Module Reference</h4>
-<div class="paragraph">
-<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_qualified_name">2.1.8. Module Qualified Name</h4>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element">2.1.9. Module Element</h4>
-<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="paragraph">
-<p><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_template">2.1.10. Template</h4>
-<div class="paragraph">
-<p>A template returns a String produced using 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_template">Template</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[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> ')')? ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/template]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_visibility">2.1.11. Visibility</h4>
-<div class="paragraph">
-<p>The visibility define the scope where the <a href="#_template">Template</a> or <a href="#_query">Query</a> can be called as a service.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</p>
-</div>
-</div>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><strong>private</strong>: visible only in the current <a href="#_module">Module</a>.</p>
-</li>
-<li>
-<p><strong>protected</strong>: visible in the current <a href="#_module">Module</a> and <a href="#_module">Module</a> that extend it directly or indirectly.</p>
-</li>
-<li>
-<p><strong>public</strong>: visible in the current <a href="#_module">Module</a>, <a href="#_module">Module</a> that extend it directly or indirectly, and <a href="#_module">Module</a> that import the containing <a href="#_module">Module</a>.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_parameter">2.1.12. Parameter</h4>
-<div class="paragraph">
-<p>A parameter is used to pass a value from the caller. This value can be later referenced using its name.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_statement">2.1.13. Statement</h4>
-<div class="paragraph">
-<p>A statement is a directive used to produce an output or control the execution flow.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_statement">Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p><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></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_file_statement">2.1.14. 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. It returns an empty String.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_file_statement">File Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/file]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_for_statement">2.1.15. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_for_statement">For Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/for]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_if_statement">2.1.16. 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&#8217;t evaluate to a boolean an empty String is generated and an error is logged.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_if_statement">If Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)<strong>)</strong></p>
-</div>
-<div class="paragraph">
-<p>('[else]'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/if]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_let_statement">2.1.17. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_let_statement">Let Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[let ' <a href="#Identifier&gt; ('=' &lt;&lt;AQL Type Literal">[Identifier&gt; ('=' &lt;&lt;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>)* ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/let]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_protected_area">2.1.18. Protected Area</h4>
-<div class="paragraph">
-<p>This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn&#8217;t exist the concatenation of statement String is returned.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_protected_area">Protected Area</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/protected]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_expression_statement">2.1.19. Expression Statement</h4>
-<div class="paragraph">
-<p>This statement returns the String representation of the evaluation of the <a href="#_aql_expression">AQL Expression</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_text_statement">2.1.20. Text Statement</h4>
-<div class="paragraph">
-<p>This is any other text outside of '[' and ']'.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_aql_expression">2.1.21. AQL Expression</h4>
-<div class="paragraph">
-<p>This is an Acceleo query language expression. It&#8217;s 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="sect3">
-<h4 id="_aql_type_literal">2.1.22. AQL Type Literal</h4>
-<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="sect3">
-<h4 id="_query">2.1.23. Query</h4>
-<div class="paragraph">
-<p>A query reference an <a href="#_aql_expression">AQL Expression</a> with parameter 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><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> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element_documentation">2.1.24. Module Element documentation</h4>
-<div class="paragraph">
-<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_element_documentation">Module Element documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'@param ' &#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_white_spaces">2.2. White spaces</h3>
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_parsing">3.1. Parsing</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_validation">3.2. Validation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_completion">3.3. Completion</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_generation">3.4. Generation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-04-14 16:05:04 +0200
-</div>
-</div>
-</body>
+<!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="Yvan Lussaud">

+<title>Acceleo 4 User Guide</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 4 User Guide</h1>

+<div class="details">

+<span id="author" class="author">Yvan Lussaud</span><br>

+<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>

+</div>

+<div id="toc" class="toc">

+<div id="toctitle">Table of Contents</div>

+<ul class="sectlevel1">

+<li><a href="#_introduction">1. Introduction</a></li>

+<li><a href="#_module_authoring">2. Module authoring</a>

+<ul class="sectlevel2">

+<li><a href="#_white_spaces">2.1. White spaces</a></li>

+</ul>

+</li>

+<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>

+<ul class="sectlevel2">

+<li><a href="#_parsing">3.1. Parsing</a></li>

+<li><a href="#_validation">3.2. Validation</a></li>

+<li><a href="#_completion">3.3. Completion</a></li>

+<li><a href="#_generation">3.4. Generation</a></li>

+</ul>

+</li>

+</ul>

+</div>

+</div>

+<div id="content">

+<div class="sect1">

+<h2 id="_introduction">1. Introduction</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>TODO</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_module_authoring">2. Module authoring</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>TODO</p>

+</div>

+<div class="sect2">

+<h3 id="_white_spaces">2.1. White spaces</h3>

+<div class="paragraph">

+<p>TODO</p>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>

+<div class="sectionbody">

+<div class="sect2">

+<h3 id="_parsing">3.1. Parsing</h3>

+<div class="listingblock">

+<div class="content">

+<pre>TODO</pre>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_validation">3.2. Validation</h3>

+<div class="listingblock">

+<div class="content">

+<pre>TODO</pre>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_completion">3.3. Completion</h3>

+<div class="listingblock">

+<div class="content">

+<pre>TODO</pre>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_generation">3.4. Generation</h3>

+<div class="listingblock">

+<div class="content">

+<pre>TODO</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>

+</body>

 </html>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/language.html
similarity index 68%
copy from acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
copy to acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/language.html
index 88c6333..c045b38 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/language.html
@@ -1,962 +1,897 @@
-<!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="Yvan Lussaud">
-<title>Acceleo 4 User Guide</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>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-</head>
-<body class="article">
-<div id="header">
-<h1>Acceleo 4 User Guide</h1>
-<div class="details">
-<span id="author" class="author">Yvan Lussaud</span><br>
-<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>
-</div>
-<div id="toc" class="toc">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_introduction">1. Introduction</a></li>
-<li><a href="#_module_authoring">2. Module authoring</a>
-<ul class="sectlevel2">
-<li><a href="#_acceleo_4_syntax">2.1. Acceleo 4 syntax</a></li>
-<li><a href="#_white_spaces">2.2. White spaces</a></li>
-</ul>
-</li>
-<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>
-<ul class="sectlevel2">
-<li><a href="#_parsing">3.1. Parsing</a></li>
-<li><a href="#_validation">3.2. Validation</a></li>
-<li><a href="#_completion">3.3. Completion</a></li>
-<li><a href="#_generation">3.4. Generation</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_introduction">1. Introduction</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_module_authoring">2. Module authoring</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-<div class="sect2">
-<h3 id="_acceleo_4_syntax">2.1. Acceleo 4 syntax</h3>
-<div class="paragraph">
-<p>This section describe the syntax of an Acceleo 4 module. The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a>.</p>
-</div>
-<div class="sect3">
-<h4 id="_comment">2.1.1. Comment</h4>
-<div class="paragraph">
-<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generate 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_comment">Comment</a> = '[comment ' &#8230;&#8203; '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module">2.1.2. Module</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module">Module</a> =</p>
-</div>
-<div class="paragraph">
-<p>(<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>')? '/]'</p>
-</div>
-<div class="paragraph">
-<p><a href="#_import">Import</a>*</p>
-</div>
-<div class="paragraph">
-<p><a href="#_module_element">Module Element</a>*</p>
-</div>
-</div>
-</div>
-<div class="paragraph">
-<p>An example can be found TODO. An other examples of this section</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_identifier">2.1.3. Identifier</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_documentation">2.1.4. Module Documentation</h4>
-<div class="paragraph">
-<p>The module documentation should contains a description of the <a href="#_module">Module</a>. It also can contains metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_documentation">Module Documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>('@author' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@version' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@since' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_metamodel">2.1.5. Metamodel</h4>
-<div class="paragraph">
-<p>This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_metamodel">Metamodel</a> = '\'' &#8230;&#8203; '\''</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_import">2.1.6. Import</h4>
-<div class="paragraph">
-<p>This allow to import other <a href="#_module">Module</a> or service classes.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_reference">2.1.7. Module Reference</h4>
-<div class="paragraph">
-<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_qualified_name">2.1.8. Module Qualified Name</h4>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element">2.1.9. Module Element</h4>
-<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="paragraph">
-<p><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_template">2.1.10. Template</h4>
-<div class="paragraph">
-<p>A template returns a String produced using 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_template">Template</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[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> ')')? ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/template]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_visibility">2.1.11. Visibility</h4>
-<div class="paragraph">
-<p>The visibility define the scope where the <a href="#_template">Template</a> or <a href="#_query">Query</a> can be called as a service.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</p>
-</div>
-</div>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><strong>private</strong>: visible only in the current <a href="#_module">Module</a>.</p>
-</li>
-<li>
-<p><strong>protected</strong>: visible in the current <a href="#_module">Module</a> and <a href="#_module">Module</a> that extend it directly or indirectly.</p>
-</li>
-<li>
-<p><strong>public</strong>: visible in the current <a href="#_module">Module</a>, <a href="#_module">Module</a> that extend it directly or indirectly, and <a href="#_module">Module</a> that import the containing <a href="#_module">Module</a>.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_parameter">2.1.12. Parameter</h4>
-<div class="paragraph">
-<p>A parameter is used to pass a value from the caller. This value can be later referenced using its name.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_statement">2.1.13. Statement</h4>
-<div class="paragraph">
-<p>A statement is a directive used to produce an output or control the execution flow.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_statement">Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p><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></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_file_statement">2.1.14. 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. It returns an empty String.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_file_statement">File Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/file]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_for_statement">2.1.15. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_for_statement">For Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/for]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_if_statement">2.1.16. 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&#8217;t evaluate to a boolean an empty String is generated and an error is logged.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_if_statement">If Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)<strong>)</strong></p>
-</div>
-<div class="paragraph">
-<p>('[else]'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/if]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_let_statement">2.1.17. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_let_statement">Let Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[let ' <a href="#Identifier&gt; ('=' &lt;&lt;AQL Type Literal">[Identifier&gt; ('=' &lt;&lt;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>)* ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/let]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_protected_area">2.1.18. Protected Area</h4>
-<div class="paragraph">
-<p>This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn&#8217;t exist the concatenation of statement String is returned.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_protected_area">Protected Area</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/protected]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_expression_statement">2.1.19. Expression Statement</h4>
-<div class="paragraph">
-<p>This statement returns the String representation of the evaluation of the <a href="#_aql_expression">AQL Expression</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_text_statement">2.1.20. Text Statement</h4>
-<div class="paragraph">
-<p>This is any other text outside of '[' and ']'.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_aql_expression">2.1.21. AQL Expression</h4>
-<div class="paragraph">
-<p>This is an Acceleo query language expression. It&#8217;s 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="sect3">
-<h4 id="_aql_type_literal">2.1.22. AQL Type Literal</h4>
-<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="sect3">
-<h4 id="_query">2.1.23. Query</h4>
-<div class="paragraph">
-<p>A query reference an <a href="#_aql_expression">AQL Expression</a> with parameter 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><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> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element_documentation">2.1.24. Module Element documentation</h4>
-<div class="paragraph">
-<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_element_documentation">Module Element documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'@param ' &#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_white_spaces">2.2. White spaces</h3>
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_parsing">3.1. Parsing</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_validation">3.2. Validation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_completion">3.3. Completion</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_generation">3.4. Generation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-04-14 16:05:04 +0200
-</div>
-</div>
-</body>
+<!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 Language">

+<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 Language</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>

+<ul class="sectlevel2">

+<li><a href="#_intended_audience">1.1. Intended Audience</a></li>

+</ul>

+</li>

+<li><a href="#_module">2. Module</a>

+<ul class="sectlevel2">

+<li><a href="#_imports">2.1. Imports</a></li>

+<li><a href="#_module_elements">2.2. Module Elements</a></li>

+</ul>

+</li>

+<li><a href="#_template">3. Template</a>

+<ul class="sectlevel2">

+<li><a href="#_main_template">3.1. Main template</a></li>

+</ul>

+</li>

+<li><a href="#_query">4. Query</a></li>

+<li><a href="#_file_block">5. File Block</a></li>

+<li><a href="#_for_loops">6. For loops</a></li>

+<li><a href="#_if_conditions">7. If conditions</a></li>

+<li><a href="#_let_block">8. Let block</a></li>

+<li><a href="#_protected_area">9. Protected Area</a></li>

+</ul>

+</div>

+</div>

+<div id="content">

+<div class="sect1">

+<h2 id="_preface">1. Preface</h2>

+<div class="sectionbody">

+<div class="sect2">

+<h3 id="_intended_audience">1.1. Intended Audience</h3>

+<div class="paragraph">

+<p>This guide was written to describe the elements composing the Acceleo 4 templating language. This will not delve into the Acceleo Query Language (AQL) description.</p>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_module">2. Module</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>An Acceleo module is defined in its own file and is the main container for generation <a href="#_template">templates</a> (that will generate text) and <a href="#_query">queries</a> (which purpose is to extract information from the input models).</p>

+</div>

+<div class="paragraph">

+<p>The name of the module will be qualified according to its location in the source folder of the project.</p>

+</div>

+<div class="paragraph">

+<p>An Acceleo file must start with the module declaration in the following format:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[**

+&lt;module documentation&gt;

+@author &lt;author name&gt;

+@version &lt;version number&gt;

+@since &lt;first version in which this module appeared&gt;

+/]

+[module &lt;module name&gt;('http://metamodel/URI/1', 'http://metamodel/URI/1', &lt;additional_URIs&gt;) extends &lt;other module qualified name&gt;]</pre>

+</div>

+</div>

+<div class="dlist">

+<dl>

+<dt class="hdlist1">Module documentation</dt>

+<dd>

+<p>The documentation of a module is optional, and can contain both the description of the module and optional metadata such as the author and version number.</p>

+</dd>

+<dt class="hdlist1">Module name</dt>

+<dd>

+<p>The module name can only contain alphanumeric (and underscore <code>_</code>) characters and cannot start with a number.</p>

+</dd>

+<dt class="hdlist1">Metamodel URIs</dt>

+<dd>

+<p>The metamodel(s) from which this module will take types. The list has to be exhaustive: if multiple connected metamodels are used, then all must be listed in the module declaration.</p>

+</dd>

+<dt class="hdlist1">Extends</dt>

+<dd>

+<p>The qualified name of another module. Acceleo allows you to override <em>protected</em> and <em>public</em> visibility templates from the extended module. Extending multiple modules is not allowed.

+<strong>Note</strong> that the extended module&#8217;s name has to be qualified, even when overriding modules located in the same package.</p>

+</dd>

+</dl>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_module">Module syntax documentation</a>.</p>

+</div>

+<div class="sect2">

+<h3 id="_imports">2.1. Imports</h3>

+<div class="paragraph">

+<p>An Acceleo module can import any number of other modules. All <em>public</em> visibility templates and queries from the imported module(s) can be called by the importer.</p>

+</div>

+<div class="paragraph">

+<p>Importing modules can be done right after the module declaration line and requires the following format:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[import &lt;other module qualified name&gt;/]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p><strong>Note</strong> that modules can only be referenced through their qualified name, even if they are located in the same package.</p>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_import">Import</a> as well as the <a href="syntax.html#_module_reference">Module Reference</a> syntax documentation.</p>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_module_elements">2.2. Module Elements</h3>

+<div class="paragraph">

+<p>Following the imports declaration, any number of module element can now be written as the body of our Module. Please refer to <a href="#_template">Template</a> and <a href="#_query">Query</a> sections below for more information.</p>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_template">3. Template</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>A Template is a set of Acceleo statements used to generate text. It is delimited by <code>[template &#8230;&#8203;][/template]</code> tags.</p>

+</div>

+<div class="paragraph">

+<p>The template signature must include the visbility and the name, and can optionally define a post-treatment expression.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[**

+&lt;template documentation&gt;

+@param class &lt;documentation of the parameter&gt;

+/]

+[template public generate(class : ecore::EClass) post (self.trim())]

+[/template]</pre>

+</div>

+</div>

+<div class="dlist">

+<dl>

+<dt class="hdlist1">visibility</dt>

+<dd>

+<p>One of</p>

+<div class="ulist">

+<ul>

+<li>

+<p>public : Public templates will be visible from all modules importing or extending the module declaring them. They can be overridden by extending modules.</p>

+</li>

+<li>

+<p>protected : Protected templates will only be visible from extending modules and can be overridden.</p>

+</li>

+<li>

+<p>private : Private templates are only visible by the defining module and cannot be overridden.</p>

+</li>

+</ul>

+</div>

+</dd>

+<dt class="hdlist1">name</dt>

+<dd>

+<p>The name of the template. Only alphanumeric (and underscore <code>_</code>) characters are allowed, and the name cannot start with a number.</p>

+</dd>

+<dt class="hdlist1">arguments</dt>

+<dd>

+<p>Arguments follow the format <code>&lt;name&gt; : &lt;type&gt;</code>. Only alphanumeric (and underscore <code>_</code>) characters are allowed, and the name cannot start with a number. The type of the argument must be qualified and uses <code>::</code> as the qualified name separator.</p>

+</dd>

+<dt class="hdlist1">post</dt>

+<dd>

+<p>The post-treatment expression will be called on the result of the template (stored in variable <code>self</code>) and needs to be applicable to a String.</p>

+</dd>

+</dl>

+</div>

+<div class="paragraph">

+<p><strong>The result of a template is always a String.</strong></p>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_template">Template syntax documentation</a>.</p>

+</div>

+<div class="sect2">

+<h3 id="_main_template">3.1. Main template</h3>

+<div class="paragraph">

+<p>Acceleo defines a special metadata tag on templates to specify the main entry point(s) of a generation, the template(s) that will be called first during the workflow. This metadata tag, <code>@main</code>, needs to be in the comments preceding the template, or within the template documentation</p>

+</div>

+<div class="paragraph">

+<p>Such templates do not necessarily contain a <a href="#_file_block">File</a> block themselves.</p>

+</div>

+<div class="paragraph">

+<p>Example:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[**

+&lt;template documentation&gt;

+@param class &lt;param documentation&gt;

+@main

+/]

+[template public generate(class : ecore::EClass)]

+[file (class.name + '.txt', overwrite)]

+Class [class.name/] structural features:

+[for (feature | class.eStructuralFeatures)]

+[feature.name/]

+[/for]

+[/file]

+[/template]</pre>

+</div>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_query">4. Query</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>A query is a re-useable AQL expression that can return any type of Object. They are commonly used to extract information from the input models. A query is enclosed in a <code>[query &#8230;&#8203;]</code> tag.</p>

+</div>

+<div class="paragraph">

+<p>The query signature must include the visibility and its name.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[**

+&lt;query documentation&gt;

+@param class &lt;documentation of the parameter&gt;

+/]

+[query public getPublicProperties(class : uml::Class) : Set(uml::Property) =

+	class.attribute-&gt;select(property : uml::Property | property.visibility = uml::VisbilityKind::public)

+/]</pre>

+</div>

+</div>

+<div class="dlist">

+<dl>

+<dt class="hdlist1">visibility</dt>

+<dd>

+<p>One of</p>

+<div class="ulist">

+<ul>

+<li>

+<p>public : Public templates will be visible from all modules importing or extending the module declaring them. They can be overridden by extending modules.</p>

+</li>

+<li>

+<p>protected : Protected templates will only be visible from extending modules and can be overridden.</p>

+</li>

+<li>

+<p>private : Private templates are only visible by the defining module and cannot be overridden.</p>

+</li>

+</ul>

+</div>

+</dd>

+<dt class="hdlist1">name</dt>

+<dd>

+<p>The name of the query. Only alphanumeric (and underscore <code>_</code>) characters are allowed, and the name cannot start with a number.</p>

+</dd>

+<dt class="hdlist1">arguments</dt>

+<dd>

+<p>Arguments follow the format <code>&lt;name&gt; : &lt;type&gt;</code>. Only alphanumeric (and underscore <code>_</code>) characters are allowed, and the name cannot start with a number. The type of the argument must be qualified and uses <code>::</code> as the qualified name separator.</p>

+</dd>

+<dt class="hdlist1">return type</dt>

+<dd>

+<p>The return type describes the kind of object this query is expected to return. If the expression does not return an object of the accurate type, the evaluation will fail at runtime.</p>

+</dd>

+</dl>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_query">Query syntax documentation</a>.</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_file_block">5. File Block</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>File blocks are used to tell the Acceleo engine it must generate the body of the <code>[file &#8230;&#8203;]</code> block in an actual file.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[file (&lt;uri&gt;, &lt;open mode&gt;, &lt;charset&gt;)][/file]</pre>

+</div>

+</div>

+<div class="dlist">

+<dl>

+<dt class="hdlist1">uri</dt>

+<dd>

+<p>An AQL expression denoting the output file name. Must evaluate to a String.</p>

+</dd>

+<dt class="hdlist1">open mode</dt>

+<dd>

+<p>The open mode for the file. This can be one of:</p>

+<div class="ulist">

+<ul>

+<li>

+<p>append : Append to the end of the file if it already exists, create it otherwise.</p>

+</li>

+<li>

+<p>overwrite : Overwrite the whole file if it already exists, create it otherwise.</p>

+</li>

+<li>

+<p>create : Do not change the file if it already exists, create it otherwise.</p>

+</li>

+</ul>

+</div>

+</dd>

+<dt class="hdlist1">charset</dt>

+<dd>

+<p>This can be used to tell Acceleo which charset to use for the generated file. This is optional and will default to UTF-8</p>

+</dd>

+</dl>

+</div>

+<div class="paragraph">

+<p>Example:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public generate(class : ecore::EClass)]

+[file (class.name + '.java', append, 'UTF-8')]

+[/file]

+[/template]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p><strong>Note</strong> that the file will only be generated if the engine actually evaluates the file block. For example, if the template containing that block is never called, or if the file block is included in an <code>If</code> block which condition evalutes to <code>false</code>, then no file will be created.</p>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_file_statement">File Statement syntax documentation</a>.</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_for_loops">6. For loops</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>For loops in Acceleo need to be expressed using the following syntax:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (&lt;variable&gt; | &lt;iteration expression&gt;)]...[/for]</pre>

+</div>

+</div>

+<div class="dlist">

+<dl>

+<dt class="hdlist1">variable</dt>

+<dd>

+<p>The name of the loop variable allows only alphanumeric (and underscore <code>_</code>) characters, and the name cannot start with a number. The variable type must match the result of the iteration expression. If the expression returns a collection of Strings, then the variable will be of type String. Because of this, typing the variable is optional.</p>

+</dd>

+<dt class="hdlist1">iteration expression</dt>

+<dd>

+<p>An AQL expression returning a collection of elements on which to iterate.</p>

+</dd>

+</dl>

+</div>

+<div class="paragraph">

+<p>Example:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public generate(class : ecore::EClass)]

+[for (feature | class.eStructuralFeatures)]

+[/for]

+[/template]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_for_statement">For Statement syntax documentation</a>.</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_if_conditions">7. If conditions</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>The <code>If</code> statement in Acceleo uses the following syntax:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[if (condition)]

+[elseif (condition)]

+[else]

+[/if]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p><code>elseif</code> and <code>else</code> are both optional. If one of the <code>condition</code> expressions does not evaluate to a boolean an error will be logged and nothing will be generated for that <code>if</code> block.</p>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_if_statement">If Statement syntax documentation</a>.</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_let_block">8. Let block</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>Acceleo <code>Let</code> blocks use the following syntax:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[let var1 = expression, var2 = expression]

+[/let]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p><code>Let</code> blocks allow template writers to define temporary variables that will be visible within the scope of the block.</p>

+</div>

+<div class="paragraph">

+<p><strong>Note</strong> that all variables are immutable. Nested <code>Let</code> blocks can override the value of a variable within their own scope, but the variable will go back to its former value once outside of the nested <code>Let</code>.</p>

+</div>

+<div class="paragraph">

+<p>See also the <a href="syntax.html#_let_statemnet">Let Statement syntax documentation</a>.</p>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_protected_area">9. Protected Area</h2>

+<div class="sectionbody">

+<div class="paragraph">

+<p>A protected area defines a set of statements that should only be generated if the file doesn&#8217;t exist on disk or it does not contain an area with the specified protected area&#8217;s identifier.</p>

+</div>

+<div class="paragraph">

+<p>Protected areas allow module writers to create a "safe" part of the generated file that can be modified directly in the generated file, without fear of these manual modifications to be lost during subsequent generations.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[comment @main/]

+[template public generate(class : ecore::EClass)]

+[file (class.name + '.java', overwrite, 'UTF-8')/]

+// [protected (class.name + ' imports')]

+imports java.util.List;

+// [/protected]

+

+public class [class.name.toUpperFirst()/] {

+

+}

+[/file]

+[/template]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>The expression within the protected block&#8217;s signature serves as the protected area&#8217;s identifier and <strong>must be unique</strong> in the generated file&#8217;s scope.</p>

+</div>

+<div class="paragraph">

+<p><strong>There must be nothing present on the line after the protected area&#8217;s signature.</strong> Otherwise, everything following said signature will be considered to be part of the area&#8217;s identifier by the engine and the code will not be properly protected.</p>

+</div>

+<div class="paragraph">

+<p>Please also note that the protected area&#8217;s first and last line are marked as comments in the generated code (by generating <code>//</code> at the start of their respective line, since this is Java code). This is to avoid generating invalid Java code as the markers will be present in the generated file&#8217;s contents.</p>

+</div>

+</div>

+</div>

+</div>

+<div id="footer">

+<div id="footer-text">

+Last updated 2020-04-22 21:59:00 +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>

+</body>

 </html>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/migration.html
similarity index 67%
copy from acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
copy to acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/migration.html
index 88c6333..70417d8 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/migration.html
@@ -1,962 +1,979 @@
-<!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="Yvan Lussaud">
-<title>Acceleo 4 User Guide</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>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-</head>
-<body class="article">
-<div id="header">
-<h1>Acceleo 4 User Guide</h1>
-<div class="details">
-<span id="author" class="author">Yvan Lussaud</span><br>
-<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>
-</div>
-<div id="toc" class="toc">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_introduction">1. Introduction</a></li>
-<li><a href="#_module_authoring">2. Module authoring</a>
-<ul class="sectlevel2">
-<li><a href="#_acceleo_4_syntax">2.1. Acceleo 4 syntax</a></li>
-<li><a href="#_white_spaces">2.2. White spaces</a></li>
-</ul>
-</li>
-<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>
-<ul class="sectlevel2">
-<li><a href="#_parsing">3.1. Parsing</a></li>
-<li><a href="#_validation">3.2. Validation</a></li>
-<li><a href="#_completion">3.3. Completion</a></li>
-<li><a href="#_generation">3.4. Generation</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_introduction">1. Introduction</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_module_authoring">2. Module authoring</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-<div class="sect2">
-<h3 id="_acceleo_4_syntax">2.1. Acceleo 4 syntax</h3>
-<div class="paragraph">
-<p>This section describe the syntax of an Acceleo 4 module. The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a>.</p>
-</div>
-<div class="sect3">
-<h4 id="_comment">2.1.1. Comment</h4>
-<div class="paragraph">
-<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generate 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_comment">Comment</a> = '[comment ' &#8230;&#8203; '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module">2.1.2. Module</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module">Module</a> =</p>
-</div>
-<div class="paragraph">
-<p>(<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>')? '/]'</p>
-</div>
-<div class="paragraph">
-<p><a href="#_import">Import</a>*</p>
-</div>
-<div class="paragraph">
-<p><a href="#_module_element">Module Element</a>*</p>
-</div>
-</div>
-</div>
-<div class="paragraph">
-<p>An example can be found TODO. An other examples of this section</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_identifier">2.1.3. Identifier</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_documentation">2.1.4. Module Documentation</h4>
-<div class="paragraph">
-<p>The module documentation should contains a description of the <a href="#_module">Module</a>. It also can contains metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_documentation">Module Documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>('@author' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@version' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@since' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_metamodel">2.1.5. Metamodel</h4>
-<div class="paragraph">
-<p>This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_metamodel">Metamodel</a> = '\'' &#8230;&#8203; '\''</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_import">2.1.6. Import</h4>
-<div class="paragraph">
-<p>This allow to import other <a href="#_module">Module</a> or service classes.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_reference">2.1.7. Module Reference</h4>
-<div class="paragraph">
-<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_qualified_name">2.1.8. Module Qualified Name</h4>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element">2.1.9. Module Element</h4>
-<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="paragraph">
-<p><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_template">2.1.10. Template</h4>
-<div class="paragraph">
-<p>A template returns a String produced using 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_template">Template</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[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> ')')? ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/template]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_visibility">2.1.11. Visibility</h4>
-<div class="paragraph">
-<p>The visibility define the scope where the <a href="#_template">Template</a> or <a href="#_query">Query</a> can be called as a service.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</p>
-</div>
-</div>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><strong>private</strong>: visible only in the current <a href="#_module">Module</a>.</p>
-</li>
-<li>
-<p><strong>protected</strong>: visible in the current <a href="#_module">Module</a> and <a href="#_module">Module</a> that extend it directly or indirectly.</p>
-</li>
-<li>
-<p><strong>public</strong>: visible in the current <a href="#_module">Module</a>, <a href="#_module">Module</a> that extend it directly or indirectly, and <a href="#_module">Module</a> that import the containing <a href="#_module">Module</a>.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_parameter">2.1.12. Parameter</h4>
-<div class="paragraph">
-<p>A parameter is used to pass a value from the caller. This value can be later referenced using its name.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_statement">2.1.13. Statement</h4>
-<div class="paragraph">
-<p>A statement is a directive used to produce an output or control the execution flow.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_statement">Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p><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></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_file_statement">2.1.14. 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. It returns an empty String.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_file_statement">File Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/file]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_for_statement">2.1.15. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_for_statement">For Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/for]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_if_statement">2.1.16. 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&#8217;t evaluate to a boolean an empty String is generated and an error is logged.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_if_statement">If Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)<strong>)</strong></p>
-</div>
-<div class="paragraph">
-<p>('[else]'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/if]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_let_statement">2.1.17. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_let_statement">Let Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[let ' <a href="#Identifier&gt; ('=' &lt;&lt;AQL Type Literal">[Identifier&gt; ('=' &lt;&lt;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>)* ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/let]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_protected_area">2.1.18. Protected Area</h4>
-<div class="paragraph">
-<p>This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn&#8217;t exist the concatenation of statement String is returned.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_protected_area">Protected Area</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/protected]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_expression_statement">2.1.19. Expression Statement</h4>
-<div class="paragraph">
-<p>This statement returns the String representation of the evaluation of the <a href="#_aql_expression">AQL Expression</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_text_statement">2.1.20. Text Statement</h4>
-<div class="paragraph">
-<p>This is any other text outside of '[' and ']'.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_aql_expression">2.1.21. AQL Expression</h4>
-<div class="paragraph">
-<p>This is an Acceleo query language expression. It&#8217;s 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="sect3">
-<h4 id="_aql_type_literal">2.1.22. AQL Type Literal</h4>
-<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="sect3">
-<h4 id="_query">2.1.23. Query</h4>
-<div class="paragraph">
-<p>A query reference an <a href="#_aql_expression">AQL Expression</a> with parameter 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><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> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element_documentation">2.1.24. Module Element documentation</h4>
-<div class="paragraph">
-<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_element_documentation">Module Element documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'@param ' &#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_white_spaces">2.2. White spaces</h3>
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_parsing">3.1. Parsing</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_validation">3.2. Validation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_completion">3.3. Completion</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_generation">3.4. Generation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-04-14 16:05:04 +0200
-</div>
-</div>
-</body>
+<!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 3 to Acceleo 4 migration guide">

+<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 3 to Acceleo 4 migration guide</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>

+<ul class="sectlevel2">

+<li><a href="#_intended_audience">1.1. Intended Audience</a></li>

+</ul>

+</li>

+<li><a href="#_language_changes">2. Language Changes</a>

+<ul class="sectlevel2">

+<li><a href="#_modules">2.1. Modules</a></li>

+<li><a href="#_templates">2.2. Templates</a></li>

+<li><a href="#_query">2.3. Query</a></li>

+<li><a href="#_file_block">2.4. File Block</a></li>

+<li><a href="#_for_block">2.5. For Block</a></li>

+<li><a href="#_let_statement">2.6. Let Statement</a></li>

+<li><a href="#_invocation">2.7. Invocation</a></li>

+<li><a href="#_module_element_call">2.8. Module Element Call</a></li>

+<li><a href="#_expressions">2.9. Expressions</a></li>

+</ul>

+</li>

+<li><a href="#_behavior_changes">3. Behavior Changes</a>

+<ul class="sectlevel2">

+<li><a href="#_modules_2">3.1. Modules</a></li>

+<li><a href="#_query_3">3.2. Query</a></li>

+<li><a href="#_let_statement_2">3.3. Let Statement</a></li>

+</ul>

+</li>

+</ul>

+</div>

+</div>

+<div id="content">

+<div class="sect1">

+<h2 id="_preface">1. Preface</h2>

+<div class="sectionbody">

+<div class="sect2">

+<h3 id="_intended_audience">1.1. Intended Audience</h3>

+<div class="paragraph">

+<p>This guide was written to describe the behavior changes between the two versions of Acceleo, for the purpose of migrating from one to the next.</p>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_language_changes">2. Language Changes</h2>

+<div class="sectionbody">

+<div class="sect2">

+<h3 id="_modules">2.1. Modules</h3>

+<div class="sect3">

+<h4 id="_module_name">2.1.1. module name</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed users to set the fully qualified name of the module in its declaration, such as</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[module qualified::module::name(...)]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 forbids anything other than the actual module name and this should thus become.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[module name(...)]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Both versions require the module name to be equal to the name of the containing file minus the extension.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_multiple_inheritance">2.1.2. multiple inheritance</h4>

+<div class="paragraph">

+<p>The acceleo 3 module declaration allowed users to declare multiple "extends" modules:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[module qualified::module::name(...) extends another::module, and::a:second::module]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 modules can only define a single extended module.</p>

+</div>

+<div class="paragraph">

+<p><strong>Only the first extended module was taken into account</strong> in Acceleo 3 so the migration can just strip all but the first extended modules' name.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_module_imports">2.1.3. module imports</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed imports of modules through unqualified names. This is forbidden in Acceleo 4 and the fully qualified names of the imports are required.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_templates">2.2. Templates</h3>

+<div class="paragraph">

+<p><strong>Important notes:</strong> The Migration tool needs to somehow mark every template which had duplicated signatures (same name, same argument list, different pre-condition) to be manually checked after migration.</p>

+</div>

+<div class="ulist">

+<ul>

+<li>

+<p>Acceleo 4 does not allow duplicated signatures and has no pre-condition, so duplicated templates might have to be combined into a single one with their pre-condition as an <code>If-Else</code> block inside.</p>

+</li>

+<li>

+<p>Initialization blocks could be different on duplicated templates, depending on the pre-condition. The migrated <code>Let</code> block thus needs to be different per branch of the above <code>If-Else</code>.</p>

+</li>

+</ul>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 templates will automatically override their super-module templates if the signature matches. This was not the case in Acceleo 3 and matching templates thus need to be marked for manual varification.</p>

+</div>

+<div class="sect3">

+<h4 id="_overriding">2.2.1. Overriding</h4>

+<div class="paragraph">

+<p>Acceleo 3 templates allowed users to override an arbitrary template through the "overrides" keyword:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public aTemplateName(...) overrides anotherTemplateName]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 only allows a template of name "xyz" to override a template from the extended module with the same "xyz" name.</p>

+</div>

+<div class="paragraph">

+<p>Furthermore, Acceleo 4 templates will automatically override their super-module&#8217;s public or protected templates if they have the same signature.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_pre_conditions">2.2.2. Pre-conditions</h4>

+<div class="paragraph">

+<p>Acceleo 4 does not allow pre-conditions on templates.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_post_treatment">2.2.3. Post-treatment</h4>

+<div class="paragraph">

+<p>Acceleo 3 used an implicit String-typed variable so the post expression could be a simple call without a variable:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public aTemplateName(...) post (trim())]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 doesn&#8217;t allow implicit variables. The result of the template call will be stored in the <code>self</code> variable and the migration must thus transform this expression into:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public aTemplateName(...) post (self.trim())]</pre>

+</div>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_init_block">2.2.4. Init block</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed variable initialization blocks on the template:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public aTemplateName(...) {var1 = 'string'; var2 = param1.feature;}]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 removes the initialization blocks altogether, so the variable declarations must be transformed into a <code>let</code> block at the start of the template.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_namesakes">2.2.5. Namesakes</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed multiple templates with the same name and same argument list to co-exist within the same module, as long as their pre-condition differed.</p>

+</div>

+<div class="paragraph">

+<p>PENDING choice, remove one of the two:

+Though Acceleo 4 will allow multiple templates with the same signature to exist in a module, only the first one will ever be resolved for a call or override, all subsequent being ignored.

+Acceleo 4 does not allow multiple templates with the same signature in a given module.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_query">2.3. Query</h3>

+<div class="sect3">

+<h4 id="_java_services">2.3.1. Java services</h4>

+<div class="paragraph">

+<p>The best practice for Acceleo 3 was to wrap java services inside of a query. The special <code>invoke</code> service was used to this end.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[query public hasStereotype(element : uml::Element, stereotypeName : String) : Boolean =

+	invoke('org.eclipse.acceleo.module.sample.services.UMLServices', 'hasStereotype(org.eclipse.uml2.uml.Element, java.lang.String)', Sequence{element, stereotypeName})

+/]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 allows users to directly import java services.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_file_block">2.4. File Block</h3>

+<div class="paragraph">

+<p>The second argument for the file block in Acceleo 3 was a boolean (false = overwrite the file, true = append at the end of the file).</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 uses an enumeration, which allows the keyword "overwrite", "append" or "create" instead.</p>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_for_block">2.5. For Block</h3>

+<div class="sect3">

+<h4 id="_simplified_syntax">2.5.1. Simplified Syntax</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed for loops in two formats:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (i : E | expr)]...[/for]</pre>

+</div>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (expr)]...[/for]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>In the second case, the loop variable was <code>self</code>.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 only allows for the first of these two formats.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_iteration_count">2.5.2. Iteration count</h4>

+<div class="paragraph">

+<p>Acceleo 3 defined an implicit variable, <code>i</code>, that held the current iteration count.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (feature : ecore::EStructuralFeature | class.eStructuralFeatures)]

+iteration number [i/]

+[/for]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 does not define any similar variable.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_before_separator_after">2.5.3. before, separator, after</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed users to specify a <code>before</code> expression that would be inserted right before the content generated by the loop body <em>if the loop had any iteration</em>. An <code>after</code> that would similarly inserted after the loop body if it generated any content, and finally a <code>separator</code> which content would be inserted in-between each iteration result.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (number : Integer | Sequence{1, 2, 3}) before ('int[] array = new int[') separator (', ' after ('];')][number/][/for]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 doesn&#8217;t have any similar mechanics. The migration could convert this to a <code>Let</code> holding the content of the iteration expression, then a <code>If</code> only generating before and after if the collection is not empty. Separator could be similarly handled with an <code>If</code> generating for all but the last iteration.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_pre_condition">2.5.4. Pre-condition</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed users to specify a pre-condition that would be evaluated every iteration and that would prevent all generation for that iteration if <code>false</code>.</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (number : Integer | Sequence{1, 2, 3}) ? (isEven(number))]

+[number/]

+[/for]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 does not have pre-conditions. This could be converted to an <code>If</code> at the start of the for body.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_init_block_2">2.5.5. Init block</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed variable initialization blocks on the for:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[for (feature : ecore::EStructuralFeature | class.eStructuralFeatures) {var : String = 'string'; className : String = class.name;}]

+[number/]

+[/for]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 removes the initialization blocks altogether, so the variable declarations must be transformed into a <code>let</code> block before the <code>For</code> block.</p>

+</div>

+<div class="paragraph">

+<p><strong>Note</strong> the initialization block was evaluated before the for itself, and not for every loop.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_let_statement">2.6. Let Statement</h3>

+<div class="paragraph">

+<p>Acceleo 3 only allowed a single variable per <code>Let</code>, forcing users to have multiple nested <code>Let</code> blocks to define more. The migration could aggregate multiple nested blocks into one with multiple variables if the nested blocks don&#8217;t use one of the outer `Let&#8217;s variable.</p>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_invocation">2.7. Invocation</h3>

+<div class="paragraph">

+<p>Acceleo 3 made use of implicit variables allowing module writers to avoid always specifying the target of an expression or call:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public generate(class : ecore::EClass)]

+[name/] is equivalent to [class.name/] or [self.name/]

+[eAllContents()/] is equivalent to [class.eAllContents()/] or [self.eAllContents()/]

+[/template]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>The implicit variable is always <code>self</code>, but the value of <code>self</code> may not be intuitive in all cases.</p>

+</div>

+<div class="paragraph">

+<p>The migration will have to take specific care of properly replacing the implicit variable with the correct variable for Acceleo 4.</p>

+</div>

+<div class="sect3">

+<h4 id="_template">2.7.1. Template</h4>

+<div class="paragraph">

+<p>Acceleo 3 : <code>self</code> is the first argument of the template.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 : PENDING</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_query_2">2.7.2. Query</h4>

+<div class="paragraph">

+<p>Acceleo 3 : <code>self</code> is the first argument of the query.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 : PENDING</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_for">2.7.3. For</h4>

+<div class="paragraph">

+<p>Acceleo 3 : <code>self</code> has the same value as the iteration variable.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 : PENDING</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_if">2.7.4. If</h4>

+<div class="paragraph">

+<p>Acceleo 3 : The value of <code>self</code> is not changed within the <code>if</code> scope and remains the value of <code>self</code> outside of the <code>if</code>.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 : PENDING</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_let">2.7.5. let</h4>

+<div class="paragraph">

+<p>Acceleo 3 : The value of <code>self</code> is not changed within the <code>let</code> scope and remains the value of <code>self</code> outside of the <code>let</code>.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 : PENDING</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_expression">2.7.6. Expression</h4>

+<div class="paragraph">

+<p>Acceleo 3/OCL : The value of <code>self</code> is defined by the current Acceleo scope and will not be altered by OCL.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4/AQL : PENDING</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_module_element_call">2.8. Module Element Call</h3>

+<div class="sect3">

+<h4 id="_template_invocation">2.8.1. Template invocation</h4>

+<div class="paragraph">

+<p>Acceleo 3 allowed special template calls such as the following:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public aTemplate()]

+	[anotherTemplate() before ('inserted before generated body') separator ('in-between') after ('inserted after generated body')/]

+[/template]

+

+[template protected anotherTemplate()]

+	generated body

+[/template]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>Both <code>before</code> and <code>after</code> expression are handled by Acceleo 3 and will respectively generate their content before and after the callee&#8217;s generated text. This is true even if the callee does not generate any text.</p>

+</div>

+<div class="paragraph">

+<p><code>separator</code> is not implemented by the engine so the migration can strip it entirely.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_query_invocation">2.8.2. Query invocation</h4>

+<div class="paragraph">

+<p>Similar to template invocations, query invocations support <code>before</code>, <code>separator</code> and <code>after</code> expressions. None of which is implemented in the Acceleo 3 generation engine so they can all be stripped entirely.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_expressions">2.9. Expressions</h3>

+<div class="paragraph">

+<p>Acceleo 3 was using OCL as the underlying expression language, while Acceleo 4 is using AQL. Please look at the <a href="https://www.eclipse.org/acceleo/documentation/#MigratingfromMTLqueries">AQL Documentation</a> for more information on migrating OCL expressions to AQL.</p>

+</div>

+</div>

+</div>

+</div>

+<div class="sect1">

+<h2 id="_behavior_changes">3. Behavior Changes</h2>

+<div class="sectionbody">

+<div class="sect2">

+<h3 id="_modules_2">3.1. Modules</h3>

+<div class="sect3">

+<h4 id="_inheritance_behavior">3.1.1. inheritance behavior</h4>

+<div class="paragraph">

+<p>In Acceleo 3, once an overriding module (child) called a public or protected template of its extended module (parent), the execution flow would never come down to the child again until we <code>returned</code> out of the callee. This is contrary to other Object-oriented languages in which a <code>super</code> template could call down an <code>overriden</code> other template from the child when necessary.</p>

+</div>

+<div class="paragraph">

+<p>If you consider the following simplified modules:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[module parentModule()/]

+

+[template public aTemplate()]

+	[anotherTemplate()/]

+[/template]

+

+[template protected anotherTemplate()]

+	parent behavior

+[/template]</pre>

+</div>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[module childModule() extends parentModule/]

+

+[template public main()]

+	[aTemplate()/]

+[/template]

+

+[template protected anotherTemplate()]

+	child behavior

+[/template]</pre>

+</div>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_query_3">3.2. Query</h3>

+<div class="sect3">

+<h4 id="_validation">3.2.1. Validation</h4>

+<div class="paragraph">

+<p>In Acceleo 3, the return type of a query was not validated at compile time, so it was very easy for ClassCastExceptions to occur at runtime or for invalid templates to be written with the error only detected at runtime.</p>

+</div>

+<div class="paragraph">

+<p>For example, the following will fail when we try to generate, but is valid for the compiler:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[template public generate(c : ecore::EClass)]

+	[file (c.name.concat('.java'), false, 'UTF-8')]

+	[for (attribute : ecore::EAttribute | getFeatures(c))]

+		attribute name : [attribute.name/] [if (attribute.iD)]is id attribute[/if]

+	[/for]

+	[/file]

+[/template]

+

+[query private getFeatures(c : ecore::EClass) : Set(ecore::EAttribute) = c.eStructuralFeatures/]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>The template expected "getFeatures" to return a Set of Attributes, but the actual type is a set of EStructuralFeature. This will fail as soon as we try to generate for a class containing both attributes and references.</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 validates the return type of the query&#8217;s body expression.</p>

+</div>

+</div>

+<div class="sect3">

+<h4 id="_cache">3.2.2. Cache</h4>

+<div class="paragraph">

+<p>The MTL specification enforces that "A query is required to produce the same result each time it is invoked with the same arguments.". The result of a query call was thus cached in Acceleo 3, and never reevaluated. (This behavior could be disabled through a preference for Acceleo 3.)</p>

+</div>

+<div class="paragraph">

+<p>Acceleo 4 will always reevaluate the query&#8217;s body even if the same argument list is passed twice.</p>

+</div>

+</div>

+</div>

+<div class="sect2">

+<h3 id="_let_statement_2">3.3. Let Statement</h3>

+<div class="paragraph">

+<p>The Acceleo 3 let statement was equivalent to an "instance of" condition check to enter a block.</p>

+</div>

+<div class="paragraph">

+<p>If we consider the following let block:</p>

+</div>

+<div class="listingblock">

+<div class="content">

+<pre>[let var : EPackage = anotherVar.eContainer()]

+	output text for EPackage named [var.name/]

+[/let]</pre>

+</div>

+</div>

+<div class="paragraph">

+<p>In Acceleo 3, if the result of evaluating <code>anotherVar.eContainer()</code> is of type <code>EPackage</code> (the declared type of variable <code>var</code>), then this block will output the result of evaluating its body. In any other event, this would output no text and cause no failure as the block would be simply ignored if the types do not match.</p>

+</div>

+<div class="paragraph">

+<p>In Acceleo 4, this same let block will cause validation errors if the type of <code>anotherVar.eContainer()</code> cannot be an <code>EPackage</code>.</p>

+</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>

+</body>

 </html>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/syntax.html
similarity index 72%
rename from acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
rename to acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/syntax.html
index 88c6333..c7b88ea 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/index.html
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/doc/Acceleo/syntax.html
@@ -1,962 +1,844 @@
-<!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="Yvan Lussaud">
-<title>Acceleo 4 User Guide</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>
-<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
-</head>
-<body class="article">
-<div id="header">
-<h1>Acceleo 4 User Guide</h1>
-<div class="details">
-<span id="author" class="author">Yvan Lussaud</span><br>
-<span id="email" class="email"><a href="mailto:yvan.lussaud@obeo.fr">yvan.lussaud@obeo.fr</a></span><br>
-</div>
-<div id="toc" class="toc">
-<div id="toctitle">Table of Contents</div>
-<ul class="sectlevel1">
-<li><a href="#_introduction">1. Introduction</a></li>
-<li><a href="#_module_authoring">2. Module authoring</a>
-<ul class="sectlevel2">
-<li><a href="#_acceleo_4_syntax">2.1. Acceleo 4 syntax</a></li>
-<li><a href="#_white_spaces">2.2. White spaces</a></li>
-</ul>
-</li>
-<li><a href="#_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</a>
-<ul class="sectlevel2">
-<li><a href="#_parsing">3.1. Parsing</a></li>
-<li><a href="#_validation">3.2. Validation</a></li>
-<li><a href="#_completion">3.3. Completion</a></li>
-<li><a href="#_generation">3.4. Generation</a></li>
-</ul>
-</li>
-</ul>
-</div>
-</div>
-<div id="content">
-<div class="sect1">
-<h2 id="_introduction">1. Introduction</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_module_authoring">2. Module authoring</h2>
-<div class="sectionbody">
-<div class="paragraph">
-<p>TODO</p>
-</div>
-<div class="sect2">
-<h3 id="_acceleo_4_syntax">2.1. Acceleo 4 syntax</h3>
-<div class="paragraph">
-<p>This section describe the syntax of an Acceleo 4 module. The syntax is described using the <a href="https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form">Backus Naur from</a>.</p>
-</div>
-<div class="sect3">
-<h4 id="_comment">2.1.1. Comment</h4>
-<div class="paragraph">
-<p>A comment can be used to document any part of the <a href="#_module">Module</a>. It generate 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_comment">Comment</a> = '[comment ' &#8230;&#8203; '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module">2.1.2. Module</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module">Module</a> =</p>
-</div>
-<div class="paragraph">
-<p>(<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>')? '/]'</p>
-</div>
-<div class="paragraph">
-<p><a href="#_import">Import</a>*</p>
-</div>
-<div class="paragraph">
-<p><a href="#_module_element">Module Element</a>*</p>
-</div>
-</div>
-</div>
-<div class="paragraph">
-<p>An example can be found TODO. An other examples of this section</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_identifier">2.1.3. Identifier</h4>
-<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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_identifier">Identifier</a> = [a-zA-Z_][a-zA-Z_0-9]*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_documentation">2.1.4. Module Documentation</h4>
-<div class="paragraph">
-<p>The module documentation should contains a description of the <a href="#_module">Module</a>. It also can contains metadata such as the author, version, and since (the version since this <a href="#_module">Module</a> exists).</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_documentation">Module Documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>('@author' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@version' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>('@since' &#8230;&#8203;)?</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_metamodel">2.1.5. Metamodel</h4>
-<div class="paragraph">
-<p>This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_metamodel">Metamodel</a> = '\'' &#8230;&#8203; '\''</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_import">2.1.6. Import</h4>
-<div class="paragraph">
-<p>This allow to import other <a href="#_module">Module</a> or service classes.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_import">Import</a> = '[import ' <a href="#_module_reference">Module Reference</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_reference">2.1.7. Module Reference</h4>
-<div class="paragraph">
-<p>The module reference is a qualified reference to a <a href="#_module">Module</a></p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_reference">Module Reference</a> = <a href="#_module_qualified_name">Module Qualified Name</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_qualified_name">2.1.8. Module Qualified Name</h4>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_qualified_name">Module Qualified Name</a> = <a href="#_identifier">Identifier</a> ('::' <a href="#_identifier">Identifier</a>)*</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element">2.1.9. Module Element</h4>
-<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="paragraph">
-<p><a href="#_module_element">Module Element</a> = <a href="#_template">Template</a> | <a href="#_query">Query</a></p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_template">2.1.10. Template</h4>
-<div class="paragraph">
-<p>A template returns a String produced using 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_template">Template</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[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> ')')? ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/template]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_visibility">2.1.11. Visibility</h4>
-<div class="paragraph">
-<p>The visibility define the scope where the <a href="#_template">Template</a> or <a href="#_query">Query</a> can be called as a service.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_visibility">Visibility</a> = 'private' | 'protected' | 'public'</p>
-</div>
-</div>
-</div>
-<div class="ulist">
-<ul>
-<li>
-<p><strong>private</strong>: visible only in the current <a href="#_module">Module</a>.</p>
-</li>
-<li>
-<p><strong>protected</strong>: visible in the current <a href="#_module">Module</a> and <a href="#_module">Module</a> that extend it directly or indirectly.</p>
-</li>
-<li>
-<p><strong>public</strong>: visible in the current <a href="#_module">Module</a>, <a href="#_module">Module</a> that extend it directly or indirectly, and <a href="#_module">Module</a> that import the containing <a href="#_module">Module</a>.</p>
-</li>
-</ul>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_parameter">2.1.12. Parameter</h4>
-<div class="paragraph">
-<p>A parameter is used to pass a value from the caller. This value can be later referenced using its name.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_parameter">Parameter</a> = <a href="#_identifier">Identifier</a> ':' <a href="#_aql_type_literal">AQL Type Literal</a></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_statement">2.1.13. Statement</h4>
-<div class="paragraph">
-<p>A statement is a directive used to produce an output or control the execution flow.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_statement">Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p><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></p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_file_statement">2.1.14. 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. It returns an empty String.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_file_statement">File Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[file ' '(' <a href="#_aql_expression">AQL Expression</a> ',' <a href="#Open Mode Kind">[Open Mode Kind]</a> (',' <a href="#_aql_expression">AQL Expression</a>)? ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/file]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_for_statement">2.1.15. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_for_statement">For Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[for ' '(' <a href="#_identifier">Identifier</a> (':' <a href="#_aql_type_literal">AQL Type Literal</a>)? '|' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>'[/for]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_if_statement">2.1.16. 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&#8217;t evaluate to a boolean an empty String is generated and an error is logged.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_if_statement">If Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[if ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*</p>
-</div>
-<div class="paragraph">
-<p>('[elseif ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)<strong>)</strong></p>
-</div>
-<div class="paragraph">
-<p>('[else]'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/if]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_let_statement">2.1.17. 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_let_statement">Let Statement</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[let ' <a href="#Identifier&gt; ('=' &lt;&lt;AQL Type Literal">[Identifier&gt; ('=' &lt;&lt;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>)* ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/let]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_protected_area">2.1.18. Protected Area</h4>
-<div class="paragraph">
-<p>This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn&#8217;t exist the concatenation of statement String is returned.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_protected_area">Protected Area</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[protected ' '(' <a href="#_aql_expression">AQL Expression</a> ')' ']'</p>
-</div>
-<div class="paragraph">
-<p>(<a href="#_statement">Statement</a>)*)?</p>
-</div>
-<div class="paragraph">
-<p>'[/protected]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_expression_statement">2.1.19. Expression Statement</h4>
-<div class="paragraph">
-<p>This statement returns the String representation of the evaluation of the <a href="#_aql_expression">AQL Expression</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_expression_statement">Expression Statement</a> = '[' <a href="#_aql_expression">AQL Expression</a> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_text_statement">2.1.20. Text Statement</h4>
-<div class="paragraph">
-<p>This is any other text outside of '[' and ']'.</p>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_aql_expression">2.1.21. AQL Expression</h4>
-<div class="paragraph">
-<p>This is an Acceleo query language expression. It&#8217;s 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="sect3">
-<h4 id="_aql_type_literal">2.1.22. AQL Type Literal</h4>
-<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="sect3">
-<h4 id="_query">2.1.23. Query</h4>
-<div class="paragraph">
-<p>A query reference an <a href="#_aql_expression">AQL Expression</a> with parameter 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="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><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> '/]'</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect3">
-<h4 id="_module_element_documentation">2.1.24. Module Element documentation</h4>
-<div class="paragraph">
-<p>The documentation of a <a href="#_template">Template</a> or a <a href="#_query">Query</a>.</p>
-</div>
-<div class="exampleblock">
-<div class="content">
-<div class="paragraph">
-<p><a href="#_module_element_documentation">Module Element documentation</a> =</p>
-</div>
-<div class="paragraph">
-<p>'[**'</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'@param ' &#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>&#8230;&#8203;</p>
-</div>
-<div class="paragraph">
-<p>'/]'</p>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_white_spaces">2.2. White spaces</h3>
-<div class="paragraph">
-<p>TODO</p>
-</div>
-</div>
-</div>
-</div>
-<div class="sect1">
-<h2 id="_using_acceleo_4_programmatically">3. Using Acceleo 4 programmatically</h2>
-<div class="sectionbody">
-<div class="sect2">
-<h3 id="_parsing">3.1. Parsing</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_validation">3.2. Validation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_completion">3.3. Completion</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-<div class="sect2">
-<h3 id="_generation">3.4. Generation</h3>
-<div class="listingblock">
-<div class="content">
-<pre>TODO</pre>
-</div>
-</div>
-</div>
-</div>
-</div>
-</div>
-<div id="footer">
-<div id="footer-text">
-Last updated 2020-04-14 16:05:04 +0200
-</div>
-</div>
-</body>
+<!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&#8217;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&#8217;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&#8217;t exist, then the concatenation of the body&#8217;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>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/index.asciidoc b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/index.asciidoc
index 2be496d..71949fd 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/index.asciidoc
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/index.asciidoc
@@ -14,277 +14,6 @@
 
 TODO
 
-=== Acceleo 4 syntax ===
-
-This section describe the syntax of an Acceleo 4 module. The syntax is described using the https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form[Backus Naur from].
-
-==== Comment ====
-
-A comment can be used to document any part of the <<Module>>. It generate nothing if placed directly or indirectly in a <<File Statement>>. For simplification comments will not be present in the BNF representation of the grammar.
-
-====
-<<Comment>> = '[comment ' ... '/]'
-====
-
-==== Module ====
-
-The module is the top level element of a .mtl file. It represent a namespace declaring <<Template>> and <<Query>>. The name of the module is qualified by the location of the file in the source folder.
-
-====
-<<Module>> =
-
-(<<Module Documentation>>)* '[module ' <<Identifier>> '(' <<Metamodel>> ',' (<<Metamodel>>)* ')' ('extends <<Module Reference>>')? '/]'
-
-<<Import>>*
-
-<<Module Element>>*
-====
-
-An example can be found TODO. An other examples of this section
-
-
-==== Identifier ====
-
-An identifier is used to name elements that need to be identified, or reference element that can be identified.
-
-====
-<<Identifier>> = [a-zA-Z_][a-zA-Z_0-9]*
-====
-
-==== Module Documentation ====
-
-The module documentation should contains a description of the <<Module>>. It also can contains metadata such as the author, version, and since (the version since this <<Module>> exists).
-
-====
-<<Module Documentation>> =
-
-'[**'
-
-...
-
-('@author' ...)?
-
-('@version' ...)?
-
-('@since' ...)?
-
-...
-
-'/]'
-
-====
-
-==== Metamodel ====
-
-This is the declaration of used metamodels. Metamodels are references using their EPackage nsURI between simple quote.
-
-====
-<<Metamodel>> = '\'' ... '\''
-====
-
-==== Import ====
-
-This allow to import other <<Module>> or service classes.
-
-====
-<<Import>> = '[import ' <<Module Reference>> '/]'
-====
-
-==== Module Reference ====
-
-The module reference is a qualified reference to a <<Module>>
-
-====
-<<Module Reference>> = <<Module Qualified Name>>
-====
-
-==== Module Qualified Name ====
-
-====
-<<Module Qualified Name>> = <<Identifier>> ('::' <<Identifier>>)*
-====
-
-
-==== Module Element ====
-
-A module element is either a <<Template>> or a <<Query>>.
-
-<<Module Element>> = <<Template>> | <<Query>>
-
-==== Template ====
-
-A template returns a String produced using contained <<Statement>>, it can be called as a service. It can be preceded by a <<Module Element documentation>>.
-
-====
-<<Template>> =
-
-'[template ' <<Visibility>> <<Identifier>> '(' <<Parameter>>(',' <<Parameter>>)* ')' ('?' <<AQL Expression>>)? ('post(' <<AQL Expression>> ')')? ']'
-
-(<<Statement>>)*
-
-'[/template]'
-
-====
-
-==== Visibility ====
-
-The visibility define the scope where the <<Template>> or <<Query>> can be called as a service.
-
-====
-<<Visibility>> = 'private' | 'protected' | 'public'
-====
-
-* *private*: visible only in the current <<Module>>.
-* *protected*: visible in the current <<Module>> and <<Module>> that extend it directly or indirectly.
-* *public*: visible in the current <<Module>>, <<Module>> that extend it directly or indirectly, and <<Module>> that import the containing <<Module>>.
-
-==== Parameter ====
-
-A parameter is used to pass a value from the caller. This value can be later referenced using its name.
-
-====
-<<Parameter>> = <<Identifier>> ':' <<AQL Type Literal>>
-====
-
-==== Statement ====
-
-A statement is a directive used to produce an output or control the execution flow.
-
-====
-<<Statement>> =
-
-<<File Statement>> | <<For Statement>> | <<If Statement>> | <<Let Statement>> | <<Protected Area>> | <<Expression Statement>> | <<Text Statement>>
-====
-
-==== File Statement ====
-
-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. It returns an empty String.
-
-====
-<<File Statement>> =
-
-'[file ' '(' <<AQL Expression>> ',' <<Open Mode Kind>> (',' <<AQL Expression>>)? ')' ']'
-
-(<<Statement>>)*
-
-'[/file]' 
-====
-
-==== For Statement ====
-
-This statement loops over a list of values and return the concatenation of all returned String.
-
-====
-<<For Statement>> =
-
-'[for ' '(' <<Identifier>> (':' <<AQL Type Literal>>)? '|' <<AQL Expression>> ')' ']'
-
-(<<Statement>>)*
-
-'[/for]'
-====
-
-==== If Statement ====
-
-This statement create a branch in the execution flow and return the String of one of its branch according to the <<AQL Expression>> evaluated to true. If a condition doesn't evaluate to a boolean an empty String is generated and an error is logged.
-
-====
-<<If Statement>> =
-
-'[if ' '(' <<AQL Expression>> ')' ']'
-
-(<<Statement>>)*
-
-('[elseif ' '(' <<AQL Expression>> ')' ']'
-
-(<<Statement>>)*)*
-
-('[else]'
-
-(<<Statement>>)*)?
-
-'[/if]'
-====
-
-==== Let Statement ====
-
-This statement allows to compute one or more <<AQL Expression>> and reference their value using an identifier. It can be used to improve readability of the template or increase performance when using the same <<AQL Expression>> many times in a block of <<Statement>>.
-
-====
-<<Let Statement>> =
-
-'[let ' <<Identifier> ('=' <<AQL Type Literal>>)? '|' <<AQL Expression>> (',' <<Identifier>> ('=' <<AQL Type Literal>>)? '|' <<AQL Expression>>)* ']'
-
-(<<Statement>>)*)?
-
-'[/let]'
-====
-
-==== Protected Area ====
-
-This statement declare an identified area in the generated file. If the generated file exists and a protected area with the identifier exists then the content of this area is returned. If it doesn't exist the concatenation of statement String is returned.
-
-====
-<<Protected Area>> =
-
-'[protected ' '(' <<AQL Expression>> ')' ']'
-
-(<<Statement>>)*)?
-
-'[/protected]'
-====
-
-==== Expression Statement ====
-
-This statement returns the String representation of the evaluation of the <<AQL Expression>>.
-
-====
-<<Expression Statement>> = '[' <<AQL Expression>> '/]'
-====
-
-==== Text Statement ====
-
-This is any other text outside of '[' and ']'.
-
-==== AQL Expression ====
-
-This is an Acceleo query language expression. It's used to navigate through models and call services. In the context of Acceleo, <<Template>> and <<Query>> can be called as services.
-
-TODO link AQL documentation
-
-==== AQL Type Literal ====
-
-This is a type literal as defined in the Acceleo query language.
-
-TODO link AQL documentation
-
-==== Query ====
-
-A query reference an <<AQL Expression>> with parameter and can be called as a service. It can be preceded by a <<Module Element documentation>>.
-
-====
-<<Query>> = '[query ' <<Visibility>> <<Identifier>> '(' <<Parameter>>(',' <<Parameter>>)* ')' ':' <<AQL Type Literal>> '=' <<AQL Expression>> '/]'
-====
-
-==== Module Element documentation ====
-
-The documentation of a <<Template>> or a <<Query>>.
-
-====
-<<Module Element documentation>> =
-
-'[**'
-
-...
-
-'@param ' ...
-
-...
-
-'/]'
-
-====
-
 === White spaces ===
 
 TODO
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/language.adoc b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/language.adoc
new file mode 100644
index 0000000..30794c7
--- /dev/null
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/language.adoc
@@ -0,0 +1,285 @@
+= Acceleo

+Acceleo 4 Language

+

+:source-highlighter: highlightjs

+:listing-caption: Listing

+:toc:

+:toclevels: 3

+:sectnums:

+:icons: image

+

+== Preface

+

+=== Intended Audience

+

+This guide was written to describe the elements composing the Acceleo 4 templating language. This will not delve into the Acceleo Query Language (AQL) description.

+

+== Module

+

+An Acceleo module is defined in its own file and is the main container for generation <<Template,templates>> (that will generate text) and <<Query,queries>> (which purpose is to extract information from the input models).

+

+The name of the module will be qualified according to its location in the source folder of the project.

+

+An Acceleo file must start with the module declaration in the following format:

+

+----

+[**

+<module documentation>

+@author <author name>

+@version <version number>

+@since <first version in which this module appeared>

+/]

+[module <module name>('http://metamodel/URI/1', 'http://metamodel/URI/1', <additional_URIs>) extends <other module qualified name>]

+----

+

+Module documentation::

+The documentation of a module is optional, and can contain both the description of the module and optional metadata such as the author and version number.

+Module name::

+The module name can only contain alphanumeric (and underscore `_`) characters and cannot start with a number.

+Metamodel URIs::

+The metamodel(s) from which this module will take types. The list has to be exhaustive: if multiple connected metamodels are used, then all must be listed in the module declaration.

+Extends::

+The qualified name of another module. Acceleo allows you to override _protected_ and _public_ visibility templates from the extended module. Extending multiple modules is not allowed.

+*Note* that the extended module's name has to be qualified, even when overriding modules located in the same package.

+

+See also the <<syntax#_module,Module syntax documentation>>.

+

+=== Imports

+

+An Acceleo module can import any number of other modules. All _public_ visibility templates and queries from the imported module(s) can be called by the importer.

+

+Importing modules can be done right after the module declaration line and requires the following format:

+

+----

+[import <other module qualified name>/]

+----

+

+*Note* that modules can only be referenced through their qualified name, even if they are located in the same package.

+

+See also the <<syntax#_import,Import>> as well as the <<syntax#_module_reference,Module Reference>> syntax documentation.

+

+=== Module Elements

+

+Following the imports declaration, any number of module element can now be written as the body of our Module. Please refer to <<Template>> and <<Query>> sections below for more information.

+

+== Template

+

+A Template is a set of Acceleo statements used to generate text. It is delimited by `[template ...][/template]` tags.

+

+The template signature must include the visbility and the name, and can optionally define a post-treatment expression.

+

+----

+[**

+<template documentation>

+@param class <documentation of the parameter>

+/]

+[template public generate(class : ecore::EClass) post (self.trim())]

+[/template]

+----

+

+visibility::

+One of

++

+* public : Public templates will be visible from all modules importing or extending the module declaring them. They can be overridden by extending modules.

+* protected : Protected templates will only be visible from extending modules and can be overridden.

+* private : Private templates are only visible by the defining module and cannot be overridden.

+name::

+The name of the template. Only alphanumeric (and underscore `_`) characters are allowed, and the name cannot start with a number.

+arguments::

+Arguments follow the <<_variable,format for variables>>.

+post::

+The post-treatment expression will be called on the result of the template (stored in variable `self`) and needs to be applicable to a String.

+

+*The result of a template is always a String.*

+

+See also the <<syntax#_template,Template syntax documentation>>.

+

+=== Main template

+

+Acceleo defines a special metadata tag on templates to specify the main entry point(s) of a generation, the template(s) that will be called first during the workflow. This metadata tag, `@main`, needs to be in the comments preceding the template, or within the template documentation

+

+Such templates do not necessarily contain a <<_file_block,File>> block themselves.

+

+Example:

+

+----

+[**

+<template documentation>

+@param class <param documentation>

+@main

+/]

+[template public generate(class : ecore::EClass)]

+[file (class.name + '.txt', overwrite)]

+Class [class.name/] structural features:

+[for (feature | class.eStructuralFeatures)]

+[feature.name/]

+[/for]

+[/file]

+[/template]

+----

+

+== Query

+

+A query is a re-useable AQL expression that can return any type of Object. They are commonly used to extract information from the input models. A query is enclosed in a `[query ...]` tag.

+

+The query signature must include the visibility and its name.

+

+----

+[**

+<query documentation>

+@param class <documentation of the parameter>

+/]

+[query public getPublicProperties(class : uml::Class) : Set(uml::Property) =

+	class.attribute->select(property : uml::Property | property.visibility = uml::VisbilityKind::public)

+/]

+----

+

+visibility::

+One of

++

+* public : Public templates will be visible from all modules importing or extending the module declaring them. They can be overridden by extending modules.

+* protected : Protected templates will only be visible from extending modules and can be overridden.

+* private : Private templates are only visible by the defining module and cannot be overridden.

+name::

+The name of the query. Only alphanumeric (and underscore `_`) characters are allowed, and the name cannot start with a number.

+arguments::

+Arguments follow the <<_variable,format for variables>>.

+return type::

+The return type describes the kind of object this query is expected to return. If the expression does not return an object of the accurate type, the evaluation will fail at runtime.

+

+See also the <<syntax#_query,Query syntax documentation>>.

+

+== File Block

+

+File blocks are used to tell the Acceleo engine it must generate the body of the `[file ...]` block in an actual file.

+

+----

+[file (<uri>, <open mode>, <charset>)][/file]

+----

+

+uri::

+An AQL expression denoting the output file name. Must evaluate to a String.

+open mode::

+The open mode for the file. This can be one of:

++

+* append : Append to the end of the file if it already exists, create it otherwise.

+* overwrite : Overwrite the whole file if it already exists, create it otherwise.

+* create : Do not change the file if it already exists, create it otherwise.

+charset::

+This can be used to tell Acceleo which charset to use for the generated file. This is optional and will default to UTF-8

+

+Example:

+

+----

+[template public generate(class : ecore::EClass)]

+[file (class.name + '.java', append, 'UTF-8')]

+[/file]

+[/template]

+----

+

+*Note* that the file will only be generated if the engine actually evaluates the file block. For example, if the template containing that block is never called, or if the file block is included in an `If` block which condition evalutes to `false`, then no file will be created.

+

+See also the <<syntax#_file_statement,File Statement syntax documentation>>.

+

+== For loops

+

+For loops in Acceleo need to be expressed using the following syntax:

+

+----

+[for (<variable> | <iteration expression>) separator(<separator expression>)]...[/for]

+----

+

+variable::

+The variable follows the <<_variable,format for variables>>. The variable type must match the result of the iteration expression. If the expression returns a collection of Strings, then the variable will be of type String. Because of this, typing the variable is optional.

+iteration expression::

+An AQL expression returning a collection of elements on which to iterate. If the expression doesn't return a collection but a single element, it will be used to iterate only once.

+separator::

+The separator expression will be evaluated to insert content in-between the content generated for each iteration of the for body. It will not be generated if the for loop doesn't generate text or only generates one iteration worth of content.

+

+Example:

+

+----

+[template public generate(class : ecore::EClass)]

+[for (feature | class.eStructuralFeatures)]

+[/for]

+[/template]

+----

+

+See also the <<syntax#_for_statement,For Statement syntax documentation>>.

+

+== If conditions

+

+The `If` statement in Acceleo uses the following syntax:

+

+----

+[if (condition)]

+[elseif (condition)]

+[else]

+[/if]

+----

+

+`elseif` and `else` are both optional. If one of the `condition` expressions does not evaluate to a boolean an error will be logged and nothing will be generated for that `if` block.

+

+See also the <<syntax#_if_statement,If Statement syntax documentation>>.

+

+== Let block

+

+Acceleo `Let` blocks use the following syntax:

+

+----

+[let <variable1> = <init expression>, <variable2> = <init expression>]

+[/let]

+----

+

+`Let` blocks allow template writers to define temporary variables that will be visible within the scope of the block.

+

+The variables follow the <<_variable,format for variables>>. All of their typing is optional since they must match the return type of their initialization expression.

+

+*Note* that all variables are immutable. Nested `Let` blocks can override the value of a variable within their own scope, but the variable will go back to its former value once outside of the nested `Let`. This will produce a warning during validation.

+

+See also the <<syntax#_let_statemnet,Let Statement syntax documentation>>.

+

+== Protected Area

+

+A protected area defines a set of statements that should only be generated if the file doesn't exist on disk or it does not contain an area with the specified protected area's identifier.

+

+Protected areas allow module writers to create a "safe" part of the generated file that can be modified directly in the generated file, without fear of these manual modifications to be lost during subsequent generations.

+

+----

+[comment @main/]

+[template public generate(class : ecore::EClass)]

+[file (class.name + '.java', overwrite, 'UTF-8')/]

+// [protected (class.name + ' imports')]

+imports java.util.List;

+// [/protected]

+

+public class [class.name.toUpperFirst()/] {

+

+}

+[/file]

+[/template]

+----

+

+The expression within the protected block's signature serves as the protected area's identifier and *must be unique* in the generated file's scope.

+

+*There must be nothing present on the line after the protected area's signature.* Otherwise, everything following said signature will be considered to be part of the area's identifier by the engine and the code will not be properly protected.

+

+Please also note that the protected area's first and last line are marked as comments in the generated code (by generating `//` at the start of their respective line, since this is Java code). This is to avoid generating invalid Java code as the markers will be present in the generated file's contents.

+

+== Variable

+

+Acceleo 4 variables use the AQL syntax and inference logic for their typing.

+

+----

+<name> : <type>

+----

+

+name::

+Name of the variable. Only alphanumeric (and underscore`_`) characters are allowed, and the name cannot start with a number.

+type::

+Type of the variable. Four different kind of types are accepted

++

+* primitive : Integer, Double, String, Boolean

+* collection : Sequence, OrderedSet. Collection types have to be further specified with their content types, such as Sequence(String) for a list of String elements.

+* eclassifier : in the form <epackage_name>::<classifier_name> such as ecore::EClass.

+* union type : in the form {<epackage_name>::<classifier_name> | <epackage_name>::<classifier_name> | ...}. This kind of typing describes a variable that can be either one of the _n_ specified classifiers. e.g. {ecore::EAttribute | ecore::EReference }.
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/migration.adoc b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/migration.adoc
new file mode 100644
index 0000000..739ac15
--- /dev/null
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/migration.adoc
@@ -0,0 +1,376 @@
+= Acceleo

+Acceleo 3 to Acceleo 4 migration guide

+

+:doctype: book

+:source-highlighter: rouge

+:listing-caption: Listing

+:toc:

+:toclevels: 3

+:sectnums:

+:icons: image

+

+== Preface

+

+=== Intended Audience

+

+This guide was written to describe the behavior changes between the two versions of Acceleo, for the purpose of migrating from one to the next.

+

+== Language Changes

+

+=== Modules

+

+==== module name

+

+Acceleo 3 allowed users to set the fully qualified name of the module in its declaration, such as

+

+----

+[module qualified::module::name(...)]

+----

+

+Acceleo 4 forbids anything other than the actual module name and this should thus become.

+

+----

+[module name(...)]

+----

+

+Both versions require the module name to be equal to the name of the containing file minus the extension.

+

+==== multiple inheritance

+

+The acceleo 3 module declaration allowed users to declare multiple "extends" modules:

+

+----

+[module qualified::module::name(...) extends another::module, and::a:second::module]

+----

+

+Acceleo 4 modules can only define a single extended module.

+

+*Only the first extended module was taken into account* in Acceleo 3 so the migration can just strip all but the first extended modules' name.

+

+==== module imports

+

+Acceleo 3 allowed imports of modules through unqualified names. This is forbidden in Acceleo 4 and the fully qualified names of the imports are required.

+

+=== Templates

+

+*Important notes:* The Migration tool needs to somehow mark every template which had duplicated signatures (same name, same argument list, different pre-condition) to be manually checked after migration.

+

+* Acceleo 4 does not allow duplicated signatures and has no pre-condition, so duplicated templates might have to be combined into a single one with their pre-condition as an `If-Else` block inside.

+* Initialization blocks could be different on duplicated templates, depending on the pre-condition. The migrated `Let` block thus needs to be different per branch of the above `If-Else`.

+

+Acceleo 4 templates will automatically override their super-module templates if the signature matches. This was not the case in Acceleo 3 and matching templates thus need to be marked for manual verification.

+

+==== Overriding

+

+Acceleo 3 templates allowed users to override an arbitrary template through the "overrides" keyword:

+

+----

+[template public aTemplateName(...) overrides anotherTemplateName]

+----

+

+Acceleo 4 only allows a template of name "xyz" to override a template from the extended module with the same "xyz" name.

+

+Furthermore, Acceleo 4 templates will automatically override their super-module's public or protected templates if they have the same signature.

+

+==== Pre-conditions

+

+Acceleo 4 does not allow pre-conditions on templates.

+

+==== Post-treatment

+

+Acceleo 3 used an implicit String-typed variable so the post expression could be a simple call without a variable:

+

+----

+[template public aTemplateName(...) post (trim())]

+----

+

+Acceleo 4 doesn't allow implicit variables. The result of the template call will be stored in the `self` variable and the migration must thus transform this expression into:

+

+----

+[template public aTemplateName(...) post (self.trim())]

+----

+

+==== Init block

+

+Acceleo 3 allowed variable initialization blocks on the template:

+

+----

+[template public aTemplateName(...) {var1 = 'string'; var2 = param1.feature;}]

+----

+

+Acceleo 4 removes the initialization blocks altogether, so the variable declarations must be transformed into a `let` block at the start of the template.

+

+==== Namesakes

+

+Acceleo 3 allowed multiple templates with the same name and same argument list to co-exist within the same module, as long as their pre-condition differed.

+

+PENDING choice, remove one of the two:

+Though Acceleo 4 will allow multiple templates with the same signature to exist in a module, only the last one will ever be resolved for a call or override, all subsequent being ignored.

+Acceleo 4 does not allow multiple templates with the same signature in a given module.

+

+=== Query

+

+==== Java services

+

+The best practice for Acceleo 3 was to wrap java services inside of a query. The special `invoke` service was used to this end.

+

+----

+[query public hasStereotype(element : uml::Element, stereotypeName : String) : Boolean =

+	invoke('org.eclipse.acceleo.module.sample.services.UMLServices', 'hasStereotype(org.eclipse.uml2.uml.Element, java.lang.String)', Sequence{element, stereotypeName})

+/]

+----

+

+Acceleo 4 allows users to directly import java services.

+

+=== File Block

+

+The second argument for the file block in Acceleo 3 was a boolean (false = overwrite the file, true = append at the end of the file).

+

+Acceleo 4 uses an enumeration, which allows the keyword "overwrite", "append" or "create" instead.

+

+=== For Block

+

+==== Simplified Syntax

+

+Acceleo 3 allowed for loops in two formats:

+

+----

+[for (i : E | expr)]...[/for]

+----

+

+----

+[for (expr)]...[/for]

+----

+

+In the second case, the loop variable was `self`.

+

+Acceleo 4 only allows for the first of these two formats. Note that typing the iteration variable is optional in Acceleo 4.

+

+==== Iteration count

+

+Acceleo 3 defined an implicit variable, `i`, that held the current iteration count.

+

+----

+[for (feature : ecore::EStructuralFeature | class.eStructuralFeatures)]

+iteration number [i/]

+[/for]

+----

+

+Acceleo 4 does not define any similar variable.

+

+==== before, separator, after

+

+Acceleo 3 allowed users to specify a `before` expression that would be inserted right before the content generated by the loop body _if the loop had any iteration_. An `after` that would similarly inserted after the loop body if it generated any content, and finally a `separator` which content would be inserted in-between each iteration result.

+

+----

+[for (number : Integer | Sequence{1, 2, 3}) before ('int[] array = new int[') separator (', ') after ('];')][number/][/for]

+----

+

+Acceleo 4 only supports `separator`. The migration could convert `before` and `after` into a `Let` holding the content of the iteration expression, then a `If` only generating before and after if the collection is not empty.

+

+==== Pre-condition

+

+Acceleo 3 allowed users to specify a pre-condition that would be evaluated every iteration and that would prevent all generation for that iteration if `false`.

+

+----

+[for (number : Integer | Sequence{1, 2, 3}) ? (isEven(number))]

+[number/]

+[/for]

+----

+

+Acceleo 4 does not have pre-conditions. This could be converted to an `If` at the start of the for body.

+

+==== Init block

+

+Acceleo 3 allowed variable initialization blocks on the for:

+

+----

+[for (feature : ecore::EStructuralFeature | class.eStructuralFeatures) {var : String = 'string'; className : String = class.name;}]

+[number/]

+[/for]

+----

+

+Acceleo 4 removes the initialization blocks altogether, so the variable declarations must be transformed into a `let` block before the `For` block.

+

+*Note* the initialization block was evaluated before the for itself, and not for every loop.

+

+=== Let Statement

+

+Acceleo 3 only allowed a single variable per `Let`, forcing users to have multiple nested `Let` blocks to define more. The migration could aggregate multiple nested blocks into one with multiple variables if the nested blocks don't use one of the outer `Let`'s variable.

+

+=== Invocation

+

+Acceleo 3 made use of implicit variables allowing module writers to avoid always specifying the target of an expression or call:

+

+----

+[template public generate(class : ecore::EClass)]

+[name/] is equivalent to [class.name/] or [self.name/]

+[eAllContents()/] is equivalent to [class.eAllContents()/] or [self.eAllContents()/]

+[/template]

+----

+

+The implicit variable is always `self`, but the value of `self` may not be intuitive in all cases.

+

+The migration will have to take specific care of properly replacing the implicit variable with the correct variable for Acceleo 4.

+

+==== Template

+

+Acceleo 3 : `self` is the first argument of the template.

+

+Acceleo 4 : PENDING

+

+==== Query

+

+Acceleo 3 : `self` is the first argument of the query.

+

+Acceleo 4 : PENDING

+

+==== For

+

+Acceleo 3 : `self` has the same value as the iteration variable.

+

+Acceleo 4 : PENDING

+

+==== If

+

+Acceleo 3 : The value of `self` is not changed within the `if` scope and remains the value of `self` outside of the `if`.

+

+Acceleo 4 : PENDING

+

+==== let

+

+Acceleo 3 : The value of `self` is not changed within the `let` scope and remains the value of `self` outside of the `let`.

+

+Acceleo 4 : PENDING

+

+==== Expression

+

+Acceleo 3/OCL : The value of `self` is defined by the current Acceleo scope and will not be altered by OCL.

+

+Acceleo 4/AQL : PENDING

+

+=== Module Element Call

+

+==== Template invocation

+

+Acceleo 3 allowed special template calls such as the following:

+

+----

+[template public aTemplate()]

+	[anotherTemplate() before ('inserted before generated body') separator ('in-between') after ('inserted after generated body')/]

+[/template]

+

+[template protected anotherTemplate()]

+	generated body

+[/template]

+----

+

+Both `before` and `after` expression are handled by Acceleo 3 and will respectively generate their content before and after the callee's generated text. This is true even if the callee does not generate any text.

+

+`separator` is not implemented by the engine so the migration can strip it entirely.

+

+==== Query invocation

+

+Similar to template invocations, query invocations support `before`, `separator` and `after` expressions. None of which is implemented in the Acceleo 3 generation engine so they can all be stripped entirely.

+

+=== Variable

+

+Acceleo 3 supported unqualified type names for the variables.

+

+----

+[let var : EPackage = anotherVar.eContainer()]

+	output text for EPackage named [var.name/]

+[/let]

+----

+

+Acceleo 4 only accepts qualified types for the classifiers and the above should become:

+

+----

+[let var : ecore::EPackage = anotherVar.eContainer()]

+	output text for EPackage named [var.name/]

+[/let]

+----

+

+=== Expressions

+

+Acceleo 3 was using OCL as the underlying expression language, while Acceleo 4 is using AQL. Please look at the https://www.eclipse.org/acceleo/documentation/#MigratingfromMTLqueries[AQL Documentation] for more information on migrating OCL expressions to AQL.

+

+== Behavior Changes

+

+=== Modules

+

+==== inheritance behavior

+

+In Acceleo 3, once an overriding module (child) called a public or protected template of its extended module (parent), the execution flow would never come down to the child again until we `returned` out of the callee. This is contrary to other Object-oriented languages in which a `super` template could call down an `overriden` other template from the child when necessary.

+

+If you consider the following simplified modules:

+

+----

+[module parentModule()/]

+

+[template public aTemplate()]

+	[anotherTemplate()/]

+[/template]

+

+[template protected anotherTemplate()]

+	parent behavior

+[/template]

+----

+

+----

+[module childModule() extends parentModule/]

+

+[template public main()]

+	[aTemplate()/]

+[/template]

+

+[template protected anotherTemplate()]

+	child behavior

+[/template]

+----

+

+=== Query

+

+==== Validation

+

+In Acceleo 3, the return type of a query was not validated at compile time, so it was very easy for ClassCastExceptions to occur at runtime or for invalid templates to be written with the error only detected at runtime.

+

+For example, the following will fail when we try to generate, but is valid for the compiler:

+

+----

+[template public generate(c : ecore::EClass)]

+	[file (c.name.concat('.java'), false, 'UTF-8')]

+	[for (attribute : ecore::EAttribute | getFeatures(c))]

+		attribute name : [attribute.name/] [if (attribute.iD)]is id attribute[/if]

+	[/for]

+	[/file]

+[/template]

+

+[query private getFeatures(c : ecore::EClass) : Set(ecore::EAttribute) = c.eStructuralFeatures/]

+----

+

+The template expected "getFeatures" to return a Set of Attributes, but the actual type is a set of EStructuralFeature. This will fail as soon as we try to generate for a class containing both attributes and references.

+

+Acceleo 4 validates the return type of the query's body expression.

+

+==== Cache

+

+The MTL specification enforces that "A query is required to produce the same result each time it is invoked with the same arguments.". The result of a query call was thus cached in Acceleo 3, and never reevaluated. (This behavior could be disabled through a preference for Acceleo 3.)

+

+Acceleo 4 will always reevaluate the query's body even if the same argument list is passed twice.

+

+=== Let Statement

+

+The Acceleo 3 let statement was equivalent to an "instance of" condition check to enter a block.

+

+If we consider the following let block:

+

+----

+[let var : EPackage = anotherVar.eContainer()]

+	output text for EPackage named [var.name/]

+[/let]

+----

+

+In Acceleo 3, if the result of evaluating `anotherVar.eContainer()` is of type `EPackage` (the declared type of variable `var`), then this block will output the result of evaluating its body. In any other event, this would output no text and cause no failure as the block would be simply ignored if the types do not match.

+

+In Acceleo 4, this same let block will cause validation errors if the type of `anotherVar.eContainer()` cannot be an `EPackage`.
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/syntax.adoc b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/syntax.adoc
new file mode 100644
index 0000000..d54d77c
--- /dev/null
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/Acceleo/syntax.adoc
@@ -0,0 +1,304 @@
+= Acceleo
+Acceleo 4 Syntax
+
+:source-highlighter: highlightjs
+:listing-caption: Listing
+:toc:
+:toclevels: 3
+:sectnums:
+:icons: image
+
+== Preface
+
+This document describe the syntax of an Acceleo 4 module.
+
+The syntax is described using the https://en.wikipedia.org/wiki/Backus%E2%80%93Naur_form[Backus Naur from] (BNF).
+
+== Syntax
+
+=== Comment
+
+A comment can be used to document any part of the <<Module>>. It generates nothing if placed directly or indirectly in a <<File Statement>>. For simplification comments will not be present in the BNF representation of the grammar.
+
+[source,ebnf,subs=+macros]
+----
+<<Comment>> = '[comment ' ... '/]'
+----
+
+=== Module
+
+The module is the top level element of a .mtl file. It represent a namespace declaring <<Template>> and <<Query>>. The name of the module is qualified by the location of the file in the source folder.
+
+[source,ebnf,subs=+macros]
+----
+<<Module>> =
+
+(<<Module Documentation>>)* '[module ' <<Identifier>> '(' <<Metamodel>> ',' (<<Metamodel>>)* ')' ('extends ' <<Module Reference>>)? '/]'
+
+<<Import>>*
+
+<<Module Element>>*
+----
+
+=== Identifier
+
+An identifier is used to name elements that need to be identified, or reference element that can be identified.
+
+[source,ebnf,subs=+macros]
+----
+<<Identifier>> = [a-zA-Z_][a-zA-Z_0-9]*
+----
+
+=== Module Documentation
+
+The module documentation should contains a description of the <<Module>>.
+
+It can also contain metadata such as the author, version, and since (the version since this <<Module>> exists).
+
+[source,ebnf,subs=+macros]
+----
+<<Module Documentation>> =
+
+'[**'
+
+...
+
+('@author' ...)?
+
+('@version' ...)?
+
+('@since' ...)?
+
+...
+
+'/]'
+----
+
+=== Metamodel
+
+This is the declaration of metamodels used by the module. Metamodels are referenced using their EPackage nsURI between simple quote.
+
+[source,ebnf,subs=+macros]
+----
+<<Metamodel>> = '\'' ... '\''
+----
+
+=== Import
+
+This allows a module to import other <<Module>> or service classes.
+
+[source,ebnf,subs=+macros]
+----
+<<Import>> = '[import ' <<Module Reference>> '/]'
+----
+
+=== Module Reference
+
+The module reference is a qualified reference to a <<Module>>
+
+[source,ebnf,subs=+macros]
+----
+<<Module Reference>> = <<Module Qualified Name>>
+----
+
+=== Module Qualified Name
+
+A module's name is qualified according to its location in the source folder of a project.
+
+[source,ebnf,subs=+macros]
+----
+<<Module Qualified Name>> = <<Identifier>> ('::' <<Identifier>>)*
+----
+
+=== Module Element
+
+A module element is either a <<Template>> or a <<Query>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Module Element>> = <<Template>> | <<Query>>
+----
+
+=== Template
+
+A template returns a String produced using its contained <<Statement>>, it can be called as a service. It can be preceded by a <<Module Element documentation>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Template>> =
+
+'[template ' <<Visibility>> <<Identifier>> '(' <<Parameter>>(',' <<Parameter>>)* ')' ('?' <<AQL Expression>>)? ('post (' <<AQL Expression>> ')')? ']'
+
+(<<Statement>>)*
+
+'[/template]'
+----
+
+=== Visibility
+
+The visibility defines the scope in which a <<Module Element>> can be called as a service.
+
+[source,ebnf,subs=+macros]
+----
+<<Visibility>> = 'private' | 'protected' | 'public'
+----
+
+=== Parameter
+
+A parameter is used to pass a value from the caller to a callee. This value can be later referenced using its identifier.
+
+[source,ebnf,subs=+macros]
+----
+<<Parameter>> = <<Identifier>> ':' <<AQL Type Literal>>
+----
+
+=== Statement
+
+A statement is a directive used to produce an output or control the execution flow.
+
+[source,ebnf,subs=+macros]
+----
+<<Statement>> =
+
+<<File Statement>> | <<For Statement>> | <<If Statement>> | <<Let Statement>> | <<Protected Area>> | <<Expression Statement>> | <<Text Statement>>
+----
+
+==== File Statement
+
+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.
+
+The file statement itself returns an empty String.
+
+[source,ebnf,subs=+macros]
+----
+<<File Statement>> =
+
+'[file ' '(' <<AQL Expression>> ',' <<Open Mode Kind>> (',' <<AQL Expression>>)? ')' ']'
+
+(<<Statement>>)*
+
+'[/file]' 
+----
+
+==== For Statement
+
+This statement loops over a list of values and return the concatenation of all returned String.
+
+[source,ebnf,subs=+macros]
+----
+<<For Statement>> =
+
+'[for ' '(' <<Identifier>> (':' <<AQL Type Literal>>)? '|' <<AQL Expression>> ')' ['separator(' <<AQL Expression>> ')'] ']'
+
+(<<Statement>>)*
+
+'[/for]'
+----
+
+==== If Statement
+
+This statement create a branch in the execution flow and return the String of one of its branch according to the <<AQL Expression>> evaluated to true. If a condition doesn't evaluate to a boolean an empty String is generated and an error is logged.
+
+[source,ebnf,subs=+macros]
+----
+<<If Statement>> =
+
+'[if ' '(' <<AQL Expression>> ')' ']'
+
+(<<Statement>>)*
+
+('[elseif ' '(' <<AQL Expression>> ')' ']'
+
+(<<Statement>>)*)*
+
+('[else]'
+
+(<<Statement>>)*)?
+
+'[/if]'
+----
+
+==== Let Statement
+
+This statement allows to compute one or more <<AQL Expression>> and reference their value using an identifier. It can be used to improve readability of the template or increase performance when using the same <<AQL Expression>> many times in a block of <<Statement>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Let Statement>> =
+
+'[let ' <<Identifier>> (':' <<AQL Type Literal>>)? '=' <<AQL Expression>> (',' <<Identifier>> (':' <<AQL Type Literal>>)? '=' <<AQL Expression>>)* ']'
+
+(<<Statement>>)*)?
+
+'[/let]'
+----
+
+==== Protected Area
+
+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.
+
+[source,ebnf,subs=+macros]
+----
+<<Protected Area>> =
+
+'[protected ' '(' <<AQL Expression>> ')' ']'
+
+(<<Statement>>)*)?
+
+'[/protected]'
+----
+
+==== Expression Statement
+
+This statement returns the String representation of the evaluation of its <<AQL Expression>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Expression Statement>> = '[' <<AQL Expression>> '/]'
+----
+
+==== Text Statement
+
+This is any other text outside of '[' and ']'.
+
+=== AQL Expression
+
+This is an Acceleo Query Language expression. It is used to navigate through models and call services. In the context of Acceleo, <<Template>> and <<Query>> can be called as services.
+
+TODO link AQL documentation
+
+=== AQL Type Literal
+
+This is a type literal as defined in the Acceleo Query Language.
+
+TODO link AQL documentation
+
+=== Query
+
+A query references an <<AQL Expression>> with parameters and can be called as a service. It can be preceded by a <<Module Element documentation>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Query>> =
+
+'[query ' <<Visibility>> <<Identifier>> '(' <<Parameter>>(',' <<Parameter>>)* ')' ':' <<AQL Type Literal>> '=' <<AQL Expression>> '/]'
+----
+
+=== Module Element documentation
+
+The documentation of a <<Template>> or a <<Query>>.
+
+[source,ebnf,subs=+macros]
+----
+<<Module Element documentation>> =
+
+'[**'
+
+...
+
+'@param ' ...
+
+...
+
+'/]'
+----
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/syntax-docinfo-footer.html b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/syntax-docinfo-footer.html
new file mode 100644
index 0000000..d60c902
--- /dev/null
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pages/syntax-docinfo-footer.html
@@ -0,0 +1,4 @@
+<-- 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>
\ No newline at end of file
diff --git a/acceleo-aql/org.eclipse.acceleo.aql.doc/pom.xml b/acceleo-aql/org.eclipse.acceleo.aql.doc/pom.xml
index 16f1037..bfc7c89 100644
--- a/acceleo-aql/org.eclipse.acceleo.aql.doc/pom.xml
+++ b/acceleo-aql/org.eclipse.acceleo.aql.doc/pom.xml
@@ -22,40 +22,42 @@
 
   <artifactId>org.eclipse.acceleo.aql.doc</artifactId>
   <version>4.0.0-SNAPSHOT</version>
-  <packaging>eclipse-plugin</packaging>  
+  <packaging>eclipse-plugin</packaging>
 
   <build>
     <plugins>
       <plugin>
         <groupId>org.asciidoctor</groupId>
         <artifactId>asciidoctor-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>output-html</id>              
-            <phase>generate-resources</phase> 
-            <goals>
-              <goal>process-asciidoc</goal> 
-            </goals>
-            <configuration>
-              <backend>html5</backend>
-              <attributes>
-                <icons>font</icons>
-              </attributes>
-            </configuration>
-          </execution>
-        </executions>
         <configuration>
-          <sourceHighlighter>coderay</sourceHighlighter>
-          <!-- Relative to project root -->
+          <sourceHighlighter>highlight.js</sourceHighlighter>
+          <icons>font</icons>
           <sourceDirectory>pages</sourceDirectory>
           <outputDirectory>doc</outputDirectory>
+          <preserveDirectories>true</preserveDirectories>
           <!--
-            Relative to source directory. 
+            Relative to source directory.
             defaults to "images" but we don't want the asciidoctor-maven-plugin to alter our images path so use "." (otherwise,
             it will automatically change all images paths in our output to a path that doesn't exist).
           -->
           <imagesDir>.</imagesDir>
         </configuration>
+        <executions>
+          <execution>
+            <id>output-html</id>
+            <phase>generate-resources</phase>
+            <goals>
+              <goal>process-asciidoc</goal>
+            </goals>
+            <configuration>
+              <backend>html5</backend>
+              <attributes>
+                <docinfo>private-footer</docinfo>
+                <toc/>
+              </attributes>
+            </configuration>
+          </execution>
+        </executions>
       </plugin>
     </plugins>
   </build>