diff options
Diffstat (limited to 'cli-tests')
-rw-r--r-- | cli-tests/build/root.build | 3 | ||||
-rw-r--r-- | cli-tests/combined/driver.cxx | 3 | ||||
-rw-r--r-- | cli-tests/ctor/driver.cxx | 3 | ||||
-rw-r--r-- | cli-tests/erase/driver.cxx | 4 | ||||
-rw-r--r-- | cli-tests/file/driver.cxx | 3 | ||||
-rw-r--r-- | cli-tests/group/driver.cxx | 43 | ||||
-rw-r--r-- | cli-tests/group/testscript | 84 | ||||
-rw-r--r-- | cli-tests/headings/buildfile | 6 | ||||
-rw-r--r-- | cli-tests/headings/testscript | 36 | ||||
-rw-r--r-- | cli-tests/inheritance/driver.cxx | 4 | ||||
-rw-r--r-- | cli-tests/manifest | 6 | ||||
-rw-r--r-- | cli-tests/merge/driver.cxx | 4 | ||||
-rw-r--r-- | cli-tests/note/buildfile | 6 | ||||
-rw-r--r-- | cli-tests/note/testscript | 197 | ||||
-rw-r--r-- | cli-tests/position/buildfile | 9 | ||||
-rw-r--r-- | cli-tests/position/driver.cxx | 47 | ||||
-rw-r--r-- | cli-tests/position/test.cli | 13 | ||||
-rw-r--r-- | cli-tests/position/testscript | 36 | ||||
-rw-r--r-- | cli-tests/specifier/driver.cxx | 4 | ||||
-rw-r--r-- | cli-tests/toc/buildfile | 6 | ||||
-rw-r--r-- | cli-tests/toc/testscript | 155 |
21 files changed, 249 insertions, 423 deletions
diff --git a/cli-tests/build/root.build b/cli-tests/build/root.build index 5f4b348..90a319a 100644 --- a/cli-tests/build/root.build +++ b/cli-tests/build/root.build @@ -16,7 +16,8 @@ if ($cxx.target.system == 'win32-msvc') if ($cxx.class == 'msvc') cxx.coptions += /wd4251 /wd4275 /wd4800 -using cli +if ($build.mode != 'skeleton') + using cli # Every exe{} in this project is by default a test. # diff --git a/cli-tests/combined/driver.cxx b/cli-tests/combined/driver.cxx index dcbdd34..3e96f0c 100644 --- a/cli-tests/combined/driver.cxx +++ b/cli-tests/combined/driver.cxx @@ -9,6 +9,9 @@ #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int diff --git a/cli-tests/ctor/driver.cxx b/cli-tests/ctor/driver.cxx index ed306f4..72c1954 100644 --- a/cli-tests/ctor/driver.cxx +++ b/cli-tests/ctor/driver.cxx @@ -4,6 +4,9 @@ #include "test.hxx" +#undef NDEBUG +#include <cassert> + int main (int argc, char* argv[]) { diff --git a/cli-tests/erase/driver.cxx b/cli-tests/erase/driver.cxx index af35836..a46df20 100644 --- a/cli-tests/erase/driver.cxx +++ b/cli-tests/erase/driver.cxx @@ -6,10 +6,12 @@ // #include <string> -#include <cassert> #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int diff --git a/cli-tests/file/driver.cxx b/cli-tests/file/driver.cxx index eef7ef1..fe923cc 100644 --- a/cli-tests/file/driver.cxx +++ b/cli-tests/file/driver.cxx @@ -10,6 +10,9 @@ #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int diff --git a/cli-tests/group/driver.cxx b/cli-tests/group/driver.cxx index 68f6107..9a3c710 100644 --- a/cli-tests/group/driver.cxx +++ b/cli-tests/group/driver.cxx @@ -5,10 +5,14 @@ // Test group_scanner. // +#include <string> #include <iostream> #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int @@ -25,27 +29,58 @@ main (int argc, char* argv[]) // string m (argv[1]); + bool sa (m.find ('s') != string::npos); + bool sg (m.find ('g') != string::npos); + argv_scanner as (--argc, ++argv); group_scanner s (as); + // Verify previous two args are still valid for good measure. + // + const char* prev_a (0); + string prev_s; + + // Verify position. + // + size_t pos (0); // argv_scanner starts from 1. + while (s.more ()) { - if (m.find ('s') == string::npos) + assert (pos < s.position ()); + pos = s.position (); + + s.peek (); + assert (pos == s.position ()); + + const char* a (0); + if (!sa) { - const char* a (s.next ()); + a = s.next (); cout << "'" << a << "'"; } else s.skip (); - if (m.find ('g') == string::npos) + if (!sg) { scanner& gs (s.group ()); while (gs.more ()) cout << " '" << gs.next () << "'"; } - cout << endl; + if (!sa || !sg) + cout << endl; + + if (!sa && !sg) + { + s.more (); + + if (prev_a != 0) + assert (prev_a == prev_s); + + prev_a = a; + prev_s = a; + } } return 0; diff --git a/cli-tests/group/testscript b/cli-tests/group/testscript index 6269ca2..0b1d939 100644 --- a/cli-tests/group/testscript +++ b/cli-tests/group/testscript @@ -19,6 +19,14 @@ $* '' { --foo --bar }+ arg1 arg2 >>EOO 'arg2' EOO +: group-pre-pack +: +$* '' { --foo --bar }+ { arg1 arg2 } arg3 >>EOO +'arg1' '--foo' '--bar' +'arg2' '--foo' '--bar' +'arg3' +EOO + : group-pre-multi : $* '' { --foo }+ { --bar }+ arg1 arg2 >>EOO @@ -26,6 +34,14 @@ $* '' { --foo }+ { --bar }+ arg1 arg2 >>EOO 'arg2' EOO +: group-pre-multi-pack +: +$* '' { --foo }+ { --bar }+ { arg1 arg2 } arg3 >>EOO +'arg1' '--foo' '--bar' +'arg2' '--foo' '--bar' +'arg3' +EOO + : group-post : $* '' arg1 arg2 +{ foo bar } >>EOO @@ -33,6 +49,14 @@ $* '' arg1 arg2 +{ foo bar } >>EOO 'arg2' 'foo' 'bar' EOO +: group-post-pack +: +$* '' arg1 { arg2 arg3 } +{ foo bar } >>EOO +'arg1' +'arg2' 'foo' 'bar' +'arg3' 'foo' 'bar' +EOO + : group-post-multi : $* '' arg1 arg2 +{ foo } +{ bar } >>EOO @@ -40,6 +64,14 @@ $* '' arg1 arg2 +{ foo } +{ bar } >>EOO 'arg2' 'foo' 'bar' EOO +: group-post-multi-pack +: +$* '' arg1 { arg2 arg3 } +{ foo } +{ bar } >>EOO +'arg1' +'arg2' 'foo' 'bar' +'arg3' 'foo' 'bar' +EOO + : group-both : $* '' arg1 { --foo --bar }+ arg2 +{ foo bar } arg3 >>EOO @@ -48,6 +80,15 @@ $* '' arg1 { --foo --bar }+ arg2 +{ foo bar } arg3 >>EOO 'arg3' EOO +: group-both-pack +: +$* '' arg1 { --foo --bar }+ { arg2 arg3 } +{ foo bar } arg4 >>EOO +'arg1' +'arg2' '--foo' '--bar' 'foo' 'bar' +'arg3' '--foo' '--bar' 'foo' 'bar' +'arg4' +EOO + : group-both-multi : $* '' arg1 { --foo }+ { --bar }+ arg2 +{ foo } +{ bar } arg3 >>EOO @@ -56,6 +97,15 @@ $* '' arg1 { --foo }+ { --bar }+ arg2 +{ foo } +{ bar } arg3 >>EOO 'arg3' EOO +: group-both-multi-pack +: +$* '' arg1 { --foo }+ { --bar }+ { arg2 arg3 } +{ foo } +{ bar } arg4 >>EOO +'arg1' +'arg2' '--foo' '--bar' 'foo' 'bar' +'arg3' '--foo' '--bar' 'foo' 'bar' +'arg4' +EOO + : multi-group : $* '' { --foo }+ arg1 arg2 +{ bar } >>EOO @@ -63,6 +113,15 @@ $* '' { --foo }+ arg1 arg2 +{ bar } >>EOO 'arg2' 'bar' EOO +: multi-group-pack +: +$* '' { --foo }+ { arg1 arg2 } { arg3 arg4 } +{ bar } >>EOO +'arg1' '--foo' +'arg2' '--foo' +'arg3' 'bar' +'arg4' 'bar' +EOO + : empty-group : $* '' { }+ arg1 arg2 +{ } >>EOO @@ -70,6 +129,13 @@ $* '' { }+ arg1 arg2 +{ } >>EOO 'arg2' EOO +: empty-group-pack +: +$* '' { }+ { arg1 arg2 } +{ } >>EOO +'arg1' +'arg2' +EOO + : escape-arg : $* '' '\{' '\}' '\+{' '\}+' '{x' '}x' >>EOO @@ -87,10 +153,16 @@ $* '' { '\{' '\}' '\+{' '\}+' '{x' '}x' }+ arg >>EOO 'arg' '{' '}' '+{' '}+' '{x' '}x' EOO -: not-group +: pack-no-group : -$* '' { --foo } 2>>EOE != 0 -expected group separator '}+' instead of '}', use '\}' to escape +$* '' { --foo } { arg2 }+ 2>>EOE != 0 +unexpected group separator '{', use '\{' to escape +EOE + +: empty-pack +: +$* '' { --foo }+ { } 2>>EOE != 0 +unexpected group separator '{', use '\{' to escape EOE : no-arg-pre @@ -135,6 +207,8 @@ EOE : unhandled-group-skip : -$* 'sg' { --foo }+ arg +{ bar } >>EOO +$* 'sg' { --foo }+ arg +{ bar } -EOO +: unhandled-group-skip-pack +: +$* 'sg' { --foo }+ { arg1 arg2 } +{ bar } diff --git a/cli-tests/headings/buildfile b/cli-tests/headings/buildfile deleted file mode 100644 index af3ae75..0000000 --- a/cli-tests/headings/buildfile +++ /dev/null @@ -1,6 +0,0 @@ -# file : headings/buildfile -# license : MIT; see accompanying LICENSE file - -./: testscript $cli - -testscript{*}: test = $cli diff --git a/cli-tests/headings/testscript b/cli-tests/headings/testscript deleted file mode 100644 index 0efb7ae..0000000 --- a/cli-tests/headings/testscript +++ /dev/null @@ -1,36 +0,0 @@ -# file : headings/testscript -# license : MIT; see accompanying LICENSE file - -: auto-headings -: -: Note that auto-headings break if we split into multiple doc strings. -: -cat <<EOI >=map.cli; -" -\h1|Heading 1| - -\h|Heading 1.1| - -\h2|Heading 1.1.1| - -\h|Heading 1.2| - -\h2|Heading 1.2.1| - -\h1|Heading 2| -" -EOI -$* --generate-html --stdout map.cli >>EOO - <h1>Heading 1</h1> - - <h2>Heading 1.1</h2> - - <h3>Heading 1.1.1</h3> - - <h2>Heading 1.2</h2> - - <h3>Heading 1.2.1</h3> - - <h1>Heading 2</h1> - -EOO diff --git a/cli-tests/inheritance/driver.cxx b/cli-tests/inheritance/driver.cxx index 4acab0d..f0860fd 100644 --- a/cli-tests/inheritance/driver.cxx +++ b/cli-tests/inheritance/driver.cxx @@ -6,11 +6,13 @@ // #include <string> -#include <cassert> #include <iostream> #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int diff --git a/cli-tests/manifest b/cli-tests/manifest index 0ff0825..4c3626b 100644 --- a/cli-tests/manifest +++ b/cli-tests/manifest @@ -1,6 +1,6 @@ : 1 name: cli-tests -version: 1.2.0-b.7.z +version: 1.2.0 project: cli summary: Tests for the CLI compiler for C++ license: MIT @@ -10,5 +10,5 @@ doc-url: https://www.codesynthesis.com/projects/cli/doc/guide/ src-url: https://git.codesynthesis.com/cgit/cli/cli/tree/cli-tests/ email: cli-users@codesynthesis.com ; Mailing list requires: c++14 -depends: * build2 >= 0.13.0 -depends: * bpkg >= 0.13.0 +depends: * build2 >= 0.16.0 +depends: * bpkg >= 0.16.0 diff --git a/cli-tests/merge/driver.cxx b/cli-tests/merge/driver.cxx index 43b1c59..94dc16e 100644 --- a/cli-tests/merge/driver.cxx +++ b/cli-tests/merge/driver.cxx @@ -6,10 +6,12 @@ // #include <string> -#include <cassert> #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; template <typename T, int N1, int N2> diff --git a/cli-tests/note/buildfile b/cli-tests/note/buildfile deleted file mode 100644 index c8cf49b..0000000 --- a/cli-tests/note/buildfile +++ /dev/null @@ -1,6 +0,0 @@ -# file : note/buildfile -# license : MIT; see accompanying LICENSE file - -./: testscript $cli - -testscript{*}: test = $cli diff --git a/cli-tests/note/testscript b/cli-tests/note/testscript deleted file mode 100644 index 9f00811..0000000 --- a/cli-tests/note/testscript +++ /dev/null @@ -1,197 +0,0 @@ -# file : note/testscript -# license : MIT; see accompanying LICENSE file - -: block-basics -: -cat <<EOI >=test.cli; -" -Leading paragraph. - -\N|This is a note block one.| - -Interleaving paragraph that is quite long and therefore it may span many -lines in order to make text easy to read. - -\N|This is a note block two that is quite long and therefore it may span many -lines in order to make text easy to read.| - -Trailing paragraph. -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <p>Leading paragraph.</p> - - <div class="note"> - <p>This is a note block one.</p> - </div> - - <p>Interleaving paragraph that is quite long and therefore it may span many - lines in order to make text easy to read.</p> - - <div class="note"> - <p>This is a note block two that is quite long and therefore it may span - many lines in order to make text easy to read.</p> - </div> - - <p>Trailing paragraph.</p> - -EOO - $* --generate-txt --stdout test.cli >>EOO -Leading paragraph. - -| This is a note block one. - -Interleaving paragraph that is quite long and therefore it may span many lines -in order to make text easy to read. - -| This is a note block two that is quite long and therefore it may span many -| lines in order to make text easy to read. - -Trailing paragraph. -EOO - - -: block-multi-para -: -cat <<EOI >=test.cli; -" -\N| -This is a note para one that is quite long and therefore it may span many -lines in order to make text easy to read. - -This is a note para two. -| -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <div class="note"> - <p>This is a note para one that is quite long and therefore it may span many - lines in order to make text easy to read.</p> - - <p>This is a note para two.</p> - </div> - -EOO -$* --generate-txt --stdout test.cli >>EOO -| This is a note para one that is quite long and therefore it may span many -| lines in order to make text easy to read. -| -| This is a note para two. -EOO - -: block-pre -: -cat <<EOI >=test.cli; -" - -\N| -This is a note para one. - -\ -And this is a -pre-formatter text fragment. -\ - -| -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <div class="note"> - <p>This is a note para one.</p> - - <pre>And this is a -pre-formatter text fragment.</pre> - </div> - -EOO -$* --generate-txt --stdout test.cli >>EOO -| This is a note para one. -| -| And this is a -| pre-formatter text fragment. -EOO - -# This is not yet supported (see txt_wrap_lines()). -# -#\ -: block-list -: -cat <<EOI >=test.cli; -" -\N|This is a note para one followed by a list. - -\ul| - -\li|This is a list item that is quite long and therefore it may span many -lines in order to make text easy to read.||| -" -EOI -$* --generate-html --stdout test.cli >>EOO; -EOO -$* --generate-txt --stdout test.cli >>EOO -EOO -#\ - -: block-in-list -: -cat <<EOI >=test.cli; -" -\ul| - -\li|Normal text para. - -\N|This is a note para one that is quite long and therefore it may span many -lines in order to make text easy to read.||| -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <ul> - <li>Normal text para. - - <div class="note"> - <p>This is a note para one that is quite long and therefore it may span many - lines in order to make text easy to read.</p> - </div></li> - </ul> - -EOO -$* --generate-txt --stdout test.cli >>EOO -* Normal text para. - - | This is a note para one that is quite long and therefore it may span many - | lines in order to make text easy to read. -EOO - - -: span-basics -: -cat <<EOI >=test.cli; -" -This is normal text. \N{This is a note.} And this is normal text again. -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <p>This is normal text. <span class="note">This is a note.</span> And this - is normal text again.</p> - -EOO - $* --generate-txt --stdout test.cli >>EOO -This is normal text. [Note: This is a note.] And this is normal text again. -EOO - - -: span-nested-link -: -cat <<EOI >=test.cli; -" -\N{This is a note with a \l{https://example.com link} inside.} -" -EOI -$* --generate-html --stdout test.cli >>EOO; - <p><span class="note">This is a note with a <a - href="https://example.com">link</a> inside.</span></p> - -EOO -$* --generate-txt --stdout test.cli >>EOO -[Note: This is a note with a link (https://example.com) inside.] -EOO diff --git a/cli-tests/position/buildfile b/cli-tests/position/buildfile new file mode 100644 index 0000000..371cc54 --- /dev/null +++ b/cli-tests/position/buildfile @@ -0,0 +1,9 @@ +# file : position/buildfile +# license : MIT; see accompanying LICENSE file + +exe{driver}: {hxx cxx}{* -test} cli.cxx{test} testscript + +cxx.poptions =+ "-I$out_base" + +cli.cxx{test}: cli{test} +cli.options = --generate-file-scanner --generate-specifier diff --git a/cli-tests/position/driver.cxx b/cli-tests/position/driver.cxx new file mode 100644 index 0000000..df45f5b --- /dev/null +++ b/cli-tests/position/driver.cxx @@ -0,0 +1,47 @@ +// file : position/driver.cxx +// author : Boris Kolpackov <boris@codesynthesis.com> +// license : MIT; see accompanying LICENSE file + +// Test argument/option position. +// +#include <iostream> + +#include "test.hxx" + +#undef NDEBUG +#include <cassert> + +using namespace std; + +int +main (int argc, char* argv[]) +{ + try + { + cli::argv_file_scanner scan (argc, argv, "--file"); + options ops (scan); + + if (ops.a_specified ()) + cout << ops.a ().second << ": " << "-a " << ops.a ().first << endl; + + for (const pair<int, size_t>& b: ops.b ()) + { + cout << b.second << ": " << "-b " << b.first << endl; + } + + while (scan.more ()) + { + // Note that calling position() inside `cout << ...` depends on order of + // argument evaluation. + // + size_t p (scan.position ()); + cout << p << ": " << scan.next () << endl; + } + + cout << "max: " << scan.position () << endl; + } + catch (const cli::exception& e) + { + cerr << e << endl; + } +} diff --git a/cli-tests/position/test.cli b/cli-tests/position/test.cli new file mode 100644 index 0000000..7fc8655 --- /dev/null +++ b/cli-tests/position/test.cli @@ -0,0 +1,13 @@ +// file : position/test.cli +// author : Boris Kolpackov <boris@codesynthesis.com> +// license : MIT; see accompanying LICENSE file + +include <vector>; +include <utility>; +include <cstddef>; + +class options +{ + std::pair<int, std::size_t> -a; + std::vector<std::pair<int, std::size_t> > -b; +}; diff --git a/cli-tests/position/testscript b/cli-tests/position/testscript new file mode 100644 index 0000000..568e571 --- /dev/null +++ b/cli-tests/position/testscript @@ -0,0 +1,36 @@ +# file : position/testscript +# license : MIT; see accompanying LICENSE file + +: basics +: +$* -b 1 -a 2 -b 3 foo bar baz >>EOO +3: -a 2 +1: -b 1 +5: -b 3 +7: foo +8: bar +9: baz +max: 10 +EOO + +: override +: +$* -a 1 -a 2 >>EOO +3: -a 2 +max: 5 +EOO + +: file +: +cat <<EOI >=test.ops; +-a 2 +EOI +$* -b 1 --file test.ops -b 2 foo bar baz >>EOO +5: -a 2 +1: -b 1 +7: -b 2 +9: foo +10: bar +11: baz +max: 12 +EOO diff --git a/cli-tests/specifier/driver.cxx b/cli-tests/specifier/driver.cxx index 50b9cf5..15b9695 100644 --- a/cli-tests/specifier/driver.cxx +++ b/cli-tests/specifier/driver.cxx @@ -6,10 +6,12 @@ // #include <string> -#include <cassert> #include "test.hxx" +#undef NDEBUG +#include <cassert> + using namespace std; int diff --git a/cli-tests/toc/buildfile b/cli-tests/toc/buildfile deleted file mode 100644 index 3be6359..0000000 --- a/cli-tests/toc/buildfile +++ /dev/null @@ -1,6 +0,0 @@ -# file : toc/buildfile -# license : MIT; see accompanying LICENSE file - -./: testscript $cli - -testscript{*}: test = $cli diff --git a/cli-tests/toc/testscript b/cli-tests/toc/testscript deleted file mode 100644 index 70e9065..0000000 --- a/cli-tests/toc/testscript +++ /dev/null @@ -1,155 +0,0 @@ -# file : toc/testscript -# license : MIT; see accompanying LICENSE file - -: toc -: -cat <<EOI >=toc.cli; -"\h1|Table of Contents|" -"\$TOC$" - -" -\h0#preface|Preface| - -This document describes something awesome. - -\h#about-document|About This Document| - -And this document is also awesome. - -\h#more-information|More Information| - -It is so awesome that no further information will be required." - -" -\H#part1|PART I| - -Start of part one. - -\h1#intro|Introduction| - -Beginning of the first chapter. - -\h#arch-flow|Architecture and Workflow| - -Some basics. - -\h#benefits|Benefits| - -You will like them. - -\h1#hello|Hello World| - -Beginning of the second chapter. - -\h#hell-setup|Setup| - -More basics. - -\h#hello-compile|Compiling| - -How to build the example - -\h2#hello-compile-gcc|Compiling with GCC| - -GCC. For Clang see \l{#hello-compile-clang Compiling with Clang}. - -\h2#hello-compile-clang|Compiling with Clang| - -Clang. For GCC see \l{#hello-compile-gcc Compiling with GCC}. - -\h#hello-conclusion|Conclusion| - -Some remarks. -" -EOI -$* --generate-html --stdout toc.cli >>EOO - <h1>Table of Contents</h1> - - <table class="toc"> - <tr><td class="preface" colspan="2"><a href="#preface">Preface</a> - <table class="toc"> - <tr><td class="preface" colspan="2"><a href="#about-document">About -This Document</a></td></tr> - <tr><td class="preface" colspan="2"><a href="#more-information">More -Information</a></td></tr> - </table> - </td></tr> - <tr><th colspan="2"><a href="#part1">PART I</a></th></tr> - <tr><th>1</th><td><a href="#intro">Introduction</a> - <table class="toc"> - <tr><th>1.1</th><td><a href="#arch-flow">Architecture and -Workflow</a></td></tr> - <tr><th>1.2</th><td><a href="#benefits">Benefits</a></td></tr> - </table> - </td></tr> - <tr><th>2</th><td><a href="#hello">Hello World</a> - <table class="toc"> - <tr><th>2.1</th><td><a href="#hell-setup">Setup</a></td></tr> - <tr><th>2.2</th><td><a href="#hello-compile">Compiling</a> - <table class="toc"> - <tr><th>2.2.1</th><td><a href="#hello-compile-gcc">Compiling with -GCC</a></td></tr> - <tr><th>2.2.2</th><td><a href="#hello-compile-clang">Compiling -with Clang</a></td></tr> - </table> - </td></tr> - <tr><th>2.3</th><td><a href="#hello-conclusion">Conclusion</a></td></tr> - </table> - </td></tr> - </table> - - <h1 id="preface" class="preface">Preface</h1> - - <p>This document describes something awesome.</p> - - <h2 id="about-document">About This Document</h2> - - <p>And this document is also awesome.</p> - - <h2 id="more-information">More Information</h2> - - <p>It is so awesome that no further information will be required.</p> - - <h1 id="part1" class="part">PART I</h1> - - <p>Start of part one.</p> - - <h1 id="intro">1 Introduction</h1> - - <p>Beginning of the first chapter.</p> - - <h2 id="arch-flow">1.1 Architecture and Workflow</h2> - - <p>Some basics.</p> - - <h2 id="benefits">1.2 Benefits</h2> - - <p>You will like them.</p> - - <h1 id="hello">2 Hello World</h1> - - <p>Beginning of the second chapter.</p> - - <h2 id="hell-setup">2.1 Setup</h2> - - <p>More basics.</p> - - <h2 id="hello-compile">2.2 Compiling</h2> - - <p>How to build the example</p> - - <h3 id="hello-compile-gcc">2.2.1 Compiling with GCC</h3> - - <p>GCC. For Clang see <a href="#hello-compile-clang">Compiling with - Clang</a>.</p> - - <h3 id="hello-compile-clang">2.2.2 Compiling with Clang</h3> - - <p>Clang. For GCC see <a href="#hello-compile-gcc">Compiling with - GCC</a>.</p> - - <h2 id="hello-conclusion">2.3 Conclusion</h2> - - <p>Some remarks.</p> - -EOO |