build.xml 23 KB

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