Browse Source

Issue/1256 better documentation index (#1688)

* Issue 1256: "Edit on GitHub removed"

* Issue 1256: new converter integrated

* converter added
* wikitext version switched from 2.8.0-SNAPSHOT to 3.0.18, now available on Maven Central
* resolving wikitext dependencies via Eclipse Aether

* Issue 1256: Hubspot template change requested by Thomas Laß

* Issue 1256: formatting

* Issue 1256: "Edit on GitHub" removed from glossary

* Issue 1256: Possible remains of broken merge removed

* Issue 1256: Have document converter run from Eclipse successfully

* Issue 1256: Glossary removed from docu build for now

* Issue 1256: "Early separators" introduced

* Issue 1256: Broken <pre> formatting fixed

* Issue 1256: Template change from Thomas Laß

* Issue 1256: New template for TOC on the left-hand side

* Issue 1256: Table of contents moved to the left

This required the Textile-to-Hubspot converter from one-pass to two-pass in order to have the TOC available at the beginning of the Hubspot generation instead of at the end only.

* Issue 1256: Website generation directory tidied

* Issue 1256: Hubspot template updated

* Issue 1256: Hubspot template updated (again)

* Documentation: Hints for writers added

* Documentation: images for future refined child first / parent first documentation added

* Documentation: new stuff reviewed

* Documentation: Typescript domain excluded from build

* Documentation: Hubspot template changed

* Documentation: heading changed to "Statechart language reference"

* Documentation: "Advanced simulation and debugging" is now a subsection of "Simulating statecharts".

* Documentation: Code generator descriptions are now subsections of "Generating state machine code".

* Resolved old vs. new documentation portions in generator documentation, introduced by automatic merge.

* Forking javac …
Rainer Klute 7 years ago
parent
commit
e7312a258a
42 changed files with 2422 additions and 1375 deletions
  1. 7 0
      plugins/org.yakindu.sct.doc.user/.classpath
  2. 1 0
      plugins/org.yakindu.sct.doc.user/.externalToolBuilders/Documentation Builder.launch
  3. 1 0
      plugins/org.yakindu.sct.doc.user/.gitignore
  4. 6 0
      plugins/org.yakindu.sct.doc.user/.project
  5. 139 109
      plugins/org.yakindu.sct.doc.user/build.xml
  6. 103 0
      plugins/org.yakindu.sct.doc.user/hints_for_writers.textile
  7. 0 1
      plugins/org.yakindu.sct.doc.user/misc/checkLinks_w3c.sh
  8. 0 1
      plugins/org.yakindu.sct.doc.user/plugin.xml
  9. 0 2
      plugins/org.yakindu.sct.doc.user/src/installation/installation.textile
  10. 108 0
      plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/Heading.java
  11. 536 0
      plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/HubspotDocumentBuilder.java
  12. 212 0
      plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/SequenceReader.java
  13. 233 0
      plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/TableOfContentsBuilder.java
  14. 184 0
      plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/TextileToHubspotConverter.java
  15. 1 3
      plugins/org.yakindu.sct.doc.user/src/tutorials/tutorials.textile
  16. 0 223
      plugins/org.yakindu.sct.doc.user/src/user-guide/advanced_simulation.textile
  17. 1 7
      plugins/org.yakindu.sct.doc.user/src/user-guide/c-domain.textile
  18. 0 2
      plugins/org.yakindu.sct.doc.user/src/user-guide/editing_statecharts.textile
  19. 120 173
      plugins/org.yakindu.sct.doc.user/src/user-guide/generating_code.textile
  20. 0 2
      plugins/org.yakindu.sct.doc.user/src/user-guide/generating_code_headless.textile
  21. 1 3
      plugins/org.yakindu.sct.doc.user/src/user-guide/glossary.textile
  22. BIN
      plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02a-1.png
  23. BIN
      plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02a-2.png
  24. BIN
      plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02b-1.png
  25. 1 3
      plugins/org.yakindu.sct.doc.user/src/user-guide/overview.textile
  26. 0 6
      plugins/org.yakindu.sct.doc.user/src/user-guide/sctunit.textile
  27. 222 6
      plugins/org.yakindu.sct.doc.user/src/user-guide/simulating_statecharts.textile
  28. 1 3
      plugins/org.yakindu.sct.doc.user/src/user-guide/statechart_language.textile
  29. 1 7
      plugins/org.yakindu.sct.doc.user/src/user-guide/typescript-domain.textile
  30. 292 0
      plugins/org.yakindu.sct.doc.user/src/website/YSCT-documentation-template.htmlf
  31. 0 10
      plugins/org.yakindu.sct.doc.user/src/website/calltoaction.download.htmlf
  32. 0 4
      plugins/org.yakindu.sct.doc.user/src/website/calltoaction.download.local.files.htmlf
  33. 6 0
      plugins/org.yakindu.sct.doc.user/src/website/contents.htmlf
  34. 0 38
      plugins/org.yakindu.sct.doc.user/src/website/footer.htmlf
  35. 0 369
      plugins/org.yakindu.sct.doc.user/src/website/footer.local.files.htmlf
  36. 0 110
      plugins/org.yakindu.sct.doc.user/src/website/header.htmlf
  37. 0 292
      plugins/org.yakindu.sct.doc.user/src/website/header.local.files.htmlf
  38. 108 0
      plugins/org.yakindu.sct.doc.user/src/website/p1.htmlf
  39. 25 0
      plugins/org.yakindu.sct.doc.user/src/website/p2.htmlf
  40. 106 0
      plugins/org.yakindu.sct.doc.user/src/website/p3.htmlf
  41. 7 0
      plugins/org.yakindu.sct.doc.user/src/website/toc.htmlf
  42. 0 1
      plugins/org.yakindu.sct.doc.user/toc.xml

+ 7 - 0
plugins/org.yakindu.sct.doc.user/.classpath

@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src/main/java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/MyLyn Wikitext"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>

+ 1 - 0
plugins/org.yakindu.sct.doc.user/.externalToolBuilders/Documentation Builder.launch

@@ -10,6 +10,7 @@
 <stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
 <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.yakindu.sct.doc.user"/>
 <stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
+<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="true"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;resources&gt;&#10;&lt;item path=&quot;/org.yakindu.sct.doc.user/css&quot; type=&quot;2&quot;/&gt;&#10;&lt;item path=&quot;/org.yakindu.sct.doc.user/src&quot; type=&quot;2&quot;/&gt;&#10;&lt;/resources&gt;}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/org.yakindu.sct.doc.user/build.xml}"/>
 <stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="incremental,auto,clean"/>

+ 1 - 0
plugins/org.yakindu.sct.doc.user/.gitignore

@@ -8,4 +8,5 @@ pdf/
 src-gen/
 target/
 website/
+!src/website/
 *~

+ 6 - 0
plugins/org.yakindu.sct.doc.user/.project

@@ -25,6 +25,11 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
 			<arguments>
@@ -43,6 +48,7 @@
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 		<nature>org.yakindu.sct.builder.SCTNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 	<filteredResources>
 		<filter>

+ 139 - 109
plugins/org.yakindu.sct.doc.user/build.xml

@@ -36,29 +36,22 @@
     <property name="lib.dir" location="${basedir}/lib" />
 
     <!-- Aether Ant Tasks configuration -->
-    <property name="aether.jar.version" value="1.0.0.v20140518" />
+    <property name="aether.jar.version" value="1.0.1.v20141111" />
     <property name="aether.jar.checksum"
-              value="9008c0c96390eacc0f7fdde542dacbd921f942dcd5c139465e21f8b583942edb995304025bb436cfeeea0b89698ef9dfccf8a027da68cd079669adea8cca381f" />
+              value="195ea2e75242b2a4919463e8e95f57bd3cfcfeb3920879fca5b680255dba4a22b9ec0d53138e608d3be94d80a444aa9b7b8522e5bf01660f0dfb4688dae998dd" />
     <property name="aether.jar.src"
               value="http://search.maven.org/remotecontent?filepath=org/eclipse/aether/aether-ant-tasks/${aether.jar.version}/aether-ant-tasks-${aether.jar.version}-uber.jar" />
     <property name="aether.jar.file" value="${lib.dir}/aether-ant-tasks-uber.jar" />
 
-    <!-- Wikitext download configuration -->
-    <property name="wikitext.zip.version" value="1.0.0.v20140518" />
-    <property name="wikitext.zip.checksum"
-              value="00d8bf79a9d7baf20e46d2435dd4b6a9963317a2737c731d11029c96aa86f64e8540639b6eefa6f04b8103860f47ff74e998c71b57445179dc20ad7c2847417c" />
-    <!--
-    <property name="wikitext.zip.src"
-              value="http://www.eclipse.org/downloads/download.php?file=/mylyn/snapshots/nightly/docs/wikitext-standalone-latest.zip" />
-    -->
-    <property name="wikitext.zip.src" value="file:///${basedir}/externals/wikitext.zip" />
-    <property name="wikitext.zip.file" value="${lib.dir}/wikitext.zip" />
-    <property name="wikitext.basename" value="wikitext-standalone" />
-    <property name="wikitext.version" value="2.8.0-SNAPSHOT" />
+    <!-- MyLyn Wikitext version: -->
+    <property name="wikitext.version" value="3.0.18" />
+
+    <!-- Compiled Java classes go here: -->
+    <property name="bin.dir" value="bin" />
 
 
 
-    <!-- Remove generated stuff: -->
+    <!-- Remove generated stuff. The "lib" directory will not be deleted. Remove it manually, if you have to. -->
     <target name="clean">
         <delete includeemptydirs="true" failonerror="false">
             <fileset dir="${basedir}" defaultexcludes="false">
@@ -68,53 +61,100 @@
                 <include name="${epub.dir}/**" />
             </fileset>
             <fileset dir="${src-merged.dir}" />
+            <fileset dir="${bin.dir}" />
         </delete>
     </target>
 
-
-    <!-- Download and unpack the wikitext standalone distribution. Unfortunately it is currently available as a nightly build only. -->
-    <target name="wikitext.download" description="Download and unpack the wikitext standalone distribution.">
-        <condition property="wikitext.zip.file.exists">
-            <and>
-                <available file="${wikitext.zip.file}" />
-                <checksum file="${wikitext.zip.file}"
-                          algorithm="SHA-512"
-                          property="${wikitext.zip.checksum}"
-                          verifyproperty="checksum.matches" />
-            </and>
+    <!-- Aether Ant Tasks are used to access Maven dependencies from an Ant build. It is initialized by downloading
+             the Aether Ant Tasks JAR to the library folder, if needed. The downloaded JAR will not be removed by the
+             "clean" target. If the JAR is present, a typedef will make Aether Ant Tasks' elements available in the Ant
+             build file. -->
+    <target name="init.aether"
+            description="Initializes Aether Ant Tasks JAR by downloading the JAR and defining a type.">
+        <condition property="target.exists">
+            <available file="${aether.jar.file}" />
         </condition>
-        <sequential unless:set="wikitext.zip.file.exists">
+        <sequential unless:set="target.exists">
             <mkdir dir="${lib.dir}" />
-            <get src="${wikitext.zip.src}"
-                 dest="${wikitext.zip.file}"
-                 skipexisting="false"
+            <get src="${aether.jar.src}"
+                 dest="${aether.jar.file}"
+                 skipexisting="true"
                  usetimestamp="true"
                  verbose="true" />
-            <fail message="Checksum mismatch for ${wikitext.zip.file}. Please delete it and rerun ant to redownload.">
+            <fail message="Checksum mismatch for ${aether.jar.file}. Please delete it and rerun ant to redownload.">
                 <condition>
                     <not>
-                        <checksum file="${wikitext.zip.file}"
+                        <checksum file="${aether.jar.file}"
                                   algorithm="SHA-512"
-                                  property="${wikitext.zip.checksum}"
+                                  property="${aether.jar.checksum}"
                                   verifyproperty="checksum.matches" />
                     </not>
                 </condition>
             </fail>
-            <unzip dest="${lib.dir}" src="${wikitext.zip.file}" />
         </sequential>
+        <path id="aether-ant-tasks.classpath" path="${aether.jar.file}" />
+        <typedef resource="org/eclipse/aether/ant/antlib.xml"
+                 uri="antlib:org.eclipse.aether.ant"
+                 classpathref="aether-ant-tasks.classpath" />
     </target>
 
-
-    <!-- Resolves the necessary dependencies: -->
-    <target name="init.wikitext"
-            description="Resolves the necessary wikitext dependencies."
-            depends="wikitext.download">
-        <property name="wikitext.dir" location="${lib.dir}/${wikitext.basename}-${wikitext.version}" />
-        <path id="wikitext.classpath">
-            <fileset dir="${wikitext.dir}">
-                <include name="*.jar" />
-            </fileset>
+    <!-- Resolves the Wikitext dependencies: -->
+    <target name="init.wikitext" description="Resolves the Wikitext dependencies." depends="init.aether">
+
+        <!-- Classpath for MyLyn Wikitext: -->
+        <artifact:resolve>
+            <artifact:dependencies>
+                <dependency groupId="org.eclipse.mylyn.docs"
+                            artifactId="org.eclipse.mylyn.wikitext"
+                            version="${wikitext.version}"
+                            scope="compile" />
+            </artifact:dependencies>
+            <path refid="wikitext.classpath" />
+            <files dir="${lib.dir}/bin" layout="{groupId}/{artifactId}-{baseVersion}.{extension}" />
+        </artifact:resolve>
+
+        <!-- Sources of MyLyn Wikitext: -->
+        <artifact:resolve>
+            <artifact:dependencies>
+                <dependency groupId="org.eclipse.mylyn.docs"
+                            artifactId="org.eclipse.mylyn.wikitext"
+                            version="${wikitext.version}"
+                            scope="compile"
+                            classifier="sources" />
+            </artifact:dependencies>
+            <files dir="${lib.dir}/src" layout="{groupId}/{artifactId}-{baseVersion}-{classifier}.{extension}" />
+        </artifact:resolve>
+
+        <!-- Classpath for MyLyn Wikitext's Textile support: -->
+        <artifact:resolve>
+            <artifact:dependencies>
+                <dependency groupId="org.eclipse.mylyn.docs"
+                            artifactId="org.eclipse.mylyn.wikitext.textile"
+                            version="${wikitext.version}"
+                            scope="compile" />
+            </artifact:dependencies>
+            <path refid="wikitext.textile.classpath" />
+            <files dir="${lib.dir}/bin" layout="{groupId}/{artifactId}-{baseVersion}.{extension}" />
+        </artifact:resolve>
+
+        <!-- Classpath for MyLyn Wikitext's Ant support: -->
+        <artifact:resolve>
+            <artifact:dependencies>
+                <dependency groupId="org.eclipse.mylyn.docs"
+                            artifactId="org.eclipse.mylyn.wikitext.ant"
+                            version="${wikitext.version}"
+                            scope="compile" />
+            </artifact:dependencies>
+            <path refid="wikitext.ant.classpath" />
+        </artifact:resolve>
+
+        <!-- Classpath for Wikitext: -->
+        <path id="wikitext.all.classpath">
+            <path refid="wikitext.classpath" />
+            <path refid="wikitext.textile.classpath" />
+            <path refid="wikitext.ant.classpath" />
         </path>
+
     </target>
 
 
@@ -130,8 +170,7 @@
             depends="init.wikitext">
 
         <sequential>
-            <taskdef classpathref="wikitext.classpath"
-                     resource="org/eclipse/mylyn/wikitext/core/ant/tasks.properties" />
+            <taskdef classpathref="wikitext.all.classpath" resource="org/eclipse/mylyn/wikitext/ant/tasks.properties" />
 
             <!-- Textile source files to turn into HTML: -->
             <fileset id="fileset.eclipsehelp" dir="${src.dir}">
@@ -140,9 +179,8 @@
                 <include name="user-guide/overview.textile" />
                 <include name="user-guide/editing_statecharts.textile" />
                 <include name="user-guide/simulating_statecharts.textile" />
-                <include name="user-guide/advanced_simulation.textile" />
                 <include name="user-guide/c-domain.textile" />
-                <include name="user-guide/typescript-domain.textile" />
+                <!-- include name="user-guide/typescript-domain.textile" / -->
                 <include name="user-guide/statechart_language.textile" />
                 <include name="user-guide/generating_code.textile" />
                 <include name="user-guide/generating_code_headless.textile" />
@@ -153,7 +191,7 @@
             <!-- Check whether we have all the expected textile source files – no more, no less: -->
             <fail message="Number of textile source file(s) doesn't match.">
                 <condition>
-                    <resourcecount refid="fileset.eclipsehelp" when="ne" count="12" />
+                    <resourcecount refid="fileset.eclipsehelp" when="ne" count="10" />
                 </condition>
             </fail>
 
@@ -214,6 +252,16 @@
                 </fileset>
             </replaceregexp>
 
+            <!-- Remove H1 headings produced by "early separators" -->
+            <replaceregexp byline="false"
+                           flags="g"
+                           match='&lt;h1 id=".+" style="%EARLY_SEPARATOR%"&gt;.*&lt;/h1&gt;'
+                           replace=''>
+                <fileset dir="${help.dir}">
+                    <include name="**/*.html" />
+                </fileset>
+            </replaceregexp>
+
             <!-- Fix DIV elements -->
             <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;div(.*)&gt;&lt;/p&gt;' replace='&lt;div\1&gt;'>
                 <fileset dir="${help.dir}">
@@ -275,13 +323,26 @@
              images/…
     -->
 
+    <target name="compile.wikitext.converter"
+            description="Compiles the Wikitext converter that turns Textile into our Hubspot HTML"
+            depends="init.wikitext">
+        <mkdir dir="${bin.dir}" />
+        <javac srcdir="${src.dir}/main/java"
+               destdir="${bin.dir}"
+               classpathref="wikitext.all.classpath"
+               debug="true"
+               fork="true"
+               optimize="false"
+               includeantruntime="false">
+        </javac>
+    </target>
+
     <target name="generate.website"
             description="Generates the documentation as various HTML files for the website, each being composed of selected sections. Use -Dwebsite.local.files=true to generate the website as local files for preview."
-            depends="init.wikitext">
+            depends="init.wikitext, compile.wikitext.converter">
 
         <sequential>
-            <taskdef classpathref="wikitext.classpath"
-                     resource="org/eclipse/mylyn/wikitext/core/ant/tasks.properties" />
+            <taskdef classpathref="wikitext.all.classpath" resource="org/eclipse/mylyn/wikitext/ant/tasks.properties" />
 
             <!-- Installation Guide -->
             <create-website-part name="YSCT-installation" title="YAKINDU Statechart Tools Installation Guide">
@@ -318,9 +379,8 @@
                         <file name="user-guide/overview.textile" />
                         <file name="user-guide/editing_statecharts.textile" />
                         <file name="user-guide/simulating_statecharts.textile" />
-                        <file name="user-guide/advanced_simulation.textile" />
                         <file name="user-guide/c-domain.textile" />
-                        <file name="user-guide/typescript-domain.textile" />
+                        <!-- file name="user-guide/typescript-domain.textile" /-->
                         <file name="user-guide/statechart_language.textile" />
                         <file name="user-guide/generating_code.textile" />
                         <file name="user-guide/generating_code_headless.textile" />
@@ -373,45 +433,31 @@
                 <textile-files />
             </concat>
 
-            <!-- Convert textile source files to HTML: -->
-            <wikitext-to-html markupLanguage="Textile"
-                              multipleOutputFiles="false"
-                              navigationImages="true"
-                              formatoutput="true"
-                              validate="true"
-                              xhtmlStrict="true"
-                              overwrite="true"
-                              failOnValidationError="true"
-                              failOnValidationWarning="false"
-                              sourceEncoding="UTF-8"
-                              title="@{title}">
-                <fileset dir="${work.dir}">
-                    <include name="${index.textile}" />
-                </fileset>
-                <stylesheet url="${css.dir}/${css.root.file}" />
-            </wikitext-to-html>
-
-            <!-- Load website fragments: -->
-            <sequential unless:set="website.local.files">
-                <loadfile property="website.header" srcFile="${src.dir}/website/header.htmlf" encoding="UTF-8" />
-                <loadfile property="website.footer" srcFile="${src.dir}/website/footer.htmlf" encoding="UTF-8" />
-                <loadfile property="website.calltoaction.download"
-                          srcFile="${src.dir}/website/calltoaction.download.htmlf"
-                          encoding="UTF-8" />
-            </sequential>
-
-            <!-- Load fragments for generating local files which should look simular to the website: -->
-            <sequential if:set="website.local.files">
-                <loadfile property="website.header"
-                          srcFile="${src.dir}/website/header.local.files.htmlf"
-                          encoding="UTF-8" />
-                <loadfile property="website.footer"
-                          srcFile="${src.dir}/website/footer.local.files.htmlf"
-                          encoding="UTF-8" />
-                <loadfile property="website.calltoaction.download"
-                          srcFile="${src.dir}/website/calltoaction.download.local.files.htmlf"
-                          encoding="UTF-8" />
-            </sequential>
+            <!-- Convert textile source files to Hubspot HTML: -->
+            <path id="converter.classpath">
+                <pathelement location="${bin.dir}" />
+                <path refid="wikitext.all.classpath" />
+            </path>
+            <java classname="org.yakindu.sct.doc.user.wikitext.TextileToHubspotConverter"
+                  classpathref="converter.classpath"
+                  fork="true"
+                  dir="${basedir}"
+                  failonerror="true">
+                <arg value="--p1-file" />
+                <arg value="${src.dir}/website/p1.htmlf" />
+                <arg value="--contents-template-file" />
+                <arg value="${src.dir}/website/contents.htmlf" />
+                <arg value="--p2-file" />
+                <arg value="${src.dir}/website/p2.htmlf" />
+                <arg value="--toc-template-file" />
+                <arg value="${src.dir}/website/toc.htmlf" />
+                <arg value="--p3-file" />
+                <arg value="${src.dir}/website/p3.htmlf" />
+                <arg value="--input" />
+                <arg value="${work.dir}/${index.textile}" />
+                <arg value="--output" />
+                <arg value="${work.dir}/${index.html}" />
+            </java>
 
             <!-- Replace "<pre><code>" durch "<pre class="prettyprint"><code>": -->
             <replaceregexp byline="false"
@@ -434,22 +480,6 @@
                 </fileset>
             </replaceregexp>
 
-            <!-- Replace everything up to and including "<body>" by website-specific header: -->
-            <replaceregexp byline="false" flags="s" replace="${website.header}">
-                <regexp pattern="^(.*)&lt;body&gt;" />
-                <fileset dir="${work.dir}">
-                    <include name="${index.html}" />
-                </fileset>
-            </replaceregexp>
-
-            <!-- Replace everything from and including "</body>" by website-specific footer: -->
-            <replaceregexp byline="false" flags="s" replace="${website.footer}">
-                <regexp pattern="&lt;/body&gt;(.*)$" />
-                <fileset dir="${work.dir}">
-                    <include name="${index.html}" />
-                </fileset>
-            </replaceregexp>
-
             <!-- If the generated code contains a table with the ID "updaterepositories", replace it by a
                  "call-to-action" button on the website: -->
             <replaceregexp byline="false" flags="s" replace="${website.calltoaction.download}">

File diff suppressed because it is too large
+ 103 - 0
plugins/org.yakindu.sct.doc.user/hints_for_writers.textile


+ 0 - 1
plugins/org.yakindu.sct.doc.user/misc/checkLinks_w3c.sh

@@ -50,7 +50,6 @@ then
     checklink --broken --dir-redirects \
 	--recursive --depth 1 \
 	--exclude https://github.com/Yakindu/.* \
-	${prefix}user-guide/advanced_simulation.html \
 	${prefix}user-guide/c-domain.html \
 	${prefix}user-guide/editing_statecharts.html \
 	${prefix}user-guide/generating_code_headless.html \

+ 0 - 1
plugins/org.yakindu.sct.doc.user/plugin.xml

@@ -10,7 +10,6 @@
         <toc file="help/user-guide/overview-toc.xml" primary="false"/>
         <toc file="help/user-guide/editing_statecharts-toc.xml" primary="false"/>
         <toc file="help/user-guide/simulating_statecharts-toc.xml" primary="false"/>
-        <toc file="help/user-guide/advanced_simulation-toc.xml" primary="false"/>
         <toc file="help/user-guide/c-domain-toc.xml" primary="false"/>
         <toc file="help/user-guide/typescript-domain-toc.xml" primary="false"/>
         <toc file="help/user-guide/statechart_language-toc.xml" primary="false"/>

+ 0 - 2
plugins/org.yakindu.sct.doc.user/src/installation/installation.textile

@@ -1,6 +1,4 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/installation/installation.textile
-
 h1(#installation-guide). Installation Guide
 
 In order to start working with YAKINDU Statechart Tools, you have to install the software on your computer. We are assuming you have downloaded the software package and stored it somewhere on your machine.

+ 108 - 0
plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/Heading.java

@@ -0,0 +1,108 @@
+package org.yakindu.sct.doc.user.wikitext;
+
+/**
+ * <p>
+ * Represents a heading in a Wikitext document. Its attributes are as follows:
+ * </p>
+ * 
+ * <dl>
+ * <dt><em>resource</em></dt>
+ * <dd>
+ * <p>
+ * The resource the heading is in, typically a filename
+ * </p>
+ * </dd>
+ * <dt><em>level</em></dt>
+ * <dd>
+ * <p>
+ * The heading's level, typically in the range 1 – 6
+ * </p>
+ * </dd>
+ * <dt><em>id</em></dt>
+ * <dd>
+ * <p>
+ * The heading's ID, if it has one
+ * </p>
+ * </dd>
+ * <dt><em>title</em></dt>
+ * <dd>
+ * <p>
+ * The heading's title text
+ * </p>
+ * </dd>
+ * </dl>
+ * 
+ * @author Rainer Klute,
+ *         <a href="mailto:rainer.klute@itemis.de">rainer.klute@itemise.de</a>,
+ *         2017-08-28
+ */
+public class Heading {
+
+    private String resource;
+    private int level;
+    private String id;
+    private StringBuilder title;
+
+    public Heading(final String resource, final int level, final String id) {
+        this.resource = resource;
+        this.level = level;
+        this.id = id;
+    }
+
+    public Heading(final String resource, final int level, final String id, final String title) {
+        this(resource, level, id);
+        this.title = new StringBuilder(title);
+    }
+
+    public String getResource() {
+        return resource;
+    }
+
+    public void setResource(final String resource) {
+        this.resource = resource;
+    }
+
+    public int getLevel() {
+        return level;
+    }
+
+    public void setLevel(final int level) {
+        this.level = level;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(final String id) {
+        this.id = id;
+    }
+
+    public String getTitle() {
+        return title != null ? title.toString() : null;
+    }
+
+    public void setTitle(final String title) {
+        this.title = new StringBuilder(title);
+    }
+
+    public void appendToTitle(final String text) {
+        this.title.append(text);
+    }
+
+    @Override
+    public String toString() {
+        final StringBuilder b = new StringBuilder();
+        b.append("Heading[level=");
+        b.append(level);
+        b.append(", text=");
+        b.append(title);
+        b.append(", id=");
+        b.append(id);
+        b.append(", resource=");
+        b.append(resource);
+        b.append("]");
+        return b.toString();
+    }
+
+}

+ 536 - 0
plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/HubspotDocumentBuilder.java

@@ -0,0 +1,536 @@
+package org.yakindu.sct.doc.user.wikitext;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Reader;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.eclipse.mylyn.wikitext.parser.Attributes;
+import org.eclipse.mylyn.wikitext.parser.builder.HtmlDocumentBuilder;
+
+/**
+ * <p>
+ * This document builder creates a Hubspot document with a table of contents. It
+ * extends MyLyn Wikitext's {@link HtmlDocumentBuilder} class. The resulting
+ * document consists of the following compartments:
+ * </p>
+ * 
+ * <ol>
+ * <li>
+ * <p>
+ * The <em>p1</em> compartment is a piece of text that is read from the
+ * <em>p1</em> reader and copied unmodified to the output document.
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * The <em>table of contents</em> compartment contains the document's table of
+ * contents. Each H1 entry and its subordinated H2 entries will be rendered
+ * using a "template". That template is a piece of text – usually consting of
+ * Hubspot instructions – that is read from the <em>tocTemplate</em> reader.
+ * Placeholders like <code>${h1.id}</code> or <code>${h1.title}</code> will be
+ * replaced by the current H1 heading's ID and title, respectively.
+ * <code>${h2.toc}</code> will be replaced by the subordinated headings,
+ * currently H2 entries only. These entries are generated purely
+ * programmatically.
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * The <em>p2</em> compartment is a piece of text that is read from the
+ * <em>p2</em> reader and copied unmodified to the output document.
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * The <em>contents</em> compartment contains the actual document contents. Each
+ * H1 chapter will be rendered using a "template". That template is a piece of
+ * text – usually consisting of Hubspot instructions – that is read from the
+ * <em>contentsTemplate</em> reader. Placeholders like <code>${h1.id}</code>,
+ * <code>${h1.title}</code>, or <code>${h1.contents}</code> will be replaced by
+ * the current H1 heading's ID, title, and the contents of that section,
+ * respectively.
+ * </p>
+ * </li>
+ * <li>
+ * <p>
+ * The <em>p3</em> compartment is a piece of text that is read from the
+ * <em>p3</em> reader and and copied unmodified to the output document.
+ * </p>
+ * </li>
+ * </ol>
+ * 
+ * <p>
+ * H1 headlines are used to separate sections. However, sometimes certain text
+ * elements preceed the H1 that must go into the same section, for instance if
+ * the H1 and subsequent elements are encapsulated in a DIV element. In this
+ * case, you can place an "early separator" before the DIV's start tag. The
+ * early separator is a pseudo H1 headline with a very special CSS class. It
+ * looks like this:
+ * </p>
+ * 
+ * <pre>
+ * h1{%EARLY_SEPARATOR%}. Some text
+ * </pre>
+ * 
+ * @author Rainer Klute,
+ *         <a href="mailto:rainer.klute@itemis.de">rainer.klute@itemise.de</a>,
+ *         2017-08-28
+ */
+public class HubspotDocumentBuilder extends HtmlDocumentBuilder {
+
+	final String p1;
+	final String p2;
+	final String p3;
+	final String[] contentsTemplate;
+	final String[] tocTemplate;
+	boolean isFirstH1 = true;
+	final List<Heading> headings = new ArrayList<Heading>();
+
+	private PrintWriter w;
+	private String resource = "";
+	private boolean isProcessingHeading = false;
+	private boolean isEarlySeparator = false;
+	private boolean isFollowingEarlySeparator = false;
+	private Heading currentHeading;
+
+	/*
+	 * Used to collect stuff between an early separator and the next H1 heading:
+	 */
+	private HtmlDocumentBuilder h2 = null;
+	private StringWriter s2 = null;
+	private PrintWriter w2 = null;
+	private List<Heading> pass1Headings;
+
+	/**
+	 * <p>
+	 * Sets the currently processed resource, e.g. a filename.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            the resource
+	 */
+	public void setResource(final String resource) {
+		this.resource = resource;
+	}
+
+	/**
+	 * <p>
+	 * Constructor. Reads all the required static files and template files.
+	 * </p>
+	 * 
+	 * @param pass1Headings
+	 */
+	public HubspotDocumentBuilder(final Reader p1Reader, final Reader contentsTemplateReader, final Reader p2Reader,
+			final Reader tocTemplateReader, final Reader p3Reader, final List<Heading> pass1Headings,
+			final Writer writer) {
+		super(writer, true);
+		this.pass1Headings = pass1Headings;
+		try {
+			this.p1 = readContents(p1Reader, false);
+			this.p2 = readContents(p2Reader, false);
+			this.p3 = readContents(p3Reader, false);
+		} catch (IOException e) {
+			throw new RuntimeException("Reading one the p files failed.", e);
+		}
+		try {
+			this.contentsTemplate = splitContentsTemplate(contentsTemplateReader);
+		} catch (IOException e) {
+			throw new RuntimeException("Reading the contents template failed.", e);
+		}
+		try {
+			this.tocTemplate = splitTocTemplate(tocTemplateReader);
+		} catch (IOException e) {
+			throw new RuntimeException("Reading the TOC template failed.", e);
+		}
+		if (writer instanceof PrintWriter)
+			w = (PrintWriter) writer;
+		else
+			w = new PrintWriter(writer);
+	}
+
+	/**
+	 * <p>
+	 * When the beginning of the document is encountered the P1 part is written
+	 * to the output.
+	 * </p>
+	 */
+	@Override
+	public void beginDocument() {
+		/* Copy the P1 string to the output: */
+		w.print(p1);
+
+		/*
+		 * Create the table of contents. Each H1 heading and its subordinate
+		 * headings are encapsulated in the TOC template.
+		 */
+
+		Heading h1Heading = null;
+		for (final Heading h : pass1Headings) {
+			if (h.getLevel() == 1) {
+				if (h1Heading != null)
+					/*
+					 * Close the previously opened H1 encapsulation, unless we
+					 * are processing the very first H1:
+					 */
+					w.println(resolveHeadingIdAndTitle(tocTemplate[1], 1, h1Heading.getId(), h1Heading.getTitle()));
+				/* Open the H1 encapsulation for the current H1 heading: */
+				w.println(resolveHeadingIdAndTitle(tocTemplate[0], 1, h.getId(), h.getTitle()));
+				h1Heading = h;
+			} else if (h.getLevel() == 2)
+				/* H2 headings are rendered within an H1 encapsulation: */
+				w.println(resolveHeadingIdAndTitle("<li><a href=\"#${h2.id}\">${h2.title}</a></li>", 2, h.getId(),
+						h.getTitle()));
+		}
+		/*
+		 * Close the last H1 encapsulation:
+		 */
+		w.println(resolveHeadingIdAndTitle(tocTemplate[1], 1, h1Heading.getId(), h1Heading.getTitle()));
+
+		/* Copy the P2 string to the output: */
+		w.print(p2);
+
+		/*
+		 * We don't call the superclass' beginDocument() method here, because
+		 * the beginning part of the resulting document should be provided by
+		 * the P1 part.
+		 */
+	}
+
+	/**
+	 * <p>
+	 * At the end of the document, any open H1 Hubspot encapsulation is closed.
+	 * Then the P2 part is written to the output, followed by the table of
+	 * contents, followed by the P3 part.
+	 * </p>
+	 */
+	@Override
+	public void endDocument() {
+
+		/* Close the current H1 encapsulation, if any: */
+		Heading h1Heading = lookupLastH1Heading(pass1Headings);
+		w.print(resolveHeadingIdAndTitle(contentsTemplate[1], 1, h1Heading.getId(), h1Heading.getTitle()));
+
+		/* Copy the P3 string to the output: */
+		w.print(p3);
+
+		/*
+		 * We don't call the superclass' endDocument() method here, because the
+		 * finnishing part of the resulting document should have been provided
+		 * by the P3 part.
+		 */
+
+		w.close();
+	}
+
+	@Override
+	public void beginBlock(final BlockType type, final Attributes attributes) {
+		if (isEarlySeparator)
+			h2.beginBlock(type, attributes);
+		else
+			super.beginBlock(type, attributes);
+	}
+
+	@Override
+	public void endBlock() {
+		if (isEarlySeparator)
+			h2.endBlock();
+		else
+			super.endBlock();
+	}
+
+	@Override
+	public void beginSpan(final SpanType type, final Attributes attributes) {
+		if (isEarlySeparator) {
+			if (!isProcessingHeading)
+				h2.beginSpan(type, attributes);
+		} else
+			super.beginSpan(type, attributes);
+	}
+
+	@Override
+	public void endSpan() {
+		if (isEarlySeparator) {
+			if (!isProcessingHeading)
+				h2.endSpan();
+		} else
+			super.endSpan();
+	}
+
+	/**
+	 * <p>
+	 * The begin of a heading has been encountered. If it is an H1 heading, we
+	 * have to write the first part of the contents template into the stream.
+	 * Placeholders <em>${h1.id}</em> and <em>${h1.title}</em> have to be
+	 * replaced by actual values.
+	 * </p>
+	 * <p>
+	 * <strong>Please note:</strong> At this point the title text is not yet
+	 * known! This is only the case at {@link #endHeading()}.
+	 * </p>
+	 */
+	@Override
+	public void beginHeading(final int level, final Attributes attributes) {
+		isProcessingHeading = true;
+		final String id = attributes.getId();
+		if (!isEarlySeparator) {
+			isFollowingEarlySeparator = isEarlySeparator;
+			isEarlySeparator = level == 1 && "%EARLY_SEPARATOR%".equals(attributes.getCssStyle());
+		} else {
+			isFollowingEarlySeparator = isEarlySeparator;
+			isEarlySeparator = false;
+		}
+		if (isEarlySeparator) {
+			/*
+			 * Collect everything between the early separator and the next H1 in
+			 * another writer.
+			 */
+			s2 = new StringWriter();
+			w2 = new PrintWriter(s2);
+			h2 = new HtmlDocumentBuilder(w2);
+		} else
+			currentHeading = new Heading(resource, level, id);
+
+		if (level == 1) {
+			if (!isFirstH1 && !isFollowingEarlySeparator)
+				w.print(resolveHeadingIdAndTitle(contentsTemplate[1], 1, id, null));
+			else
+				isFirstH1 = false;
+
+			if (!isEarlySeparator) {
+				w.println(resolveHeadingIdAndTitle(contentsTemplate[0], 1, id, null));
+				if (isFollowingEarlySeparator) {
+					w2.close();
+					w.println(s2.toString());
+					h2 = null;
+					w2 = null;
+				}
+				super.beginHeading(level, attributes);
+			}
+		} else
+			super.beginHeading(level, attributes);
+	}
+
+	@Override
+	public void endHeading() {
+		if (!isEarlySeparator) {
+			headings.add(currentHeading);
+			isProcessingHeading = false;
+			super.endHeading();
+		}
+	}
+
+	@Override
+	public void characters(final String text) {
+		if (isEarlySeparator) {
+			if (!isProcessingHeading)
+				h2.characters(text);
+		} else if (isProcessingHeading) {
+			if (currentHeading.getTitle() == null)
+				currentHeading.setTitle(text);
+			else
+				currentHeading.appendToTitle(text);
+			super.characters(text);
+		} else
+			super.characters(text);
+	}
+
+	@Override
+	public void entityReference(final String entity) {
+		if (isEarlySeparator)
+			h2.entityReference(entity);
+		else
+			super.entityReference(entity);
+	}
+
+	@Override
+	public void image(final Attributes attributes, final String url) {
+		if (isEarlySeparator)
+			h2.image(attributes, url);
+		else
+			super.image(attributes, url);
+	}
+
+	@Override
+	public void link(final Attributes attributes, final String hrefOrHashName, final String text) {
+		if (isEarlySeparator)
+			h2.link(attributes, hrefOrHashName, text);
+		else
+			super.link(attributes, hrefOrHashName, text);
+	}
+
+	@Override
+	public void imageLink(final Attributes linkAttributes, final Attributes imageAttributes, final String href,
+			final String imageUrl) {
+		if (isEarlySeparator)
+			h2.imageLink(linkAttributes, imageAttributes, href, imageUrl);
+		else
+			super.imageLink(linkAttributes, imageAttributes, href, imageUrl);
+	}
+
+	@Override
+	public void acronym(final String text, final String definition) {
+		if (isEarlySeparator)
+			h2.acronym(text, definition);
+		else
+			super.acronym(text, definition);
+	}
+
+	@Override
+	public void lineBreak() {
+		if (isEarlySeparator)
+			h2.lineBreak();
+		else
+			super.lineBreak();
+	}
+
+	@Override
+	public void charactersUnescaped(final String literal) {
+		if (isEarlySeparator)
+			h2.charactersUnescaped(literal);
+		else
+			super.charactersUnescaped(literal);
+	}
+
+	/**
+	 * <p>
+	 * Replaces the placeholders like <code>${h1.id}</code> and
+	 * <code>${h1.title}</code> by actual values, if available. If an actual
+	 * value is <code>null</code>, no replacement will be done. The level
+	 * number, i.e. the "1" in <code>${h1.id}</code> and
+	 * <code>${h1.title}</code> must be supplied as a parameter.
+	 * </p>
+	 * 
+	 * @param s
+	 *            The string containing the placeholders
+	 * @param level
+	 *            The level number of the heading
+	 * @param id
+	 *            The ID of the heading
+	 * @param title
+	 *            The title of the heading
+	 * @return The result string
+	 */
+	private String resolveHeadingIdAndTitle(final String s, final int level, final String id, final String title) {
+		String result = s;
+		final String re = "\\$\\{h" + level + "\\.";
+		if (id != null)
+			result = result.replaceAll(re + "id}", id);
+		if (title != null)
+			result = result.replaceAll(re + "title}", title);
+		return result;
+	}
+	/**
+	 * <p>
+	 * Splits the contents template into two parts: everything <em>before</em>
+	 * <code>${h1.contents}</code> and everything <em>after</em> that string.
+	 * 
+	 * @param contentsTemplateReader
+	 *            reader containing the contents template
+	 * @return a string array with two fields representing the two parts.
+	 * @throws IOException
+	 *             if reading from the contents template reader fails
+	 */
+	private String[] splitContentsTemplate(final Reader contentsTemplateReader) throws IOException {
+		return split(contentsTemplateReader, "${h1.contents}");
+	}
+
+	/**
+	 * <p>
+	 * Splits the TOC template into two parts: everything <em>before</em>
+	 * <code>${h2.toc}</code> and everything <em>after</em> that string.
+	 * 
+	 * @param tocTemplateReader
+	 *            reader containing the TOC template
+	 * @return a string array with two fields representing the two parts.
+	 * @throws IOException
+	 *             if reading from the contents template reader fails
+	 */
+	private String[] splitTocTemplate(final Reader tocTemplateReader) throws IOException {
+		return split(tocTemplateReader, "${h2.toc}");
+	}
+
+	/**
+	 * <p>
+	 * Splits the string read from a {@link Reader} into two parts: everything
+	 * <em>before</em> a separator and everything <em>after</em> it.
+	 * 
+	 * @param reader
+	 *            reader to read the string from
+	 * @return a string array with two fields representing the two parts.
+	 * @throws IOException
+	 *             if reading from the reader fails
+	 */
+	private String[] split(final Reader reader, final String separator) throws IOException {
+		final String s = readContents(reader, false);
+		final String[] result = new String[2];
+		final int beginPart1 = 0;
+		final int endPart1 = s.indexOf(separator);
+		final int beginPart2 = endPart1 + separator.length();
+		final int endPart2 = s.length();
+		if (endPart1 < 0) {
+			result[0] = s;
+			result[1] = "";
+		} else if (endPart1 == 0) {
+			result[0] = "";
+			result[1] = s;
+		} else if (endPart1 > 0) {
+			result[0] = s.substring(beginPart1, endPart1);
+			result[1] = s.substring(beginPart2, endPart2);
+		}
+		return result;
+	}
+
+	/**
+	 * <p>
+	 * Looks up the last H1 heading in a list of headings.
+	 * </p>
+	 * 
+	 * @param headings
+	 *            The list of heading to search
+	 * @return The last H1 heading in the list of headings or <code>null</code>.
+	 */
+	private Heading lookupLastH1Heading(final List<Heading> headings) {
+		final ListIterator<Heading> i = headings.listIterator(headings.size());
+		Heading result = null;
+		while (result == null && i.hasPrevious()) {
+			final Heading h = i.previous();
+			if (h.getLevel() == 1)
+				result = h;
+		}
+		return result;
+	}
+
+	/**
+	 * <p>
+	 * Reads the complete contents of a {@link Reader} and returns it as a
+	 * string.
+	 * </p>
+	 * 
+	 * @param reader
+	 *            The {@link Reader} to read from
+	 * @param isRobustReading
+	 *            If <code>true</code>, failing to read from the {@link Reader}
+	 *            or a {@link Reader} of <code>null</code> won't result in an
+	 *            error. Instead an empty string will be returned.
+	 * @return see above
+	 * @throws IOException
+	 */
+	private String readContents(final Reader reader, final boolean isRobustReading) throws IOException {
+		final char[] buffer = new char[5000];
+		final StringBuilder result = new StringBuilder();
+		int read = 0;
+		while (read >= 0) {
+			read = reader.read(buffer, 0, buffer.length);
+			if (read > 0)
+				result.append(buffer, 0, read);
+		}
+		reader.close();
+		return result.toString();
+	}
+
+}

+ 212 - 0
plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/SequenceReader.java

@@ -0,0 +1,212 @@
+package org.yakindu.sct.doc.user.wikitext;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.Reader;
+import java.io.SequenceInputStream;
+import java.util.Enumeration;
+import java.util.Vector;
+
+/**
+ * <p>
+ * This class behaves like the standard {@link SequenceInputStream}, but for
+ * {@link Reader}s. In fact its source code has been copied from
+ * {@link SequenceInputStream} and then has been modified in order to cope with
+ * the differences between {@link InputStream} and {@link Reader}.
+ * 
+ * @author Rainer Klute,
+ *         <a href="mailto:rainer.klute@itemis.de">rainer.klute@itemise.de</a>,
+ *         2017-08-28
+ */
+public class SequenceReader extends Reader {
+    Enumeration<? extends Reader> e;
+    Reader in;
+
+    /**
+     * Initializes a newly created <code>SequenceReader</code> by remembering
+     * the argument, which must be an <code>Enumeration</code> that produces
+     * objects whose run-time type is <code>Reader</code>. The readers that are
+     * produced by the enumeration will be read, in order, to provide the
+     * characters to be read from this <code>SequenceReader</code>. After each
+     * reader from the enumeration is exhausted, it is closed by calling its
+     * <code>close</code> method.
+     *
+     * @param e
+     *            an enumeration of readers.
+     * @see java.util.Enumeration
+     */
+    public SequenceReader(Enumeration<? extends Reader> e) {
+        this.e = e;
+        try {
+            nextReader();
+        } catch (IOException ex) {
+            // This should never happen
+            throw new Error("panic");
+        }
+    }
+
+    /**
+     * Initializes a newly created <code>SequenceReader</code> by remembering
+     * the two arguments, which will be read in order, first <code>s1</code> and
+     * then <code>s2</code>, to provide the characters to be read from this
+     * <code>SequenceReader</code>.
+     *
+     * @param s1
+     *            the first reader to read.
+     * @param s2
+     *            the second reader to read.
+     */
+    public SequenceReader(Reader s1, Reader s2) {
+        Vector<Reader> v = new Vector<>(2);
+
+        v.addElement(s1);
+        v.addElement(s2);
+        e = v.elements();
+        try {
+            nextReader();
+        } catch (IOException ex) {
+            // This should never happen
+            throw new Error("panic");
+        }
+    }
+
+    /**
+     * Continues reading in the next reader if an EOF is reached.
+     */
+    final void nextReader() throws IOException {
+        if (in != null) {
+            in.close();
+        }
+
+        if (e.hasMoreElements()) {
+            in = (Reader) e.nextElement();
+            if (in == null)
+                throw new NullPointerException();
+        } else
+            in = null;
+
+    }
+
+    /**
+     * Returns an estimate of the number of characters that can be read (or
+     * skipped over) from the current underlying reader without blocking by the
+     * next invocation of a method for the current underlying reader. The next
+     * invocation might be the same thread or another thread. A single read or
+     * skip of this many characters will not block, but may read or skip fewer
+     * characters.
+     * <p>
+     * This method simply calls {@code available} of the current underlying
+     * reader and returns the result.
+     *
+     * @return an estimate of the number of characters that can be read (or
+     *         skipped over) from the current underlying reader without blocking
+     *         or {@code 0} if this reader has been closed by invoking its
+     *         {@link #close()} method
+     * @exception IOException
+     *                if an I/O error occurs.
+     *
+     * @since JDK1.1
+     */
+    // public int available() throws IOException {
+    // if (in == null) {
+    // return 0; // no way to signal EOF from available()
+    // }
+    // return in.available();
+    // }
+
+    /**
+     * Reads the next character of data from this reader. The character is
+     * returned as an <code>int</code> in the range <code>0</code> to
+     * <code>255</code>. If no character is available because the end of the
+     * reader has been reached, the value <code>-1</code> is returned. This
+     * method blocks until input data is available, the end of the reader is
+     * detected, or an exception is thrown.
+     * <p>
+     * This method tries to read one character from the current subreader. If it
+     * reaches the end of the reader, it calls the <code>close</code> method of
+     * the current subreader and begins reading from the next subreader.
+     *
+     * @return the next character of data, or <code>-1</code> if the end of the
+     *         reader is reached.
+     * @exception IOException
+     *                if an I/O error occurs.
+     */
+    public int read() throws IOException {
+        while (in != null) {
+            int c = in.read();
+            if (c != -1) {
+                return c;
+            }
+            nextReader();
+        }
+        return -1;
+    }
+
+    /**
+     * Reads up to <code>len</code> characters of data from this reader into an
+     * array of characters. If <code>len</code> is not zero, the method blocks
+     * until at least 1 character of input is available; otherwise, no
+     * characters are read and <code>0</code> is returned.
+     * <p>
+     * The <code>read</code> method of <code>SequenceReader</code> tries to read
+     * the data from the current subreader. If it fails to read any characters
+     * because the subreader has reached the end of the reader, it calls the
+     * <code>close</code> method of the current subreader and begins reading
+     * from the next subreader.
+     *
+     * @param b
+     *            the buffer into which the data is read.
+     * @param off
+     *            the start offset in array <code>b</code> at which the data is
+     *            written.
+     * @param len
+     *            the maximum number of characters read.
+     * @return int the number of characters read.
+     * @exception NullPointerException
+     *                If <code>b</code> is <code>null</code>.
+     * @exception IndexOutOfBoundsException
+     *                If <code>off</code> is negative, <code>len</code> is
+     *                negative, or <code>len</code> is greater than
+     *                <code>b.length - off</code>
+     * @exception IOException
+     *                if an I/O error occurs.
+     */
+    public int read(char b[], int off, int len) throws IOException {
+        if (in == null) {
+            return -1;
+        } else if (b == null) {
+            throw new NullPointerException();
+        } else if (off < 0 || len < 0 || len > b.length - off) {
+            throw new IndexOutOfBoundsException();
+        } else if (len == 0) {
+            return 0;
+        }
+        do {
+            int n = in.read(b, off, len);
+            if (n > 0) {
+                return n;
+            }
+            nextReader();
+        } while (in != null);
+        return -1;
+    }
+
+    /**
+     * Closes this reader and releases any system resources associated with it.
+     * A closed <code>SequenceReader</code> cannot perform input operations and
+     * cannot be reopened.
+     * <p>
+     * If this reader was created from an enumeration, all remaining elements
+     * are requested from the enumeration and closed before the
+     * <code>close</code> method returns.
+     *
+     * @exception IOException
+     *                if an I/O error occurs.
+     */
+    public void close() throws IOException {
+        do {
+            nextReader();
+        } while (in != null);
+    }
+
+}

+ 233 - 0
plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/TableOfContentsBuilder.java

@@ -0,0 +1,233 @@
+package org.yakindu.sct.doc.user.wikitext;
+
+import java.io.Reader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.mylyn.wikitext.parser.Attributes;
+import org.eclipse.mylyn.wikitext.parser.DocumentBuilder;
+
+/**
+ * <p>
+ * This document builder collects the headings from a textile stream and creates
+ * a table of contents
+ * </p>
+ * 
+ * @author Rainer Klute,
+ *         <a href="mailto:rainer.klute@itemis.de">rainer.klute@itemise.de</a>,
+ *         2017-09-25
+ */
+public class TableOfContentsBuilder extends DocumentBuilder {
+
+	private final List<Heading> headings;
+	private boolean isProcessingHeading = false;
+	private boolean isEarlySeparator = false;
+	private Heading currentHeading;
+	private String resource;
+
+	/**
+	 * <p>
+	 * Returns the headings collected by this {@link TableOfContentsBuilder}.
+	 * </p>
+	 */
+	public List<Heading> getHeadings() {
+		return headings;
+	}
+
+	/**
+	 * <p>
+	 * Sets the currently processed resource, e.g. a filename.
+	 * </p>
+	 * 
+	 * @param resource
+	 *            the resource
+	 */
+	public void setResource(final String resource) {
+		this.resource = resource;
+	}
+
+	/**
+	 * <p>
+	 * Constructor.
+	 * </p>
+	 */
+	public TableOfContentsBuilder() {
+		this.headings = new ArrayList<Heading>();
+	}
+
+	/*
+	 * (non-Javadoc)
+	 *
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#beginDocument()
+	 */
+	@Override
+	public void beginDocument() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#endDocument()
+	 */
+	@Override
+	public void endDocument() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#beginBlock(org.eclipse.
+	 * mylyn.wikitext.parser.DocumentBuilder.BlockType,
+	 * org.eclipse.mylyn.wikitext.parser.Attributes)
+	 */
+	@Override
+	public void beginBlock(BlockType type, Attributes attributes) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#endBlock()
+	 */
+	@Override
+	public void endBlock() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#beginSpan(org.eclipse.
+	 * mylyn.wikitext.parser.DocumentBuilder.SpanType,
+	 * org.eclipse.mylyn.wikitext.parser.Attributes)
+	 */
+	@Override
+	public void beginSpan(SpanType type, Attributes attributes) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#endSpan()
+	 */
+	@Override
+	public void endSpan() {
+	}
+
+	/**
+	 * <p>
+	 * The begin of a heading has been encountered. If it is an H1 heading, we
+	 * have to write the first part of the contents template into the stream.
+	 * Placeholders <em>${h1.id}</em> and <em>${h1.title}</em> have to be
+	 * replaced by actual values.
+	 * </p>
+	 * <p>
+	 * <strong>Please note:</strong> At this point the title text is not yet
+	 * known! This is only the case at {@link #endHeading()}.
+	 * </p>
+	 */
+	@Override
+	public void beginHeading(final int level, final Attributes attributes) {
+		isProcessingHeading = true;
+		final String id = attributes.getId();
+		isEarlySeparator = level == 1 && "%EARLY_SEPARATOR%".equals(attributes.getCssStyle());
+		if (!isEarlySeparator)
+			currentHeading = new Heading(resource, level, id);
+	}
+
+	@Override
+	public void endHeading() {
+		if (!isEarlySeparator) {
+			headings.add(currentHeading);
+			isProcessingHeading = false;
+		}
+	}
+
+	@Override
+	public void characters(final String text) {
+		if (isProcessingHeading && !isEarlySeparator) {
+			if (currentHeading.getTitle() == null)
+				currentHeading.setTitle(text);
+			else
+				currentHeading.appendToTitle(text);
+		}
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#entityReference(java.
+	 * lang.String)
+	 */
+	@Override
+	public void entityReference(String entity) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#image(org.eclipse.mylyn
+	 * .wikitext.parser.Attributes, java.lang.String)
+	 */
+	@Override
+	public void image(Attributes attributes, String url) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#link(org.eclipse.mylyn.
+	 * wikitext.parser.Attributes, java.lang.String, java.lang.String)
+	 */
+	@Override
+	public void link(Attributes attributes, String hrefOrHashName, String text) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#imageLink(org.eclipse.
+	 * mylyn.wikitext.parser.Attributes,
+	 * org.eclipse.mylyn.wikitext.parser.Attributes, java.lang.String,
+	 * java.lang.String)
+	 */
+	@Override
+	public void imageLink(Attributes linkAttributes, Attributes imageAttributes, String href, String imageUrl) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#acronym(java.lang.
+	 * String, java.lang.String)
+	 */
+	@Override
+	public void acronym(String text, String definition) {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see org.eclipse.mylyn.wikitext.parser.DocumentBuilder#lineBreak()
+	 */
+	@Override
+	public void lineBreak() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * 
+	 * @see
+	 * org.eclipse.mylyn.wikitext.parser.DocumentBuilder#charactersUnescaped(
+	 * java.lang.String)
+	 */
+	@Override
+	public void charactersUnescaped(String literal) {
+	}
+
+}

