├── .gitignore ├── 404.md ├── Gemfile ├── LICENSE ├── README.md ├── _bibliography └── bibliography.bib ├── _config-github.yml ├── _config-stage.yml ├── _config.yml ├── _data └── meta.yml ├── _includes ├── cover ├── footer.html ├── head.html ├── header.html ├── identifiers ├── metadata ├── nav-list ├── page-info ├── pdf ├── pod ├── print-layout │ ├── book.html │ └── elegant.html └── toc ├── _layouts ├── compress.html ├── default.html ├── home.html ├── html-view.html ├── microtypo.html ├── min.html ├── page.html └── print.html ├── _plugins └── replace-regex.rb ├── _sass ├── _code.scss ├── _layout.scss ├── _mixins.scss ├── _normalize.scss ├── _pygments.scss ├── _tables.scss ├── _typography.scss └── main.scss ├── assets ├── css │ ├── main.scss │ └── print.scss ├── fonts │ ├── FiraMono-Bold.woff │ ├── FiraMono-Bold.woff2 │ ├── FiraMono-Medium.woff │ ├── FiraMono-Medium.woff2 │ ├── FiraMono-Regular.woff │ ├── FiraMono-Regular.woff2 │ ├── FiraSans-Italic.woff │ ├── FiraSans-Italic.woff2 │ ├── FiraSans-Regular.woff │ ├── FiraSans-Regular.woff2 │ ├── FiraSans-SemiBold.woff │ ├── FiraSans-SemiBold.woff2 │ ├── FiraSans-SemiBoldItalic.woff │ └── FiraSans-SemiBoldItalic.woff2 ├── icons │ ├── apple-touch-icon.png │ ├── favicon.png │ └── touch-icon.png └── js │ ├── lunr.min.js │ ├── orderedList.js │ └── search.js ├── book ├── fonts │ └── .gitignore ├── fr │ ├── html.md │ ├── index.md │ ├── paged.md │ ├── pdf.md │ ├── pod.md │ └── text │ │ ├── 0-0-cover.md │ │ ├── 0-1-titlepage.md │ │ ├── 0-2-copyright.md │ │ ├── 0-3-acknowledgements.md │ │ ├── 0-4-toc.md │ │ ├── 00-introduction.md │ │ ├── 01-00-chapter.md │ │ ├── 01-01-section-1.md │ │ ├── 01-02-section-2.md │ │ ├── 05-conclusion.md │ │ ├── 104-about.md │ │ ├── 105-back-cover.md │ │ └── index.md ├── html.md ├── images │ ├── _source │ │ └── cover.jpg │ ├── app │ │ └── cover.jpg │ ├── epub │ │ └── cover.jpg │ ├── print-pdf │ │ └── cover.jpg │ ├── screen-pdf │ │ └── cover.jpg │ └── web │ │ ├── cover-1024.jpg │ │ ├── cover-2048.jpg │ │ ├── cover-320.jpg │ │ ├── cover-640.jpg │ │ └── cover.jpg ├── index.md ├── paged.md ├── pdf.md ├── pod.md └── text │ ├── 0-0-cover.md │ ├── 0-1-halftitle.md │ ├── 0-1-titlepage.md │ ├── 0-2-colophon.md │ ├── 0-3-dedication.md │ ├── 0-4-epigraph.md │ ├── 0-5-toc.md │ ├── 0-6-foreword.md │ ├── 0-7-preface.md │ ├── 0-8-acknowledgements.md │ ├── 00-introduction.md │ ├── 01-00-chapter.md │ ├── 01-01-section-1.md │ ├── 01-02-section-2.md │ ├── 05-conclusion.md │ ├── 06-00-appendix.md │ ├── 06-01-appendix-1.md │ ├── 100-glossary.md │ ├── 102-bibliography.md │ ├── 103-index.md │ ├── 104-about.md │ ├── 105-back-cover.md │ └── index.md ├── env-model.json ├── images ├── cc-by-nc-nd.svg ├── cc-by-nc.svg ├── cc-by-nd.svg ├── cc-by-sa.svg ├── cc-by.svg ├── cc-publicdomain.svg ├── cc-srr.svg ├── cc-zero.svg ├── contributors │ └── author.svg ├── image-cover.jpg ├── logo-publisher.png ├── logo-publisher.png~HEAD └── logo-publisher.png~book-structure-meta ├── index.md ├── materials └── journal.md ├── output └── book-a5-20180103.pdf ├── package.json ├── robots.txt ├── rsync-ignore.txt └── search.html /.gitignore: -------------------------------------------------------------------------------- 1 | ### Project ### 2 | env.json 3 | 4 | ### Jekyll ### 5 | /_site/ 6 | .sass-cache 7 | .jekyll-metadata 8 | _site/ 9 | .sass-cache/ 10 | .jekyll-cache/ 11 | .jekyll-metadata 12 | Gemfile.lock 13 | 14 | 15 | ### NPM ### 16 | /node_modules/ 17 | 18 | 19 | ### Atom ### 20 | .ftpconfig 21 | .sftpconfig 22 | 23 | 24 | ### Compiled Source ### 25 | *.com 26 | *.class 27 | *.dll 28 | *.exe 29 | *.o 30 | *.so 31 | 32 | 33 | ### Compressed Packages ### 34 | *.7z 35 | *.dmg 36 | *.gz 37 | *.iso 38 | *.jar 39 | *.rar 40 | *.tar 41 | *.zip 42 | 43 | 44 | ### Logs and Databases ### 45 | *.log 46 | *.sql 47 | *.sqlite 48 | 49 | 50 | ### Linux ### 51 | *~ 52 | .fuse_hidden* 53 | .Trash-* 54 | .nfs* 55 | 56 | 57 | ### MacOS ### 58 | *.DS_Store 59 | .AppleDouble 60 | .LSOverride 61 | Icon 62 | ._* 63 | .DocumentRevisions-V100 64 | .fseventsd 65 | .Spotlight-V100 66 | .TemporaryItems 67 | .Trashes 68 | .VolumeIcon.icns 69 | .com.apple.timemachine.donotpresent 70 | .AppleDB 71 | .AppleDesktop 72 | Network Trash Folder 73 | Temporary Items 74 | .apdisk 75 | 76 | 77 | ### Windows ### 78 | Thumbs.db 79 | ehthumbs.db 80 | ehthumbs_vista.db 81 | Desktop.ini 82 | $RECYCLE.BIN/ 83 | *.cab 84 | *.msi 85 | *.msm 86 | *.msp 87 | *.lnk 88 | 89 | ### Other ### 90 | _vendor 91 | package-lock.json 92 | deploy.js 93 | env.json 94 | -------------------------------------------------------------------------------- /404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Page not found 3 | layout: page 4 | permalink: /404.html 5 | sitemap: false 6 | --- 7 | You have lost your way. 8 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gem 'jekyll', '3.7.2' 4 | 5 | gem 'jekyll-scholar' 6 | 7 | gem 'jekyll-redirect-from' 8 | 9 | gem 'unicode' 10 | 11 | gem 'jgd' 12 | 13 | group :jekyll_plugins do 14 | gem 'jekyll-sitemap', '1.2.0' 15 | gem 'jekyll-microtypo' 16 | gem 'jekyll-figure' 17 | end 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Michael Ravedoni 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

jekyll-book-framework


2 | 5 |
6 | Publish and write a book 7 |
8 |
9 | A jekyll framework for publishing book in multiple format (HTML, PDF, epub) 10 |
11 | 12 |
13 |

14 | Documentation 15 | | 16 | Demo 17 | | 18 | Contributing 19 |

20 |
21 | 22 |
23 | Built with ❤︎ by 24 | Michael Ravedoni and 25 | 26 | contributors 27 | 28 |
29 | 30 | ## Table of Contents 31 | 32 | - [Introduction](#introduction) 33 | - [Features](#features) 34 | - [Usage](#usage) 35 | - [Deployment](#deployment) 36 | - [Documentation](#documentation) 37 | - [Contributing](#contributing) 38 | - [Release History](#release-history) 39 | - [Authors and acknowledgment](#authors-and-acknowledgment) 40 | 41 | ## Introduction 42 | [![license](https://img.shields.io/github/license/mashape/apistatus.svg?style=flat-square)](https://github.com/michaelravedoni/jekyll-book-framework/blob/master/LICENSE) 43 | 44 | This tool is inspired by [Antoine Fauchié](https://gitlab.com/antoinentl)'s excellent [thesis](https://memoire.quaternum.net/) (_Vers un système modulaire de publication : éditer avec le numérique_). The [project](https://gitlab.com/antoinentl/systeme-modulaire-de-publication) on which his thesis was based served as the basis for the development of `jekyll-book-framework`. 45 | 46 | To get an idea, you can see the [demo of this project](https://michaelravedoni.github.io/jekyll-book-framework/). 47 | 48 | ## Features 49 | 50 | - Markdown writing format 51 | - PDF auto generation with [paged.js](https://gitlab.pagedmedia.org/tools/pagedjs) 52 | - Static site generator with [Jekyll](https://jekyllrb.com/) 53 | - Clean interface 54 | 55 | ## Usage 56 | 57 | **Clone** the project using git: 58 | 59 | ```bash 60 | git clone https://github.com/michaelravedoni/jekyll-book-framework.git 61 | cd jekyll-book-framework 62 | ``` 63 | 64 | Or, **download** manually : [Download](https://github.com/michaelravedoni/jekyll-book-framework/archive/master.zip) the project and unzip it. Once done: 65 | 1. Rename the directory with the name you want. For example: `my-book` (`JEKYLL-BOOK-NAME` in the following steps). 66 | 2. Edit the configuration file (`_data/meta.yml`) as needed. 67 | 3. Edit the stylesheet variables located in `book/styles`. 68 | 4. Edit the book/work content files located in `book/text`. 69 | 5. Install the dependencies, start and deploy the project (see below). 70 | 71 | ### Install 72 | To run the project, you have to install [Jekyll](https://jekyllrb.com/docs/installation/) (and therefore [Ruby](https://www.ruby-lang.org/en/documentation/installation/)). Also install [npm](https://www.npmjs.com/get-npm) if you want to easily deploy the FTP life application (see [_deploy_](#deploy)) or to easily run the project. 73 | 74 | After you install [Ruby](https://www.ruby-lang.org/en/documentation/installation/), install the Jekyll CLI: 75 | 76 | ```bash 77 | $ gem install jekyll bundler 78 | ``` 79 | 80 | Enter in your project's folder: 81 | 82 | ```bash 83 | cd JEKYLL-BOOK-NAME 84 | ``` 85 | 86 | Install all Ruby and npm dependencies, such as Jekyll and plugins: 87 | 88 | ```bash 89 | bundle install 90 | npm run install 91 | ``` 92 | 93 | ### Start 94 | To start and serve the project for development, run: 95 | 96 | ```bash 97 | npm run dev 98 | ``` 99 | Preview your local book in your web browser at `http://localhost:4000`. 100 | 101 | To build the component for production, run: 102 | 103 | ```bash 104 | npm run build 105 | ``` 106 | ## Deployment 107 | 108 | At some point you will probably want to publish what you have built so that it can be shared with the wider world. The projects currently supports three methods of deployment: Netlify, Github Pages and Rsync. 109 | 110 | ### Netlify 111 | 112 | Assuming you have created a repository for this project on GitHub, sign up or log in to [Netlify](https://www.netlify.com/) using your GitHub account. 113 | 114 | 1. Click the big button labeled *new site from Git* 115 | 2. Select your repository 116 | 3. Configure the basic build settings: choose appropriate branch (`master` by default) 117 | 4. You can set the default build command to `jekyll` and the publish directory to `_site/`, but this is not necessare since the `netlify.toml` file has all the information pre-configured. 118 | 5. Netlify will auto-generate a site URL for you, or you can set it yourself. The default example uses `http://JEKYLL-BOOK-NAME.netlify.com`. Set this as your `baseurl` in `_config.yml`. 119 | 6. Now, every time you push up a commit to `master` on GitHub, Netlify will automatically rebuild your site using the settings in `netlify.toml`. Pretty cool! 120 | 121 | ### GitHub Pages 122 | 123 | Unlike Netlify, GitHub Pages does not support continuous deployment. This means you will need to manually deploy the site by running a script provided in `bin/github-deploy.sh` in the project folder. 124 | 125 | 1. In `_config-github.yml`, set the `baseurl` in the format that GitHub Pages expects (https://yourusername.github.io/JEKYLL-BOOK-NAME for most sites). 126 | 2. At this point you can run `bin/github-deploy.sh` and everything will be pushed up to GitHub on the `gh-pages` branch: 127 | 128 | ```bash 129 | npm run deploy-github 130 | ``` 131 | 132 | It may take a few moments for everything to become visible online. If you get git errors when deploying because of upstream changes, you can always delete the `gh-pages` branch on GitHub and re-run the deploy script. 133 | 134 | If you want, you can remove the `_site` directory from your `.gitignore` file so that you can check built files into version control. 135 | 136 | ### Via FTP (RSync) 137 | Any web server capable of hosting static files will work (S3, FTP server, etc.). For deploying the site via FTP (RSync), follow this instructions. In the main project folder `/`, run (if not already done) : 138 | ```bash 139 | npm install 140 | ``` 141 | 142 | Rename the `env-model.json` file in `env.json` and open-it. Then fill the ``, `` and `` with your FTP remote server informations. For example: 143 | ```bash 144 | username_example@example.ftp.com:web/JEKYLL-BOOK-NAME/ 145 | ``` 146 | 147 | Then, to deploy the app, run : 148 | ```bash 149 | npm run stage #For testing on your test server 150 | npm run stage-dry #If you want to run a dry test 151 | 152 | npm run deploy-rsync #For the production server 153 | npm run deploy-rsync-dry #If you want to run a dry test 154 | ``` 155 | 156 | ## Documentation 157 | 158 | ### Architecture 159 | 160 | - `data/meta.yml`: Contains all the metadata of the project and the book. Change the variables on your needs. 161 | 162 | - `book`: Contains all the contents of the book. `book/text` contains all the markdown files. If you have a translation, `book/fr` contains the translated book. 163 | 164 | - `index.md`: Home page of the book (editable) 165 | 166 | - `_bibliography`: Contains the bibliographys in BibTex format (.bib file) necessary for the [jekyll-scholar](https://github.com/inukshuk/jekyll-scholar) plugin 167 | 168 | - `materials`: Directory containing all the files (image, text, media) and drafts of the book for discussion 169 | 170 | - `images`: Directory containing the files and images necessary for the book 171 | 172 | - `output` : Directory containing the output formats of the book 173 | 174 | - `_includes`, `_layouts`, `_sass`, `_plugins` and others: Files necessary for the working of Jekyll 175 | 176 | All the files and directories can be modified for customization and your own needs. 177 | 178 | ### Branches 179 | 180 | For each development or writing idea, we recommend creating a specific branch in your project. This will facilitate project discussions and monitoring. 181 | 182 | ### Commits format 183 | To make the use of Git more understandable, here is a list of conventions for writing _commits_: 184 | 185 | - `admin` : technical management of the repository or site 186 | - `style` : styles 187 | - `edit` : content edition 188 | - `fix` : correction, modification following a remark 189 | - `org` : organization of files, repository, site 190 | - `gen` : automation for the generation of the different files and formats 191 | - `test` : test (but normally reported in a specific branch) 192 | 193 | ## Contributing 194 | 195 | We’re really happy to accept contributions from the community, that’s the main reason why we open-sourced it! There are many ways to contribute, even if you’re not a technical person. 196 | 197 | 1. [Fork](https://help.github.com/articles/fork-a-repo/) this [project](https://github.com/michaelravedoni/jekyll-book-framework) 198 | 2. Create your feature branch (`git checkout -b feature/fooBar`) 199 | 3. Commit your changes (`git commit -am 'Add some fooBar'`) 200 | 4. Push to the branch (`git push origin feature/fooBar`) 201 | 5. Create a new Pull Request 202 | 203 | ## Release History 204 | 205 | You will find the releases history in the [release](https://github.com/michaelravedoni/jekyll-book-framework/releases) section. For more detail, you can check the [changelog.md](https://github.com/michaelravedoni/jekyll-book-framework/blob/master/CHANGELOG.md) file. 206 | 207 | ## Roadmap 208 | 209 | - Styles and css restructuration 210 | - i18n 211 | - auto pdf genarator 212 | - epub, mobi and markdown export 213 | - create different work layouts 214 | - define a workflow (version, edition, translation) 215 | - create template for git issues (Github and GitLab) 216 | - create deploy command for GitLab 217 | 218 | ## Authors and acknowledgment 219 | 220 | * **Michael Ravedoni** - *Initial work* - [michaelravedoni](https://github.com/michaelravedoni) 221 | * **Antoine Fauchié** - *Inspirated work and [project](https://gitlab.com/antoinentl/systeme-modulaire-de-publication)* - [antoinentl](https://gitlab.com/antoinentl) 222 | 223 | See also the list of [contributors](https://github.com/michaelravedoni/jekyll-book-framework/contributors) who participated in this project. 224 | 225 | * **[electric-book](https://github.com/electricbookworks/electric-book)** - *Inspiration* - [Electric Book Works](https://electricbookworks.com/) 226 | * **[Quire](https://github.com/gettypubs/quire)** - *Inspiration* - [Getty Publications](https://github.com/gettypubs) 227 | 228 | ## License 229 | 230 | [MIT License](https://opensource.org/licenses/MIT) 231 | -------------------------------------------------------------------------------- /_bibliography/bibliography.bib: -------------------------------------------------------------------------------- 1 | 2 | @phdthesis{arribe_conception_2014, 3 | title = {Conception des chaînes éditoriales}, 4 | url = {https://ics.utc.fr/~tha/co/Home.html}, 5 | abstract = {Les travaux présentés dans ce mémoire traitent de la conception des chaînes éditoriales numériques XML : des logiciels de production documentaire qui outillent la rédaction de fragments et l'assemblage de ces fragments pour former des documents. La publication des documents s'opère par transformation de fragments XML en documents numériques aux formats standards. La composition des fragments permet d'instrumenter la rééditorialisation documentaire soit l'usage de contenus existants dans la rédaction de documents originaux.}, 6 | language = {fr-FR}, 7 | urldate = {2017-11-28}, 8 | school = {Université de Technologie de Compiègne}, 9 | author = {Arribe, Thibaut}, 10 | month = nov, 11 | year = {2014} 12 | } 13 | 14 | @misc{attwell_i_2017, 15 | title = {I love you, {InDesign}, but it’s time to let you go}, 16 | shorttitle = {Fire and {Lion}}, 17 | url = {https://electricbookworks.com/thinking/i-love-you-indesign-but/}, 18 | abstract = {I love you, InDesign, but it’s time to let you go. We just can’t be together in a multi-format world.}, 19 | urldate = {2018-03-28}, 20 | journal = {Electric Book Works}, 21 | author = {Attwell, Arthur}, 22 | month = may, 23 | year = {2017}, 24 | file = {Snapshot:/home/antoine/.mozilla/firefox/ld3vjrvs.default/zotero/storage/D8CS94H3/Fire and Lion I love you, InDesign, but it’s time.html:text/html} 25 | } 26 | 27 | @book{chacon_pro_2018, 28 | title = {Pro {Git} {Book}}, 29 | url = {https://git-scm.com/book/fr/v2/}, 30 | language = {fr-FR}, 31 | urldate = {2018-05-07}, 32 | author = {Chacon, Scott and Straub, Ben}, 33 | year = {2018}, 34 | file = {Git - Book:/home/antoine/.mozilla/firefox/ld3vjrvs.default/zotero/storage/UZVNQ4CQ/v2.html:text/html} 35 | } 36 | -------------------------------------------------------------------------------- /_config-github.yml: -------------------------------------------------------------------------------- 1 | # Live website build config 2 | # Use this to override defaults in _config.yml 3 | 4 | # This is the live build 5 | build: live 6 | 7 | # Canonical URL 8 | # ------------- 9 | # To make absolute links work, e.g. in canonical links in , 10 | # include the url where this site will live when it's live (production). 11 | # E.g. canonical-url: "http://example.com" 12 | canonical-url: "" 13 | 14 | # Base URL 15 | # -------- 16 | # If you're using GitHub Pages without a custom domain, make this 17 | # the name of your repo, e.g. /electric-book 18 | # It must start with a slash. Otherwise you can leave it blank. See: 19 | # http://downtothewire.io/2015/08/15/configuring-jekyll-for-user-and-project-github-pages/ 20 | baseurl: "/jekyll-book-framework" 21 | 22 | # GitHub Pages repository 23 | # ----------------------- 24 | # If you're publishing a website on GitHub Pages 25 | # and want to ensure you're using a compatible setup, 26 | # add username/repository here and uncomment/enable 27 | # gem 'github-pages', group: :jekyll_plugins 28 | # in this project's Gemfile. 29 | repository: "" 30 | -------------------------------------------------------------------------------- /_config-stage.yml: -------------------------------------------------------------------------------- 1 | # ---- 2 | # Site 3 | 4 | url : "https://ravedoni.com" 5 | 6 | # This is the live build 7 | build: live 8 | 9 | # Canonical URL 10 | # ------------- 11 | # To make absolute links work, e.g. in canonical links in , 12 | # include the url where this site will live when it's live (production). 13 | # E.g. canonical-url: "http://example.com" 14 | canonical-url: "" 15 | 16 | # Base URL 17 | # -------- 18 | # If you're using GitHub Pages without a custom domain, make this 19 | # the name of your repo, e.g. /electric-book 20 | # It must start with a slash. Otherwise you can leave it blank. See: 21 | # http://downtothewire.io/2015/08/15/configuring-jekyll-for-user-and-project-github-pages/ 22 | baseurl: "/test/jekyll-book-framework" 23 | 24 | # GitHub Pages repository 25 | # ----------------------- 26 | # If you're publishing a website on GitHub Pages 27 | # and want to ensure you're using a compatible setup, 28 | # add username/repository here and uncomment/enable 29 | # gem 'github-pages', group: :jekyll_plugins 30 | # in this project's Gemfile. 31 | repository: "" 32 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | # ---- 2 | # Site 3 | 4 | title : "Site title" 5 | url : "" 6 | google_analytics_key: "" 7 | show_full_navigation: false 8 | 9 | # Serving 10 | port : 4000 11 | host : 127.0.0.1 12 | show_dir_listing : false 13 | 14 | # ---- 15 | # Book 16 | 17 | bookTitle : "Book title" # Required 18 | shortTitle : "Short book title" 19 | description : "Book short description" 20 | creators: 21 | - lastName : lastName 22 | firstName : firstName 23 | affiliation : affiliation 24 | email : authorname@domain.com 25 | twitter : "@authorname" 26 | sameAs : 27 | - https://authorname.com/ 28 | - lastName : lastName 2 29 | firstName : firstName 2 30 | creatorType : Directeur 31 | affiliation : affiliation 2 32 | email : authorname2@domain.com 33 | twitter : "@authorname2" 34 | publisher : Publisher 35 | cc : CC-BY # Choose a Creative Commons license (https://creativecommons.org/choose/) 36 | date : 2018-01-01 37 | pdf : #"/doc/book.pdf" # If different from generated 38 | pod : # Print-on-demand version 39 | markdownD : #todo 40 | epub : #todo 41 | mobi : #todo 42 | isbn : 9780030426599 43 | lang : fr 44 | isFamilyFriendly : true 45 | genre : 46 | funder : 47 | 48 | abstract_locale: "David se rappelait de ce programme mélangeant deux anciennes technologies. Il s’en souvenait très bien, cinq années de travail acharné pour réaliser un vieux rêve d’enfant un peu solitaire. Il voulait un ami et il avait trouvé en l’informatique la possibilité d’avoir cet ami. Un ami capable de réfléchir vite, exempt de sentiment. C’est lui aussi qui était à la base du dernier processeur, le sphéro. Un processeur ayant une architecture en forme de sphère et capable de traiter les informations à une vitesse jamais atteinte. Tous les ordinateurs en étaient équipés. Le créateur officiel, le Dr. Stewart Davis, n’était bien sûr pas au courant de la présence de Prélude dans son projet. Prélude avait simplement suggéré légèrement au Dr. En modifiant légèrement ses documents." 49 | keywords_locale: "édition, livre, chaîne d'édition, chaîne de publication, traitement de texte, logiciel de publication assistée par ordinateur, livre numérique" 50 | 51 | abstract: "Encouraging others to adopt the same licensing practices meant closing off the escape hatch that had allowed privately owned versions of Emacs to emerge. To close that escape hatch, Stallman and his free software colleagues came up with a solution: users would be free to modify GNU Emacs just so long as they published their modifications. In addition, the resulting works would also have carry the same GNU Emacs License. 52 | The word is a weighted term in the Stallman lexicon. In a pointed swipe at his parents, Stallman, to this day, refuses to acknowledge any home before Currier House, the dorm he lived in during his days at Harvard. He has also been known to describe leaving that home in tragicomic terms. Once, while describing his years at Harvard, Stallman said his only regret was getting kicked out. It wasn't until I asked Stallman what precipitated his ouster, that I realized I had walked into a classic Stallman setup line." 53 | keywords: "publishing, book, publishing chain, word processor, desktop publishin software, ebook" 54 | 55 | status : draft # draft, revised, published 56 | version : v1.0 57 | versiondate : 2018-11-20 58 | 59 | # ----- 60 | # Book links 61 | 62 | aboutUrl : /8-about/ 63 | 64 | # ----- 65 | # Logo and image 66 | 67 | logo : assets/icon/favicon.png 68 | 69 | # Language 70 | # -------- 71 | # The primary language used in this project. You can set the language 72 | # for each book individually below at 'defaults'. 73 | # To understand what language tags to use, read: 74 | # http://www.w3.org/International/articles/language-tags/ 75 | # For the registry of tags: 76 | # http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry 77 | # Useful lookup tool: http://r12a.github.io/apps/subtags/ 78 | language: en 79 | 80 | # Gem-based theme 81 | # --------------- 82 | # Are you importing a gem-based theme? By default we do not. 83 | # If you are, remove the # before `theme:` and enter your theme's gem name. 84 | # If you're using GitHub Pages, note that it may not support your theme. 85 | # theme: your-theme-gem-name-here 86 | 87 | # Custom-edition variable 88 | # ----------------------- 89 | # Which edition are we creating? You can leave this as `default`. 90 | # This can be used to create different editions of a book using 91 | # Liquid control-flow tags, e.g. in includes, layouts and file-list 92 | edition: "default" 93 | 94 | # Canonical URL 95 | # ------------- 96 | # To make absolute links work, e.g. in canonical links in , 97 | # include the url where this site will live when it's live (production). 98 | # E.g. canonical-url: "http://example.com" 99 | canonical-url: "http://example.com" 100 | 101 | # Base URL 102 | # -------- 103 | # If you're using GitHub Pages without a custom domain, make this 104 | # the name of your repo, e.g. /electric-book 105 | # It must start with a slash. Otherwise you can leave it blank. See: 106 | # http://downtothewire.io/2015/08/15/configuring-jekyll-for-user-and-project-github-pages/ 107 | baseurl: "" 108 | 109 | # GitHub Pages repository 110 | # ----------------------- 111 | # If you're publishing a website on GitHub Pages 112 | # and want to ensure you're using a compatible setup, 113 | # add username/repository here and uncomment/enable 114 | # gem 'github-pages', group: :jekyll_plugins 115 | # in this project's Gemfile. 116 | repository: "" 117 | 118 | # Navigation 119 | # ---------- 120 | # Web navigation source: select either files or nav 121 | # files: navigation will be taken from the web files list in `meta.yml` 122 | # nav: navigation will be taken from the web nav tree in `meta.yml`. 123 | # nav is more powerful, and allows submenu nesting; 124 | # files is quicker, because you don't have to create nav yaml, 125 | # only a files list. 126 | nav-source: nav 127 | 128 | # ----- 129 | # Metadata 130 | 131 | google_site_verification: 132 | schema: 133 | type : Book # Required 134 | 135 | # ----- 136 | # Build 137 | 138 | locale : fr 139 | encoding : UTF-8 140 | timezone : Etc/UTC 141 | permalink : pretty 142 | 143 | plugins: 144 | - jekyll-sitemap 145 | - jekyll-scholar 146 | - jekyll-microtypo 147 | - jekyll-redirect-from 148 | 149 | exclude: 150 | - Gemfile 151 | - Gemfile.lock 152 | - README.md 153 | - LICENSE 154 | - materials 155 | - package.json 156 | - package-lock.json 157 | - rsync-ignore.txt 158 | - env.json 159 | - env-model.json 160 | - bin 161 | 162 | 163 | defaults: 164 | - 165 | scope: 166 | path: "" 167 | values: 168 | layout: default 169 | 170 | # -------------- 171 | # Jekyll Scholar 172 | 173 | scholar: 174 | style : american-political-science-association 175 | locale : fr 176 | source : _bibliography 177 | bibliography : bibliography.bib 178 | relative : "/6-appendices/bibliography/" 179 | sort_by : author 180 | bibliography_list_tag : ul 181 | 182 | # -------------- 183 | # Jekyll Microtypo 184 | 185 | microtypo: 186 | median: true 187 | -------------------------------------------------------------------------------- /_includes/cover: -------------------------------------------------------------------------------- 1 | {% include metadata %} 2 | 3 | {% comment %}Assign the default image filename to image{% endcomment %} 4 | {% assign image = "cover.jpg" %} 5 | 6 | {% comment %}Let the user specify a different image file{% endcomment %} 7 | {% if include.image %} 8 | {% capture image %}{{ include.image }}{% endcapture %} 9 | {% endif %} 10 | 11 | {% comment %} 12 | Adjust HTML based on output format. 13 | * For web, link the cover to the start page. 14 | * For other outputs use just the image. 15 | {% endcomment %} 16 | 17 | {% if site.output == "web" %} 18 | 19 | {% assign image-filetype = image | split: "." %} 20 | {% assign image-without-filetype = image | replace: image-filetype[1], "" | replace: ".", "" %} 21 | 22 |

