build.xml 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  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/statechart_language.textile" />
  123. <include name="user-guide/generating_code.textile" />
  124. <include name="user-guide/sctunit.textile" />
  125. </fileset>
  126. <!-- Check whether we have all the expected textile source files – no more, no less: -->
  127. <fail message="Number of textile source file(s) doesn't match.">
  128. <condition>
  129. <resourcecount refid="fileset.eclipsehelp" when="ne" count="10" />
  130. </condition>
  131. </fail>
  132. <!-- Convert textile source files to HTML: -->
  133. <wikitext-to-eclipse-help markupLanguage="Textile"
  134. multipleOutputFiles="false"
  135. navigationImages="true"
  136. formatoutput="true"
  137. validate="true"
  138. failOnValidationError="true"
  139. failOnValidationWarning="true"
  140. sourceEncoding="UTF-8"
  141. title="YAKINDU Statechart Tools"
  142. helpPrefix="${help.dir}">
  143. <fileset refid="fileset.eclipsehelp" />
  144. <stylesheet url="../${css.dir}/${css.root.file}" />
  145. </wikitext-to-eclipse-help>
  146. <!-- Files have been generated in the source directory, which is bad practice. Move them to the destination
  147. directory: -->
  148. <move todir="${help.dir}" flatten="no" verbose="no">
  149. <fileset dir="${src.dir}">
  150. <include name="**/*.html" />
  151. <include name="**/*-toc.xml" />
  152. </fileset>
  153. </move>
  154. <!-- Add HTML META element for Internet Explorer :-( -->
  155. <replaceregexp byline="false"
  156. match='(\s*)(&lt;title&gt;)'
  157. replace='\1&lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;\1\2'>
  158. <fileset dir="${help.dir}">
  159. <include name="**/*.html" />
  160. </fileset>
  161. </replaceregexp>
  162. <!-- Add CSS classes "eclipsehelp" and "body-container" to BODY element -->
  163. <replaceregexp byline="true" match='&lt;body&gt;' replace='&lt;body class="eclipsehelp body-container"&gt;'>
  164. <fileset dir="${help.dir}">
  165. <include name="**/*.html" />
  166. </fileset>
  167. </replaceregexp>
  168. <!-- Fix "pro-feature" DIV elements -->
  169. <replaceregexp byline="false"
  170. flags="g"
  171. match='&lt;p&gt;&lt;div class="pro-feature"&gt;&lt;/p&gt;'
  172. replace='&lt;div class="pro-feature"&gt;'>
  173. <fileset dir="${help.dir}">
  174. <include name="**/*.html" />
  175. </fileset>
  176. </replaceregexp>
  177. <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;/div&gt;&lt;/p&gt;' replace='&lt;/div&gt;'>
  178. <fileset dir="${help.dir}">
  179. <include name="**/*.html" />
  180. </fileset>
  181. </replaceregexp>
  182. <!-- Copy the CSS files to the destination directory: -->
  183. <copy todir="${help.dir}/${css.dir}">
  184. <fileset dir="${css.dir}">
  185. <include name="*" />
  186. </fileset>
  187. </copy>
  188. <!-- Copy the image files to the destination directory: -->
  189. <copy todir="${help.dir}">
  190. <fileset dir="src">
  191. <include name="**/${img.dir}/*" />
  192. <exclude name="**/${img.dir}/*.xcf" />
  193. </fileset>
  194. </copy>
  195. </sequential>
  196. </target>
  197. <!-- Generates the documentation as various HTML files, each being composed of selected sections. Each part has a
  198. name and a title, and consists of a set of source files. The generated documentation structure looks like this:
  199. website
  200. YCST-installation.html
  201. YCST-user-guide.html
  202. YCST-tutorials.html
  203. css/style.css
  204. images/…
  205. -->
  206. <target name="generate.website"
  207. description="Generates the documentation as various HTML files for the website, each being composed of selected sections."
  208. depends="init.wikitext">
  209. <sequential>
  210. <taskdef classpathref="wikitext.classpath"
  211. resource="org/eclipse/mylyn/wikitext/core/ant/tasks.properties" />
  212. <!-- Installation Guide -->
  213. <create-website-part name="YSCT-installation" title="YAKINDU Statechart Tools Installation Guide">
  214. <textile-files>
  215. <filelist dir="${src.dir}">
  216. <file name="installation/installation.textile" />
  217. </filelist>
  218. </textile-files>
  219. <image-files>
  220. <fileset dir="${src.dir}">
  221. <include name="installation/images/**/*" />
  222. </fileset>
  223. </image-files>
  224. </create-website-part>
  225. <!-- Tutorials -->
  226. <create-website-part name="YSCT-tutorials" title="YAKINDU Statechart Tools Tutorials">
  227. <textile-files>
  228. <filelist dir="${src.dir}">
  229. <file name="tutorials/tutorials.textile" />
  230. </filelist>
  231. </textile-files>
  232. <image-files>
  233. <fileset dir="${src.dir}">
  234. <include name="tutorials/images/**/*" />
  235. </fileset>
  236. </image-files>
  237. </create-website-part>
  238. <!-- User Guide -->
  239. <create-website-part name="YSCT-user-guide" title="YAKINDU Statechart Tools User Guide">
  240. <textile-files>
  241. <filelist dir="${src.dir}">
  242. <file name="user-guide/overview.textile" />
  243. <file name="user-guide/editing_statecharts.textile" />
  244. <file name="user-guide/simulating_statecharts.textile" />
  245. <file name="user-guide/advanced_simulation.textile" />
  246. <file name="user-guide/c-domain.textile" />
  247. <file name="user-guide/statechart_language.textile" />
  248. <file name="user-guide/generating_code.textile" />
  249. <!-- <file name="user-guide/sctunit.textile" /> -->
  250. </filelist>
  251. </textile-files>
  252. <image-files>
  253. <fileset dir="${src.dir}">
  254. <include name="user-guide/images/**/*" />
  255. </fileset>
  256. </image-files>
  257. </create-website-part>
  258. </sequential>
  259. </target>
  260. <!-- Creates a certain part of the HTML documentation for the website. -->
  261. <macrodef name="create-website-part"
  262. description="Creates a certain part of the HTML documentation for the website.">
  263. <attribute name="name" />
  264. <attribute name="title" />
  265. <element name="textile-files" />
  266. <element name="image-files" />
  267. <sequential>
  268. <!-- The directory for this particular part of the HTML documentation: -->
  269. <local name="work.dir" />
  270. <property name="work.dir" location="${website.dir}" />
  271. <!-- The names of the concatenated documentation files: -->
  272. <local name="index.textile" />
  273. <property name="index.textile" value="@{name}.textile" />
  274. <local name="index.html" />
  275. <property name="index.html" value="@{name}.html" />
  276. <!-- Append those source files that make up the particular piece of documentation: -->
  277. <mkdir dir="${work.dir}" />
  278. <concat destfile="${work.dir}/${index.textile}"
  279. append="false"
  280. overwrite="true"
  281. encoding="UTF-8"
  282. outputencoding="UTF-8"
  283. fixlastline="true"
  284. binary="false"
  285. ignoreempty="true">
  286. <textile-files />
  287. </concat>
  288. <!-- Convert textile source files to HTML: -->
  289. <wikitext-to-html markupLanguage="Textile"
  290. multipleOutputFiles="false"
  291. navigationImages="true"
  292. formatoutput="true"
  293. validate="true"
  294. xhtmlStrict="true"
  295. overwrite="true"
  296. failOnValidationError="true"
  297. failOnValidationWarning="false"
  298. sourceEncoding="UTF-8"
  299. title="@{title}">
  300. <fileset dir="${work.dir}">
  301. <include name="${index.textile}" />
  302. </fileset>
  303. <stylesheet url="${css.dir}/${css.root.file}" />
  304. </wikitext-to-html>
  305. <!-- Load website fragments: -->
  306. <sequential unless:set="website.local.files">
  307. <loadfile property="website.header" srcFile="${src.dir}/website/header.htmlf" encoding="UTF-8" />
  308. <loadfile property="website.footer" srcFile="${src.dir}/website/footer.htmlf" encoding="UTF-8" />
  309. <loadfile property="website.calltoaction.download"
  310. srcFile="${src.dir}/website/calltoaction.download.htmlf"
  311. encoding="UTF-8" />
  312. </sequential>
  313. <!-- Load fragments for generating local files which should look simular to the website: -->
  314. <sequential if:set="website.local.files">
  315. <loadfile property="website.header"
  316. srcFile="${src.dir}/website/header.local.files.htmlf"
  317. encoding="UTF-8" />
  318. <loadfile property="website.footer"
  319. srcFile="${src.dir}/website/footer.local.files.htmlf"
  320. encoding="UTF-8" />
  321. <loadfile property="website.calltoaction.download"
  322. srcFile="${src.dir}/website/calltoaction.download.local.files.htmlf"
  323. encoding="UTF-8" />
  324. </sequential>
  325. <!-- Replace "<pre><code>" durch "<pre class="prettyprint"><code>": -->
  326. <replaceregexp byline="false"
  327. flags="g"
  328. match='&lt;pre&gt;&lt;code&gt;'
  329. replace='&lt;pre class="prettyprint"&gt;&lt;code&gt;'>
  330. <fileset dir="${work.dir}">
  331. <include name="${index.html}" />
  332. </fileset>
  333. </replaceregexp>
  334. <!-- Replace relative image links by absolute ones for the website, unless we are generating local files: -->
  335. <replaceregexp byline="false"
  336. flags="g"
  337. match='src="images/'
  338. replace='src="http://info.itemis.com/hubfs/Yakindu/Statechart_Tools/Documentation/images/'
  339. unless:set="website.local.files">
  340. <fileset dir="${work.dir}">
  341. <include name="${index.html}" />
  342. </fileset>
  343. </replaceregexp>
  344. <!-- Replace everything up to and including "<body>" by website-specific header: -->
  345. <replaceregexp byline="false" flags="s" replace="${website.header}">
  346. <regexp pattern="^(.*)&lt;body&gt;" />
  347. <fileset dir="${work.dir}">
  348. <include name="${index.html}" />
  349. </fileset>
  350. </replaceregexp>
  351. <!-- Replace everything from and including "</body>" by website-specific footer: -->
  352. <replaceregexp byline="false" flags="s" replace="${website.footer}">
  353. <regexp pattern="&lt;/body&gt;(.*)$" />
  354. <fileset dir="${work.dir}">
  355. <include name="${index.html}" />
  356. </fileset>
  357. </replaceregexp>
  358. <!-- If the generated code contains a table with the ID "updaterepositories", replace it by a
  359. "call-to-action" button on the website: -->
  360. <replaceregexp byline="false" flags="s" replace="${website.calltoaction.download}">
  361. <regexp pattern='&lt;table id="updaterepositories"&gt;.*&lt;/table&gt;' />
  362. <fileset dir="${work.dir}">
  363. <include name="${index.html}" />
  364. </fileset>
  365. </replaceregexp>
  366. <!-- Fix links: -->
  367. <adjust-website-document-links document.dir.name="tutorials"
  368. work.dir="${work.dir}"
  369. html.file="${index.html}" />
  370. <adjust-website-document-links document.dir.name="user-guide"
  371. work.dir="${work.dir}"
  372. html.file="${index.html}" />
  373. <adjust-website-document-links document.dir.name="installation"
  374. work.dir="${work.dir}"
  375. html.file="${index.html}" />
  376. <!-- Fix "pro-feature" elements -->
  377. <replaceregexp byline="false"
  378. flags="g"
  379. match='&lt;p&gt;&lt;div class="pro-feature"&gt;&lt;/p&gt;'
  380. replace='&lt;div class="pro-feature"&gt;'>
  381. <fileset dir="${work.dir}">
  382. <include name="${index.html}" />
  383. </fileset>
  384. </replaceregexp>
  385. <replaceregexp byline="false" flags="g" match='&lt;p&gt;&lt;/div&gt;&lt;/p&gt;' replace='&lt;/div&gt;'>
  386. <fileset dir="${work.dir}">
  387. <include name="${index.html}" />
  388. </fileset>
  389. </replaceregexp>
  390. <!-- Copy the CSS files to the destination directory: -->
  391. <copy todir="${work.dir}/${css.dir}">
  392. <fileset dir="${css.dir}">
  393. <include name="*" />
  394. </fileset>
  395. </copy>
  396. <!-- Copy the image files to the destination directory: -->
  397. <copy todir="${work.dir}/${img.dir}" flatten="yes">
  398. <image-files />
  399. </copy>
  400. <!-- The textile source file is no longer needed in the website directory. Remove it: -->
  401. <delete includeemptydirs="true" failonerror="false">
  402. <fileset dir="${website.dir}" defaultexcludes="false">
  403. <include name="${index.textile}" />
  404. </fileset>
  405. </delete>
  406. </sequential>
  407. </macrodef>
  408. <!-- Adjusts links in the generated HTML document for either the website or a local equivalent. -->
  409. <macrodef name="adjust-website-document-links"
  410. description="Adjusts links in the generated HTML document for either the website or a local equivalent.">
  411. <attribute name="work.dir" />
  412. <attribute name="html.file" />
  413. <attribute name="document.dir.name" />
  414. <sequential>
  415. <replaceregexp byline="false"
  416. flags="g"
  417. match='&lt;a href="(\.\./@{document.dir.name})/.+\.html(.*)"&gt;'
  418. replace='&lt;a href="\1/\2"&gt;'
  419. unless:set="website.local.files">
  420. <fileset dir="@{work.dir}">
  421. <include name="@{html.file}" />
  422. </fileset>
  423. </replaceregexp>
  424. <replaceregexp byline="false"
  425. flags="g"
  426. match='&lt;a href="\.\.(/@{document.dir.name})/.+\.html(.*)"&gt;'
  427. replace='&lt;a href="YSCT-@{document.dir.name}.html\2"&gt;'
  428. if:set="website.local.files">
  429. <fileset dir="@{work.dir}">
  430. <include name="@{html.file}" />
  431. </fileset>
  432. </replaceregexp>
  433. </sequential>
  434. </macrodef>
  435. </project>