+ 184 - 0
plugins/org.yakindu.sct.doc.user/src/main/java/org/yakindu/sct/doc/user/wikitext/TextileToHubspotConverter.java

@@ -0,0 +1,184 @@
+package org.yakindu.sct.doc.user.wikitext;
+
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.Reader;
+import java.io.Writer;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Vector;
+
+import org.eclipse.mylyn.wikitext.parser.MarkupParser;
+import org.eclipse.mylyn.wikitext.util.ServiceLocator;
+
+/**
+ * <p>
+ * This application reads one or more documents in Textile format and converts
+ * it into a Hubspot template document. In it's current state, the application
+ * expects the resulting document to consist of several different compartments.
+ * They are explained in the {@link HubspotDocumentBuilder} class documentation.
+ * </p>
+ * 
+ * @author Rainer Klute,
+ *         <a href="mailto:rainer.klute@itemis.de">rainer.klute@itemise.de</a>,
+ *         2017-08-28
+ *
+ */
+public class TextileToHubspotConverter {
+
+	public static void main(String[] args) throws IOException {
+		final List<String> inFileNames = new ArrayList<String>();
+		String outFilename = null;
+		String p1Filename = null;
+		String contentsTemplateFilename = null;
+		String p2Filename = null;
+		String tocTemplateFilename = null;
+		String p3Filename = null;
+
+		/*
+		 * Parse command-line parameters:
+		 */
+		for (int i = 0; i < args.length; i++) {
+			final String arg = args[i];
+			if (arg.equals("-p1") || arg.equals("--p1-file")) {
+				p1Filename = args[++i];
+				continue;
+			}
+			if (arg.equals("-c") || arg.equals("--contents-template-file")) {
+				contentsTemplateFilename = args[++i];
+				continue;
+			}
+			if (arg.equals("-p2") || arg.equals("--p2-file")) {
+				p2Filename = args[++i];
+				continue;
+			}
+			if (arg.equals("-t") || arg.equals("--toc-template-file")) {
+				tocTemplateFilename = args[++i];
+				continue;
+			}
+			if (arg.equals("-p3") || arg.equals("--p3-file")) {
+				p3Filename = args[++i];
+				continue;
+			}
+			if (arg.equals("-i") || arg.equals("--input")) {
+				inFileNames.add(args[++i]);
+				continue;
+			}
+			if (arg.equals("-o") || arg.equals("--output")) {
+				outFilename = args[++i];
+				continue;
+			}
+		}
+		assertParameterIsSpecified(p1Filename, "P1 file not specified.");
+		assertParameterIsSpecified(contentsTemplateFilename, "Contents template file not specified.");
+		assertParameterIsSpecified(p2Filename, "P2 file not specified.");
+		assertParameterIsSpecified(tocTemplateFilename, "TOC template file not specified.");
+		assertParameterIsSpecified(p3Filename, "P3 file not specified.");
+		assertParameterIsSpecified(inFileNames, "Input file(s) not specified.");
+		assertParameterIsSpecified(outFilename, "Output file not specified.");
+
+		/*
+		 * Setup the TOC document builder:
+		 */
+		final TableOfContentsBuilder tocBuilder = new TableOfContentsBuilder();
+
+		/*
+		 * Concatenate all input files so that the Textile parser sees
+		 * everything as one large input file:
+		 */
+		final Vector<Reader> readers = new Vector<Reader>(inFileNames.size());
+		for (final String inFileName : inFileNames)
+			readers.addElement(new FileReader(inFileName));
+		Reader in = new SequenceReader(new Vector<Reader>(readers).elements());
+
+		/*
+		 * Create, configure, and run the Textile markup parser. It will call
+		 * back into the table of contents builder, which will create the table
+		 * of contents.
+		 */
+		MarkupParser markupParser = new MarkupParser();
+		markupParser.setMarkupLanguage(ServiceLocator.getInstance().getMarkupLanguage("Textile"));
+		markupParser.setBuilder(tocBuilder);
+		markupParser.parse(in);
+		List<Heading> headings = tocBuilder.getHeadings();
+
+		/*
+		 * Setup everything for the Hubspot document builder and process files:
+		 */
+		final Reader p1 = createFileReader(p1Filename, "P1 file not found");
+		final Reader contentsTemplate = createFileReader(contentsTemplateFilename, "Contents template file not found");
+		final Reader p2 = createFileReader(p2Filename, "P2 file not found");
+		final Reader tocTemplate = createFileReader(tocTemplateFilename, "TOC template file not found");
+		final Reader p3 = createFileReader(p3Filename, "P3 file not found");
+		final Writer out = new FileWriter(outFilename);
+		final HubspotDocumentBuilder docBuilder = new HubspotDocumentBuilder(p1, contentsTemplate, p2, tocTemplate, p3,
+				headings, out);
+
+		/*
+		 * Concatenate all input files so that the Textile parser sees
+		 * everything as one large input file:
+		 */
+		/*
+		 * Concatenate all input files so that the Textile parser sees
+		 * everything as one large input file:
+		 */
+		readers.clear();
+		for (final String inFileName : inFileNames)
+			readers.addElement(new FileReader(inFileName));
+		in = new SequenceReader(new Vector<Reader>(readers).elements());
+
+		/*
+		 * Create, configure, and run the Textile markup parser. It will call
+		 * back into the document builder, which will construct the output
+		 * document.
+		 */
+		markupParser = new MarkupParser();
+		markupParser.setMarkupLanguage(ServiceLocator.getInstance().getMarkupLanguage("Textile"));
+		markupParser.setBuilder(docBuilder);
+		markupParser.parse(in);
+		out.close();
+	}
+
+	private static void assertParameterIsSpecified(final String p, final String msg) {
+		if (p == null || p.trim().isEmpty())
+			errorExit(msg);
+	}
+
+	private static void assertParameterIsSpecified(final List<String> p, final String msg) {
+		if (p == null || p.isEmpty())
+			errorExit(msg);
+	}
+
+	private static void errorExit(final String msg) {
+		System.err.println(msg);
+		System.err.println("Parameters: --p1-file part1File.htmlf"
+				+ " --contents-template-file contentTemplateFile.htmlf" + " --p2-file part2File.htmlf"
+				+ " --toc-template-file tocTemplateFile.htmlf" + " --p3-file part3file.htmlf"
+				+ " --input file.textile [--input file.textile]…" + " --output file.html");
+		System.exit(1);
+	}
+
+	/**
+	 * <p>
+	 * Creates a {@link Reader} for the specified file. If that fails, the
+	 * application is terminated with a specified error message.
+	 * 
+	 * @param filename
+	 *            Name of the file to create a {@link Reader} for.
+	 * @param msg
+	 *            Error message to print if the file cannot be opened.
+	 * @return see above
+	 */
+	private static Reader createFileReader(final String filename, final String msg) {
+		Reader r = null;
+		try {
+			r = new FileReader(filename);
+		} catch (FileNotFoundException e) {
+			errorExit(msg + ": " + filename);
+		}
+		return r;
+	}
+
+}