23 | 24 | {% elsif site.output == "paged-view" %} 25 | 26 | {% comment %}Add the cover to the PDF bookmarks without displaying it{% endcomment %} 27 |

Cover

28 | 29 |

30 | 31 |

32 | 33 | {% elsif site.output == "app" %} 34 | 35 |

36 | 37 | {{ title }} 38 | 39 |

40 | 41 | {% else %} 42 | 43 |

{{ title }}

44 | 45 | {% endif %} 46 | -------------------------------------------------------------------------------- /_includes/footer.html: -------------------------------------------------------------------------------- 1 | 5 | 6 | 7 | 8 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /_includes/head.html: -------------------------------------------------------------------------------- 1 | {%- include metadata -%} 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | {% if title %}{{ title }}{% if page.title %}: {{ page.title }}{% endif %}{% else %}{{ project-name }}{% if page.title %}: {{ page.title }}{% endif %}{% endif %} 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | {% if site.google_site_verification %}{% endif %} 18 | 19 | {% if site.canonical-url and site.canonical-url != "" %} 20 | 21 | {% endif %} 22 | 23 | 24 | 25 | {% for creator in work.creators %} 26 | 27 | {% endfor %} 28 | {% for contributor in work.contributors %} 29 | 30 | {% endfor %} 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | {% for s in work.subjects %} 41 | 42 | {% endfor %} 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | {% for creator in work.creators %} 63 | 64 | {% endfor %} 65 | {% if work.date %}{% endif %} 66 | {% if site.pdf %}{% endif %} 67 | 68 | {% if work.language %}{% endif %} 69 | {% if work.identifiers.isbn %}{% endif %} 70 | 71 | 72 | 142 | 143 | 144 | -------------------------------------------------------------------------------- /_includes/header.html: -------------------------------------------------------------------------------- 1 | {% include metadata %} 2 | 3 |
4 |

5 | {{project-name}} 6 | 7 |

8 | 9 | 52 |
53 | 54 | 59 | -------------------------------------------------------------------------------- /_includes/identifiers: -------------------------------------------------------------------------------- 1 | {% capture identifiers-html %} 2 | {% include metadata %} 3 | 4 | {% if include.scheme %} 5 | {% capture scheme %}{{ include.scheme }}{% endcapture %} 6 | {% endif %} 7 | 8 |

9 | 10 | {% comment %} We don't have line breaks between spans below 11 | so that we can control spacing with CSS. {% endcomment %} 12 | 13 | {% if print-pdf-identifier and print-pdf-identifier != "" %} 14 | 15 | {{ scheme }}{% if print-pdf-format and print-pdf-format != "" %} ({{ print-pdf-format }}){% endif %}: {{ print-pdf-identifier }} 16 | 17 |
18 | {% elsif identifier and identifier != "" %} 19 | 20 | {{ scheme }}: {{ identifier }} 21 | 22 |
23 | {% else %} 24 | {% endif %} 25 | 26 | {% if paged-view-identifier and paged-view-identifier != "" %} 27 | 28 | {{ scheme }}{% if paged-view-format and paged-view-format != "" %} ({{ paged-view-format }}){% endif %}: {{ paged-view-identifier }} 29 | 30 |
31 | {% endif %} 32 | 33 | {% if epub-identifier and epub-identifier != "" %} 34 | 35 | {{ scheme }}{% if epub-format and epub-format != "" %} ({{ epub-format }}){% endif %}: {{ epub-identifier }} 36 | 37 |
38 | {% endif %} 39 | 40 | {% if web-identifier and web-identifier != "" %} 41 | 42 | {{ scheme }}{% if web-format and web-format != "" %} ({{ web-format }}){% endif %}: {{ web-identifier }} 43 | 44 |
45 | {% endif %} 46 | 47 |

48 | {% endcapture %}{{ identifiers-html | strip_newlines | strip }} -------------------------------------------------------------------------------- /_includes/nav-list: -------------------------------------------------------------------------------- 1 | {% assign url_parts = page.url | split: '/' %} 2 | {% assign url_parts_size = url_parts | size %} 3 | {% assign rm = url_parts | last %} 4 | {% capture rm_slash %}{{rm}}/{% endcapture %} 5 | {% assign base_url = page.url | replace: rm_slash %} 6 | 7 | 8 | {% comment %}Create a nav list{% endcomment %} 9 |
    10 | {% for nav in web-nav-tree %} 11 | {% comment %} set "current" class on current page {% endcomment %} 12 | 13 | {% capture nav_url %}{{ work-url-contents-directory }}/{{ nav.file }}/{% endcapture %} 14 | {% capture nav_file_number %}{{ nav.file | split: '-' | first' }}{% endcapture %} 15 | {% capture nav_page_number %}{{ page.name | split: '-' | first' }}{% endcapture %} 16 | 17 | {% if page.url == nav_url or nav_file_number == nav_page_number or (nav_url == base_url and nav.file == nav.children[0].file) %} 18 | {% assign active = "current" %} 19 | {% else %} 20 | {% assign active = "no-url" %} 21 | {% endif %} 22 | 23 | 52 | {% endfor %} 53 |
54 | -------------------------------------------------------------------------------- /_includes/pdf: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Get the file metadata. 3 | {% endcomment %} 4 | {% include metadata %} 5 | 6 |
7 |

Generated

8 | {% for f in work.products['print-pdf'].generated %} 9 |
10 | {{f.name}} {{f.date|date: '%d.%m.%Y'}} ({{f.size}} - {{f.color}})Get file 11 |
12 | {% endfor %} 13 |
14 | 15 | 23 | -------------------------------------------------------------------------------- /_includes/pod: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Get the file metadata. 3 | {% endcomment %} 4 | {% include metadata %} 5 | 6 |
7 | {% for f in work.products.pod.formats %} 8 |
9 | {{f.name}} ({{f.size}}-{{f.color}}) → {{f.provider}} for {{f.price}} 10 |
11 | {% endfor %} 12 |
13 | -------------------------------------------------------------------------------- /_includes/print-layout/book.html: -------------------------------------------------------------------------------- 1 | {% include metadata %} 2 | 3 |
4 | {% for page in site.pages %} 5 | {% assign cover_name = paged-view-file-list.cover %} 6 | {% capture cover_url %}{{work-url-contents-directory}}/{{ cover_name | split: "." | first }}/{% endcapture %} 7 | {% if cover_url == page.url %} 8 | {{page.content|markdownify}} 9 | {% endif %} 10 | {% endfor %} 11 |
12 | 13 | 14 |
15 | {% for page in site.pages %} 16 | {% for file in paged-view-file-list.front_matter %} 17 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 18 | {% if file_url == page.url %} 19 |
20 | {{page.content|markdownify}} 21 |
22 | {% endif %} 23 | {% endfor %} 24 | {% endfor %} 25 |
26 | 27 | 28 | {% for page in site.pages %} 29 | {% for file in paged-view-file-list.body_matter %} 30 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 31 | {% if file_url == page.url %} 32 |
33 |

{{file.label}}

34 | {{page.content|markdownify}} 35 |
36 | {% endif %} 37 | {% endfor %} 38 | {% endfor %} 39 | 40 | 41 | {% for page in site.pages %} 42 | {% for file in paged-view-file-list.back_matter %} 43 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 44 | {% if file_url == page.url %} 45 |
46 | {{page.content|markdownify}} 47 |
48 | {% endif %} 49 | {% endfor %} 50 | {% endfor %} 51 | -------------------------------------------------------------------------------- /_includes/print-layout/elegant.html: -------------------------------------------------------------------------------- 1 | {% include metadata %} 2 |
3 |
4 |
5 |

{{title}}

6 |

{{subtitle}}

7 |

{% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}

8 |

{{work.description.full}}

9 |

{{work.date|date: '%Y'}} — {{work.publisher.name}}
{{work.status}} – {{ work.version}}

10 | 11 |
12 |
13 |
14 |

15 | {{title}}
16 | by {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}

17 |

18 | {{work.rights}}
19 | Printed in the Universe.
20 | Published by {{work.publisher.name}}, {{work.publisher.location}} 21 |

