build.xml 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project default="generate.all"
  3. basedir="."
  4. name="org.yakindu.sct.doc.user"
  5. xmlns:if="ant:if"
  6. xmlns:unless="ant:unless"
  7. xmlns:artifact="antlib:org.eclipse.aether.ant">
  8. <!-- Runtime properties:
  9. website.local.files: Generates website as local files
  10. -->
  11. <!-- Include platform-specific or machine-specific properties, if any. -->
  12. <property file="local.properties" />
  13. <!-- The documentation source files located beneath this directory.
  14. They may be structured into folders of arbitrary depth. -->
  15. <property name="src.dir" value="src" />
  16. <!-- CSS files are located here. -->
  17. <property name="css.dir" value="css" />
  18. <!-- Root CSS file to be referenced by the generated HTML files. -->
  19. <property name="css.root.file" value="style.css" />
  20. <!-- Image files reside in subdirectories with the following name: -->
  21. <property name="img.dir" value="images" />
  22. <!-- Target directories for various output formats: -->
  23. <property name="help.dir" value="help" />
  24. <property name="website.dir" value="website" />
  25. <property name="pdf.dir" value="pdf" />
  26. <property name="epub.dir" value="epub" />
  27. <!-- Libraries used by various Ant tasks are located here: -->
  28. <property name="lib.dir" location="${basedir}/lib" />
  29. <!-- Aether Ant Tasks configuration -->
  30. <property name="aether.jar.version" value="1.0.0.v20140518" />
  31. <property name="aether.jar.checksum"
  32. value="9008c0c96390eacc0f7fdde542dacbd921f942dcd5c139465e21f8b583942edb995304025bb436cfeeea0b89698ef9dfccf8a027da68cd079669adea8cca381f" />
  33. <property name="aether.jar.src"
  34. value="http://search.maven.org/remotecontent?filepath=org/eclipse/aether/aether-ant-tasks/${aether.jar.version}/aether-ant-tasks-${aether.jar.version}-uber.jar" />
  35. <property name="aether.jar.file" value="${lib.dir}/aether-ant-tasks-uber.jar" />
  36. <!-- Wikitext download configuration -->
  37. <property name="wikitext.zip.version" value="1.0.0.v20140518" />
  38. <property name="wikitext.zip.checksum"
  39. value="00d8bf79a9d7baf20e46d2435dd4b6a9963317a2737c731d11029c96aa86f64e8540639b6eefa6f04b8103860f47ff74e998c71b57445179dc20ad7c2847417c" />
  40. <!--
  41. <property name="wikitext.zip.src"
  42. value="http://www.eclipse.org/downloads/download.php?file=/mylyn/snapshots/nightly/docs/wikitext-standalone-latest.zip" />
  43. -->
  44. <property name="wikitext.zip.src" value="file:///${basedir}/externals/wikitext.zip" />
  45. <property name="wikitext.zip.file" value="${lib.dir}/wikitext.zip" />
  46. <property name="wikitext.basename" value="wikitext-standalone" />
  47. <property name="wikitext.version" value="2.8.0-SNAPSHOT" />
  48. <!-- Remove generated stuff: -->
  49. <target name="clean">
  50. <delete includeemptydirs="true" failonerror="false">
  51. <fileset dir="${basedir}" defaultexcludes="false">
  52. <include name="${help.dir}/**" />
  53. <include name="${website.dir}/**" />
  54. <include name="${pdf.dir}/**" />
  55. <include name="${epub.dir}/**" />
  56. </fileset>
  57. <fileset dir="${src-merged.dir}" />
  58. </delete>
  59. </target>
  60. <!-- Download and unpack the wikitext standalone distribution. Unfortunately it is currently available as a nightly build only. -->
  61. <target name="wikitext.download" description="Download and unpack the wikitext standalone distribution.">
  62. <condition property="wikitext.zip.file.exists">
  63. <and>
  64. <available file="${wikitext.zip.file}" />
  65. <checksum file="${wikitext.zip.file}"
  66. algorithm="SHA-512"
  67. property="${wikitext.zip.checksum}"
  68. verifyproperty="checksum.matches" />
  69. </and>
  70. </condition>
  71. <sequential unless:set="wikitext.zip.file.exists">
  72. <mkdir dir="${lib.dir}" />
  73. <get src="${wikitext.zip.src}"
  74. dest="${wikitext.zip.file}"
  75. skipexisting="false"
  76. usetimestamp="true"
  77. verbose="true" />
  78. <fail message="Checksum mismatch for ${wikitext.zip.file}. Please delete it and rerun ant to redownload.">
  79. <condition>
  80. <not>
  81. <checksum file="${wikitext.zip.file}"
  82. algorithm="SHA-512"
  83. property="${wikitext.zip.checksum}"
  84. verifyproperty="checksum.matches" />
  85. </not>
  86. </condition>
  87. </fail>
  88. <unzip dest="${lib.dir}" src="${wikitext.zip.file}" />
  89. </sequential>
  90. </target>
  91. <!-- Resolves the necessary dependencies: -->
  92. <target name="init.wikitext"
  93. description="Resolves the necessary wikitext dependencies."
  94. depends="wikitext.download">
  95. <property name="wikitext.dir" location="${lib.dir}/${wikitext.basename}-${wikitext.version}" />
  96. <path id="wikitext.classpath">
  97. <fileset dir="${wikitext.dir}">
  98. <include name="*.jar" />
  99. </fileset>
  100. </path>
  101. </target>
  102. <!-- Generates the documentation in all supported formats. -->
  103. <target name="generate.all"
  104. description="Generates the documentation in all supported formats."
  105. depends="generate.eclipsehelp, generate.website" />
  106. <!-- Generates the documentation as Eclipse help. -->
  107. <target name="generate.eclipsehelp"
  108. description="Generates the documentation as separate Eclipse help (HTML) files from their respective textile (wikitext) sources."
  109. depends="init.wikitext">
  110. <sequential>
  111. <taskdef classpathref="wikitext.classpath"
  112. resource="org/eclipse/mylyn/wikitext/core/ant/tasks.properties" />
  113. <!-- Textile source files to turn into HTML: -->
  114. <fileset id="fileset.eclipsehelp" dir="${src.dir}">
  115. <include name="installation/installation.textile" />
  116. <include name="tutorials/tutorials.textile" />
  117. <include name="user-guide/overview.textile" />
  118. <include name="user-guide/editing_statecharts.textile" />
  119. <include name="user-guide/simulating_statecharts.textile" />
  120. <include name="user-guide/advanced_simulation.textile" />
  121. <include name="user-guide/c-domain.textile" />
  122. <include name="user-guide/typescript-domain.textile" />
  123. <include name="user-guide/statechart_language.textile" />
  124. <include name="user-guide/generating_code.textile" />
  125. <include name="user-guide/generating_code_headless.textile" />
  126. <include name="user-guide/sctunit.textile" />
  127. <!-- <include name="user-guide/glossary.textile" /> -->
  128. </fileset>
  129. <!-- Check whether we have all the expected textile source files – no more, no less: -->
  130. <fail message="Number of textile source file(s) doesn't match.">
  131. <condition>
  132. <resourcecount refid="fileset.eclipsehelp" when="ne" count="12" />
  133. </condition>
  134. </fail>
  135. <!-- Convert textile source files to HTML: -->
  136. <wikitext-to-eclipse-help markupLanguage="Textile"
  137. multipleOutputFiles="false"
  138. navigationImages="true"
  139. formatoutput="true"
  140. validate="true"
  141. failOnValidationError="true"
  142. failOnValidationWarning="true"
  143. sourceEncoding="UTF-8"
  144. title="YAKINDU Statechart Tools"
  145. helpPrefix="${help.dir}">
  146. <fileset refid="fileset.eclipsehelp" />
  147. <stylesheet url="../${css.dir}/${css.root.file}" />
  148. </wikitext-to-eclipse-help>
  149. <!-- Files have been generated in the source directory, which is bad practice. Move them to the destination
  150. directory: -->
  151. <move todir="${help.dir}" flatten="no" verbose="no">
  152. <fileset dir="${src.dir}">
  153. <include name="**/*.html" />
  154. <include name="**/*-toc.xml" />
  155. </fileset>
  156. </move>
  157. <!-- Add HTML META element for Internet Explorer :-( -->
  158. <replaceregexp byline="false"
  159. match='(\s*)(&lt;title&gt;)'
  160. replace='\1&lt;meta http-equiv="X-UA-Compatible" content="IE=edge"/&gt;\1\2'>
  161. <fileset dir="${help.dir}">
  162. <include name="**/*.html" />
  163. </fileset>
  164. </replaceregexp>
  165. <!-- Add HTML META element to support viewport scaling -->
  166. <replaceregexp byline="false"
  167. match='(\s*)(&lt;title&gt;)'
  168. replace='\1&lt;meta name="viewport" content="width=device-width, initial-scale=1.0"/&gt;\1\2'>
  169. <fileset dir="${help.dir}">
  170. <include name="**/*.html" />
  171. </fileset>
  172. </replaceregexp>
  173. <!-- Add CSS classes "eclipsehelp" and "body-container" to BODY element and
  174. nest a DIV child with CSS class "primary" into the BODY element. -->
  175. <replaceregexp byline="true"
  176. match='&lt;body&gt;'
  177. replace='&lt;body class="eclipsehelp body-container"&gt;&lt;div class="primary"&gt;'>
  178. <fileset dir="${help.dir}">
  179. <include name="**/*.html" />
  180. </fileset>
  181. </replaceregexp>
  182. <replaceregexp byline="true" match='&lt;/body&gt;' replace='&lt;/div&gt;&lt;/body&gt;'>
  183. <fileset dir="${help.dir}">
  184. <include name="**/*.html" />
  185. </fileset>
  186. </replaceregexp>
  187. <!-- Fix DIV elements -->
  188. <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;div(.*)&gt;&lt;/p&gt;' replace='&lt;div\1&gt;'>
  189. <fileset dir="${help.dir}">
  190. <include name="**/*.html" />
  191. </fileset>
  192. </replaceregexp>
  193. <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;/div&gt;&lt;/p&gt;' replace='&lt;/div&gt;'>
  194. <fileset dir="${help.dir}">
  195. <include name="**/*.html" />
  196. </fileset>
  197. </replaceregexp>
  198. <!-- Validate the generated and modified HTML: -->
  199. <xmlvalidate failonerror="yes" lenient="yes" warn="no">
  200. <fileset dir="${help.dir}" includes="**/*.html" />
  201. <attribute name="http://xml.org/sax/features/validation" value="false" />
  202. <attribute name="http://apache.org/xml/features/validation/schema" value="false" />
  203. <attribute name="http://apache.org/xml/features/validation/schema-full-checking" value="false" />
  204. <attribute name="http://apache.org/xml/features/validation/warn-on-undeclared-elemdef" value="false" />
  205. <attribute name="http://apache.org/xml/features/validation/dynamic" value="false" />
  206. <attribute name="http://apache.org/xml/features/nonvalidating/load-dtd-grammar" value="false" />
  207. <attribute name="http://apache.org/xml/features/nonvalidating/load-external-dtd" value="false" />
  208. <attribute name="http://xml.org/sax/features/namespaces" value="false" />
  209. <attribute name="http://xml.org/sax/features/external-general-entities" value="false" />
  210. <attribute name="http://xml.org/sax/features/external-parameter-entities" value="false" />
  211. <attribute name="http://xml.org/sax/features/resolve-dtd-uris" value="false" />
  212. <attribute name="http://xml.org/sax/features/use-entity-resolver2" value="false" />
  213. <attribute name="http://xml.org/sax/features/namespace-prefixes" value="false" />
  214. <attribute name="http://xml.org/sax/features/namespaces" value="false" />
  215. </xmlvalidate>
  216. <!-- Copy the CSS files to the destination directory: -->
  217. <copy todir="${help.dir}/${css.dir}">
  218. <fileset dir="${css.dir}">
  219. <include name="*" />
  220. </fileset>
  221. </copy>
  222. <!-- Copy the image files to the destination directory: -->
  223. <copy todir="${help.dir}">
  224. <fileset dir="src">
  225. <include name="**/${img.dir}/*" />
  226. <exclude name="**/${img.dir}/*.xcf" />
  227. </fileset>
  228. </copy>
  229. </sequential>
  230. </target>
  231. <!-- Generates the documentation as various HTML files, each being composed of selected sections. Each part has a
  232. name and a title, and consists of a set of source files. The generated documentation structure looks like this:
  233. website
  234. YCST-installation.html
  235. YCST-user-guide.html
  236. YCST-tutorials.html
  237. css/yakindu.css
  238. css/ysct.css
  239. images/…
  240. -->
  241. <target name="generate.website"
  242. 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."
  243. depends="init.wikitext">
  244. <sequential>
  245. <taskdef classpathref="wikitext.classpath"
  246. resource="org/eclipse/mylyn/wikitext/core/ant/tasks.properties" />
  247. <!-- Installation Guide -->
  248. <create-website-part name="YSCT-installation" title="YAKINDU Statechart Tools Installation Guide">
  249. <textile-files>
  250. <filelist dir="${src.dir}">
  251. <file name="installation/installation.textile" />
  252. </filelist>
  253. </textile-files>
  254. <image-files>
  255. <fileset dir="${src.dir}">
  256. <include name="installation/images/**/*" />
  257. </fileset>
  258. </image-files>
  259. </create-website-part>
  260. <!-- Tutorials -->
  261. <create-website-part name="YSCT-tutorials" title="YAKINDU Statechart Tools Tutorials">
  262. <textile-files>
  263. <filelist dir="${src.dir}">
  264. <file name="tutorials/tutorials.textile" />
  265. </filelist>
  266. </textile-files>
  267. <image-files>
  268. <fileset dir="${src.dir}">
  269. <include name="tutorials/images/**/*" />
  270. </fileset>
  271. </image-files>
  272. </create-website-part>
  273. <!-- User Guide -->
  274. <create-website-part name="YSCT-user-guide" title="YAKINDU Statechart Tools User Guide">
  275. <textile-files>
  276. <filelist dir="${src.dir}">
  277. <file name="user-guide/overview.textile" />
  278. <file name="user-guide/editing_statecharts.textile" />
  279. <file name="user-guide/simulating_statecharts.textile" />
  280. <file name="user-guide/advanced_simulation.textile" />
  281. <file name="user-guide/c-domain.textile" />
  282. <file name="user-guide/typescript-domain.textile" />
  283. <file name="user-guide/statechart_language.textile" />
  284. <file name="user-guide/generating_code.textile" />
  285. <file name="user-guide/generating_code_headless.textile" />
  286. <file name="user-guide/sctunit.textile" />
  287. <file name="user-guide/glossary.textile" />
  288. </filelist>
  289. </textile-files>
  290. <image-files>
  291. <fileset dir="${src.dir}">
  292. <include name="user-guide/images/**/*" />
  293. </fileset>
  294. </image-files>
  295. </create-website-part>
  296. </sequential>
  297. </target>
  298. <!-- Creates a certain part of the HTML documentation for the website. -->
  299. <macrodef name="create-website-part"
  300. description="Creates a certain part of the HTML documentation for the website.">
  301. <attribute name="name" />
  302. <attribute name="title" />
  303. <element name="textile-files" />
  304. <element name="image-files" />
  305. <sequential>
  306. <!-- The directory for this particular part of the HTML documentation: -->
  307. <local name="work.dir" />
  308. <property name="work.dir" location="${website.dir}" />
  309. <!-- The names of the concatenated documentation files: -->
  310. <local name="index.textile" />
  311. <property name="index.textile" value="@{name}.textile" />
  312. <local name="index.html" />
  313. <property name="index.html" value="@{name}.html" />
  314. <!-- Append those source files that make up the particular piece of documentation: -->
  315. <mkdir dir="${work.dir}" />
  316. <concat destfile="${work.dir}/${index.textile}"
  317. append="false"
  318. overwrite="true"
  319. encoding="UTF-8"
  320. outputencoding="UTF-8"
  321. fixlastline="true"
  322. binary="false"
  323. ignoreempty="true">
  324. <textile-files />
  325. </concat>
  326. <!-- Convert textile source files to HTML: -->
  327. <wikitext-to-html markupLanguage="Textile"
  328. multipleOutputFiles="false"
  329. navigationImages="true"
  330. formatoutput="true"
  331. validate="true"
  332. xhtmlStrict="true"
  333. overwrite="true"
  334. failOnValidationError="true"
  335. failOnValidationWarning="false"
  336. sourceEncoding="UTF-8"
  337. title="@{title}">
  338. <fileset dir="${work.dir}">
  339. <include name="${index.textile}" />
  340. </fileset>
  341. <stylesheet url="${css.dir}/${css.root.file}" />
  342. </wikitext-to-html>
  343. <!-- Load website fragments: -->
  344. <sequential unless:set="website.local.files">
  345. <loadfile property="website.header" srcFile="${src.dir}/website/header.htmlf" encoding="UTF-8" />
  346. <loadfile property="website.footer" srcFile="${src.dir}/website/footer.htmlf" encoding="UTF-8" />
  347. <loadfile property="website.calltoaction.download"
  348. srcFile="${src.dir}/website/calltoaction.download.htmlf"
  349. encoding="UTF-8" />
  350. </sequential>
  351. <!-- Load fragments for generating local files which should look simular to the website: -->
  352. <sequential if:set="website.local.files">
  353. <loadfile property="website.header"
  354. srcFile="${src.dir}/website/header.local.files.htmlf"
  355. encoding="UTF-8" />
  356. <loadfile property="website.footer"
  357. srcFile="${src.dir}/website/footer.local.files.htmlf"
  358. encoding="UTF-8" />
  359. <loadfile property="website.calltoaction.download"
  360. srcFile="${src.dir}/website/calltoaction.download.local.files.htmlf"
  361. encoding="UTF-8" />
  362. </sequential>
  363. <!-- Replace "<pre><code>" durch "<pre class="prettyprint"><code>": -->
  364. <replaceregexp byline="false"
  365. flags="g"
  366. match='&lt;pre&gt;&lt;code&gt;'
  367. replace='&lt;pre class="prettyprint"&gt;&lt;code&gt;'>
  368. <fileset dir="${work.dir}">
  369. <include name="${index.html}" />
  370. </fileset>
  371. </replaceregexp>
  372. <!-- Replace relative image links by absolute ones for the website, unless we are generating local files: -->
  373. <replaceregexp byline="false"
  374. flags="g"
  375. match='src="images/'
  376. replace='src="http://info.itemis.com/hubfs/yakindu/statechart-tools/documentation/images/'
  377. unless:set="website.local.files">
  378. <fileset dir="${work.dir}">
  379. <include name="${index.html}" />
  380. </fileset>
  381. </replaceregexp>
  382. <!-- Replace everything up to and including "<body>" by website-specific header: -->
  383. <replaceregexp byline="false" flags="s" replace="${website.header}">
  384. <regexp pattern="^(.*)&lt;body&gt;" />
  385. <fileset dir="${work.dir}">
  386. <include name="${index.html}" />
  387. </fileset>
  388. </replaceregexp>
  389. <!-- Replace everything from and including "</body>" by website-specific footer: -->
  390. <replaceregexp byline="false" flags="s" replace="${website.footer}">
  391. <regexp pattern="&lt;/body&gt;(.*)$" />
  392. <fileset dir="${work.dir}">
  393. <include name="${index.html}" />
  394. </fileset>
  395. </replaceregexp>
  396. <!-- If the generated code contains a table with the ID "updaterepositories", replace it by a
  397. "call-to-action" button on the website: -->
  398. <replaceregexp byline="false" flags="s" replace="${website.calltoaction.download}">
  399. <regexp pattern='&lt;table id="updaterepositories"&gt;.*&lt;/table&gt;' />
  400. <fileset dir="${work.dir}">
  401. <include name="${index.html}" />
  402. </fileset>
  403. </replaceregexp>
  404. <!-- Fix links: -->
  405. <adjust-website-document-links document.dir.name="tutorials"
  406. work.dir="${work.dir}"
  407. html.file="${index.html}" />
  408. <adjust-website-document-links document.dir.name="user-guide"
  409. work.dir="${work.dir}"
  410. html.file="${index.html}" />
  411. <adjust-website-document-links document.dir.name="installation"
  412. work.dir="${work.dir}"
  413. html.file="${index.html}" />
  414. <!-- Fix "pro-feature" elements -->
  415. <replaceregexp byline="false"
  416. flags="g"
  417. match='&lt;p&gt;&lt;div class="pro-feature"&gt;&lt;/p&gt;'
  418. replace='&lt;div class="pro-feature"&gt;'>
  419. <fileset dir="${work.dir}">
  420. <include name="${index.html}" />
  421. </fileset>
  422. </replaceregexp>
  423. <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;/div&gt;&lt;/p&gt;' replace='&lt;/div&gt;'>
  424. <fileset dir="${work.dir}">
  425. <include name="${index.html}" />
  426. </fileset>
  427. </replaceregexp>
  428. <!-- Copy the CSS files to the destination directory: -->
  429. <copy todir="${work.dir}/${css.dir}">
  430. <fileset dir="${css.dir}">
  431. <include name="*" />
  432. </fileset>
  433. </copy>
  434. <!-- Copy the image files to the destination directory: -->
  435. <copy todir="${work.dir}/${img.dir}" flatten="yes">
  436. <image-files />
  437. </copy>
  438. <!-- The textile source file is no longer needed in the website directory. Remove it: -->
  439. <delete includeemptydirs="true" failonerror="false">
  440. <fileset dir="${website.dir}" defaultexcludes="false">
  441. <include name="${index.textile}" />
  442. </fileset>
  443. </delete>
  444. </sequential>
  445. </macrodef>
  446. <!-- Adjusts links in the generated HTML document for either the website or a local equivalent. -->
  447. <macrodef name="adjust-website-document-links"
  448. description="Adjusts links in the generated HTML document for either the website or a local equivalent.">
  449. <attribute name="work.dir" />
  450. <attribute name="html.file" />
  451. <attribute name="document.dir.name" />
  452. <sequential>
  453. <replaceregexp byline="false"
  454. flags="g"
  455. match='&lt;a href="(\.\./@{document.dir.name})/.+\.html(.*)"&gt;'
  456. replace='&lt;a href="\1/\2"&gt;'
  457. unless:set="website.local.files">
  458. <fileset dir="@{work.dir}">
  459. <include name="@{html.file}" />
  460. </fileset>
  461. </replaceregexp>
  462. <replaceregexp byline="false"
  463. flags="g"
  464. match='&lt;a href="\.\.(/@{document.dir.name})/.+\.html(.*)"&gt;'
  465. replace='&lt;a href="YSCT-@{document.dir.name}.html\2"&gt;'
  466. if:set="website.local.files">
  467. <fileset dir="@{work.dir}">
  468. <include name="@{html.file}" />
  469. </fileset>
  470. </replaceregexp>
  471. </sequential>
  472. </macrodef>
  473. </project>