+ 1 - 3
plugins/org.yakindu.sct.doc.user/src/tutorials/tutorials.textile

@@ -1,6 +1,4 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/tutorials/tutorials.textile
-
 
 
 
@@ -50,7 +48,7 @@ As an example, we will take the light switch statechart and generate Java source
 That's it. If you want to know more, take the time and work through the "Comprehensive Tutorial":#tutorial_comprehensive_tutorial.
 
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/tutorials/tutorials.textile
+
 
 h1(#tutorial_comprehensive_tutorial). Comprehensive tutorial
 

File diff suppressed because it is too large
+ 0 - 223
plugins/org.yakindu.sct.doc.user/src/user-guide/advanced_simulation.textile


+ 1 - 7
plugins/org.yakindu.sct.doc.user/src/user-guide/c-domain.textile

@@ -1,10 +1,8 @@
 
-p. 
+h1{%EARLY_SEPARATOR%}. 
 
 ==<div class="pro-feature">==
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/c-domain.textile
-
 h1(#cdom_deep_c_integration). Deep C integration: Integrating your C source code with your state machines
 
 h2(#cdom_introduction). Introduction
@@ -631,10 +629,6 @@ In C it is possible to define structs, unions and enums without a _typedef_. The
 
 
 
-h3(#cdom_performance_issues_with_very_large_c_projects). Performance issues with very large C projects
-h4(#cdom_processing_header_files_and_macro_definitions). Processing header files and macro definitions
-h4(#cdom_excluding_c_header_files_from_being_parsed). Excluding C header files from being parsed
-h4(#cdom_deactivating_the_ccpp_indexer). Deactivating the C/C++ indexer
 h3(#cdom_please_get_in_touch_with_us). Please get in touch with us
 
 Please note that the preceding list of restrictions might not be complete. If you discover any further problems, please do not hesitate to contact us! Your feedback is highly appreciated!

+ 0 - 2
plugins/org.yakindu.sct.doc.user/src/user-guide/editing_statecharts.textile

@@ -1,6 +1,4 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/editing_statecharts.textile
-
 h1(#edit_editing_statecharts). Editing statecharts
 
 h2(#edit_creating_and_deleting_statecharts). Creating and deleting statecharts

File diff suppressed because it is too large
+ 120 - 173
plugins/org.yakindu.sct.doc.user/src/user-guide/generating_code.textile


+ 0 - 2
plugins/org.yakindu.sct.doc.user/src/user-guide/generating_code_headless.textile

@@ -1,6 +1,4 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/generating_code_headless.textile
-
 h1(#hdls_headless_code_generation). Headless code generation
 
 State machine code is fully derived from a statechart model, and section "Generating state machine code":../user-guide/generating_code.html explains how to interactively run a code generator. Since release 2.9.0, YAKINDU Statechart Tools additionally provides a headless code generator infrastructure. This allows for code generation without a user interface which in turn allows to integrate code generation into continuous integration (CI) build environments.

+ 1 - 3
plugins/org.yakindu.sct.doc.user/src/user-guide/glossary.textile

@@ -1,7 +1,5 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/glossary.textile
-
-h1(#glossary). Glossary.
+h1(#glossary). Glossary
 
 h2(#glossary_action). Action
 

BIN
plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02a-1.png


BIN
plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02a-2.png


BIN
plugins/org.yakindu.sct.doc.user/src/user-guide/images/docu_childfirst_010_example_02b-1.png


File diff suppressed because it is too large
+ 1 - 3
plugins/org.yakindu.sct.doc.user/src/user-guide/overview.textile


+ 0 - 6
plugins/org.yakindu.sct.doc.user/src/user-guide/sctunit.textile

@@ -1,10 +1,4 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/sctunit.textile
-
-
-
-
-
 h1(#sctunit_test-driven_statechart_development_with_sctunit). Test-driven statechart development with SCTUnit
 
 h2(#sctunit_brief_introduction_to_test-driven_development). Brief introduction to test-driven development

File diff suppressed because it is too large
+ 222 - 6
plugins/org.yakindu.sct.doc.user/src/user-guide/simulating_statecharts.textile


+ 1 - 3
plugins/org.yakindu.sct.doc.user/src/user-guide/statechart_language.textile

@@ -1,7 +1,5 @@
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/statechart_language.textile
-
-h1(#sclang_the_statechart_language). The statechart language
+h1(#sclang_statechart_language_reference). Statechart language reference
 
 The statechart language is used to describe statecharts. It consists both of graphical and of textual elements.
 

+ 1 - 7
plugins/org.yakindu.sct.doc.user/src/user-guide/typescript-domain.textile

@@ -1,14 +1,8 @@
 
-p. 
+h1{%EARLY_SEPARATOR%}. 
 
 ==<div class="pro-feature">==
 
-p(edit-on-github). "Edit on GitHub":https://github.com/Yakindu/statecharts/edit/master/plugins/org.yakindu.sct.doc.user/src/user-guide/typescript-domain.textile
-
-
-
-
-
 h1(#tsdom-using-typescript-in-statecharts). Using TypeScript in statecharts
 
 h2(#tsdom-introduction). Introduction

+ 292 - 0
plugins/org.yakindu.sct.doc.user/src/website/YSCT-documentation-template.htmlf

@@ -0,0 +1,292 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{ html_lang }}" {{ html_lang_dir }}> <![endif]-->
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="{{ html_lang }}" {{ html_lang_dir }}>        <![endif]-->
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="{{ html_lang }}" {{ html_lang_dir }}>               <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="{{ html_lang }}" {{ html_lang_dir }}> <!--<![endif]-->
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="author" content="{{ meta_author }}">
+    <meta name="description" content="{% if dynamic_page_hubdb_row %}{{ dynamic_page_hubdb_row.description }}{% else %}{{ page_meta.meta_description }}{% endif %}">
+    <meta name="generator" content="HubSpot">
+    <title>{{ page_meta.html_title }}</title>
+    {% if site_settings.favicon_src %}<link rel="shortcut icon" href="{{ site_settings.favicon_src }}" />{% endif %}
+    
+    
+    {{ required_head_tags }}
+    {% style include_default_custom_css="false" %}
+
+    {% if dynamic_page_hubdb_row %}
+        <link href="{{ get_public_template_url("Custom/page/itemis/it-yakindu-docs-detail.css") }}" rel="stylesheet" type="text/css">
+        
+        <style>
+            .body-container .primary h1 {
+                counter-increment: h1 +{{dynamic_page_hubdb_row.chapter - 1}};
+            }
+        </style>
+
+        <script type="text/javascript" src="{{ get_public_template_url("custom/page/itemis/bootstrap-anchor.js") }}"></script>
+        <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('#sidebar-navigation').sticky({topSpacing: 100, bottomSpacing: 300});
+            
+            jQuery('.body-container #sidebar-navigation .nav .active-branch > span').on('click', function() {
+                jQuery(this).next('ol').toggle();
+            });
+
+            jQuery('body').css('position', 'relative').scrollspy({target: "#sidebar-navigation", offset: 150});
+        });
+        </script>
+        
+    {% elif dynamic_page_hubdb_table_id %}
+        <link href="{{ get_public_template_url("Custom/page/itemis/it-yakindu-docs-overview.css") }}" rel="stylesheet" type="text/css">
+        
+        <script type="text/javascript">
+        jQuery(window).on("load", function() {
+            jQuery('.primary .row-fluid').equalize({equalize: 'outerHeight', children: '.themes-container', reset: true});
+        
+            jQuery( window ).resize(function() {
+                jQuery('.primary .row-fluid').equalize({equalize: 'outerHeight', children: '.themes-container', reset: true});
+            });
+        });
+        </script>
+    {% endif %}
+
+
+    {{ user_head_overrides }}
+</head>
+<body class="homepage-test sct-docs {{ builtin_body_classes }}" style="">
+    
+    <div class="header-container-wrapper">
+    <div class="header-container container-fluid">
+
+<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
+{% include 'generated_global_groups/3772713661.html' %}
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-custom_widget " style="" data-widget-type="custom_widget" data-x="0" data-w="12">
+<div class="cell-wrapper layout-widget-wrapper">
+{% custom_widget "module_1489660201623663" overrideable=true, custom_widget_id=4933503264, widget_name='Site Header (itemis)', module_id=1090671, label='Site Header (itemis)' %}</div><!--end layout-widget-wrapper -->
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+    </div><!--end header -->
+</div><!--end header wrapper -->
+
+
+
+
+
+
+<div class="body-container-wrapper">
+    <div class="body-container container-fluid">
+
+<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-cell page-center section content-wrapper" style="" data-widget-type="cell" data-x="0" data-w="12">
+
+
+{% if dynamic_page_hubdb_row %}
+
+
+
+    <div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+    <div class="row-fluid ">
+
+    <div class="span4 widget-span widget-type-raw_html sidebar-navigation-container" style="" data-widget-type="raw_html" data-x="8" data-w="4">
+    <div class="cell-wrapper layout-widget-wrapper">
+    {% widget_block raw_html "module_150227904680399" wrapping_html='', per_widget_wrapper_html='', overrideable=true, label='Custom HTML' %}
+    {% widget_attribute "value" %}<div id="sidebar-navigation">
+        <h2><span>Statechart User Guide</span> THEMES</h2>
+        <nav>
+            <ol class="nav">
+
+                {# Navigation - Kapitel 1 #}
+                {% if dynamic_page_hubdb_row.chapter == 1 %}
+                    <li class="active-branch"><span title="Introduction">Introduction</span>
+                        <ol>
+                            <li><a href="#which-licensing-rules-do-apply-to-yakindu-statechart-tools">Which licensing rules do apply to YAKINDU Statechart Tools?</a></li>
+                            <li><a href="#who-is-behind-yakindu-statechart-tools">Who is behind YAKINDU Statechart Tools?</a></li>
+                            <li><a href="#who-is-using-yakindu-statechart-tools">Who is using YAKINDU Statechart Tools?</a></li>
+                        </ol>
+                    </li>
+                {% else %}
+                    <li><a href="./introduction" title="Introduction">Introduction</a></li>
+                {% endif %}
+
+
+                {# Navigation - Kapitel 2 #}
+                {% if dynamic_page_hubdb_row.chapter == 2 %}
+                    <li class="active-branch"><span title="Editing">Editing</span>
+                        <ol>
+                            <li><a href="#creating-and-deleting-statecharts">Creating and deleting statecharts</a></li>
+                            <li><a href="#editor-ui">Editor UI</a></li>
+                            <li><a href="#editing-states-and-other-nodes">Editing states and other nodes</a></li>
+                            <li><a href="#editing-transitions">Editing transitions</a></li>
+                            <li><a href="#editing-documentation-of-states-and-transitions">Editing documentation of states and transitions</a></li>
+                            <li><a href="#editing-regions">Editing regions</a></li>
+                            <li><a href="#editing-hierarchies">Editing hierarchies</a></li>
+                            <li><a href="#using-subdiagrams">Using subdiagrams</a></li>
+                            <li><a href="#refactorings">Refactorings</a></li>
+                            <li><a href="#using-editing-proposals">Using editing proposals</a></li>
+                            <li><a href="#comparing-statecharts">Comparing statecharts</a></li>
+                            <li><a href="#exporting-a-statechart-as-an-image-file">Exporting a statechart as an image file</a></li>
+                            <li><a href="#working-with-statechart-tasks">Working with statechart tasks</a></li>
+                            <li><a href="#using-the-example_wizard">Using the example wizard</a></li>
+                            <li><a href="#preferences">Preferences</a></li>
+                        </ol>
+                    </li>
+                {% else %}
+                    <li><a href="./editing-statecharts" title="Editing">Editing</a></li>
+                {% endif %}
+
+                {# Navigation - Suche #}
+                {#
+                    <li class="search" id="navigation-search-form" data-cx="015950920325887884916:2e61oxlndni">
+                        <nav class="it-header__menu cf it-header__de hs-cta-wrapper">
+                            <input data-id="it-header__search-input" placeholder="Type here." type="search">
+                            <a href="#" class="header-tools__search-icon it_cta_button_next white">search</a>
+                        </nav>
+                    </li>
+                #}
+
+
+            </ol>
+        </nav>
+    </div>{% end_widget_attribute %}
+    {% end_widget_block %}
+    </div><!--end layout-widget-wrapper -->
+    </div><!--end widget-span -->
+
+    <div class="span8 widget-span widget-type-cell primary" style="" data-widget-type="cell" data-x="0" data-w="8">
+    
+    <div class="row-fluid-wrapper row-depth-1 row-number-3 ">
+    <div class="row-fluid ">
+    <div class="span12 widget-span widget-type-raw_html " style="" data-widget-type="raw_html" data-x="0" data-w="12">
+    <div class="cell-wrapper layout-widget-wrapper">
+    
+    
+    {% if dynamic_page_hubdb_row.chapter == 1 %}
+
+    	{# Inhalt Kapitel 1 #}
+
+    {% elif dynamic_page_hubdb_row.chapter == 2 %}
+
+        {# Inhalt Kapitel 2 #}         
+
+    {% endif %}
+
+  
+      
+    </div><!--end layout-widget-wrapper -->
+    </div><!--end widget-span -->
+    </div><!--end row-->
+    </div><!--end row-wrapper -->
+    
+    </div><!--end widget-span -->
+    
+    </div><!--end row-->
+    </div><!--end row-wrapper -->
+    
+    
+    
+    
+{% elif dynamic_page_hubdb_table_id %}
+
+    <div id="gradient-header" class="row-fluid-wrapper">
+        <div class="row-fluid">
+            {% rich_text "overview_header" label="Overview header" html='<h1>YAKINDU Statechart Tools <br /><strong>are fully documented</strong></h1><p>TBD</p>' %}
+        </div>
+    </div>
+
+    <div class="primary">
+        <div class="row-fluid-wrapper">
+            <div class="row-fluid">
+                <div class="themes-container search span4">
+                    <h2>What's your problem?</h2>
+                    <p>Can't find what you're looking for?</p>
+                    <div id="navigation-search-form" data-cx="015950920325887884916:2e61oxlndni">
+                        <nav class="it-header__menu cf it-header__de hs-cta-wrapper">
+                            <input data-id="it-header__search-input" placeholder="Type here." type="search"> <br /><br />
+                            <a href="#" class="header-tools__search-icon it_cta_button_next white">search</a>
+                        </nav>
+                    </div>
+                </div>
+
+        {% for row in hubdb_table_rows(dynamic_page_hubdb_table_id, "&chapter__gte=1&orderBy=chapter") %}
+            
+            {% if loop.index != 1 && loop.index % 3 == 0 %}
+                    </div>
+                </div>
+                <div class="row-fluid-wrapper">
+                    <div class="row-fluid">
+            {% endif %}
+            
+                    <div class="themes-container span4{% if row.pro_feature %} pro-feature{% endif %}">
+                        <a href="{{ request.path }}/{{ row.hs_path }}"><h2>{{row.hs_name}}</h2></a>
+                        <p>{{row.description}}</p>
+                        
+                        <div class="hs-cta-wrapper"><a href="{{ request.path }}/{{ row.hs_path }}" class="it_cta_button_next white">More</a></div>
+                    </div>
+            
+            
+            {% if loop.last && loop.index % 3 == 2 %}
+                    </div>
+                </div>
+                <div class="row-fluid-wrapper">
+                    <div class="row-fluid">
+            {% endif %}
+            
+        {% endfor %}
+        
+            </div>
+        </div>
+    </div>
+{% endif %}
+
+
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+    </div><!--end body -->
+</div><!--end body wrapper -->
+
+
+
+
+
+<div class="footer-container-wrapper">
+    <div class="footer-container container-fluid">
+
+		<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+		<div class="row-fluid ">
+			<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
+			{% include 'generated_global_groups/3538551352.html' %}
+			</div><!--end widget-span -->
+		</div><!--end row-->
+		</div><!--end row-wrapper -->
+
+		<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+		<div class="row-fluid ">
+			<div class="span12 widget-span widget-type-global_widget " style="" data-widget-type="global_widget" data-x="0" data-w="12">
+			<div class="cell-wrapper layout-widget-wrapper">
+			{% global_widget "new_site_javascript" overrideable=false, label='New Site Javascript' %}</div><!--end layout-widget-wrapper -->
+			</div><!--end widget-span -->
+		</div><!--end row-->
+		</div><!--end row-wrapper -->
+
+    </div><!--end footer -->
+</div><!--end footer wrapper -->
+
+    {{ standard_footer_includes }}
+
+</body>
+</html>

+ 0 - 10
plugins/org.yakindu.sct.doc.user/src/website/calltoaction.download.htmlf

@@ -1,10 +0,0 @@
-<span class="hs-cta-wrapper" id="hs-cta-wrapper-500b40d9-c019-4614-9236-be11d870e17e">
-    <span class="hs-cta-node hs-cta-500b40d9-c019-4614-9236-be11d870e17e" id="hs-cta-500b40d9-c019-4614-9236-be11d870e17e">
-        <!--[if lte IE 8]><div id="hs-cta-ie-element"></div><![endif]-->
-        <a href="http://cta-redirect.hubspot.com/cta/redirect/761475/500b40d9-c019-4614-9236-be11d870e17e" ><img class="hs-cta-img" id="hs-cta-img-500b40d9-c019-4614-9236-be11d870e17e" style="border-width:0px;" src="https://no-cache.hubspot.com/cta/default/761475/500b40d9-c019-4614-9236-be11d870e17e.png"  alt="  Download SCT"/></a>
-    </span>
-    <script charset="utf-8" src="https://js.hscta.net/cta/current.js"></script>
-    <script type="text/javascript">
-        hbspt.cta.load(761475, '500b40d9-c019-4614-9236-be11d870e17e', {});
-    </script>
-</span>

File diff suppressed because it is too large
+ 0 - 4
plugins/org.yakindu.sct.doc.user/src/website/calltoaction.download.local.files.htmlf


+ 6 - 0
plugins/org.yakindu.sct.doc.user/src/website/contents.htmlf

@@ -0,0 +1,6 @@
+
+
+        {% if dynamic_page_hubdb_row.hs_path == "${h1.id}" %}
+${h1.contents}
+
+        {% endif %}

+ 0 - 38
plugins/org.yakindu.sct.doc.user/src/website/footer.htmlf

@@ -1,38 +0,0 @@
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-    </div><!--end body -->
-</div><!--end body wrapper -->
-
-<div class="footer-container-wrapper">
-    <div class="footer-container container-fluid">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
-{% include 'generated_global_groups/3538551352.html' %}
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-raw_html " style="" data-widget-type="raw_html" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% global_widget "new_site_javascript" overrideable=false, label='New Site Javascript' %}
-</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-    </div><!--end footer -->
-</div><!--end footer wrapper -->
-
-    {{ standard_footer_includes }}
-</body>
-</html>

File diff suppressed because it is too large
+ 0 - 369
plugins/org.yakindu.sct.doc.user/src/website/footer.local.files.htmlf


+ 0 - 110
plugins/org.yakindu.sct.doc.user/src/website/header.htmlf

@@ -1,110 +0,0 @@
-<!doctype html>
-<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{ html_lang }}" {{ html_lang_dir }}> <![endif]-->
-<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="{{ html_lang }}" {{ html_lang_dir }}>        <![endif]-->
-<!--[if IE 8]>    <html class="no-js lt-ie9" lang="{{ html_lang }}" {{ html_lang_dir }}>               <![endif]-->
-<!--[if gt IE 8]><!--> <html class="no-js" lang="{{ html_lang }}" {{ html_lang_dir }}> <!--<![endif]-->
-<head>
-    <meta charset="utf-8">
-    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
-    <meta name="author" content="{{ meta_author }}">
-    <meta name="description" content="{{ page_meta.meta_description }}">
-    <title>{{ page_meta.html_title }}</title>
-    {% if site_settings.favicon_src %}<link rel="shortcut icon" href="{{ site_settings.favicon_src }}" />{% endif %}
-    <link rel="stylesheet" href="{{ get_public_template_url("custom/system/default/inbound-performance.css") }}">
-    <link rel="stylesheet" href="{{ get_public_template_url("custom/page/itemis/itemis-relaunch-2017.css") }}">
-    
-{{ standard_header_includes }}
-    {% style include_default_custom_css="true" %}
-
-</head>
-<body class="sct-docs homepage-test {{ builtin_body_classes }}" style="">
-    <div class="header-container-wrapper">
-    <div class="header-container container-fluid">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
-{% include 'generated_global_groups/3772713661.html' %}
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-custom_widget " style="" data-widget-type="custom_widget" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% custom_widget "module_1489666761477965" overrideable=true, ending_html='', starting_html='', custom_widget_id=4933503264, widget_name='Site Header (itemis)', label='Site Header (itemis)' %}</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-    </div><!--end header -->
-</div><!--end header wrapper -->
-
-<div class="body-container-wrapper">
-    <div class="body-container container-fluid">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-cell primary-section breadcrumbs" style="" data-widget-type="cell" data-x="0" data-w="12">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-menu page-center" style="" data-widget-type="menu" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% menu "module_142730340506520965" overrideable=false, cell=false, cells='[]', ending_html='', root=false, row=false, starting_html='', flow='horizontal', flyouts='true', max_levels='2', root_type='breadcrumb', site_map_name='YAKINDU Statechart tools', wrapping_html='', label='Breadcrumbs' %}</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-<div class="row-fluid-wrapper row-depth-1 row-number-3 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-cell page-center section content-wrapper" style="" data-widget-type="cell" data-x="0" data-w="12">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-4 ">
-<div class="row-fluid ">
-<div class="span4 widget-span widget-type-cell sidebar" style="" data-widget-type="cell" data-x="0" data-w="4">
-
-<div class="row-fluid-wrapper row-depth-1 row-number-5 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-social_sharing " style="" data-widget-type="social_sharing" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% widget_block social_sharing "module_14504476394501098" overrideable=true, cell=false, cells='[]', ending_html='', root=false, row=false, starting_html='', use_page_url=true, label='Social Sharing' %}
-{% widget_attribute "email" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/email-24x24.png","link_format":"mailto:?subject=Check out {{ social_link_url }} &body=Check out {{ social_link_url }}","network":"Email"}{% end_widget_attribute %}
-{% widget_attribute "facebook" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/facebook-24x24.png","link_format":"http://www.facebook.com/share.php?u={{ social_link_url }}","network":"Facebook"}{% end_widget_attribute %}
-{% widget_attribute "google_plus" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/googleplus-24x24.png","link_format":"https://plus.google.com/share?url={{ social_link_url }}","network":"Google+"}{% end_widget_attribute %}
-{% widget_attribute "linkedin" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/linkedin-24x24.png","link_format":"http://www.linkedin.com/shareArticle?mini=true&url={{ social_link_url }}","network":"LinkedIn"}{% end_widget_attribute %}
-{% widget_attribute "pinterest" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/pinterest-24x24.png","link_format":"http://pinterest.com/pin/create/button/?url={{ social_link_url }}&media={{ pinterest_media }}","network":"Pinterest","secondary_fields":[{"default":"","name":"pinterest_media","type":"image"}]}{% end_widget_attribute %}
-{% widget_attribute "twitter" is_json=True %}{"default":true,"enabled":false,"img_src":"http://info.itemis.com/hubfs/images/social-icons/twitter-24x24.png","link_format":"https://twitter.com/intent/tweet?original_referer={{ social_link_url }}&url={{ social_link_url }}&source=tweetbutton&text={{ social_page_title }}","network":"Twitter"}{% end_widget_attribute %}
-  {% end_widget_block %}
-</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-<div class="row-fluid-wrapper row-depth-1 row-number-6 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-simple_menu " style="" data-widget-type="simple_menu" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% widget_block simple_menu "module_14660785977556957" overrideable=true, cell=false, cells='[]', ending_html='', root=false, row=false, starting_html='', label='Simple Menu' %}
-  {% end_widget_block %}
-</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-<div class="row-fluid-wrapper row-depth-1 row-number-7 ">
-<div class="row-fluid ">
-<div class="span12 widget-span widget-type-cta " style="" data-widget-type="cta" data-x="0" data-w="12">
-<div class="cell-wrapper layout-widget-wrapper">
-{% cta "module_146607869290911830" overrideable=true, embed_code='null', guid='null', image_html='null', image_src='null', label='Call-to-Action' %}</div><!--end layout-widget-wrapper -->
-</div><!--end widget-span -->
-</div><!--end row-->
-</div><!--end row-wrapper -->
-
-</div><!--end widget-span -->
-<div class="span8 widget-span widget-type-widget_container primary" style="" data-widget-type="widget_container" data-x="4" data-w="8">

File diff suppressed because it is too large
+ 0 - 292
plugins/org.yakindu.sct.doc.user/src/website/header.local.files.htmlf


+ 108 - 0
plugins/org.yakindu.sct.doc.user/src/website/p1.htmlf

@@ -0,0 +1,108 @@
+<!doctype html>
+<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7" lang="{{ html_lang }}" {{ html_lang_dir }}> <![endif]-->
+<!--[if IE 7]>    <html class="no-js lt-ie9 lt-ie8" lang="{{ html_lang }}" {{ html_lang_dir }}>        <![endif]-->
+<!--[if IE 8]>    <html class="no-js lt-ie9" lang="{{ html_lang }}" {{ html_lang_dir }}>               <![endif]-->
+<!--[if gt IE 8]><!--> <html class="no-js" lang="{{ html_lang }}" {{ html_lang_dir }}> <!--<![endif]-->
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
+    <meta name="author" content="{{ meta_author }}">
+    <meta name="description" content="{% if dynamic_page_hubdb_row %}{{ dynamic_page_hubdb_row.description }}{% else %}{{ page_meta.meta_description }}{% endif %}">
+    <meta name="generator" content="HubSpot">
+    <title>{{ page_meta.html_title }}</title>
+    {% if site_settings.favicon_src %}<link rel="shortcut icon" href="{{ site_settings.favicon_src }}" />{% endif %}
+    
+    
+    {{ required_head_tags }}
+    {% style include_default_custom_css="false" %}
+
+    {% if dynamic_page_hubdb_row %}
+        <link href="{{ get_public_template_url("Custom/page/itemis/it-yakindu-docs-detail.css") }}" rel="stylesheet" type="text/css">
+        
+        <style>
+            .body-container .primary h1 {
+                counter-increment: h1 +{{dynamic_page_hubdb_row.chapter - 1}};
+            }
+        </style>
+        <script type="text/javascript" src="{{ get_public_template_url("custom/page/itemis/bootstrap-anchor.js") }}"></script>
+        <script type="text/javascript">
+        jQuery(document).ready(function() {
+            jQuery('#sidebar-navigation').sticky({topSpacing: 100, bottomSpacing: 300});
+            
+            jQuery('.body-container #sidebar-navigation .nav .active-branch > span').on('click', function() {
+                jQuery(this).next('ol').toggle();
+            });
+
+            jQuery('body').css('position', 'relative').scrollspy({target: "#sidebar-navigation", offset: 150});
+        });
+        </script>
+        
+    {% elif dynamic_page_hubdb_table_id %}
+        <link href="{{ get_public_template_url("Custom/page/itemis/it-yakindu-docs-overview.css") }}" rel="stylesheet" type="text/css">
+        
+        <script type="text/javascript">
+        jQuery(window).on("load", function() {
+            jQuery('.primary .row-fluid').equalize({equalize: 'outerHeight', children: '.themes-container', reset: true});
+        
+            jQuery( window ).resize(function() {
+                jQuery('.primary .row-fluid').equalize({equalize: 'outerHeight', children: '.themes-container', reset: true});
+            });
+        });
+        </script>
+    {% endif %}
+
+
+    {{ user_head_overrides }}
+</head>
+<body class="homepage-test sct-docs {{ builtin_body_classes }}" style="">
+    
+    <div class="header-container-wrapper">
+    <div class="header-container container-fluid">
+
+<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
+{% include 'generated_global_groups/3772713661.html' %}
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-custom_widget " style="" data-widget-type="custom_widget" data-x="0" data-w="12">
+<div class="cell-wrapper layout-widget-wrapper">
+{% custom_widget "module_1489660201623663" overrideable=true, custom_widget_id=4933503264, widget_name='Site Header (itemis)', module_id=1090671, label='Site Header (itemis)' %}</div><!--end layout-widget-wrapper -->
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+    </div><!--end header -->
+</div><!--end header wrapper -->
+
+
+
+
+
+
+<div class="body-container-wrapper">
+    <div class="body-container container-fluid">
+
+<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+<div class="row-fluid ">
+<div class="span12 widget-span widget-type-cell page-center section content-wrapper" style="" data-widget-type="cell" data-x="0" data-w="12">
+
+
+{% if dynamic_page_hubdb_row %}
+
+
+
+    <div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+    <div class="row-fluid ">
+    <div class="span4 widget-span widget-type-raw_html sidebar-navigation-container" style="" data-widget-type="raw_html" data-x="8" data-w="4">
+    <div class="cell-wrapper layout-widget-wrapper">
+    {% widget_block raw_html "module_150227904680399" wrapping_html='', per_widget_wrapper_html='', overrideable=true, label='Custom HTML' %}
+    {% widget_attribute "value" %}<div id="sidebar-navigation">
+        <h2><span>Statechart User Guide</span> THEMES</h2>
+        <nav>
+            <ol class="nav">
+

+ 25 - 0
plugins/org.yakindu.sct.doc.user/src/website/p2.htmlf

@@ -0,0 +1,25 @@
+
+                {# Navigation - Suche #}
+                {#
+                    <li class="search" id="navigation-search-form" data-cx="015950920325887884916:2e61oxlndni">
+                        <nav class="it-header__menu cf it-header__de hs-cta-wrapper">
+                            <input data-id="it-header__search-input" placeholder="Type here." type="search">
+                            <a href="#" class="header-tools__search-icon it_cta_button_next white">search</a>
+                        </nav>
+                    </li>
+                #}
+
+
+            </ol>
+        </nav>
+    </div>{% end_widget_attribute %}
+    {% end_widget_block %}
+    </div><!--end layout-widget-wrapper -->
+    </div><!--end widget-span -->
+
+    <div class="span8 widget-span widget-type-cell primary" style="" data-widget-type="cell" data-x="0" data-w="8">
+    
+    <div class="row-fluid-wrapper row-depth-1 row-number-3 ">
+    <div class="row-fluid ">
+    <div class="span12 widget-span widget-type-raw_html " style="" data-widget-type="raw_html" data-x="0" data-w="12">
+    <div class="cell-wrapper layout-widget-wrapper">

+ 106 - 0
plugins/org.yakindu.sct.doc.user/src/website/p3.htmlf

@@ -0,0 +1,106 @@
+      
+    </div><!--end layout-widget-wrapper -->
+    </div><!--end widget-span -->
+    </div><!--end row-->
+    </div><!--end row-wrapper -->
+    
+    </div><!--end widget-span -->
+    
+    </div><!--end row-->
+    </div><!--end row-wrapper -->
+    
+    
+    
+    
+{% elif dynamic_page_hubdb_table_id %}
+
+    <div id="gradient-header" class="row-fluid-wrapper">
+        <div class="row-fluid">
+            {% rich_text "overview_header" label="Overview header" html='<h1>YAKINDU Statechart Tools <br /><strong>are fully documented</strong></h1><p>TBD</p>' %}
+        </div>
+    </div>
+
+    <div class="primary">
+        <div class="row-fluid-wrapper">
+            <div class="row-fluid">
+                <div class="themes-container search span4">
+                    <h2>What's your problem?</h2>
+                    <p>Can't find what you're looking for?</p>
+                    <div id="navigation-search-form" data-cx="015950920325887884916:2e61oxlndni">
+                        <nav class="it-header__menu cf it-header__de hs-cta-wrapper">
+                            <input data-id="it-header__search-input" placeholder="Type here." type="search"> <br /><br />
+                            <a href="#" class="header-tools__search-icon it_cta_button_next white">search</a>
+                        </nav>
+                    </div>
+                </div>
+
+        {% for row in hubdb_table_rows(dynamic_page_hubdb_table_id, "&chapter__gte=1&orderBy=chapter") %}
+            
+            {% if loop.index != 1 && loop.index % 3 == 0 %}
+                    </div>
+                </div>
+                <div class="row-fluid-wrapper">
+                    <div class="row-fluid">
+            {% endif %}
+            
+                    <div class="themes-container span4{% if row.pro_feature %} pro-feature{% endif %}">
+                        <a href="{{ request.path }}/{{ row.hs_path }}"><h2>{{row.hs_name}}</h2></a>
+                        <p>{{row.description}}</p>
+                        
+                        <div class="hs-cta-wrapper"><a href="{{ request.path }}/{{ row.hs_path }}" class="it_cta_button_next white">More</a></div>
+                    </div>
+            
+            
+            {% if loop.last && loop.index % 3 == 2 %}
+                    </div>
+                </div>
+                <div class="row-fluid-wrapper">
+                    <div class="row-fluid">
+            {% endif %}
+            
+        {% endfor %}
+        
+            </div>
+        </div>
+    </div>
+{% endif %}
+
+
+</div><!--end widget-span -->
+</div><!--end row-->
+</div><!--end row-wrapper -->
+
+    </div><!--end body -->
+</div><!--end body wrapper -->
+
+
+
+
+
+<div class="footer-container-wrapper">
+    <div class="footer-container container-fluid">
+
+		<div class="row-fluid-wrapper row-depth-1 row-number-1 ">
+		<div class="row-fluid ">
+			<div class="span12 widget-span widget-type-global_group " style="" data-widget-type="global_group" data-x="0" data-w="12">
+			{% include 'generated_global_groups/3538551352.html' %}
+			</div><!--end widget-span -->
+		</div><!--end row-->
+		</div><!--end row-wrapper -->
+
+		<div class="row-fluid-wrapper row-depth-1 row-number-2 ">
+		<div class="row-fluid ">
+			<div class="span12 widget-span widget-type-global_widget " style="" data-widget-type="global_widget" data-x="0" data-w="12">
+			<div class="cell-wrapper layout-widget-wrapper">
+			{% global_widget "new_site_javascript" overrideable=false, label='New Site Javascript' %}</div><!--end layout-widget-wrapper -->
+			</div><!--end widget-span -->
+		</div><!--end row-->
+		</div><!--end row-wrapper -->
+
+    </div><!--end footer -->
+</div><!--end footer wrapper -->
+
+    {{ standard_footer_includes }}
+
+</body>
+</html>

+ 7 - 0
plugins/org.yakindu.sct.doc.user/src/website/toc.htmlf

@@ -0,0 +1,7 @@
+                {% if dynamic_page_hubdb_row.hs_path == "${h1.id}" %}
+                    <li class="active-branch"><span title="${h1.title}">${h1.title}</span>
+                        <ol>${h2.toc}</ol>
+                    </li>
+                {% else %}
+                    <li><a href="./${h1.id}" title="${h1.title}">${h1.title}</a></li>
+                {% endif %}

+ 0 - 1
plugins/org.yakindu.sct.doc.user/toc.xml

@@ -14,7 +14,6 @@
     <topic label="User Guide">
         <link toc="help/user-guide/editing_statecharts-toc.xml"/>
         <link toc="help/user-guide/simulating_statecharts-toc.xml"/>
-        <link toc="help/user-guide/advanced_simulation-toc.xml"/>
         <link toc="help/user-guide/c-domain-toc.xml"/>
         <link toc="help/user-guide/typescript-domain-toc.xml"/>
         <link toc="help/user-guide/statechart_language-toc.xml"/>