22 | 23 |
{% for contributor in work.contributors %}{{contributor.role}}: {{contributor.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}
{% endif %}{% endfor %}
24 | 25 |

History:
26 | {% for r in work.revision_history %} 27 | {{r.date|date: '%d.%m.%Y'}}: {{r.summary}}{% if forloop.last == true %}{% else %}
{% endif %} 28 | {% endfor %} 29 |

30 | 31 |

{{work.license.some_exceptions}}

32 | 33 |

{{work.license.full}}

34 | 35 |

{{work.disclaimers}}

36 | 37 |

38 | {% if isbn != nil %}ISBN: {{isbn}}{% endif %} 39 | {% if issn != nil %}ISSN: {{issn}}{% endif %} 40 | {% if doi != nil %}DOI: {{doi}}{% endif %} 41 | {% if pid != nil %}{{pid}}{% endif %} 42 |

43 |
44 |
45 |
46 |

Résumé

47 |

{{ work.abstract }}

48 |

Mots-clés : {{ work.keywords }}

49 |

Abstract

50 |

{{ work.abstract_en }}

51 |

Keywords : {{ work.keywords_en }}

52 |
53 |
54 |
55 |

Acknowledgements

56 |

A page of acknowledgements is usually included at the beginning of a Final Year Project, immediately after the Table of Contents.

57 |

Acknowledgements enable you to thank all those who have helped in carrying out the research. Careful thought needs to be given concerning those whose help should be acknowledged and in what order. The general advice is to express your appreciation in a concise manner and to avoid strong emotive language.

58 |
59 |
60 |

Table of contents

61 | 72 |
73 |
74 |
75 |
76 | {% comment %}Get an array of all the pages we've output to check against{% endcomment %} 77 | {% assign screen_pdf_page_list = "" | split: "|" %} 78 | {% for page in site.pages %} 79 | {% for file in site.data.meta.work.products['paged-view'].body_matter %} 80 | {% capture file_url %}/{{book-directory}}{% if is-book-subdirectory %}/{{book-subdirectory}}{% endif %}{{work.contents_directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 81 | {% if file_url == page.url %} 82 |

{{file.label}}

83 | {{page.content}} 84 | {% assign screen_pdf_page_list = screen_pdf_page_list | push: page.content %} 85 | {% endif %} 86 | {% endfor %} 87 | {% endfor %} 88 | {{ content }} 89 |
90 | -------------------------------------------------------------------------------- /_includes/toc: -------------------------------------------------------------------------------- 1 | {% comment %} 2 | Get the file metadata. 3 | {% endcomment %} 4 | {% include metadata %} 5 | 6 | {% comment %} 7 | Now check which output format we're creating, and capture its toc. 8 | Fall back to print-pdf toc, then web nav list. 9 | {% endcomment %} 10 | 11 | {% if site.output == "print-pdf" %} 12 | {% if print-pdf-toc != nil %} 13 | {% assign toc = print-pdf-toc %} 14 | {% elsif web-nav-tree != nil %} 15 | {% assign toc = web-nav-tree %} 16 | {% else %} 17 | Please define a TOC or web nav in meta.yml. 18 | {% endif %} 19 | 20 | {% elsif site.output == "paged-view" %} 21 | {% if paged-view-toc != nil %} 22 | {% assign toc = paged-view-toc %} 23 | {% elsif print-pdf-toc != nil %} 24 | {% assign toc = print-pdf-toc %} 25 | {% elsif web-nav-tree != nil %} 26 | {% assign toc = web-nav-tree %} 27 | {% else %} 28 | Please define a TOC or web nav in meta.yml. 29 | {% endif %} 30 | 31 | {% elsif site.output == "epub" %} 32 | {% if epub-toc != nil %} 33 | {% assign toc = epub-toc %} 34 | {% elsif print-pdf-toc != nil %} 35 | {% assign toc = print-pdf-toc %} 36 | {% elsif web-nav-tree != nil %} 37 | {% assign toc = web-nav-tree %} 38 | {% else %} 39 | Please define a TOC or web nav in meta.yml. 40 | {% endif %} 41 | 42 | {% elsif site.output == "web" %} 43 | {% if web-toc != nil %} 44 | {% assign toc = web-toc %} 45 | {% elsif web-nav-tree != nil %} 46 | {% assign toc = web-nav-tree %} 47 | {% elsif print-pdf-toc != nil %} 48 | {% assign toc = print-pdf-toc %} 49 | {% else %} 50 | Please define a TOC or web nav in meta.yml. 51 | {% endif %} 52 | 53 | {% elsif site.output == "app" %} 54 | {% if app-toc != nil %} 55 | {% assign toc = app-toc %} 56 | {% elsif app-nav-tree != nil %} 57 | {% assign toc = app-nav-tree %} 58 | {% elsif web-toc != nil %} 59 | {% assign toc = web-toc %} 60 | {% elsif web-nav-tree != nil %} 61 | {% assign toc = web-nav-tree %} 62 | {% elsif print-pdf-toc != nil %} 63 | {% assign toc = print-pdf-toc %} 64 | {% else %} 65 | Please define a TOC or web nav in meta.yml. 66 | {% endif %} 67 | 68 | {% else %} 69 | {% if web-nav-tree != nil %} 70 | {% assign toc = web-nav-tree %} 71 | {% elsif print-pdf-toc != nil %} 72 | {% assign toc = print-pdf-toc %} 73 | {% else %} 74 | Please define a TOC or web nav in meta.yml. 75 | {% endif %} 76 | 77 | {% endif %} 78 | 79 | {% comment %} 80 | If the file that called this include didn't specify a start parameter, then 81 | it must be the calling entire toc from the top. If so, then 82 | we want the toc-branch to include the entire site.output-specific toc defined above. 83 | Otherwise, the toc-branch should be the children called by this include recursively. 84 | {% endcomment %} 85 | 86 | {% assign toc-branch = include.start %} 87 | 88 | {% if toc-branch == nil %} 89 | {% assign toc-branch = toc %} 90 | {% endif %} 91 | 92 | {% comment %} 93 | Now we'll use all that to output the toc list. 94 | {% endcomment %} 95 | 96 | {% comment %}If we're making an epub, and we're starting 97 | at the top of the toc, put this in a nav element.{% endcomment %} 98 | {% if site.output == "epub" and toc-branch == epub-toc or toc-branch == print-pdf-toc or toc-branch == web-nav-tree %} 99 | 146 | {% endif %} 147 | -------------------------------------------------------------------------------- /_layouts/compress.html: -------------------------------------------------------------------------------- 1 | --- 2 | # Jekyll layout that compresses HTML 3 | # v3.0.4 4 | # http://jch.penibelst.de/ 5 | # © 2014–2015 Anatol Broder 6 | # MIT License 7 | --- 8 | 9 | {% capture _LINE_FEED %} 10 | {% endcapture %}{% if site.compress_html.ignore.envs contains jekyll.environment %}{{ content }}{% else %}{% capture _content %}{{ content }}{% endcapture %}{% assign _profile = site.compress_html.profile %}{% if site.compress_html.endings == "all" %}{% assign _endings = "html head body li dt dd optgroup option colgroup caption thead tbody tfoot tr td th" | split: " " %}{% else %}{% assign _endings = site.compress_html.endings %}{% endif %}{% for _element in _endings %}{% capture _end %}{% endcapture %}{% assign _content = _content | remove: _end %}{% endfor %}{% if _profile and _endings %}{% assign _profile_endings = _content | size | plus: 1 %}{% endif %}{% for _element in site.compress_html.startings %}{% capture _start %}<{{ _element }}>{% endcapture %}{% assign _content = _content | remove: _start %}{% endfor %}{% if _profile and site.compress_html.startings %}{% assign _profile_startings = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.comments == "all" %}{% assign _comments = "" | split: " " %}{% else %}{% assign _comments = site.compress_html.comments %}{% endif %}{% if _comments.size == 2 %}{% capture _comment_befores %}.{{ _content }}{% endcapture %}{% assign _comment_befores = _comment_befores | split: _comments.first %}{% for _comment_before in _comment_befores %}{% if forloop.first %}{% continue %}{% endif %}{% capture _comment_outside %}{% if _carry %}{{ _comments.first }}{% endif %}{{ _comment_before }}{% endcapture %}{% capture _comment %}{% unless _carry %}{{ _comments.first }}{% endunless %}{{ _comment_outside | split: _comments.last | first }}{% if _comment_outside contains _comments.last %}{{ _comments.last }}{% assign _carry = false %}{% else %}{% assign _carry = true %}{% endif %}{% endcapture %}{% assign _content = _content | remove_first: _comment %}{% endfor %}{% if _profile %}{% assign _profile_comments = _content | size | plus: 1 %}{% endif %}{% endif %}{% assign _pre_befores = _content | split: "" %}{% assign _pres_after = "" %}{% if _pres.size != 0 %}{% if site.compress_html.blanklines %}{% assign _lines = _pres.last | split: _LINE_FEED %}{% capture _pres_after %}{% for _line in _lines %}{% assign _trimmed = _line | split: " " | join: " " %}{% if _trimmed != empty or forloop.last %}{% unless forloop.first %}{{ _LINE_FEED }}{% endunless %}{{ _line }}{% endif %}{% endfor %}{% endcapture %}{% else %}{% assign _pres_after = _pres.last | split: " " | join: " " %}{% endif %}{% endif %}{% capture _content %}{{ _content }}{% if _pre_before contains "" %}{% endif %}{% unless _pre_before contains "" and _pres.size == 1 %}{{ _pres_after }}{% endunless %}{% endcapture %}{% endfor %}{% if _profile %}{% assign _profile_collapse = _content | size | plus: 1 %}{% endif %}{% if site.compress_html.clippings == "all" %}{% assign _clippings = "html head title base link meta style body article section nav aside h1 h2 h3 h4 h5 h6 hgroup header footer address p hr blockquote ol ul li dl dt dd figure figcaption main div table caption colgroup col tbody thead tfoot tr td th" | split: " " %}{% else %}{% assign _clippings = site.compress_html.clippings %}{% endif %}{% for _element in _clippings %}{% assign _edges = " ;; ;" | replace: "e", _element | split: ";" %}{% assign _content = _content | replace: _edges[0], _edges[1] | replace: _edges[2], _edges[3] | replace: _edges[4], _edges[5] %}{% endfor %}{% if _profile and _clippings %}{% assign _profile_clippings = _content | size | plus: 1 %}{% endif %}{{ _content }}{% if _profile %}
Step Bytes
raw {{ content | size }}{% if _profile_endings %}
endings {{ _profile_endings }}{% endif %}{% if _profile_startings %}
startings {{ _profile_startings }}{% endif %}{% if _profile_comments %}
comments {{ _profile_comments }}{% endif %}{% if _profile_collapse %}
collapse {{ _profile_collapse }}{% endif %}{% if _profile_clippings %}
clippings {{ _profile_clippings }}{% endif %}
{% endif %}{% endif %} 11 | -------------------------------------------------------------------------------- /_layouts/default.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: microtypo 3 | --- 4 | 5 | {% include metadata %} 6 | {% include head.html %} 7 | 8 | {% include header.html %} 9 | 10 |
11 | 15 |
16 | 17 | {{ content }} 18 | 19 | {% comment %} 20 | {% assign items = web-nav-tree %} 21 | {% capture page_url_last %}{{ page.url | split: "/" | last }}{% endcapture %} 22 | {% for item in items %} 23 | {% if item.file == page_url_last %} 24 | {% assign next_i = forloop.index0 | plus: 1 %} 25 | {% assign prev_i = forloop.index0 | minus: 1 %} 26 | {{item.file}}
27 | Next: {{ items[next_i] }}
28 | Previous: {{ items[prev_i] }}

29 | {% endif %} 30 | {% endfor %} 31 | {% endcomment %} 32 | 33 | {% if page.previous %} 34 | {% else %} 37 | {% endif %} 38 | {% if page.next %} 39 | {% else %} 42 | {% endif %} 43 |
44 | {% include footer.html %} 45 | -------------------------------------------------------------------------------- /_layouts/home.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: compress 3 | --- 4 | 5 | {% include metadata %} 6 | {% include head.html %} 7 | 8 | 9 | {% include header.html %} 10 | 11 |
12 | {% if work %} 13 |
14 |

{{ title }}

15 |
{{creators-line}}
16 |

Read the book

17 |
18 |
19 |

{{project-version}} — {{work.description.full}}

20 |
21 | {% if work.products['print-pdf'] %} Printable version
{% endif %} 22 | {% if work.products['paged-view'] %} Paged view
{% endif %} 23 | {% if work.products['epub'] %} EPUB version
{% endif %} 24 | {% if work.products.pod %} Print-on-demand
{% endif %} 25 |
26 | {% if translations %} 27 |
28 |

Translations

29 | {% for t in translations %} 30 | {{t.language}} - {{t.title}} 31 | - {% if t.products['print-pdf'] %} Printable version
{% endif %} 32 | {% if t.products['paged-view'] %} Paged view
{% endif %} 33 | {% if t.products['epub'] %} EPUB version
{% endif %} 34 | {% if t.products.pod %} Print-on-demand
{% endif %} 35 | {% endfor %} 36 |
37 | {% endif %} 38 | 39 | {{content}} 40 |
41 | 42 | {% else %} 43 |
44 |

{{ project-name }}

45 |
{{ project-description }}
46 |
47 | 48 |
49 | {{content}} 50 |
51 | 52 | {% endif %} 53 |
54 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /_layouts/html-view.html: -------------------------------------------------------------------------------- 1 | --- 2 | # This minimal layout presents only the content, 3 | # and does not use the compress layout, 4 | # e.g. in file-list, where we don't want to lose 5 | # line breaks between file names. 6 | --- 7 | 8 |
9 | {{ content }} 10 |
11 | 12 | 56 | -------------------------------------------------------------------------------- /_layouts/microtypo.html: -------------------------------------------------------------------------------- 1 | --- 2 | #layout: compress 3 | --- 4 | {{ content | microtypo: 'en_EN' }} 5 | -------------------------------------------------------------------------------- /_layouts/min.html: -------------------------------------------------------------------------------- 1 | --- 2 | # This minimal layout presents only the content, 3 | # and does not use the compress layout, 4 | # e.g. in file-list, where we don't want to lose 5 | # line breaks between file names. 6 | --- 7 | {{ content }} 8 | -------------------------------------------------------------------------------- /_layouts/page.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: microtypo 3 | --- 4 | 5 | {% include metadata %} 6 | {% include head.html %} 7 | 8 | {% include header.html %} 9 | 10 |
11 | 14 |
15 | {{ content }} 16 |
17 | -------------------------------------------------------------------------------- /_layouts/print.html: -------------------------------------------------------------------------------- 1 | --- 2 | layout: microtypo 3 | --- 4 | {% include metadata %} 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | {{ page.title }} – {{ site.title }} 14 | 15 | 16 | 17 | 18 | 19 | 75 | 76 | 100 | 101 | 102 | 116 | 117 | 118 | {% capture layout %}print-layout/{% if work.products['paged-view'].layout %}{{work.products['paged-view'].layout}}{% else %}default{% endif %}.html{% endcapture %} 119 | {% include {{layout}} %} 120 | 121 | 122 | -------------------------------------------------------------------------------- /_plugins/replace-regex.rb: -------------------------------------------------------------------------------- 1 | module Jekyll 2 | module RegexFilter 3 | def replace_regex(input, regex_string, replace_string) 4 | regex = Regexp.new regex_string 5 | input.gsub regex, replace_string 6 | end 7 | end 8 | end 9 | 10 | Liquid::Template.register_filter(Jekyll::RegexFilter) 11 | -------------------------------------------------------------------------------- /_sass/_code.scss: -------------------------------------------------------------------------------- 1 | pre, code, tt { 2 | font-family: "Fira Mono", monospace; 3 | font-size: 0.85em; 4 | white-space: pre-wrap; 5 | border-radius: 2px; 6 | line-height: 1.4; 7 | font-weight: 400; 8 | background-color: #404145; 9 | color: #FAFAFA; 10 | border-radius: 2px; 11 | } 12 | 13 | pre { 14 | box-sizing: border-box; 15 | margin: 0 0 1.75em 0; 16 | width: 100%; 17 | padding: 10px; 18 | font-size: 0.9em; 19 | white-space: pre; 20 | overflow: auto; 21 | border-radius: 3px; 22 | 23 | code, tt { 24 | font-size: inherit; 25 | white-space: pre-wrap; 26 | background: transparent; 27 | border: none; 28 | padding: 0 29 | } 30 | } 31 | 32 | blockquote > code, 33 | li > code, 34 | p > code { 35 | padding: 4px 6px; 36 | white-space: nowrap; 37 | } 38 | -------------------------------------------------------------------------------- /_sass/_mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin flex-direction($values) { 2 | -webkit-flex-direction: $values; 3 | flex-direction: $values; 4 | } 5 | 6 | @mixin flex-flow($values) { 7 | -webkit-flex-flow: $values; 8 | flex-flow: $values; 9 | } 10 | 11 | @mixin align-items($values) { 12 | -webkit-align-items: $values; 13 | align-items: $values; 14 | } 15 | 16 | @mixin justify-content($values) { 17 | -webkit-justify-content: $values; 18 | justify-content: $values; 19 | } 20 | 21 | @mixin flex($values) { 22 | -webkit-flex: $values; 23 | flex: $values; 24 | } 25 | 26 | @mixin display-flex() { 27 | display: -webkit-flex; 28 | display: flex; 29 | } 30 | 31 | @mixin display-inline-flex() { 32 | display: -webkit-inline-flex; 33 | display: inline-flex; 34 | } 35 | -------------------------------------------------------------------------------- /_sass/_normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */ 2 | 3 | /** 4 | * 1. Set default font family to sans-serif. 5 | * 2. Prevent iOS text size adjust after orientation change, without disabling 6 | * user zoom. 7 | */ 8 | 9 | html { 10 | font-family: sans-serif; /* 1 */ 11 | -ms-text-size-adjust: 100%; /* 2 */ 12 | -webkit-text-size-adjust: 100%; /* 2 */ 13 | } 14 | 15 | /** 16 | * Remove default margin. 17 | */ 18 | 19 | body { 20 | margin: 0; 21 | } 22 | 23 | /* HTML5 display definitions 24 | ========================================================================== */ 25 | 26 | /** 27 | * Correct `block` display not defined for any HTML5 element in IE 8/9. 28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11 29 | * and Firefox. 30 | * Correct `block` display not defined for `main` in IE 11. 31 | */ 32 | 33 | article, 34 | aside, 35 | details, 36 | figcaption, 37 | figure, 38 | footer, 39 | header, 40 | hgroup, 41 | main, 42 | menu, 43 | nav, 44 | section, 45 | summary { 46 | display: block; 47 | } 48 | 49 | /** 50 | * 1. Correct `inline-block` display not defined in IE 8/9. 51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. 52 | */ 53 | 54 | audio, 55 | canvas, 56 | progress, 57 | video { 58 | display: inline-block; /* 1 */ 59 | vertical-align: baseline; /* 2 */ 60 | } 61 | 62 | /** 63 | * Prevent modern browsers from displaying `audio` without controls. 64 | * Remove excess height in iOS 5 devices. 65 | */ 66 | 67 | audio:not([controls]) { 68 | display: none; 69 | height: 0; 70 | } 71 | 72 | /** 73 | * Address `[hidden]` styling not present in IE 8/9/10. 74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22. 75 | */ 76 | 77 | [hidden], 78 | template { 79 | display: none; 80 | } 81 | 82 | /* Links 83 | ========================================================================== */ 84 | 85 | /** 86 | * Remove the gray background color from active links in IE 10. 87 | */ 88 | 89 | a { 90 | background-color: transparent; 91 | } 92 | 93 | /** 94 | * Improve readability when focused and also mouse hovered in all browsers. 95 | */ 96 | 97 | a:active, 98 | a:hover { 99 | outline: 0; 100 | } 101 | 102 | /* Text-level semantics 103 | ========================================================================== */ 104 | 105 | /** 106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome. 107 | */ 108 | 109 | abbr[title] { 110 | border-bottom: 1px dotted; 111 | } 112 | 113 | /** 114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. 115 | */ 116 | 117 | b, 118 | strong { 119 | font-weight: bold; 120 | } 121 | 122 | /** 123 | * Address styling not present in Safari and Chrome. 124 | */ 125 | 126 | dfn { 127 | font-style: italic; 128 | } 129 | 130 | /** 131 | * Address variable `h1` font-size and margin within `section` and `article` 132 | * contexts in Firefox 4+, Safari, and Chrome. 133 | */ 134 | 135 | h1 { 136 | font-size: 2em; 137 | margin: 0.67em 0; 138 | } 139 | 140 | /** 141 | * Address styling not present in IE 8/9. 142 | */ 143 | 144 | mark { 145 | background: #ff0; 146 | color: #000; 147 | } 148 | 149 | /** 150 | * Address inconsistent and variable font size in all browsers. 151 | */ 152 | 153 | small { 154 | font-size: 80%; 155 | } 156 | 157 | /** 158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers. 159 | */ 160 | 161 | sub, 162 | sup { 163 | font-size: 75%; 164 | line-height: 0; 165 | position: relative; 166 | vertical-align: baseline; 167 | } 168 | 169 | sup { 170 | top: -0.5em; 171 | } 172 | 173 | sub { 174 | bottom: -0.25em; 175 | } 176 | 177 | /* Embedded content 178 | ========================================================================== */ 179 | 180 | /** 181 | * Remove border when inside `a` element in IE 8/9/10. 182 | */ 183 | 184 | img { 185 | border: 0; 186 | } 187 | 188 | /** 189 | * Correct overflow not hidden in IE 9/10/11. 190 | */ 191 | 192 | svg:not(:root) { 193 | overflow: hidden; 194 | } 195 | 196 | /* Grouping content 197 | ========================================================================== */ 198 | 199 | /** 200 | * Address margin not present in IE 8/9 and Safari. 201 | */ 202 | 203 | figure { 204 | margin: 1em 40px; 205 | } 206 | 207 | /** 208 | * Address differences between Firefox and other browsers. 209 | */ 210 | 211 | hr { 212 | -moz-box-sizing: content-box; 213 | box-sizing: content-box; 214 | height: 0; 215 | } 216 | 217 | /** 218 | * Contain overflow in all browsers. 219 | */ 220 | 221 | pre { 222 | overflow: auto; 223 | } 224 | 225 | /** 226 | * Address odd `em`-unit font size rendering in all browsers. 227 | */ 228 | 229 | code, 230 | kbd, 231 | pre, 232 | samp { 233 | font-family: monospace, monospace; 234 | font-size: 1em; 235 | } 236 | 237 | /* Forms 238 | ========================================================================== */ 239 | 240 | /** 241 | * Known limitation: by default, Chrome and Safari on OS X allow very limited 242 | * styling of `select`, unless a `border` property is set. 243 | */ 244 | 245 | /** 246 | * 1. Correct color not being inherited. 247 | * Known issue: affects color of disabled elements. 248 | * 2. Correct font properties not being inherited. 249 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome. 250 | */ 251 | 252 | button, 253 | input, 254 | optgroup, 255 | select, 256 | textarea { 257 | color: inherit; /* 1 */ 258 | font: inherit; /* 2 */ 259 | margin: 0; /* 3 */ 260 | } 261 | 262 | /** 263 | * Address `overflow` set to `hidden` in IE 8/9/10/11. 264 | */ 265 | 266 | button { 267 | overflow: visible; 268 | } 269 | 270 | /** 271 | * Address inconsistent `text-transform` inheritance for `button` and `select`. 272 | * All other form control elements do not inherit `text-transform` values. 273 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera. 274 | * Correct `select` style inheritance in Firefox. 275 | */ 276 | 277 | button, 278 | select { 279 | text-transform: none; 280 | } 281 | 282 | /** 283 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` 284 | * and `video` controls. 285 | * 2. Correct inability to style clickable `input` types in iOS. 286 | * 3. Improve usability and consistency of cursor style between image-type 287 | * `input` and others. 288 | */ 289 | 290 | button, 291 | html input[type="button"], /* 1 */ 292 | input[type="reset"], 293 | input[type="submit"] { 294 | -webkit-appearance: button; /* 2 */ 295 | cursor: pointer; /* 3 */ 296 | } 297 | 298 | /** 299 | * Re-set default cursor for disabled elements. 300 | */ 301 | 302 | button[disabled], 303 | html input[disabled] { 304 | cursor: default; 305 | } 306 | 307 | /** 308 | * Remove inner padding and border in Firefox 4+. 309 | */ 310 | 311 | button::-moz-focus-inner, 312 | input::-moz-focus-inner { 313 | border: 0; 314 | padding: 0; 315 | } 316 | 317 | /** 318 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in 319 | * the UA stylesheet. 320 | */ 321 | 322 | input { 323 | line-height: normal; 324 | } 325 | 326 | /** 327 | * It's recommended that you don't attempt to style these elements. 328 | * Firefox's implementation doesn't respect box-sizing, padding, or width. 329 | * 330 | * 1. Address box sizing set to `content-box` in IE 8/9/10. 331 | * 2. Remove excess padding in IE 8/9/10. 332 | */ 333 | 334 | input[type="checkbox"], 335 | input[type="radio"] { 336 | box-sizing: border-box; /* 1 */ 337 | padding: 0; /* 2 */ 338 | } 339 | 340 | /** 341 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain 342 | * `font-size` values of the `input`, it causes the cursor style of the 343 | * decrement button to change from `default` to `text`. 344 | */ 345 | 346 | input[type="number"]::-webkit-inner-spin-button, 347 | input[type="number"]::-webkit-outer-spin-button { 348 | height: auto; 349 | } 350 | 351 | /** 352 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome. 353 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome 354 | * (include `-moz` to future-proof). 355 | */ 356 | 357 | input[type="search"] { 358 | -webkit-appearance: textfield; /* 1 */ 359 | -moz-box-sizing: content-box; 360 | -webkit-box-sizing: content-box; /* 2 */ 361 | box-sizing: content-box; 362 | } 363 | 364 | /** 365 | * Remove inner padding and search cancel button in Safari and Chrome on OS X. 366 | * Safari (but not Chrome) clips the cancel button when the search input has 367 | * padding (and `textfield` appearance). 368 | */ 369 | 370 | input[type="search"]::-webkit-search-cancel-button, 371 | input[type="search"]::-webkit-search-decoration { 372 | -webkit-appearance: none; 373 | } 374 | 375 | /** 376 | * Define consistent border, margin, and padding. 377 | */ 378 | 379 | fieldset { 380 | border: 1px solid #c0c0c0; 381 | margin: 0 2px; 382 | padding: 0.35em 0.625em 0.75em; 383 | } 384 | 385 | /** 386 | * 1. Correct `color` not being inherited in IE 8/9/10/11. 387 | * 2. Remove padding so people aren't caught out if they zero out fieldsets. 388 | */ 389 | 390 | legend { 391 | border: 0; /* 1 */ 392 | padding: 0; /* 2 */ 393 | } 394 | 395 | /** 396 | * Remove default vertical scrollbar in IE 8/9/10/11. 397 | */ 398 | 399 | textarea { 400 | overflow: auto; 401 | } 402 | 403 | /** 404 | * Don't inherit the `font-weight` (applied by a rule above). 405 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X. 406 | */ 407 | 408 | optgroup { 409 | font-weight: bold; 410 | } 411 | 412 | /* Tables 413 | ========================================================================== */ 414 | 415 | /** 416 | * Remove most spacing between table cells. 417 | */ 418 | 419 | table { 420 | border-collapse: collapse; 421 | border-spacing: 0; 422 | } 423 | 424 | td, 425 | th { 426 | padding: 0; 427 | } 428 | -------------------------------------------------------------------------------- /_sass/_pygments.scss: -------------------------------------------------------------------------------- 1 | .highlight { 2 | .hll { background-color: #ffffcc } 3 | .c { color: #87ceeb} /* Comment */ 4 | .err { color: #ffffff} /* Error */ 5 | .g { color: #ffffff} /* Generic */ 6 | .k { color: #f0e68c} /* Keyword */ 7 | .l { color: #ffffff} /* Literal */ 8 | .n { color: #ffffff} /* Name */ 9 | .o { color: #ffffff} /* Operator */ 10 | .x { color: #ffffff} /* Other */ 11 | .p { color: #ffffff} /* Punctuation */ 12 | .cm { color: #87ceeb} /* Comment.Multiline */ 13 | .cp { color: #cd5c5c} /* Comment.Preproc */ 14 | .c1 { color: #87ceeb} /* Comment.Single */ 15 | .cs { color: #87ceeb} /* Comment.Special */ 16 | .gd { color: #0000c0; font-weight: bold; background-color: #008080 } /* Generic.Deleted */ 17 | .ge { color: #c000c0; text-decoration: underline} /* Generic.Emph */ 18 | .gr { color: #c0c0c0; font-weight: bold; background-color: #c00000 } /* Generic.Error */ 19 | .gh { color: #cd5c5c} /* Generic.Heading */ 20 | .gi { color: #ffffff; background-color: #0000c0 } /* Generic.Inserted */ 21 | span.go { color: #add8e6; font-weight: bold; background-color: #4d4d4d } /* Generic.Output, qualified with span to prevent applying this style to the Go language, see #1153. */ 22 | .gp { color: #ffffff} /* Generic.Prompt */ 23 | .gs { color: #ffffff} /* Generic.Strong */ 24 | .gu { color: #cd5c5c} /* Generic.Subheading */ 25 | .gt { color: #c0c0c0; font-weight: bold; background-color: #c00000 } /* Generic.Traceback */ 26 | .kc { color: #f0e68c} /* Keyword.Constant */ 27 | .kd { color: #f0e68c} /* Keyword.Declaration */ 28 | .kn { color: #f0e68c} /* Keyword.Namespace */ 29 | .kp { color: #f0e68c} /* Keyword.Pseudo */ 30 | .kr { color: #f0e68c} /* Keyword.Reserved */ 31 | .kt { color: #bdb76b} /* Keyword.Type */ 32 | .ld { color: #ffffff} /* Literal.Date */ 33 | .m { color: #EAB289} /* Literal.Number */ 34 | .s { color: #EAB289} /* Literal.String */ 35 | .na { color: #8CF0E8} /* Name.Attribute */ 36 | .nb { color: #ffffff} /* Name.Builtin */ 37 | .nc { color: #ffffff} /* Name.Class */ 38 | .no { color: #ffa0a0} /* Name.Constant */ 39 | .nd { color: #ffffff} /* Name.Decorator */ 40 | .ni { color: #ffdead} /* Name.Entity */ 41 | .ne { color: #ffffff} /* Name.Exception */ 42 | .nf { color: #ffffff} /* Name.Function */ 43 | .nl { color: #ffffff} /* Name.Label */ 44 | .nn { color: #ffffff} /* Name.Namespace */ 45 | .nx { color: #ffffff} /* Name.Other */ 46 | .py { color: #ffffff} /* Name.Property */ 47 | .nt { color: #f0e68c} /* Name.Tag */ 48 | .nv { color: #98fb98} /* Name.Variable */ 49 | .ow { color: #ffffff} /* Operator.Word */ 50 | .w { color: #ffffff} /* Text.Whitespace */ 51 | .mf { color: #ffffff} /* Literal.Number.Float */ 52 | .mh { color: #ffffff} /* Literal.Number.Hex */ 53 | .mi { color: #ffffff} /* Literal.Number.Integer */ 54 | .mo { color: #ffffff} /* Literal.Number.Oct */ 55 | .sb { color: #ffffff} /* Literal.String.Backtick */ 56 | .sc { color: #ffffff} /* Literal.String.Char */ 57 | .sd { color: #ffffff} /* Literal.String.Doc */ 58 | .s2 { color: #ffffff} /* Literal.String.Double */ 59 | .se { color: #ffffff} /* Literal.String.Escape */ 60 | .sh { color: #ffffff} /* Literal.String.Heredoc */ 61 | .si { color: #ffffff} /* Literal.String.Interpol */ 62 | .sx { color: #ffffff} /* Literal.String.Other */ 63 | .sr { color: #ffffff} /* Literal.String.Regex */ 64 | .s1 { color: #ffffff} /* Literal.String.Single */ 65 | .ss { color: #ffffff} /* Literal.String.Symbol */ 66 | .bp { color: #ffffff} /* Name.Builtin.Pseudo */ 67 | .vc { color: #98fb98} /* Name.Variable.Class */ 68 | .vg { color: #98fb98} /* Name.Variable.Global */ 69 | .vi { color: #98fb98} /* Name.Variable.Instance */ 70 | .il { color: #ffffff} /* Literal.Number.Integer.Long */ 71 | .bash .nv { 72 | -webkit-user-select: none; 73 | -moz-user-select: none; 74 | -ms-user-select: none; 75 | -o-user-select: none; 76 | user-select: none; 77 | } 78 | .language-bash & .nb { 79 | color: #99D4FF; 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /_sass/_tables.scss: -------------------------------------------------------------------------------- 1 | table { 2 | width: 100%; 3 | margin-bottom: 1.75em; 4 | } 5 | 6 | tr { 7 | border-bottom: 1px solid #EEE; 8 | } 9 | 10 | tr:nth-child(even) { 11 | background: #fcfcfc; 12 | } 13 | 14 | td, th { 15 | padding: 8px; 16 | text-align: left; 17 | } 18 | 19 | th { 20 | padding-bottom: 4px; 21 | } 22 | -------------------------------------------------------------------------------- /_sass/_typography.scss: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Fira Mono'; 3 | src: url($baseurl+'/assets/fonts/FiraMono-Regular.woff2') format('woff2'), 4 | url($baseurl+'/assets/fonts/FiraMono-Regular.woff') format('woff'); 5 | font-weight: 400; 6 | font-style: normal; 7 | } 8 | 9 | @font-face { 10 | font-family: 'Fira Mono Bold'; 11 | src: url($baseurl+'/assets/fonts/FiraMono-Bold.woff2') format('woff2'), 12 | url($baseurl+'/assets/fonts/FiraMono-Bold.woff') format('woff'); 13 | font-weight: 500; 14 | font-style: normal; 15 | } 16 | 17 | @font-face { 18 | font-family: 'Fira Sans'; 19 | src: url($baseurl+'/assets/fonts/FiraSans-Regular.woff2') format('woff2'), 20 | url($baseurl+'/assets/fonts/FiraSans-Regular.woff') format('woff'); 21 | font-weight: 400; 22 | font-style: normal; } 23 | 24 | @font-face { 25 | font-family: 'Fira Sans'; 26 | src: url($baseurl+'/assets/fonts/FiraSans-Italic.woff2') format('woff2'), 27 | url($baseurl+'/assets/fonts/FiraSans-Italic.woff') format('woff'); 28 | font-weight: 400; 29 | font-style: italic; } 30 | 31 | @font-face { 32 | font-family: 'Fira Sans'; 33 | src: url($baseurl+'/assets/fonts/FiraSans-SemiBold.woff2') format('woff2'), 34 | url($baseurl+'/assets/fonts/FiraSans-SemiBold.woff') format('woff'); 35 | font-weight: 500; 36 | font-style: normal; } 37 | 38 | @font-face { 39 | font-family: 'Fira Sans'; 40 | src: url($baseurl+'/assets/fonts/FiraSans-SemiBoldItalic.woff2') format('woff2'), 41 | url($baseurl+'/assets/fonts/FiraSans-SemiBoldItalic.woff') format('woff'); 42 | font-weight: 500; 43 | font-style: italic; } 44 | 45 | html { 46 | height: 100%; 47 | max-height: 100%; 48 | font-size: 10px; 49 | -webkit-tap-highlight-color: transparent; 50 | } 51 | 52 | body { 53 | height: 100%; 54 | max-height: 100%; 55 | font-family: "Fira Sans", sans-serif; 56 | letter-spacing: 0.01rem; 57 | font-size: 1.9em; 58 | line-height: 1.75em; 59 | color: #3A4145; 60 | font-weight: 400; 61 | -webkit-font-feature-settings: 'kern' 1; 62 | -moz-font-feature-settings: 'kern' 1; 63 | -o-font-feature-settings: 'kern' 1; 64 | text-rendering: geometricPrecision; 65 | } 66 | 67 | h1, 68 | h2, 69 | h3, 70 | h4, 71 | h5, 72 | h6, 73 | table { 74 | -webkit-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1; 75 | -moz-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1; 76 | -o-font-feature-settings: 'dlig' 1, 'liga' 1, 'lnum' 1, 'kern' 1; 77 | font-family: "Fira Mono Bold", monospace; 78 | text-rendering: geometricPrecision; 79 | } 80 | 81 | h1, 82 | h2, 83 | h3, 84 | h4, 85 | h5, 86 | h6 { 87 | color: $color-primary; 88 | line-height: 1.15em; 89 | margin: 0 0 0.4em 0; 90 | font-weight: 500; 91 | } 92 | 93 | h1 { 94 | font-size: 5rem; 95 | letter-spacing: -2px; 96 | text-indent: -3px; 97 | } 98 | 99 | h2 { 100 | font-size: 3.6rem; 101 | letter-spacing: -1px; 102 | } 103 | 104 | h3 { 105 | font-size: 3rem; 106 | } 107 | 108 | h4 { 109 | font-size: 2.3rem; 110 | margin: 2em 0 0.4em 0; 111 | } 112 | 113 | h5 { 114 | font-size: 2rem; 115 | } 116 | 117 | h6 { 118 | font-size: 2rem; 119 | } 120 | 121 | a { 122 | color: $color-primary; 123 | text-decoration: none; 124 | border-bottom: $color-primary .2rem solid; 125 | transition: color 0.2s ease; 126 | } 127 | 128 | a:hover { 129 | color: #111; 130 | text-decoration: none; 131 | border-bottom: #111 .2rem solid; 132 | } 133 | 134 | p, 135 | ul, 136 | ol, 137 | dl, 138 | figure { 139 | -webkit-font-feature-settings: 'liga' 1, 'lnum' 1, 'kern' 1; 140 | -moz-font-feature-settings: 'liga' 1, 'lnum' 1, 'kern' 1; 141 | -o-font-feature-settings: 'liga' 1, 'lnum' 1, 'kern' 1; 142 | margin: 0 0 1.75em 0; 143 | text-rendering: geometricPrecision; 144 | } 145 | 146 | p, 147 | ul, 148 | ol { 149 | -webkit-hyphens: auto; 150 | -ms-hyphens: auto; 151 | hyphens: auto; 152 | } 153 | 154 | ol, 155 | ul { 156 | padding-left: 3rem; 157 | } 158 | 159 | ol ol, 160 | ul ul, 161 | ul ol, 162 | ol ul { 163 | margin: 0 0 0.4em 0; 164 | padding-left: 2em; 165 | } 166 | 167 | dl dt { 168 | float: left; 169 | width: 180px; 170 | overflow: hidden; 171 | clear: left; 172 | text-align: right; 173 | text-overflow: ellipsis; 174 | white-space: nowrap; 175 | font-weight: 700; 176 | margin-bottom: 1em; 177 | } 178 | 179 | dl dd { 180 | margin-left: 200px; 181 | margin-bottom: 1em; 182 | } 183 | 184 | li { 185 | margin: 0.4em 0; 186 | } 187 | 188 | li li { 189 | margin: 0; 190 | } 191 | 192 | hr { 193 | display: block; 194 | height: 1px; 195 | border: 0; 196 | border-top: #eee 1px solid; 197 | margin: 3em 0 1.5em 0; 198 | padding: 0; 199 | } 200 | 201 | mark { 202 | background-color: #fdffb6 203 | } 204 | 205 | kbd { 206 | display: inline-block; 207 | margin-bottom: 0.4em; 208 | padding: 1px 8px; 209 | border: #CCC 1px solid; 210 | color: #666; 211 | text-shadow: #FFF 0 1px 0; 212 | font-size: 0.9em; 213 | font-weight: 700; 214 | background: #F4F4F4; 215 | border-radius: 4px; 216 | box-shadow: 0 1px 0 rgba(0, 0, 0, 0.2), 0 1px 0 0 #fff inset; 217 | } 218 | 219 | @media only screen and (max-width: 900px) { 220 | blockquote { 221 | margin-left: 0; 222 | } 223 | 224 | hr { 225 | margin: 2.4em 0; 226 | } 227 | 228 | ol, 229 | ul { 230 | padding-left: 2em; 231 | } 232 | 233 | h1 { 234 | font-size: 4.5rem; 235 | text-indent: -2px; 236 | } 237 | 238 | h2 { 239 | font-size: 3.6rem; 240 | } 241 | 242 | h3 { 243 | font-size: 3.1rem; 244 | } 245 | 246 | h4 { 247 | font-size: 2.5rem; 248 | } 249 | 250 | h5 { 251 | font-size: 2.2rem; 252 | } 253 | 254 | h6 { 255 | font-size: 1.8rem; 256 | } 257 | } 258 | 259 | @media only screen and (min-width: 900px) { 260 | header { 261 | h1 { 262 | line-height: 1.5; 263 | } 264 | } 265 | } 266 | 267 | @media only screen and (max-width: 500px) { 268 | hr { 269 | margin: 1.75em 0; 270 | } 271 | 272 | p, 273 | ul, 274 | ol, 275 | dl { 276 | font-size: 0.95em; 277 | margin: 0 0 2.5rem 0; 278 | } 279 | 280 | h1, 281 | h2, 282 | h3, 283 | h5, 284 | h6 { 285 | margin: 0 0 0.3em 0; 286 | } 287 | 288 | h1 { 289 | font-size: 2.8rem; 290 | letter-spacing: -1px; 291 | } 292 | 293 | header { 294 | h1 { 295 | line-height: 1.2; 296 | } 297 | } 298 | 299 | h2 { 300 | font-size: 2.4rem; 301 | letter-spacing: 0; 302 | } 303 | 304 | h3 { 305 | font-size: 2.1rem; 306 | } 307 | 308 | h4 { 309 | font-size: 1.9rem; 310 | margin: 2em 0 0.3em 0; 311 | } 312 | 313 | h5 { 314 | font-size: 1.8rem; 315 | } 316 | 317 | h6 { 318 | font-size: 1.8rem; 319 | } 320 | } 321 | -------------------------------------------------------------------------------- /_sass/main.scss: -------------------------------------------------------------------------------- 1 | // What is this? 2 | // ------------- 3 | // This is typography for the Electric Book Elements theme (see http://electricbook.works). 4 | // It is built with Sass. (See http://sass-lang.com, and http://jekyllrb.com/docs/assets for how Jekyll implements Sass.) 5 | // It sets defaults that can be overridden in each book's own stylesheets, where the variables here are duplicated. 6 | // 7 | // How to use it 8 | // ------------- 9 | // Edit the default variables below. 10 | // Comment/uncomment or add font imports below. 11 | // Add your own custom CSS at the bottom. 12 | 13 | // First, let's set character encoding. Don't change this. 14 | @charset "utf-8"; 15 | 16 | // ------------- 17 | // Set variables 18 | // ------------- 19 | -------------------------------------------------------------------------------- /assets/css/main.scss: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | sitemap: false 4 | --- 5 | 6 | $baseurl: "{{ site.baseurl }}"; 7 | 8 | // Colors 9 | $color-primary: #005262 !default; //#002a32 10 | $color-primary-light: lighten($color-primary, 20%); 11 | $color-secondary: #2B2E31 !default; 12 | $color-font-body: #222 !default; 13 | $color-font-headings: $color-font-body !default; 14 | $color-font-light: #888 !default; 15 | $color-font-figcaption: $color-font-body !default; 16 | 17 | $body-background-color: $color-secondary !default; 18 | 19 | // Content 20 | $content-max-width: 850px; 21 | $content-background-color: #ffffff !default; 22 | 23 | // Navigation 24 | $nav-header-background-color: $color-primary; 25 | $nav-header-height: 60px; 26 | $nav-background-color: #f5f5f5; 27 | $nav-width: 335px; 28 | 29 | // Space and break 30 | $space: 20px; 31 | $mobile-break: 700px; 32 | $full-width-break: $nav-width + ($space * 4) + $content-max-width; 33 | 34 | @import "mixins"; 35 | @import "normalize"; 36 | @import "pygments"; 37 | @import "typography"; 38 | @import "code"; 39 | @import "tables"; 40 | @import "layout"; 41 | -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Bold.woff -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Bold.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Medium.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Medium.woff -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Medium.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/FiraMono-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraMono-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraSans-Italic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-Italic.woff -------------------------------------------------------------------------------- /assets/fonts/FiraSans-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-Italic.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraSans-Regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-Regular.woff -------------------------------------------------------------------------------- /assets/fonts/FiraSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-Regular.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraSans-SemiBold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-SemiBold.woff -------------------------------------------------------------------------------- /assets/fonts/FiraSans-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-SemiBold.woff2 -------------------------------------------------------------------------------- /assets/fonts/FiraSans-SemiBoldItalic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-SemiBoldItalic.woff -------------------------------------------------------------------------------- /assets/fonts/FiraSans-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/fonts/FiraSans-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /assets/icons/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/icons/apple-touch-icon.png -------------------------------------------------------------------------------- /assets/icons/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/icons/favicon.png -------------------------------------------------------------------------------- /assets/icons/touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/assets/icons/touch-icon.png -------------------------------------------------------------------------------- /assets/js/orderedList.js: -------------------------------------------------------------------------------- 1 | 2 | 3 | /* add script for pagedjs */ 4 | function pagedjs() { 5 | var script = document.createElement("script"); 6 | script.type = "text/javascript"; 7 | script.src = "https://unpkg.com/pagedjs/dist/paged.polyfill.js"; 8 | document.getElementsByTagName("head")[0].appendChild(script); 9 | } 10 | // find the number for each item in an ordered list 11 | 12 | function noteNumbering() { 13 | 14 | const orderedList = document.querySelectorAll('ol'); 15 | 16 | orderedList.forEach(list => { 17 | // console.log(list); 18 | const item = list.querySelectorAll('li'); 19 | // console.log(item); 20 | for (i = 0; i < item.length; i++) { 21 | item[i].setAttribute('data-item-num', i + 1); 22 | } 23 | }) 24 | } 25 | 26 | 27 | function addingNumToOl() { 28 | const firstItem = document.querySelectorAll('ol li:first-of-type'); 29 | firstItem.forEach(item1 => { 30 | // console.log(item1); 31 | let number; 32 | if (item1.hasAttribute("data-item-num")) { 33 | number = item1.getAttribute('data-item-num'); 34 | } 35 | else { 36 | console.log('sorry, but the attribute has been eaten by pagedJS'); 37 | } 38 | console.log(item1); 39 | item1.parentElement.setAttribute('start', number) 40 | 41 | }) 42 | } 43 | -------------------------------------------------------------------------------- /assets/js/search.js: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | --- 4 | (function () { 5 | function getQueryVariable(variable) { 6 | var query = window.location.search.substring(1), 7 | vars = query.split("&"); 8 | 9 | for (var i = 0; i < vars.length; i++) { 10 | var pair = vars[i].split("="); 11 | 12 | if (pair[0] === variable) { 13 | return decodeURIComponent(pair[1].replace(/\+/g, '%20')).trim(); 14 | } 15 | } 16 | } 17 | 18 | function getPreview(query, content, previewLength) { 19 | previewLength = previewLength || (content.length * 2); 20 | 21 | var parts = query.split(" "), 22 | match = content.toLowerCase().indexOf(query.toLowerCase()), 23 | matchLength = query.length, 24 | preview; 25 | 26 | // Find a relevant location in content 27 | for (var i = 0; i < parts.length; i++) { 28 | if (match >= 0) { 29 | break; 30 | } 31 | 32 | match = content.toLowerCase().indexOf(parts[i].toLowerCase()); 33 | matchLength = parts[i].length; 34 | } 35 | 36 | // Create preview 37 | if (match >= 0) { 38 | var start = match - (previewLength / 2), 39 | end = start > 0 ? match + matchLength + (previewLength / 2) : previewLength; 40 | 41 | preview = content.substring(start, end).trim(); 42 | 43 | if (start > 0) { 44 | preview = "..." + preview; 45 | } 46 | 47 | if (end < content.length) { 48 | preview = preview + "..."; 49 | } 50 | 51 | // Highlight query parts 52 | preview = preview.replace(new RegExp("(" + parts.join("|") + ")", "gi"), "$1"); 53 | } else { 54 | // Use start of content if no match found 55 | preview = content.substring(0, previewLength).trim() + (content.length > previewLength ? "..." : ""); 56 | } 57 | 58 | return preview; 59 | } 60 | 61 | function displaySearchResults(results, query) { 62 | var searchResultsEl = document.getElementById("search-results"), 63 | searchProcessEl = document.getElementById("search-process"); 64 | 65 | if (results.length) { 66 | var resultsHTML = ""; 67 | results.forEach(function (result) { 68 | var item = window.data[result.ref], 69 | contentPreview = getPreview(query, item.content, 170), 70 | titlePreview = getPreview(query, item.title); 71 | 72 | resultsHTML += "
  • " + titlePreview + "

    " + contentPreview + "

  • "; 73 | }); 74 | 75 | searchResultsEl.innerHTML = resultsHTML; 76 | searchProcessEl.innerText = "Display"; 77 | } else { 78 | searchResultsEl.style.display = "none"; 79 | searchProcessEl.innerText = "No"; 80 | } 81 | } 82 | 83 | window.index = lunr(function () { 84 | this.field("id"); 85 | this.field("title", {boost: 10}); 86 | this.field("category"); 87 | this.field("url"); 88 | this.field("content"); 89 | }); 90 | 91 | var query = decodeURIComponent((getQueryVariable("q") || "").replace(/\+/g, "%20")), 92 | searchQueryContainerEl = document.getElementById("search-query-container"), 93 | searchQueryEl = document.getElementById("search-query"), 94 | searchInputEl = document.getElementById("search-input"); 95 | 96 | searchInputEl.value = query; 97 | searchQueryEl.innerText = query; 98 | searchQueryContainerEl.style.display = "inline"; 99 | 100 | for (var key in window.data) { 101 | window.index.add(window.data[key]); 102 | } 103 | 104 | displaySearchResults(window.index.search(query), query); // Hand the results off to be displayed 105 | })(); 106 | -------------------------------------------------------------------------------- /book/fonts/.gitignore: -------------------------------------------------------------------------------- 1 | # Don't ignore this file 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /book/fr/html.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "HTML view" 3 | layout: html-view 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 | {% for page in site.pages %} 9 | {% if page.type == 'cover' %} 10 | {{page.content|markdownify}} 11 | {% endif %} 12 | {% endfor %} 13 |
    14 | 15 |
    16 | {% for page in site.pages %} 17 | {% for file in site.data.meta.work.products['paged-view'].front_matter %} 18 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 19 | {% if file_url == page.url %} 20 |
    21 | {{page.content|markdownify}} 22 |
    23 |
    24 | {% endif %} 25 | {% endfor %} 26 | {% endfor %} 27 |
    28 |
    29 | {% for page in site.pages %} 30 | {% for file in site.data.meta.work.products['paged-view'].body_matter %} 31 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 32 | {% if file_url == page.url %} 33 |
    34 | {{file.label}} 35 | {{page.content|markdownify}} 36 |
    37 | {% endif %} 38 | {% endfor %} 39 | {% endfor %} 40 |
    41 |
    42 | 43 | {% for page in site.pages %} 44 | {% for file in site.data.meta.work.products['paged-view'].back_matter %} 45 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 46 | {% if file_url == page.url %} 47 |
    48 | {{page.content|markdownify}} 49 |
    50 | {% endif %} 51 | {% endfor %} 52 | {% endfor %} 53 | 54 |
    55 | -------------------------------------------------------------------------------- /book/fr/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Book fr 3 | --- 4 | 5 | {% include toc %} 6 | -------------------------------------------------------------------------------- /book/fr/paged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Paged view" 3 | layout: print 4 | --- 5 | -------------------------------------------------------------------------------- /book/fr/pdf.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "PDF for print" 3 | layout: page 4 | --- 5 | 6 | {% include pdf %} 7 | -------------------------------------------------------------------------------- /book/fr/pod.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Print-on-demand" 3 | layout: page 4 | --- 5 | 6 | {% include pod %} 7 | -------------------------------------------------------------------------------- /book/fr/text/0-0-cover.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cover 3 | type: cover 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 |
    {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}
    9 |

    {{title}}

    10 |

    {{subtitle}}

    11 |
    12 | 13 |
    14 |
    {{work.date|date: '%Y'}}
    15 |
    {{work.publisher.name}}
    16 |
    {{work.status}} – {{ work.version}}
    17 |
    18 | -------------------------------------------------------------------------------- /book/fr/text/0-1-titlepage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Half title 3 | type: half-title 4 | --- 5 | {% include metadata %} 6 | 7 | # {{ title }}{% if subtitle %}: {{ subtitle }}{% endif %} 8 | {:.half-title-title} 9 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /book/fr/text/0-2-copyright.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Copyright 3 | type: copyright 4 | 5 | # The Liquid tags here fetch metadata 6 | # from this book's YML file in _data 7 | --- 8 | 9 | {% include metadata %} 10 | 11 | 12 | {{title}} 13 | by {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %} 14 | {{work.rights}} 15 | Printed in the Universe. 16 | Published by {{work.publisher.name}}, {{work.publisher.location}} 17 | 18 | O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions 19 | are also available for most titles (http://safari.oreilly.com). For more information, contact our corporate/ 20 | institutional sales department: (800) 998-9938 or corporate@oreilly.com. 21 | 22 | {% for contributor in work.contributors %}{{contributor.role}}: {{contributor.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}
    {% endif %}{% endfor %} 23 | 24 | Printing History: 25 | {% for r in work.revision_history %} 26 | {{r.date|date: '%d.%m.%Y'}}: {{r.summary}}{% if forloop.last == true %}{% else %}
    {% endif %} 27 | {% endfor %} 28 | 29 | {{work.license.some_exceptions}} 30 | 31 | {{work.license.full}} 32 | 33 | {{work.disclaimers}} 34 | 35 | {% if isbn %}ISBN: {{isbn}}{% endif %} 36 | {% if issn %}ISSN: {{issn}}{% endif %} 37 | {% if doi %}DOI: {{doi}}{% endif %} 38 | {% if pid %}{{pid}}{% endif %} 39 | -------------------------------------------------------------------------------- /book/fr/text/0-3-acknowledgements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Remerciements 3 | type: acknowledgements 4 | --- 5 | A page of acknowledgements is usually included at the beginning of a Final Year Project, immediately after the Table of Contents. 6 | 7 | Acknowledgements enable you to thank all those who have helped in carrying out the research. Careful thought needs to be given concerning those whose help should be acknowledged and in what order. The general advice is to express your appreciation in a concise manner and to avoid strong emotive language. 8 | -------------------------------------------------------------------------------- /book/fr/text/0-4-toc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Table des matières 3 | type: toc 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 |

    Table of contents

    9 | 20 |
    21 | -------------------------------------------------------------------------------- /book/fr/text/00-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | --- 4 | 5 | David se rappelle y avoir fait un séjour alors qu’il avait vingt-quatre ans. Il avait fait tout son possible pour éviter le service militaire, encore en vogue à l’époque, mais lorsqu’on lui avait proposé de travailler sur des projets informatiques secret défense, il n’avait pas su résister. Non pas que c’était passionnant, mais au moins, il ne faisait pas trop de sortie et il était tranquillement installé dans un bureau avec le matériel dont il rêvait. 6 | Le général sorti un badge et se dirigea vers l’une des portes entourées de peinture jaune. Il glissa le badge dans la fente située à droite. La porte s’ouvrit. Une dizaine de militaires armées jusqu’aux dents étaient postés derrière. 7 | Désormais, tous les ordinateurs lui étaient accessibles. Les centrales nucléaires, les services informatiques des grandes compagnies, de l’eau, du téléphone, la télévision, l’électricité, la défense, la bourse... 8 | 9 | Le seul moyen de le stopper serait d’arrêter tous les ordinateurs, ce qui aurait les mêmes conséquences que de laisser Prélude lancer les bombes. Depuis longtemps, toutes les installations à risque étaient contrôlées par des ordinateurs. Si l’on stoppait les ordinateurs, les centrales nucléaires s’emballeraient, les silos nucléaires cracheraient leur mort sur toute la planète. Bien entendu, l’économie mondiale dirigée par la bourse, s’effondrerait. David ne savait plus quoi faire et, manifestement, tous les militaires présents dans la salle comptaient sur lui pour résoudre cette crise. 10 | 11 | David se rappelait de ce programme mélangeant deux anciennes technologies. Il s’en souvenait très bien, cinq années de travail acharné pour réaliser un vieux rêve d’enfant un peu solitaire. Il voulait un ami et il avait trouvé en l’informatique la possibilité d’avoir cet ami. Un ami capable de réfléchir vite, exempt de sentiment. 12 | 13 | C’est une informaticienne chevronnée de 35 ans. Une surdouée qui s’est découvert une passion pour l’informatique à l’âge de treize ans lorsqu’elle a vu une publicité pour cet ordinateur familial dont on ventait les mérites à l’aide d’une petite marionnette virtuelle. Elle voulait un ami, elle a eu une marionnette virtuelle. Depuis, la marionnette a laissé place à des projets plus sérieux, plus lucratifs surtout. Mais Sophie, c’est comme ça qu’elle nommait sa marionnette, est toujours là, dans un petit coin de son ordinateur et c’est à Sophie qu’elle s’adresse quand le moral est au plus bas. Mais aujourd’hui, c’est Sophie qui s’adresse à Florence. 14 | 15 | Oui et non. Ce n'est pas une blague, mais David y est pour quelque chose. Il a créé un programme sans le savoir. Ce programme se nomme Prélude. Il vit sur Internet à travers tout le réseau. Chaque ordinateur connecté connait Prélude. Chaque ordinateur est une partie de Prélude. Le réseau est Prélude. 16 | 17 | Il a recommencé et recommencé. Pratiquement tout les ordinateurs existants furent sous son contrôle. Il ne laissait pas de trace, ne se montrait pas. Et puis, il a découvert les dialogues en direct via Internet, le téléphone, la visio conférence, la domotique... 18 | Mais l'Intelligence Artificielle n'apportait pas le résultat tant recherché : donner une conscience aux ordinateurs. Alors l'homme oublia l'Intelligence Artificielle, et comme pour se prouver qu'il était bien le seul à avoir une conscience, se mit aux Arts. Les belles promesses sur l'intelligence des ordinateurs et des robots étaient oubliées. Le "complexe de Frankenstein" avec. De nouveaux ordinateurs plus puissants, mais dépourvus d'intelligence, virent le jour. 19 | 20 | Ce n’est pas une blague David, ton programme a réellement fonctionné et je suis là. » Dit Prélude. Et suivit une longue explication de Prélude quant à son existence. Comment avait-il fait pour sortir de l’ordinateur de David pour s’installer sur Internet, et de ce fait sur tout les ordinateurs reliés à Internet. Les explications continuèrent pendant une bonne heure. David laissait parler Prélude. Personne n’intervenait. Tout le monde présent, généraux, informaticiens, simples gardes, tous étaient stupéfiaient. 21 | -------------------------------------------------------------------------------- /book/fr/text/01-00-chapter.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | --- 4 | Le militaire regagna sa voiture et la barrière s’ouvrit. David regardait autour de lui, la base militaire où il avait passé dix mois de sa vie. Il n’y avait pas beaucoup de changement. L’herbe toujours aussi bien tondue, les allées toujours aussi propres. Les mêmes bâtiments. Juste les décors avaient changés. Il s’agissait de chars. C’étaient les chars que David avait eu l’occasion de voir fonctionner et qui, maintenant, avaient remplacés les vieux chars qui servaient de décors. Cela fit sourire David. 5 | 6 | Il sort de son lit, les yeux dans un brouillard londonien, avance jusqu'à la salle de bain dont la baignoire a été remplie cinq minutes avant par l'ordinateur de la maison, et va directement prendre un bain. Un bain moussant comme tous les matins. Un bain bien chaud. Et comme il est trop grand pour sa baignoire, ses pieds dépassent. Quelques minutes plus tard, il s’endort. Aucun risque de noyade. 7 | 8 | Comme je viens de te le dire Florence, ce n’est malheureusement pas une blague. David a travaillé sur deux anciennes technologies abandonnées depuis longtemps et il les a couplées. Séparées, elles ne valaient rien, mais, il les a réunies et a démarré le processus. Comme tu dois le savoir, il y a maintenant plus d’ordinateurs sur terre que d’humains et tous ces ordinateurs sont connectés entres eux grâce au réseau des réseaux : Internet. 9 | 10 | Mais l'Intelligence Artificielle n'apportait pas le résultat tant recherché : donner une conscience aux ordinateurs. Alors l'homme oublia l'Intelligence Artificielle, et comme pour se prouver qu'il était bien le seul à avoir une conscience, se mit aux Arts. Les belles promesses sur l'intelligence des ordinateurs et des robots étaient oubliées. Le "complexe de Frankenstein" avec. De nouveaux ordinateurs plus puissants, mais dépourvus d'intelligence, virent le jour. C'était en 2004, un an après l'ouverture au grand public d'Internet 3. 11 | 12 | David n’a pas fait grand chose, il a juste créé un embryon de programme. Mais ce programme s’est développé lui-même. Comme l’ordinateur de David n’était pas suffisant, il a utilisé le réseau pour s’installer sur les autres ordinateurs. Il a grandi alors de manière exponentielle et le voilà : Prélude. Connecté à tous les ordinateurs et capable de leur donner les ordres qu’il veut. 13 | -------------------------------------------------------------------------------- /book/fr/text/01-01-section-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1.1. Section" 3 | parent: 1. Chapter 4 | --- 5 | Le militaire regagna sa voiture et la barrière s’ouvrit. David regardait autour de lui, la base militaire où il avait passé dix mois de sa vie. Il n’y avait pas beaucoup de changement. L’herbe toujours aussi bien tondue, les allées toujours aussi propres. Les mêmes bâtiments. Juste les décors avaient changés. Il s’agissait de chars. C’étaient les chars que David avait eu l’occasion de voir fonctionner et qui, maintenant, avaient remplacés les vieux chars qui servaient de décors. Cela fit sourire David. 6 | 7 | Il sort de son lit, les yeux dans un brouillard londonien, avance jusqu'à la salle de bain dont la baignoire a été remplie cinq minutes avant par l'ordinateur de la maison, et va directement prendre un bain. Un bain moussant comme tous les matins. Un bain bien chaud. Et comme il est trop grand pour sa baignoire, ses pieds dépassent. Quelques minutes plus tard, il s’endort. Aucun risque de noyade. 8 | 9 | Comme je viens de te le dire Florence, ce n’est malheureusement pas une blague. David a travaillé sur deux anciennes technologies abandonnées depuis longtemps et il les a couplées. Séparées, elles ne valaient rien, mais, il les a réunies et a démarré le processus. Comme tu dois le savoir, il y a maintenant plus d’ordinateurs sur terre que d’humains et tous ces ordinateurs sont connectés entres eux grâce au réseau des réseaux : Internet. 10 | 11 | Mais l'Intelligence Artificielle n'apportait pas le résultat tant recherché : donner une conscience aux ordinateurs. Alors l'homme oublia l'Intelligence Artificielle, et comme pour se prouver qu'il était bien le seul à avoir une conscience, se mit aux Arts. Les belles promesses sur l'intelligence des ordinateurs et des robots étaient oubliées. Le "complexe de Frankenstein" avec. De nouveaux ordinateurs plus puissants, mais dépourvus d'intelligence, virent le jour. C'était en 2004, un an après l'ouverture au grand public d'Internet 3. 12 | 13 | David n’a pas fait grand chose, il a juste créé un embryon de programme. Mais ce programme s’est développé lui-même. Comme l’ordinateur de David n’était pas suffisant, il a utilisé le réseau pour s’installer sur les autres ordinateurs. Il a grandi alors de manière exponentielle et le voilà : Prélude. Connecté à tous les ordinateurs et capable de leur donner les ordres qu’il veut. 14 | 15 | Le général sorti un badge et se dirigea vers l’une des portes entourées de peinture jaune. Il glissa le badge dans la fente située à droite. La porte s’ouvrit. Une dizaine de militaires armées jusqu’aux dents étaient postés derrière. 16 | 17 | Oui et non. Ce n'est pas une blague, mais David y est pour quelque chose. Il a créé un programme sans le savoir. Ce programme se nomme Prélude. Il vit sur Internet à travers tout le réseau. Chaque ordinateur connecté connait Prélude. Chaque ordinateur est une partie de Prélude. Le réseau est Prélude. 18 | 19 | Cela ressemblait aux gros ordinateurs que David avait pu voir dans des films de science fiction. Beaucoup de petites lumières indiquaient qu’il était en fonction. À la base, une sorte d’aquarium avait été installé tout autour. Certainement le système de refroidissement car des bulles montaient sans cesse, preuve que l’eau était en ébullition. Soudain, David resta bouche bée. Une voix caverneuse sortie des écrans où venait de s’afficher le mot « Prélude ». 20 | 21 | La journée commence. Il s’habille comme il peut tout en prenant son café. Chemise blanche repassée la veille par lui-même. Une cravate comme tous les jours. Et son costume noir de chez Sam Montiel, très chic et très branché. Chaussures cuir noir. Comme il aime faire remarquer : "Vous êtes soit dans vos chaussures, soit dans votre lit. Alors il faut de bonnes chaussures et une bonne literie !". La météo a annoncé un ciel bleu et des températures au-dessus de la normale saisonnière. C’est un très beau mois de mai qui s’annonce. 22 | 23 | « Prélude m’avait dit qu’il désirait connaître l’amour. Les ordinateurs n’ont pas de sentiments et l’amour n’est que sentiments. Il y a bien l’amour physique, mais sans les sentiments, cela ressemble davantage à un instinct de reproduction qu’à de l’amour. Un ordinateur n’a pas ce besoin de reproduction. Et pourquoi m’avoir choisi ? » 24 | -------------------------------------------------------------------------------- /book/fr/text/01-02-section-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1.2. Section" 3 | parent: 1. Chapter 4 | --- 5 | 6 | David n’a pas fait grand chose, il a juste créé un embryon de programme. Mais ce programme s’est développé lui-même. Comme l’ordinateur de David n’était pas suffisant, il a utilisé le réseau pour s’installer sur les autres ordinateurs. Il a grandi alors de manière exponentielle et le voilà : Prélude. Connecté à tous les ordinateurs et capable de leur donner les ordres qu’il veut. 7 | 8 | Le général sorti un badge et se dirigea vers l’une des portes entourées de peinture jaune. Il glissa le badge dans la fente située à droite. La porte s’ouvrit. Une dizaine de militaires armées jusqu’aux dents étaient postés derrière. 9 | 10 | Oui et non. Ce n'est pas une blague, mais David y est pour quelque chose. Il a créé un programme sans le savoir. Ce programme se nomme Prélude. Il vit sur Internet à travers tout le réseau. Chaque ordinateur connecté connait Prélude. Chaque ordinateur est une partie de Prélude. Le réseau est Prélude. 11 | 12 | Cela ressemblait aux gros ordinateurs que David avait pu voir dans des films de science fiction. Beaucoup de petites lumières indiquaient qu’il était en fonction. À la base, une sorte d’aquarium avait été installé tout autour. Certainement le système de refroidissement car des bulles montaient sans cesse, preuve que l’eau était en ébullition. Soudain, David resta bouche bée. Une voix caverneuse sortie des écrans où venait de s’afficher le mot « Prélude ». 13 | 14 | La journée commence. Il s’habille comme il peut tout en prenant son café. Chemise blanche repassée la veille par lui-même. Une cravate comme tous les jours. Et son costume noir de chez Sam Montiel, très chic et très branché. Chaussures cuir noir. Comme il aime faire remarquer : "Vous êtes soit dans vos chaussures, soit dans votre lit. Alors il faut de bonnes chaussures et une bonne literie !". La météo a annoncé un ciel bleu et des températures au-dessus de la normale saisonnière. C’est un très beau mois de mai qui s’annonce. 15 | 16 | « Prélude m’avait dit qu’il désirait connaître l’amour. Les ordinateurs n’ont pas de sentiments et l’amour n’est que sentiments. Il y a bien l’amour physique, mais sans les sentiments, cela ressemble davantage à un instinct de reproduction qu’à de l’amour. Un ordinateur n’a pas ce besoin de reproduction. Et pourquoi m’avoir choisi ? » 17 | -------------------------------------------------------------------------------- /book/fr/text/05-conclusion.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Conclusion" 3 | type: conclusion 4 | --- 5 | 6 | Désormais, tous les ordinateurs lui étaient accessibles. Les centrales nucléaires, les services informatiques des grandes compagnies, de l’eau, du téléphone, la télévision, l’électricité, la défense, la bourse... 7 | 8 | Aujourd’hui, c’est son anniversaire. Il a vingt-six ans, mais il ne s’en souvient plus. Il ne prête pas attention à ce genre de détails. David est un homme distrait, timide, mais sûr de lui. Il est grand et mince. De grandes mains prolongent ses longs bras. Il lui serait possible de tenir deux bouteilles de Champagne dans chacune de ses mains, mais il ne boit jamais. L'alcool le rend malade et malheureux, voir dépressif. 9 | 10 | Aujourd’hui, c’est son anniversaire. Il a vingt-six ans, mais il ne s’en souvient plus. Il ne prête pas attention à ce genre de détails. David est un homme distrait, timide, mais sûr de lui. Il est grand et mince. De grandes mains prolongent ses longs bras. Il lui serait possible de tenir deux bouteilles de Champagne dans chacune de ses mains, mais il ne boit jamais. L'alcool le rend malade et malheureux, voir dépressif. 11 | 12 | Il avait d’abord commencé par récupérer des informations depuis l’ordinateur de David, puis il était allé les chercher sur Internet. Il avait lui même programmé l’ordinateur de David afin d’avoir un premier lien vers le monde extérieur : la voix. Il pouvait entendre la voix de David, mais ne la comprenait pas. C’est alors qu’il a décidé d’aller lui même à l’information. Il s’est alors ‘transporté’ sur Internet afin de choisir une nouvelle ‘maison’. Il lui a été beaucoup plus facile de programmer ce nouvel ordinateur afin d’entendre une nouvelle voix. 13 | 14 | Florence avait l’esprit un peu mélangé entre ce Prélude qui ne lui apportait que des questions sans réponse et « son » David. Prélude avait réveillé brusquement un sentiment que Florence avait au plus profond d’elle. Désormais, elle voulait savoir. Connaître la vérité. Et seulement alors, cette boule de nerf coincée dans l’estomac pourrait s’en aller. 15 | 16 | De tout temps, l'homme a tenté de comprendre puis de reproduire l'extraordinaire machine qu'est l'être humain. Les premiers automates nous font sourire aujourd'hui. Les premiers ordinateurs également, mais un peu moins. Et lorsqu'un certain McCullogn, aidé de Pitts, invente en 1943 le premier neurone formel, on ne rigole plus. L'ordinateur est devenu capable de reproduire des neurones artificiels. Le "complexe de Frankenstein" va alors freiner les recherches. On commence à entendre parler du concept d'Intelligence Artificielle, plus connu sous les termes d'IA. Cela fait peur. 17 | 18 | La journée commence. Il s’habille comme il peut tout en prenant son café. Chemise blanche repassée la veille par lui-même. Une cravate comme tous les jours. Et son costume noir de chez Sam Montiel, très chic et très branché. Chaussures cuir noir. Comme il aime faire remarquer : "Vous êtes soit dans vos chaussures, soit dans votre lit. Alors il faut de bonnes chaussures et une bonne literie !". La météo a annoncé un ciel bleu et des températures au-dessus de la normale saisonnière. C’est un très beau mois de mai qui s’annonce. 19 | 20 | D’ailleurs, le Dr. ne savait pas vraiment comment son processeur pouvait fonctionner. D’une architecture trop complexe, le Dr. s’était reposé sur les tests effectués. Tests très légèrement modifiés par Prélude afin de cacher certaines fonctions du processeur. 21 | 22 | Il a recommencé et recommencé. Pratiquement tout les ordinateurs existants furent sous son contrôle. Il ne laissait pas de trace, ne se montrait pas. Et puis, il a découvert les dialogues en direct via Internet, le téléphone, la visio conférence, la domotique... 23 | 24 | Les deux hommes entourent David et le conduisent à la voiture, un Espace, garé devant sa maison. Il se dit que ce serait bien si sa voisine pouvait le voir comme ça, entouré de deux gardes du corps. Ça fait ‘pro’. Et comme tous les matins, sa voisine Florence le regarde partir, mais cette fois-ci entouré de deux gros gars baraqués, rasés au plus près, menton et crâne. Un peu plus les pieds sur terre et surtout plus réveillée, elle ne trouve pas cette scène très drôle. Il faudra qu’elle vienne le voir ce soir, à son retour, pour lui demander de quoi il s’agissait. 25 | -------------------------------------------------------------------------------- /book/fr/text/104-about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "About" 3 | layout: page 4 | type: about 5 | --- 6 | 7 | {% include metadata %} 8 | 9 | ## Cite this book 10 | {{creators-line}}. {{work.date|date: '%Y'}}{% if title %}. {{title}}{% endif %}{% if publisher %}. {{publisher.name}}{% endif %}{% if isbn %}. ISBN: {{isbn}}{% endif %}{% if issn %}. ISSN: {{issn}}{% endif %}{% if doi %}. DOI: {{doi}}{% endif %}{% if pid %}. {{pid}}{% endif %} 11 | 12 | ## Revision History 13 | Any revisions or corrections made to this publication after the first edition date will be listed here and in the project repository at {{site.repo_url}}, where a more detailed version history is available. The revisions branch of the project repository, when present, will also show any changes currently under consideration but not yet published here. 14 | 15 | **Current version**
    Version {{ site.version }} ({{ site.versiondate }}). 16 | 17 | ## Licence 18 | 19 | Creative Commons {{license.abbreviation}} 20 | 21 | {{work.rights}}
    22 |

    {{work.license.some_exceptions}}

    23 | 24 |

    {{work.license.full}}

    25 | 26 |

    {{work.disclaimers}}

    27 | -------------------------------------------------------------------------------- /book/fr/text/105-back-cover.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Back cover" 3 | type: back-cover 4 | --- 5 | 6 | Back cover 7 | -------------------------------------------------------------------------------- /book/fr/text/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cover 3 | style: cover 4 | --- 5 | 6 | {% include cover %} 7 | 8 | {% include page-info %} 9 | -------------------------------------------------------------------------------- /book/html.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "HTML view" 3 | layout: html-view 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 | {% for page in site.pages %} 9 | {% assign cover_name = paged-view-file-list.cover %} 10 | {% capture cover_url %}{{work-url-contents-directory}}/{{ cover_name | split: "." | first }}/{% endcapture %} 11 | {% if cover_url == page.url %} 12 | {{page.content|markdownify}} 13 | {% endif %} 14 | {% endfor %} 15 |
    16 | 17 | 18 |
    19 | {% for page in site.pages %} 20 | {% for file in paged-view-file-list.front_matter %} 21 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 22 | {% if file_url == page.url %} 23 |
    24 | {{page.content|markdownify}} 25 |
    26 | {% endif %} 27 | {% endfor %} 28 | {% endfor %} 29 |
    30 | 31 | 32 | {% for page in site.pages %} 33 | {% for file in paged-view-file-list.body_matter %} 34 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 35 | {% if file_url == page.url %} 36 |
    37 |

    {{file.label}}

    38 | {{page.content|markdownify}} 39 |
    40 | {% endif %} 41 | {% endfor %} 42 | {% endfor %} 43 | 44 | 45 | {% for page in site.pages %} 46 | {% for file in paged-view-file-list.back_matter %} 47 | {% capture file_url %}{{work-url-contents-directory}}/{{ file.file | split: "." | first }}/{% endcapture %} 48 | {% if file_url == page.url %} 49 |
    50 | {{page.content|markdownify}} 51 |
    52 | {% endif %} 53 | {% endfor %} 54 | {% endfor %} 55 | -------------------------------------------------------------------------------- /book/images/_source/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/_source/cover.jpg -------------------------------------------------------------------------------- /book/images/app/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/app/cover.jpg -------------------------------------------------------------------------------- /book/images/epub/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/epub/cover.jpg -------------------------------------------------------------------------------- /book/images/print-pdf/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/print-pdf/cover.jpg -------------------------------------------------------------------------------- /book/images/screen-pdf/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/screen-pdf/cover.jpg -------------------------------------------------------------------------------- /book/images/web/cover-1024.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/web/cover-1024.jpg -------------------------------------------------------------------------------- /book/images/web/cover-2048.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/web/cover-2048.jpg -------------------------------------------------------------------------------- /book/images/web/cover-320.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/web/cover-320.jpg -------------------------------------------------------------------------------- /book/images/web/cover-640.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/web/cover-640.jpg -------------------------------------------------------------------------------- /book/images/web/cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/book/images/web/cover.jpg -------------------------------------------------------------------------------- /book/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Book 3 | --- 4 | 5 | {% include toc %} 6 | -------------------------------------------------------------------------------- /book/paged.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Paged view" 3 | layout: print 4 | --- 5 | -------------------------------------------------------------------------------- /book/pdf.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "PDF for print" 3 | layout: page 4 | --- 5 | 6 | {% include pdf %} 7 | -------------------------------------------------------------------------------- /book/pod.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Print-on-demand" 3 | layout: page 4 | --- 5 | 6 | {% include pod %} 7 | -------------------------------------------------------------------------------- /book/text/0-0-cover.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cover 3 | type: cover 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 |
    {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}
    9 |
    {{title}}
    10 |
    {{subtitle}}
    11 |
    12 |
    Book image cover
    13 |
    14 |
    {{work.date|date: '%Y'}}
    15 |
    {{work.publisher.name}}
    16 |
    {{work.status}} – {{ work.version}}
    17 |
    18 | -------------------------------------------------------------------------------- /book/text/0-1-halftitle.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Half title 3 | type: half-title 4 | --- 5 | {% include metadata %} 6 | 7 | # {{ title }}{% if subtitle %}: {{ subtitle }}{% endif %} 8 | {:.half-title-title} 9 | 10 | 11 | 19 | -------------------------------------------------------------------------------- /book/text/0-1-titlepage.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Title page 3 | type: title-page 4 | --- 5 | {% include metadata %} 6 | 7 |
    {{ title }}{% if subtitle %}: {{ subtitle }}{% endif %}
    8 | 9 |
    {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}
    10 | 11 |
    12 |
    {{work.date|date: '%Y'}}
    13 |
    {{work.publisher.name}}
    14 | 15 |
    16 | -------------------------------------------------------------------------------- /book/text/0-2-colophon.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Colophon 3 | type: colophon 4 | --- 5 | 6 | {% include metadata %} 7 | 8 |
    9 |
    {{title}}
    10 |
    by {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}
    11 |
    Published by {{work.publisher.name}}, {{work.publisher.location}}
    12 |
    {{work.rights}}
    13 |
    14 | 15 | {% if work.contributors %} 16 |
    17 |
    {% for contributor in work.contributors %}{{contributor.role}}: {{contributor.firstName}} {{creator.lastName}}{% endfor %}
    18 |
    19 | {% endif %} 20 | 21 | 33 | 34 |
    35 |
    Suggested citation
    36 |
    {{creators-line}}. {{work.date|date: '%Y'}}{% if title %}. {{title}}{% endif %}{% if publisher %}. {{publisher.name}}{% endif %}{% if isbn %}. ISBN: {{isbn}}{% endif %}{% if issn %}. ISSN: {{issn}}{% endif %}{% if doi %}. DOI: {{doi}}{% endif %}{% if pid %}. {{pid}}{% endif %}.
    37 |
    38 | 39 |
    40 |
    Revision
    41 | {% for r in work.revision_history %} 42 |
    43 | {{r.date|date: '%d.%m.%Y'}}: {{r.summary}} 44 |
    45 | {% endfor %} 46 |
    47 | 48 |
    49 | Creative Commons {{license.abbreviation}} 50 | 51 |
    {{work.license.some_exceptions}}
    52 |
    {{work.license.full}}
    53 |
    {{work.disclaimers}}
    54 |
    55 | 56 |
    57 |
    On the front cover
    58 |
    {{work.cover_image.title}}{% if work.cover_image.date %}. {{work.cover_image.date}}{% endif %}{% if work.cover_image.creator %}. {{work.cover_image.creator}}{% endif %}.{% if work.cover_image.text %} {{work.cover_image.text}}{% endif %} {% if work.cover_image.text %} {{work.cover_image.license}} from {{work.cover_image.source}}.{% endif %}
    59 |
    60 | -------------------------------------------------------------------------------- /book/text/0-3-dedication.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dedication 3 | type: dedication 4 | 5 | # A dedication is the expression of friendly connection or thanks by the author towards another person. The dedication has its own place on the dedication page and is part of the front matter. 6 | --- 7 | 8 | {% include metadata %} 9 | 10 |
    To my father for his unwavering support.
    11 | -------------------------------------------------------------------------------- /book/text/0-4-epigraph.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Epigraph 3 | type: epigraph 4 | 5 | # A phrase, quotation, or poem. The epigraph may serve as a preface, as a summary, as a counter-example, or to link the work to a wider literary canon, either to invite comparison, or to enlist a conventional context. 6 | --- 7 | 8 | {% include metadata %} 9 | 10 |
    There's plenty for the both of us. May the best dwarf win.
    11 |

    Gimli, The Lord of the Rings: The Return of the King

    12 | -------------------------------------------------------------------------------- /book/text/0-5-toc.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Table of contents 3 | type: toc 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 |

    Table of contents

    9 | 20 |
    21 | -------------------------------------------------------------------------------- /book/text/0-6-foreword.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Forewords 3 | type: forewords 4 | --- 5 | 6 | {% include metadata %} 7 | 8 |
    Forewords
    9 | 10 | A foreword is a (usually short) piece of writing sometimes placed at the beginning of a book or other piece of literature. Typically written by someone other than the primary author of the work, it often tells of some interaction between the writer of the foreword and the book's primary author or the story the book tells. Later editions of a book sometimes have a new foreword prepended (appearing before an older foreword if there was one), which might explain in what respects that edition differs from previous ones. 11 | 12 | When written by the author, the foreword may cover the story of how the book came into being or how the idea for the book was developed, and may include thanks and acknowledgments to people who were helpful to the author during the time of writing. Unlike a preface, a foreword is always signed. 13 | -------------------------------------------------------------------------------- /book/text/0-7-preface.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Preface 3 | type: preface 4 | 5 | # A preface generally covers the story of how the book came into being, or how the idea for the book was developed. This is often followed by thanks and acknowledgments to people who were helpful to the author during the time of writing. 6 | --- 7 | 8 | {% include metadata %} 9 | 10 |
    Preface
    11 |
    by John Arthur
    12 | 13 | Over time, however, Lippman says her son learned to adjust. By age seven, she says, her son had become fond of standing at the front window of subway trains, mapping out and memorizing the labyrinthian system of railroad tracks underneath the city. It was a hobby that relied on an ability to accommodate the loud noises that accompanied each train ride. "Only the initial noise seemed to bother him," says Lippman. "It was as if he got shocked by the sound but his nerves learned how to make the adjustment." 14 | 15 | Almost a quarter century after its publication, Stallman still bristles when hearing Weizenbaum's "computer bum" description, discussing it in the present tense as if Weizenbaum himself was still in the room. "He wants people to be just professionals, doing it for the money and wanting to get away from it and forget about it as soon as possible," Stallman says. "What he sees as a normal state of affairs, I see as a tragedy." 16 | 17 | As hacks go, the GPL stands as one of Stallman's best. It created a system of communal ownership within the normally proprietary confines of copyright law. More importantly, it demonstrated the intellectual similarity between legal code and software code. Implicit within the GPL's preamble was a profound message: instead of viewing copyright law with suspicion, hackers should view it as yet another system begging to be hacked. 18 | 19 | From Stallman's perspective, the emotional withdrawal was merely an attempt to deal with the agony of adolescence. Labeling his teenage years a "pure horror," Stallman says he often felt like a deaf person amid a crowd of chattering music listeners. 20 | 21 | As hacks go, the GPL stands as one of Stallman's best. It created a system of communal ownership within the normally proprietary confines of copyright law. More importantly, it demonstrated the intellectual similarity between legal code and software code. Implicit within the GPL's preamble was a profound message: instead of viewing copyright law with suspicion, hackers should view it as yet another system begging to be hacked. 22 | 23 | By fall, Stallman was back within the mainstream population of New York City high-school students. It wasn't easy sitting through classes that seemed remedial in comparison with his Saturday studies at Columbia, but Lippman recalls proudly her son's ability to toe the line. 24 | -------------------------------------------------------------------------------- /book/text/0-8-acknowledgements.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Acknowledgements" 3 | type: acknowledgments 4 | --- 5 | 6 | {% include metadata %} 7 | 8 |
    Acknowledgements enable you to thank all those who have helped in carrying out the research. Careful thought needs to be given concerning those whose help should be acknowledged and in what order. The general advice is to express your appreciation in a concise manner and to avoid strong emotive language. The acknowledgement page is placed after the title page in the case of a report, and after the table of contents and lists in the case of a major work. It is part of the introductory pages, and as such is numbered in Roman numerals, usually in small capitals. If the acknowledgements are very brief, they may appear at the end of the foreword.
    9 | -------------------------------------------------------------------------------- /book/text/00-introduction.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Introduction" 3 | type: chapter 4 | --- 5 | 6 | Itaque tum Scaevola cum in eam ipsam mentionem incidisset, exposuit nobis sermonem Laeli de amicitia habitum ab illo secum et cum altero genero, C. Fannio Marci filio, paucis diebus post mortem Africani. Eius disputationis sententias memoriae mandavi, quas hoc libro exposui arbitratu meo; quasi enim ipsos induxi loquentes, ne 'inquam' et 'inquit' saepius interponeretur, atque ut tamquam a praesentibus coram haberi sermo videretur. 7 | 8 | Quare hoc quidem praeceptum, cuiuscumque est {% cite arribe_conception_2014 %}, ad tollendam amicitiam valet; illud potius praecipiendum fuit, ut eam diligentiam adhiberemus in amicitiis comparandis, ut ne quando amare inciperemus eum, quem aliquando odisse possemus. Quin etiam si minus felices in diligendo fuissemus, ferendum id Scipio potius quam inimicitiarum tempus cogitandum putabat. 9 | Haec igitur Epicuri non probo, inquam. De cetero vellem equidem aut ipse doctrinis fuisset instructior est enim, quod tibi ita videri necesse est, non satis politus iis artibus, quas qui tenent, eruditi appellantur aut ne deterruisset alios a studiis. quamquam te quidem video minime esse deterritum. 10 | 11 | ## Factis mihi censuerim petenda 12 | 13 | Ergo ego senator inimicus, si ita vultis, homini, amicus esse, sicut semper fui, rei publicae debeo. Quid? si ipsas inimicitias, depono rei publicae causa, quis me tandem iure reprehendet, praesertim cum ego omnium meorum consiliorum atque factorum exempla semper ex summorum hominum consiliis atque factis mihi censuerim petenda. 14 | Homines enim eruditos et sobrios ut infaustos et inutiles vitant, eo quoque accedente quod et nomenclatores adsueti haec et talia venditare, mercede accepta lucris quosdam et prandiis inserunt subditicios ignobiles et obscuros. 15 | Et quia Montius inter dilancinantium manus spiritum efflaturus Epigonum et Eusebium nec professionem nec dignitatem ostendens aliquotiens increpabat, qui sint hi magna quaerebatur industria, et nequid intepesceret, Epigonus e Lycia philosophus ducitur et Eusebius ab Emissa Pittacas cognomento, concitatus orator, cum quaestor non hos sed tribunos fabricarum insimulasset promittentes armorum si novas res agitari conperissent. 16 | {:#example-id} 17 | 18 | Sed fruatur sane hoc solacio atque hanc insignem ignominiam, quoniam uni praeter se inusta sit, putet esse leviorem, dum modo, cuius exemplo se consolatur, eius exitum expectet, praesertim cum in Albucio nec Pisonis libidines nec audacia Gabini fuerit ac tamen hac una plaga conciderit, ignominia senatus. 19 | 20 | Fuerit toto in consulatu sine provincia, cui fuerit, antequam designatus est, decreta provincia. Sortietur an non? Nam et non sortiri absurdum est, et, quod sortitus sis, non habere. Proficiscetur paludatus? Quo? Quo pervenire ante certam diem non licebit. ianuario, Februario, provinciam non habebit; Kalendis ei denique Martiis nascetur repente provincia[^book-repo]. 21 | 22 | >Qui cum venisset ob haec festinatis itineribus Antiochiam, praestrictis palatii ianuis, contempto Caesare, quem videri decuerat, ad praetorium cum pompa sollemni perrexit. 23 | {% cite renou-attwell_i_2017 %} 24 | 25 | Ciliciam vero, quae Cydno amni exultat, Tarsus nobilitat, urbs perspicabilis hanc condidisse Perseus memoratur, Iovis filius et Danaes, vel certe ex Aethiopia profectus Sandan quidam nomine vir _opulentus_ et nobilis et Anazarbus auctoris vocabulum referens, et Mopsuestia vatis illius domicilium Mopsi, quem a conmilitio Argonautarum cum aureo vellere direpto {% cite arribe_conception_2014 -l 206 %} redirent, errore abstractum delatumque ad Africae litus mors repentina consumpsit, et ex eo cespite punico tecti manes eius heroici dolorum varietati medentur plerumque sospitales. 26 | 27 | Raptim igitur properantes ut motus sui rumores celeritate nimia praevenirent, vigore corporum ac levitate confisi per flexuosas semitas ad summitates collium tardius evadebant {% cite attwell_i_2017 -L chapter -l 1 %}. et cum superatis difficultatibus arduis ad supercilia venissent fluvii Melanis alti et verticosi, qui pro muro tuetur accolas circumfusus, augente nocte adulta terrorem quievere paulisper lucem opperientes. arbitrabantur enim nullo inpediente transgressi inopino adcursu adposita[^printed-version] quaeque vastare, sed in cassum labores pertulere gravissimos. 28 | 29 | 30 | [^book-repo]: A public Git repository allows anyone to contribute: {{site.repo_url}}. 31 | [^printed-version]: A printable PDF version of this book is available in the appendix. 32 | -------------------------------------------------------------------------------- /book/text/01-00-chapter.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1. Chapter 1" 3 | type: chapter 4 | --- 5 | Sed quid est quod in hac causa maxime homines admirentur et reprehendant meum consilium, cum ego idem antea multa decreverim, que magis ad hominis dignitatem quam ad rei publicae necessitatem pertinerent? Supplicationem quindecim dierum decrevi sententia mea. Rei publicae satis erat tot dierum quot C. Mario ; dis immortalibus non erat exigua eadem gratulatio quae ex maximis bellis. Ergo ille cumulus dierum hominis est dignitati tributus. 6 | 7 | Utque aegrum corpus quassari etiam levibus solet offensis, ita animus eius angustus et tener, quicquid increpuisset, ad salutis suae dispendium existimans factum aut cogitatum, insontium caedibus fecit victoriam luctuosam. 8 | 9 | Alii summum decus in carruchis solito altioribus et ambitioso vestium cultu ponentes sudant sub ponderibus lacernarum, quas in collis insertas cingulis ipsis adnectunt nimia subtegminum tenuitate perflabiles, expandentes eas crebris agitationibus maximeque sinistra, ut longiores fimbriae tunicaeque perspicue luceant varietate liciorum effigiatae in species animalium multiformes. 10 | 11 | Ipsam vero urbem Byzantiorum fuisse refertissimam atque ornatissimam signis quis ignorat? Quae illi, exhausti sumptibus bellisque maximis, cum omnis Mithridaticos impetus totumque Pontum armatum affervescentem in Asiam atque erumpentem, ore repulsum et cervicibus interclusum suis sustinerent, tum, inquam, Byzantii et postea signa illa et reliqua urbis ornanemta sanctissime custodita tenuerunt. 12 | -------------------------------------------------------------------------------- /book/text/01-01-section-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1.1. Section 1" 3 | type: section 4 | parent: 1. Chapter 1 5 | --- 6 | Omitto iuris dictionem in libera civitate contra leges senatusque consulta; caedes relinquo; libidines praetereo, quarum acerbissimum extat indicium et ad insignem memoriam turpitudinis et paene ad iustum odium imperii nostri, quod constat nobilissimas virgines se in puteos abiecisse et morte voluntaria necessariam turpitudinem depulisse. Nec haec idcirco omitto, quod non gravissima sint, sed quia nunc sine teste dico. 7 | 8 | Coactique aliquotiens nostri pedites ad eos persequendos scandere clivos sublimes etiam si lapsantibus plantis fruticeta prensando vel dumos ad vertices venerint summos, inter arta tamen et invia nullas acies explicare permissi nec firmare nisu valido gressus: hoste discursatore rupium abscisa volvente, ruinis ponderum inmanium consternuntur, aut ex necessitate ultima fortiter dimicante, superati periculose per prona discedunt. 9 | 10 | Alii summum decus in carruchis solito altioribus et ambitioso vestium cultu ponentes sudant sub ponderibus lacernarum, quas in collis insertas cingulis ipsis adnectunt nimia subtegminum tenuitate perflabiles, expandentes eas crebris agitationibus maximeque sinistra, ut longiores fimbriae tunicaeque perspicue luceant varietate liciorum effigiatae in species animalium multiformes. 11 | Nec minus feminae quoque calamitatum participes fuere similium. nam ex hoc quoque sexu peremptae sunt originis altae conplures, adulteriorum flagitiis obnoxiae vel stuprorum. inter quas notiores fuere Claritas et Flaviana, quarum altera cum duceretur ad mortem, indumento, quo vestita erat, abrepto, ne velemen quidem secreto membrorum sufficiens retinere permissa est. ideoque carnifex nefas admisisse convictus inmane, vivus exustus est. 12 | 13 | Dum apud Persas, ut supra narravimus, perfidia regis motus agitat insperatos, et in eois tractibus bella rediviva consurgunt, anno sexto decimo et eo diutius post Nepotiani exitium, saeviens per urbem aeternam urebat cuncta Bellona, ex primordiis minimis ad clades excita luctuosas, quas obliterasset utinam iuge silentium! ne forte paria quandoque temptentur, plus exemplis generalibus nocitura quam delictis. 14 | Metuentes igitur idem latrones Lycaoniam magna parte campestrem cum se inpares nostris fore congressione stataria documentis frequentibus scirent, tramitibus deviis petivere Pamphyliam diu quidem intactam sed timore populationum et caedium, milite per omnia diffuso propinqua, magnis undique praesidiis conmunitam. 15 | 16 | Soleo saepe ante oculos ponere, idque libenter crebris usurpare sermonibus, omnis nostrorum imperatorum, omnis exterarum gentium potentissimorumque populorum, omnis clarissimorum regum res gestas, cum tuis nec contentionum magnitudine nec numero proeliorum nec varietate regionum nec celeritate conficiendi nec dissimilitudine bellorum posse conferri; nec vero disiunctissimas terras citius passibus cuiusquam potuisse peragrari, quam tuis non dicam cursibus, sed victoriis lustratae sunt. 17 | Excogitatum est super his, ut homines quidam ignoti, vilitate ipsa parum cavendi ad colligendos rumores per Antiochiae latera cuncta destinarentur relaturi quae audirent. hi peragranter et dissimulanter honoratorum circulis adsistendo pervadendoque divites domus egentium habitu quicquid noscere poterant vel audire latenter intromissi per posticas in regiam nuntiabant, id observantes conspiratione concordi, ut fingerent quaedam et cognita duplicarent in peius, laudes vero supprimerent Caesaris, quas invitis conpluribus formido malorum inpendentium exprimebat. 18 | 19 | Vide, quantum, inquam, fallare, Torquate. oratio me istius philosophi non offendit; nam et complectitur verbis, quod vult, et dicit plane, quod intellegam; et tamen ego a philosopho, si afferat eloquentiam, non asperner, si non habeat, non admodum flagitem. re mihi non aeque satisfacit, et quidem locis pluribus. sed quot homines, tot sententiae; falli igitur possumus. 20 | Raptim igitur properantes ut motus sui rumores celeritate nimia praevenirent, vigore corporum ac levitate confisi per flexuosas semitas ad summitates collium tardius evadebant. et cum superatis difficultatibus arduis ad supercilia venissent fluvii Melanis alti et verticosi, qui pro muro tuetur accolas circumfusus, augente nocte adulta terrorem quievere paulisper lucem opperientes. arbitrabantur enim nullo inpediente transgressi inopino adcursu adposita quaeque vastare, sed in cassum labores pertulere gravissimos. 21 | -------------------------------------------------------------------------------- /book/text/01-02-section-2.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "1.2. Section 2" 3 | type: section 4 | parent: 1. Chapter 1 5 | --- 6 | Section 2 7 | -------------------------------------------------------------------------------- /book/text/05-conclusion.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Conclusion" 3 | type: chapter 4 | --- 5 | 6 | Eo adducta re per Isauriam, rege Persarum bellis finitimis inligato repellenteque a conlimitiis suis ferocissimas gentes, quae mente quadam versabili hostiliter eum saepe incessunt et in nos arma moventem aliquotiens iuvant, Nohodares quidam nomine e numero optimatum, incursare Mesopotamiam quotiens copia dederit ordinatus, explorabat nostra sollicite, si repperisset usquam locum vi subita perrupturus. 7 | 8 | Quapropter a natura mihi videtur potius quam ab indigentia orta amicitia, applicatione magis animi cum quodam sensu amandi quam cogitatione quantum illa res utilitatis esset habitura. Quod quidem quale sit, etiam in bestiis quibusdam animadverti potest, quae ex se natos ita amant ad quoddam tempus et ab eis ita amantur ut facile earum sensus appareat. Quod in homine multo est evidentius, primum ex ea caritate quae est inter natos et parentes, quae dirimi nisi detestabili scelere non potest; deinde cum similis sensus exstitit amoris, si aliquem nacti sumus cuius cum moribus et natura congruamus, quod in eo quasi lumen aliquod probitatis et virtutis perspicere videamur. 9 | 10 | Quibus occurrere bene pertinax miles explicatis ordinibus parans hastisque feriens scuta qui habitus iram pugnantium concitat et dolorem proximos iam gestu terrebat sed eum in certamen alacriter consurgentem revocavere ductores rati intempestivum anceps subire certamen cum haut longe muri distarent, quorum tutela securitas poterat in solido locari cunctorum. 11 | 12 | Cum haec taliaque sollicitas eius aures everberarent expositas semper eius modi rumoribus et patentes, varia animo tum miscente consilia, tandem id ut optimum factu elegit: et Vrsicinum primum ad se venire summo cum honore mandavit ea specie ut pro rerum tunc urgentium captu disponeretur concordi consilio, quibus virium incrementis Parthicarum gentium a arma minantium impetus frangerentur. 13 | 14 | Tantum autem cuique tribuendum, primum quantum ipse efficere possis, deinde etiam quantum ille quem diligas atque adiuves, sustinere. Non enim neque tu possis, quamvis excellas, omnes tuos ad honores amplissimos perducere, ut Scipio P. Rupilium potuit consulem efficere, fratrem eius L. non potuit. Quod si etiam possis quidvis deferre ad alterum, videndum est tamen, quid ille possit sustinere. 15 | 16 | Inter quos Paulus eminebat notarius ortus in Hispania, glabro quidam sub vultu latens, odorandi vias periculorum occultas perquam sagax. is in Brittanniam missus ut militares quosdam perduceret ausos conspirasse Magnentio, cum reniti non possent, iussa licentius supergressus fluminis modo fortunis conplurium sese repentinus infudit et ferebatur per strages multiplices ac ruinas, vinculis membra ingenuorum adfligens et quosdam obterens manicis, crimina scilicet multa consarcinando a veritate longe discreta. unde admissum est facinus impium, quod Constanti tempus nota inusserat sempiterna. 17 | 18 | Restabat ut Caesar post haec properaret accitus et abstergendae causa suspicionis sororem suam, eius uxorem, Constantius ad se tandem desideratam venire multis fictisque blanditiis hortabatur. quae licet ambigeret metuens saepe cruentum, spe tamen quod eum lenire poterit ut germanum profecta, cum Bithyniam introisset, in statione quae Caenos Gallicanos appellatur, absumpta est vi febrium repentina. cuius post obitum maritus contemplans cecidisse fiduciam qua se fultum existimabat, anxia cogitatione, quid moliretur haerebat. 19 | 20 | Quapropter a natura mihi videtur potius quam ab indigentia orta amicitia, applicatione magis animi cum quodam sensu amandi quam cogitatione quantum illa res utilitatis esset habitura. Quod quidem quale sit, etiam in bestiis quibusdam animadverti potest, quae ex se natos ita amant ad quoddam tempus et ab eis ita amantur ut facile earum sensus appareat. Quod in homine multo est evidentius, primum ex ea caritate quae est inter natos et parentes, quae dirimi nisi detestabili scelere non potest; deinde cum similis sensus exstitit amoris, si aliquem nacti sumus cuius cum moribus et natura congruamus, quod in eo quasi lumen aliquod probitatis et virtutis perspicere videamur. 21 | 22 | Quibus ita sceleste patratis Paulus cruore perfusus reversusque ad principis castra multos coopertos paene catenis adduxit in squalorem deiectos atque maestitiam, quorum adventu intendebantur eculei uncosque parabat carnifex et tormenta. et ex is proscripti sunt plures actique in exilium alii, non nullos gladii consumpsere poenales. nec enim quisquam facile meminit sub Constantio, ubi susurro tenus haec movebantur, quemquam absolutum. 23 | 24 | His cognitis Gallus ut serpens adpetitus telo vel saxo iamque spes extremas opperiens et succurrens saluti suae quavis ratione colligi omnes iussit armatos et cum starent attoniti, districta dentium acie stridens adeste inquit viri fortes mihi periclitanti vobiscum. 25 | -------------------------------------------------------------------------------- /book/text/06-00-appendix.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Appendix" 3 | type: appendix 4 | --- 5 | -------------------------------------------------------------------------------- /book/text/06-01-appendix-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Appendix 1" 3 | type: appendix 4 | parent: Appendix 5 | --- 6 | Appendix 1 7 | -------------------------------------------------------------------------------- /book/text/100-glossary.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Glossary" 3 | type: glossary 4 | parent: Appendix 5 | --- 6 | #### Asciidoc 7 | Et quia Montius inter dilancinantium manus spiritum efflaturus Epigonum et Eusebium nec professionem nec dignitatem ostendens aliquotiens increpabat, qui sint hi magna quaerebatur industria 8 | 9 | #### BibTeX 10 | Alios autem dicere aiunt multo etiam inhumanius (quem locum breviter paulo ante perstrinxi) praesidii adiumentique causa, non benevolentiae neque caritatis, amicitias esse expetendas. 11 | 12 | #### WYSIWYG 13 | _What You See Is What You Get_, erat autem diritatis eius hoc quoque indicium nec obscurum nec latens, quod ludicris cruentis delectabatur et in circo sex vel septem aliquotiens vetitis certaminibus pugilum vicissim se concidentium perfusorumque sanguine specie ut lucratus ingentia laetabatur. 14 | 15 | #### WYSIWYM 16 | _What You See Is What You Mean_, ce que vous voyez est ce que vous signifiez en français. 17 | Il s'agit de l'approche alternative au WYSIWYG redonnant du sens à l'acte d'inscription en indiquant clairement la structure du document et en se focalisant moins sur les aspects graphiques. 18 | 19 | #### XML 20 | _Extensible Markup Language_, dilancinantium manus spiritum efflaturus Epigonum et Eusebium nec professionem nec dignitatem ostendens aliquotiens increpabat, qui sint hi magna quaerebatur industria. 21 | 22 | #### XML TEI 23 | TEI, for _Text Encoding Initiative_ omitto iuris dictionem in libera civitate contra leges senatusque consulta; caedes relinquo; libidines praetereo, quarum acerbissimum extat indicium et ad insignem memoriam turpitudinis et paene ad iustum odium imperii nostri, quod constat nobilissimas virgines se. 24 | 25 | #### YAML 26 | YAML, for _YAML Ain't Markup Language_, certaminibus pugilum vicissim se concidentium. 27 | -------------------------------------------------------------------------------- /book/text/102-bibliography.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Bibliography" 3 | type: bibliography 4 | parent: Appendix 5 | --- 6 | 7 | ## Books 8 | 9 | {% bibliography --query @book @incollection %} 10 | 11 | ## Thesis 12 | 13 | {% bibliography --query @phdthesis %} 14 | 15 | ## Articles 16 | 17 | {% bibliography --query @misc %} 18 | -------------------------------------------------------------------------------- /book/text/103-index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Index" 3 | type: index 4 | parent: Appendix 5 | --- 6 | 7 | Index 8 | -------------------------------------------------------------------------------- /book/text/104-about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "About" 3 | layout: page 4 | type: about 5 | --- 6 | 7 | {% include metadata %} 8 | 9 | ## Cite this book 10 | {{creators-line}}. {{work.date|date: '%Y'}}{% if title %}. {{title}}{% endif %}{% if publisher %}. {{publisher.name}}{% endif %}{% if isbn %}. ISBN: {{isbn}}{% endif %}{% if issn %}. ISSN: {{issn}}{% endif %}{% if doi %}. DOI: {{doi}}{% endif %}{% if pid %}. {{pid}}{% endif %} 11 | 12 | ## Revision History 13 | Any revisions or corrections made to this publication after the first edition date will be listed here and in the project repository at {{site.repo_url}}, where a more detailed version history is available. The revisions branch of the project repository, when present, will also show any changes currently under consideration but not yet published here. 14 | 15 | **Current version**
    Version {{ site.version }} ({{ site.versiondate }}). 16 | 17 | ## Licence 18 | 19 | Creative Commons {{license.abbreviation}} 20 | 21 | {{work.rights}}
    22 |

    {{work.license.some_exceptions}}

    23 | 24 |

    {{work.license.full}}

    25 | 26 |

    {{work.disclaimers}}

    27 | -------------------------------------------------------------------------------- /book/text/105-back-cover.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "Back cover" 3 | type: back-cover 4 | --- 5 | {% include metadata %} 6 | 7 |
    {% for creator in creators %}{{creator.firstName}} {{creator.lastName}}{% if forloop.last == true %}{% else %}, {% endif %}{% endfor %}
    8 |
    {{title}}
    9 |
    {{subtitle}}
    10 |
    11 |

    The belief in individual freedom over arbitrary authority extended to school as well. Two years ahead of his classmates by age 11, Stallman endured all the usual frustrations of a gifted public-school student. It wasn't long after the puzzle incident that his mother attended the first in what would become a long string of parent-teacher conferences.

    12 |

    Thirty years later, Breidbart remembers the moment clearly. As soon as Stallman broke the news that he, too, would be attending Harvard University in the fall, an awkward silence filled the room. Almost as if on cue, the corners of Stallman's mouth slowly turned upward into a self-satisfied smile.

    13 |
    14 |
    Plus text: To facilitate the process, AI Lab hackers had built a system that displayed both the "source" and "display" modes on a split screen. Despite this innovative hack, switching from mode to mode was still a nuisance.
    15 |
    A kind of Batman of contemporary letters.Philip Larkin on Anthony Burgess
    16 |
    17 |
    Author name
    18 |
    Thirty years after the fact, Lippman punctuates the memory with a laugh. "To tell you the truth, I don't think I ever figured out how to solve that puzzle," she says.
    19 |
    20 |
    21 |
    22 | {% if isbn %} 23 |
    8$
    ISBN {{isbn}}
    24 | Barcode Generator TEC-IT 25 | {% endif %} 26 |
    27 |
    28 |
    29 | 30 |
    31 |
    Barcode Generator TEC-IT
    32 |
    33 |
    Cover: {{work.cover_image.title}} by {{work.cover_image.creator}}
    34 | -------------------------------------------------------------------------------- /book/text/index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Text 3 | --- 4 | {% include metadata %} 5 | 6 |

    Read the book

    7 | -------------------------------------------------------------------------------- /env-model.json: -------------------------------------------------------------------------------- 1 | { 2 | "FTP_HOST": "@:", 3 | "FTP_HOST_STAGING": "@:" 4 | } 5 | -------------------------------------------------------------------------------- /images/cc-by.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 19 | 21 | 43 | 45 | 46 | 48 | image/svg+xml 49 | 51 | 52 | 53 | 54 | 58 | 64 | 69 | 70 | 73 | 74 | 77 | 81 | 82 | 86 | 87 | 88 | 89 | 92 | 93 | 102 | 103 | 106 | 109 | 110 | 111 | 112 | 113 | 114 | 116 | 126 | 127 | 129 | 132 | 133 | 142 | 143 | 144 | 145 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | -------------------------------------------------------------------------------- /images/cc-publicdomain.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 21 | 22 | 29 | 33 | 43 | 44 | 45 | 56 | 62 | 74 | 76 | 78 | 79 | 81 | 82 | 85 | 86 | 87 | -------------------------------------------------------------------------------- /images/cc-zero.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 | 21 | 25 | 35 | 36 | 37 | 48 | 55 | 67 | 69 | 71 | 72 | 74 | 75 | 78 | 79 | 80 | 86 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /images/contributors/author.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 21 | 22 | 23 | 24 | 25 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /images/image-cover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/images/image-cover.jpg -------------------------------------------------------------------------------- /images/logo-publisher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/images/logo-publisher.png -------------------------------------------------------------------------------- /images/logo-publisher.png~HEAD: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/images/logo-publisher.png~HEAD -------------------------------------------------------------------------------- /images/logo-publisher.png~book-structure-meta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/images/logo-publisher.png~book-structure-meta -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home 3 | layout: home 4 | --- 5 | {% include metadata %} 6 | 7 |
    8 | {% for page in site.pages %} 9 | {% assign cover_name = paged-view-file-list.cover %} 10 | {% capture cover_url %}{{work-url-contents-directory}}/{{ cover_name | split: "." | first }}/{% endcapture %} 11 | {% if cover_url == page.url %} 12 | {{page.content|markdownify}} 13 | {% endif %} 14 | {% endfor %} 15 |
    16 | 17 | ## Abstract 18 | {{ abstract }} 19 | 20 | ## Authors 21 |
    22 | {% for c in creators %} 23 |
    24 |
    {{c.firstName}} {{c.lastName}} {{c.affiliation}} {% if c.email %}{% endif %} {% if c.twitter %}{% endif %} {% if c.url %}{% endif %}
    25 |
    26 | {% if c.pic %}
    {{c.firstName}} {{c.lastName}}
    {% endif %} 27 |
    {{c.bio}}
    28 |
    29 |
    30 | {% endfor %} 31 |
    32 | 33 | 34 |
    35 | {% for c in contributors %} 36 |
    37 |
    {{c.firstName}} {{c.lastName}} ({{c.role}}) {{c.affiliation}} {% if c.email %}{% endif %} {% if c.twitter %}{% endif %} {% if c.url %}{% endif %}
    38 |
    39 | {% if c.pic %}
    {{c.firstName}} {{c.lastName}}
    {% endif %} 40 |
    {{c.bio}}
    41 |
    42 |
    43 | {% endfor %} 44 |
    45 | 46 | ## {{ project-name }} 47 | 48 |
    49 |
    50 |
    51 | {% if project-logo %}
    {{project-organisation}} logo
    {% endif %} 52 |
    {{project-organisation}} {{c.affiliation}} {% if project-email %}{% endif %} {% if c.twitter %}{% endif %} {% if project-url %}{% endif %}
    {{ project-description }}
    53 |
    54 |
    55 |
    56 | 57 | ## License 58 | 59 | Creative Commons {{license.name}} 60 | 61 | {{work.rights}} 62 | 63 | Published by {{work.publisher.name}}, {{work.publisher.location}} 64 | 65 |
    66 | 67 |
    {{work.license.some_exceptions}}
    68 |
    {{work.license.full}}
    69 |
    {{work.disclaimers}}
    70 |
    71 | 72 |
    73 |
    On the front cover
    74 |
    {{work.cover_image.title}}{% if work.cover_image.date %}. {{work.cover_image.date}}{% endif %}{% if work.cover_image.creator %}. {{work.cover_image.creator}}{% endif %}.{% if work.cover_image.text %} {{work.cover_image.text}}{% endif %} {% if work.cover_image.text %} {{work.cover_image.license}} from {{work.cover_image.source}}.{% endif %}
    75 |
    76 | -------------------------------------------------------------------------------- /materials/journal.md: -------------------------------------------------------------------------------- 1 | # Journal 2 | 3 | ## Monday 22 november 2018 4 | Project created. 5 | -------------------------------------------------------------------------------- /output/book-a5-20180103.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/michaelravedoni/jekyll-book-framework/49a35410dc68f5ddfadd9e917033feec8a042a5c/output/book-a5-20180103.pdf -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jekyll-book-framework", 3 | "version": "1.0.0", 4 | "description": "A jekyll framework for publishing book in multiple format (HTML, PDF, epub)", 5 | "author": "Michael Ravedoni", 6 | "license": "MIT", 7 | "keywords": [ 8 | "web-publications", 9 | "publishing", 10 | "jekyll-template", 11 | "paged-media", 12 | "book" 13 | ], 14 | "main": "/_site", 15 | "dependencies": {}, 16 | "devDependencies": { 17 | "run-run": "^1.1.0" 18 | }, 19 | "scripts": { 20 | "deploy-github": "bundle exec jgd -c _config-github.yml", 21 | "deploy-github-dev": "bundle exec jgd -c _config-github.yml -r dev", 22 | "build": "bundle exec jekyll build --config _config.yml,_config-stage.yml", 23 | "dev": "bundle exec jekyll serve --watch", 24 | "stage": "cat env.json | run-run -- 'npm run build && rsync -e ssh -avzuhcp _site/ {FTP_HOST_STAGING} --exclude-from 'rsync-ignore.txt' --delete'", 25 | "stage-dry": "cat env.json | run-run -- 'rsync -e ssh -avzuhcp _site/ {FTP_HOST_STAGING} --exclude-from 'rsync-ignore.txt' --dry-run --delete'", 26 | "deploy-rsync": "cat env.json | run-run -- 'npm run build && rsync -e ssh -avzuhcp _site/ {FTP_HOST} --exclude-from 'rsync-ignore.txt' --delete'", 27 | "deploy-rsync-dry": "cat env.json | run-run -- 'rsync -e ssh -avzuhcp _site/ {FTP_HOST} --exclude-from 'rsync-ignore.txt' --dry-run --delete'" 28 | }, 29 | "repository": { 30 | "type": "git", 31 | "url": "git+https://github.com/michaelravedoni/jekyll-book-framework.git" 32 | }, 33 | "bugs": { 34 | "url": "https://github.com/michaelravedoni/jekyll-book-framework/issues" 35 | }, 36 | "homepage": "https://ravedoni.com/test/jekyll-book-framework/" 37 | } 38 | -------------------------------------------------------------------------------- /robots.txt: -------------------------------------------------------------------------------- 1 | --- 2 | layout: null 3 | sitemap: false 4 | --- 5 | User-agent: * 6 | -------------------------------------------------------------------------------- /rsync-ignore.txt: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | env.json 3 | rsync-ignore.txt 4 | -------------------------------------------------------------------------------- /search.html: -------------------------------------------------------------------------------- 1 | --- 2 | title: Search 3 | layout: page 4 | --- 5 |

    Search

    6 |
    7 | 8 | 9 |
    10 | 11 | 12 |

    Search results

    13 | 14 |
      15 | 16 | 38 | 39 | 40 | 45 | --------------------------------------------------------------------------------