diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml new file mode 100644 index 0000000..3f1df01 --- /dev/null +++ b/.github/workflows/gh-pages.yml @@ -0,0 +1,33 @@ +name: Publish to GitHub Pages + +# Controls when the action will run. Triggers the workflow on push or pull request +# events but only for the master branch +on: + push: + branches: [ master, main ] + pull_request: + branches: [ master, main ] + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "build" + build: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v3 + + # Includes the AsciiDoctor GitHub Pages Action to convert adoc files to html and publish to gh-pages branch + - name: asciidoctor-ghpages + uses: ntijoh-te4/asciidoctor-ghpages-action@1af5baccd44ff01c9cb42030b0ee6d5aab4d5d8b + with: + #pdf_build: true + asciidoctor_params: -r asciidoctor-kroki + # adoc_file_ext: .ascii # default is .adoc + source_dir: docs/ # default is . + # slides_build: true + #pre_build: bundle install + # post_build: diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..355ba8b --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.ruby-version +**/.DS_STORE +docs/index.html \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..b3ccba2 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +gem 'asciidoctor' +gem 'coderay' +gem 'asciidoctor-kroki' +gem 'asciidoctor-tabs' diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..c9b115b --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,21 @@ +GEM + remote: https://rubygems.org/ + specs: + asciidoctor (2.0.20) + asciidoctor-kroki (0.8.0) + asciidoctor (~> 2.0) + asciidoctor-tabs (1.0.0.beta.6) + asciidoctor (>= 2.0.0, < 3.0.0) + coderay (1.1.3) + +PLATFORMS + arm64-darwin-22 + +DEPENDENCIES + asciidoctor + asciidoctor-kroki + asciidoctor-tabs + coderay + +BUNDLED WITH + 2.4.19 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3216bab --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2023 ntijoh-te4 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..8530e0d --- /dev/null +++ b/README.md @@ -0,0 +1,44 @@ +# Verktygsboken + +## 1. Installation + +### 1.1 Ruby + +#### 1.1.1 Windows + +Om du har [Chocolatey](https://chocolatey.org/): `choco install ruby` + +Annars : [RubyInstaller for Windows](https://rubyinstaller.org/) + +#### 1.1.2 MacOs + +1. Installera [Homebrew](https://brew.sh/) +2. `brew install ruby` + +### 1.2 Asciidoctor + +I verktygsbokens rotmapp: `bundle install` + +## 2. Bygga boken lokalt + +I verktygsbokens rotmapp: `asciidoctor -r asciidoctor-kroki -r asciidoctor-tabs docs/index.adoc` + +Den färdigbyggda boken finns i `docs/index.html` + +Öppna gärna `docs/index.html` med VS Code Live Server + +### 2.1 Bygga boken lokalt automagiskt vid filändring + +#### 2.1.1 Windows + +Vet ej + +#### 2.1.1 MacOs + +`brew install fswatch` +`fswatch -o ./docs -e "index.html" | xargs -n1 -I{} asciidoctor -r asciidoctor-kroki -r asciidoctor-tabs docs/index.adoc` + + +## 3. Bygga boken till GH Pages. + +Boken byggs automagiskt vid push till main-branchen på GitHub (kan ta några minuter). \ No newline at end of file diff --git a/docs/chapters/chapter_template_folder/chapter.adoc b/docs/chapters/chapter_template_folder/chapter.adoc new file mode 100644 index 0000000..fb5a0c0 --- /dev/null +++ b/docs/chapters/chapter_template_folder/chapter.adoc @@ -0,0 +1,8 @@ +:imagesdir: chapters/chapter_template_folder/images + + += Chapter Title Goes Here + +Wut? + +image::logo.png[Sinatra Logo] diff --git a/docs/chapters/chapter_template_folder/images/logo.png b/docs/chapters/chapter_template_folder/images/logo.png new file mode 100644 index 0000000..061d2ec Binary files /dev/null and b/docs/chapters/chapter_template_folder/images/logo.png differ diff --git a/docs/chapters/combining_tools/chapter.adoc b/docs/chapters/combining_tools/chapter.adoc new file mode 100644 index 0000000..5c3bacc --- /dev/null +++ b/docs/chapters/combining_tools/chapter.adoc @@ -0,0 +1,9 @@ +:imagesdir: chapters/test/images + += Kombinering av verktyg + +== Sammanfogning + +== Nästning + +== Ihopvävning diff --git a/docs/chapters/combining_tools/images/logo.png b/docs/chapters/combining_tools/images/logo.png new file mode 100644 index 0000000..061d2ec Binary files /dev/null and b/docs/chapters/combining_tools/images/logo.png differ diff --git a/docs/chapters/flow_and_state/chapter.adoc b/docs/chapters/flow_and_state/chapter.adoc new file mode 100644 index 0000000..a549217 --- /dev/null +++ b/docs/chapters/flow_and_state/chapter.adoc @@ -0,0 +1,32 @@ +:imagesdir: chapters/flow_and_state/images + + += Flöde och State + +Att programmera är att ge instruktioner till en dator, eller snarare datorns processor. + +En processor kan bara göra en sak åt gången, och instruktionerna utförs därför en efter en, i ett _flöde_. + +Under _flödets_ gång kommer variabler att skapas och dess värden uppdateras. + +_State_ är värdet på alla variabler i ett program, _vid ett givet tillfälle_. + +Programmets _state_ ändras alltså allteftersom programmet körs. + +Att programmera handlar därför om att skapa ett _flöde_ som bearbetar _state_ och ser till att programmet har rätt _state_ när det är klart. + +Man kan alltså se _flödet_ som en _serie av transformationer_ av _state_. + +För att konstruera programmets _flöde_ och för att transformera _state_ finns ett _begränsat_ antal verktyg som används av alla programmerare oavsett vilka program de skriver eller språk de använder. + +Genom att kombinera dessa verktyg på olika sätt, kan man skapa _alla_ program. + +Verktygen är oberoende av kod, men kan så klart implementeras i kod i valfritt programmeringsspråk. + +Den här boken går igenom de verktyg man behöver för att klara Programmering 1 (och antagligen bra mycket mer än så). + +== Flödesschema + +För att illutstrera verktygen används flödesscheman. + +Flödesscheman fungerar såhär ... \ No newline at end of file diff --git a/docs/chapters/flow_and_state/images/logo.png b/docs/chapters/flow_and_state/images/logo.png new file mode 100644 index 0000000..061d2ec Binary files /dev/null and b/docs/chapters/flow_and_state/images/logo.png differ diff --git a/docs/chapters/goals_and_tools/chapter.adoc b/docs/chapters/goals_and_tools/chapter.adoc new file mode 100644 index 0000000..a6d6f71 --- /dev/null +++ b/docs/chapters/goals_and_tools/chapter.adoc @@ -0,0 +1,6 @@ +:imagesdir: chapters/test/images + + += Mål och Verktyg + +icon:exclamation-circle[] Här behövs text om programmerare sätter upp mål- och delmål och hur de använder verktyg för att uppnå dessa mål- och delmål. Gärna med praktiska exempel. \ No newline at end of file diff --git a/docs/chapters/goals_and_tools/images/logo.png b/docs/chapters/goals_and_tools/images/logo.png new file mode 100644 index 0000000..061d2ec Binary files /dev/null and b/docs/chapters/goals_and_tools/images/logo.png differ diff --git a/docs/chapters/tool_centered_assignments/chapter.adoc b/docs/chapters/tool_centered_assignments/chapter.adoc new file mode 100644 index 0000000..5154043 --- /dev/null +++ b/docs/chapters/tool_centered_assignments/chapter.adoc @@ -0,0 +1,8 @@ +:imagesdir: chapters/test/images + + += Verktygsbaserade Uppgifter + +Wut + +image::logo.png[Sinatra Logo] diff --git a/docs/chapters/tool_centered_assignments/images/logo.png b/docs/chapters/tool_centered_assignments/images/logo.png new file mode 100644 index 0000000..061d2ec Binary files /dev/null and b/docs/chapters/tool_centered_assignments/images/logo.png differ diff --git a/docs/chapters/tools/chapter.adoc b/docs/chapters/tools/chapter.adoc new file mode 100644 index 0000000..4d5e546 --- /dev/null +++ b/docs/chapters/tools/chapter.adoc @@ -0,0 +1,555 @@ +:imagesdir: chapters/tools/images +:tabs-sync-option: + += Verktyg + +== Ändring av state (transformation) + +=== Tilldelning + +icon:question-circle[] Är tilldelning ett verktyg eller räknas det som programming "knowledge"? + +För att kunna använda _värden_ (t.ex tal) i program måste man först lagra dem i en variabel. +Att lagra ett värde i en variabel gör man med hjälp av tilldelning. + +En tilldelning består av tre komponenter: en _variabel_, ett _tilldelningstecken_ och ett _värde_. + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +.Tilldelningsverktyget i Ruby +[source,ruby] +---- +speed = 10 +---- +Python:: ++ +[source,python] +---- +speed = 10 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 10; +---- +C#:: ++ +[source,javascript] +---- +var speed = 10; +---- +==== + +=== Initialisering + +Initialisering används när man vet att man kommer behöva ett värde som man kan _modifiera_ längre fram i flödet. + +.Exempel: Summera tal +[NOTE] +==== +När man vill räkna ut summan alla värden i en lista behöver man ha en variabel som innehåller summan. För varje värde i listan vill man sen addera värdet till summa-variabeln. Men för att man ska kunna addera det första värdet i listan till summa-variabeln måste summa-variabeln först vara _initialiserad_ med ett värde, antagligen 0. +==== + +.Exempel: Bilspel +[NOTE] +==== +I ett bilspel vill man kunna gasa och bromsa. Både gas- och bromskoden kommer _modifiera_ hastigheten på bilen, men för att hastigheten ska kunna modifieras måste det först skapas en variabel som innehåller hastigheten, och variabeln måste ha _initialiserats_ med ett värde som kan modifieras. +==== + +image::initialisering.png[Initialiseringsverktyget] + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +speed = 0 <1> + +... + +if pressed_button == 'w' + speed += 1 <2> +elsif pressed_button == 's' + speed -= 1 <2> +elsif pressed_button == 'esc' + speed = 0 <2> +end +---- +<1> Initialisering av speed-variabeln +<2> Modifiering av speed-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +=== Inkrementering + +Inkrementering innebär att _öka_ värdet på en variabel. Oftast är värdet ett heltal. Inkrementering används ofta inne i <<_upprepning_av_flöde,loop-verktygen>> för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med de olika <<_uppdelning_av_flöde,if-verktygen>>. + +För att _inkrementera_ värdet på en variabel måste variabeln först vara <<_initialisering,_initialiserad_>> + +.Inkrementering med if och if-elsif +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +healthiness_score = 0 <1> + +... + +if favourite_drink == 'water' + healthiness_score += 1 <2> +end + +if favourite_food == 'fruit' + healthiness_score += 1 <2> +elsif favourite_food == 'carrot' + healthiness_score += 2 <2> +elsif favourite_food == 'pizza' + healthiness_score -= 2 <3> +end +---- +<1> Initialisering av healthiness-variabeln +<2> Inkrementering av healthiness-variabeln +<3> Dekrementering av healthiness-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +.Inkrementering i räknande loop +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- + +number_of_greeted_people = 0 <1> + +... + +while number_of_greeted_people < number_of_people + puts "Hello, nice to meet you!" + number_of_greeted_people += 1 <2> +end +---- +<1> Initialisering av number_of_greeted_people-variabeln +<2> Inkrementering av number_of_greeted_people-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + + +=== Dekrementering + +Dekrementering innebär att _minska_ värdet på en variabel. Oftast är värdet ett heltal. Dekrementering används ofta inne i loopar för att hålla koll på räknar-variabeln, men det går även att använda tillsammans med if-verktygen. + +För att _dekrementera_ värdet på en variabel måste variabeln först vara <<_initialisering,_initialiserad_>> + +.Dekrementering med if och if-elsif +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +healthiness_score = 0 <1> + +... + +if favourite_drink == 'water' + healthiness_score += 1 <2> +end + +if favourite_food == 'fruit' + healthiness_score += 1 <2> +elsif favourite_food == 'carrot' + healthiness_score += 2 <2> +elsif favourite_food == 'pizza' + healthiness_score -= 2 <3> +end +---- +<1> Initialisering av healthiness-variabeln +<2> Inkrementering av healthiness-variabeln +<3> Dekrementering av healthiness-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +.Dekrementering i räknande loop +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- + +number_of_laps_left = 5 <1> + +... + +while number_of_laps_left > 0 + puts "Running a lap!" + number_of_laps_left -= 1 <2> +end +---- +<1> Initialisering av number_of_laps_left-variabeln +<2> Dekrementering av number_of_laps_left-variabeln +Python:: ++ +[source,python] +---- +speed = 0 +---- +Javascript:: ++ +[source,javascript] +---- +const speed = 0; +---- +C#:: ++ +[source,c#] +---- +var speed = 10; +---- +==== + +=== Mellanlagring + +Mellanlagring används när man vill _återanvända_ värdet från en uträkning eller ett funktionsanrop senare i flödet. Exempelvis för att funktionsanropet kräver mycket resurser, tar lång tid att genomföra, eller kräver input från en användare, eller för att det bara blir tydligare kod. + +.Exempel: Lagra användares initialer +[NOTE] +==== +Istället för att varje gång man vill använda en användares initialer extrahera dessa från variabeln som innehåller användarens namn, kan man extrahera dem _en_ gång och mellanlagra resultatet i en variabel. +==== + +.Exempel: Hur många gånger förekommer ordet i boken? +[NOTE] +==== +Ett program ska jämföra vilket av två ord som förekommer flest antal gånger i en bok. Det tar relativt lång tid att söka igenom boken och räkna antalet förekomster av ordet. Därför kan man räkna anatalet förekomster en gång, och lagra resultatet i en variabel, som man sedan använder varje gång man vill använda värdet. +==== + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] + +---- +initials = "#{first_name[0].capitalize}.#{last_name[0].capitalize}." <1> + +... + +puts "Your initials are: #{initials}" <2> +---- +<1> Mellan__lagring__ av värdet. +<2> _Användning_ av värdet. + +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Konkatenering + +icon:question-circle[] Är det här ett verktyg? + +=== Konfigurationslagring + +Konfigurationslagring används när man vill _använda_ ett värde längre fram i flödet, men man vill inte skriva ut värdet direkt, utan vill kunna använda en variabel med ett _beskrivande namn_ istället för att skriva värdet direkt. + +.Exempel: Priser med och utan moms +[NOTE] +==== +Ett program som ska visa priser med och utan moms. Istället för att skriva pris * 1.25 kan man skriva pris * moms, förutsatt att man i moms-variabeln lagrat värdet 1.25. +==== + +.Exempel: Kastbanor med gravitationskonstant +[NOTE] +==== +I ett program som ska räkna ut kastbanor kan man lagra gravitationskonstanten (9.807) i variabeln `gravitation` och använda den istället för värdet varje gång man behöver använda gravitationskonstanten. +==== + +.Exempel: Spara återkommande textfraser +[NOTE] +==== +I Bröderna Lejonhjärta-spelet ska alla vakter avsluta sina meningar med frasen _"All makt åt Tengil vår befriare!"_. Istället för att skriva frasen på alla ställen kan man lagra frasen i en variabel och använda variabeln vid varje tillfälle. +==== + +Konfigurationslagring gör koden tydligare att förstå för oss människor (datorn bryr sig inte), och gör det enklare att ändra - om man behöver ändra det man lagrat behöver man bara ändra på ett enda ställe. + +image::logo.png[Sinatra Logo] + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +vat = 1.25 <1> + +... + +puts "#{price} exkl moms (#{price * vat} inkl. moms)" <2> +---- +<1> Konfigurations__lagring__ av momssatsen (vat står för Value Added Tax, (moms på engelska)), +<2> _Användning_ av momssatsen. +Python:: ++ +[source,python] +---- +gravitation = 9.807 +---- +Javascript:: ++ +[source,javascript] +---- +const gravitation = 9.807; +---- +C#:: ++ +[source,c#] +---- +var gravitation = 9.807; +---- ++ +[NOTE] +**Type inference** räknar ut vilken datatyp som lagras i variabeln. Även om det inte står att variabeln innehåller en specifik datatyp kommer variabeln fortfarande vara "låst" till den datatyp som initialt lagrades i variabeln (i det här fallet en `int`). +==== + +== Uppdelning av flöde (selektion) + +=== If + +Om du vill att ditt program ska göra en sak _enbart_ om ett villkor är sant, kan du använda if. + +If-verktyget använder ett _villkor_ (ett påstående som kan vara sant eller falskt), och om villkoret utvärderas till sant kommer något ske. +Om villkoret inte utvärderas till sant kommer programflödet fortsätta efter villkoret, som om ingenting hänt. + +.Exempel: Pris med eller utan moms. +[NOTE] +==== +På en hemsida som framförallt säljer till företag visas priserna utan moms. Men om någon klickat i att de vill se priserna med moms, ska priserna modifieras med momsen +==== + +image::if-1.png[If-verktyget] + + +[tabs,sync-group-id=lang] +==== +Ruby:: ++ +[source,ruby] +---- +if show_price_with_vat? + price = price * vat +end +---- +Python:: ++ +[source,python] +---- +if show_price_with_vat: + price = price * vat +end +---- +Javascript:: ++ +[source,javascript] +---- +null +---- +C#:: ++ +[source,c#] +---- +Null +---- ++ +==== + +.Exempel: Ett till exempel +[NOTE] +==== +Exempeltext +==== + +=== If-else + + +=== If-elsif + +=== If-elsif-else + + +=== Lorem + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Ipsum + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + + +== Upprepning av flöde (iteration) + + +=== Räknande Loop + +En räknande loop används när ... + +==== Inkrementerande Loop + +En inkrementerande loop används när ... + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +==== Dekrementerande Loop + +En inkrementerande loop används när ... + +[tabs,sync-group-id=lang] +==== +Ruby:: Ruby +Python:: Python +Javascript:: Javascript +C#:: C# +==== + +=== Loop Med Brytvärde + +icon:exclamation-circle[] Behöver utvecklas (alla loopar är väl egentligen loopar med brytvärde, men själva _intentionen_ är väl det som skiljer). + +== Avbrott av flöde + +icon:question-circle[] Är detta en grupp av verktyg? + +=== Tidigt avbrott + +icon:question-circle[] Är detta ett verktyg? (och ska den i så fall ligga här eller under upprepning av flöde?) + +== Sammansatta verktyg + +=== Iterativt uppbyggd output + +Iterativt uppbyggd output används när man har en _mängd_ data (ofta en lista) att behandla, och output är beroende av datan. + +I iterativt uppbyggd output <<_initialisering,_initialiserar_>> man först output-variabeln med ett lämpligt värde som vi sedan kan _modifiera_. + +Sedan <<_upprepning_av_flöde,_itererar_>> man över datan man behöver behandla och modifierar i iterationen output-variabeln (t.ex genom att addera värden till den) + +Slutligen, när iterationen är klar kommer output-variabeln innehålla rätt värde, och man kan returnera den. + +.Exempel: Skapa en lista av alla ord som börjar med en given bokstav i en text +[NOTE] +==== +Först <<_initialisering,_initialiserar_>> vi output-variabeln med lämpligt värde, i det här fallet antagligen en tom lista (som kan innehålla alla ord vi hittar). + +Sen _itererar_ vi (med <<_upprepning_av_flöde, lämpligt verktyg för uppreping av flödet>>) över orden och i varje varv i iterationen använder vi <<_if,__if__-verktyget>> för att _modifiera_ output-variabel-listan om om ordet börjar med den givna bokstaven. + +Slutligen, när iterationen är klar kommer output-variabel-listan innehålla alla ord som efterfrågades, och vi är klara +==== + +Lämpliga värden att _initialisera_ output-variabeln med är ofta: + +- 0 (om output ska vara ett tal) +- en tom sträng (om output ska vara en sträng) +- en tom lista (om output ska vara en lista) + +Men det finns undantag, t.ex kan man ibland _initialisera_ output-variabeln till ett av värdena som finns i mängden man ska behandla. + +=== Switch Loop + +icon:question-circle[] Är detta ett verktyg? + + +image::switch_loop.png[Switch Loop?] diff --git a/docs/chapters/tools/images/if-1.png b/docs/chapters/tools/images/if-1.png new file mode 100644 index 0000000..7c57933 Binary files /dev/null and b/docs/chapters/tools/images/if-1.png differ diff --git a/docs/chapters/tools/images/switch_loop.png b/docs/chapters/tools/images/switch_loop.png new file mode 100644 index 0000000..ab850cc Binary files /dev/null and b/docs/chapters/tools/images/switch_loop.png differ diff --git a/docs/index.adoc b/docs/index.adoc new file mode 100644 index 0000000..7d17380 --- /dev/null +++ b/docs/index.adoc @@ -0,0 +1,18 @@ +:toc: left +:toc-title: Verktygsboken +:toclevels: 4 +:icons: font +:source-highlighter: coderay +:docinfo: private-head +:sourcedir: docs/chapters +:imagesdir: img +:!figure-caption: +:hide-uri-scheme: +:experimental: +:book: + +include::chapters/flow_and_state/chapter.adoc[leveloffset=+1] +include::chapters/goals_and_tools/chapter.adoc[leveloffset=+1] +include::chapters/tools/chapter.adoc[leveloffset=+1] +include::chapters/combining_tools/chapter.adoc[leveloffset=+1] +include::chapters/tool_centered_assignments/chapter.adoc[leveloffset=+1] \ No newline at end of file