diff --git a/.gitignore b/.gitignore
index 08f6fbd39..05dfac0b9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,6 @@
/_site
-.jekyll-metadata
+/.jekyll-metadata
+/downloads/cheatsheets/*.aux
+/downloads/cheatsheets/*.log
+/.bundle
+/vendor
\ No newline at end of file
diff --git a/.ruby-version b/.ruby-version
new file mode 100644
index 000000000..944880fa1
--- /dev/null
+++ b/.ruby-version
@@ -0,0 +1 @@
+3.2.0
diff --git a/CNAME b/CNAME
new file mode 100644
index 000000000..e9fe306fb
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+elixir-lang.org
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index 7d7467ebe..f24d05f4a 100644
--- a/Gemfile
+++ b/Gemfile
@@ -2,3 +2,7 @@ source 'https://rubygems.org'
gem 'github-pages'
gem 'json', '>= 2.0.0'
+gem 'webrick', '>= 1.8'
+gem 'csv', '~> 3.3'
+gem 'base64', '~> 0.2.0'
+gem 'bigdecimal', '~> 3.1'
diff --git a/Gemfile.lock b/Gemfile.lock
index 687fbfd83..f77a0774e 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,206 +1,270 @@
GEM
remote: https://rubygems.org/
specs:
- activesupport (4.2.8)
- i18n (~> 0.7)
- minitest (~> 5.1)
- thread_safe (~> 0.3, >= 0.3.4)
- tzinfo (~> 1.1)
- addressable (2.5.1)
- public_suffix (~> 2.0, >= 2.0.2)
+ activesupport (7.0.7.2)
+ concurrent-ruby (~> 1.0, >= 1.0.2)
+ i18n (>= 1.6, < 2)
+ minitest (>= 5.1)
+ tzinfo (~> 2.0)
+ addressable (2.8.1)
+ public_suffix (>= 2.0.2, < 6.0)
+ base64 (0.2.0)
+ bigdecimal (3.1.9)
coffee-script (2.4.1)
coffee-script-source
execjs
- coffee-script-source (1.12.2)
+ coffee-script-source (1.11.1)
colorator (1.1.0)
- ethon (0.10.1)
- ffi (>= 1.3.0)
- execjs (2.7.0)
- faraday (0.12.2)
- multipart-post (>= 1.2, < 3)
- ffi (1.9.18)
+ commonmarker (0.23.10)
+ concurrent-ruby (1.2.2)
+ csv (3.3.3)
+ dnsruby (1.61.9)
+ simpleidn (~> 0.1)
+ em-websocket (0.5.3)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0)
+ ethon (0.16.0)
+ ffi (>= 1.15.0)
+ eventmachine (1.2.7)
+ execjs (2.8.1)
+ faraday (2.7.4)
+ faraday-net_http (>= 2.0, < 3.1)
+ ruby2_keywords (>= 0.0.4)
+ faraday-net_http (3.0.2)
+ ffi (1.15.5)
forwardable-extended (2.6.0)
- gemoji (3.0.0)
- github-pages (150)
- activesupport (= 4.2.8)
- github-pages-health-check (= 1.3.5)
- jekyll (= 3.5.1)
- jekyll-avatar (= 0.4.2)
- jekyll-coffeescript (= 1.0.1)
+ gemoji (3.0.1)
+ github-pages (228)
+ github-pages-health-check (= 1.17.9)
+ jekyll (= 3.9.3)
+ jekyll-avatar (= 0.7.0)
+ jekyll-coffeescript (= 1.1.1)
+ jekyll-commonmark-ghpages (= 0.4.0)
jekyll-default-layout (= 0.1.4)
- jekyll-feed (= 0.9.2)
- jekyll-gist (= 1.4.1)
- jekyll-github-metadata (= 2.6.0)
- jekyll-mentions (= 1.2.0)
- jekyll-optional-front-matter (= 0.2.0)
+ jekyll-feed (= 0.15.1)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.13.0)
+ jekyll-include-cache (= 0.2.1)
+ jekyll-mentions (= 1.6.0)
+ jekyll-optional-front-matter (= 0.3.2)
jekyll-paginate (= 1.1.0)
- jekyll-readme-index (= 0.1.0)
- jekyll-redirect-from (= 0.12.1)
- jekyll-relative-links (= 0.4.1)
- jekyll-sass-converter (= 1.5.0)
- jekyll-seo-tag (= 2.2.3)
- jekyll-sitemap (= 1.0.0)
- jekyll-swiss (= 0.4.0)
- jekyll-theme-architect (= 0.0.4)
- jekyll-theme-cayman (= 0.0.4)
- jekyll-theme-dinky (= 0.0.4)
- jekyll-theme-hacker (= 0.0.4)
- jekyll-theme-leap-day (= 0.0.4)
- jekyll-theme-merlot (= 0.0.4)
- jekyll-theme-midnight (= 0.0.4)
- jekyll-theme-minimal (= 0.0.4)
- jekyll-theme-modernist (= 0.0.4)
- jekyll-theme-primer (= 0.4.0)
- jekyll-theme-slate (= 0.0.4)
- jekyll-theme-tactile (= 0.0.4)
- jekyll-theme-time-machine (= 0.0.4)
- jekyll-titles-from-headings (= 0.4.0)
- jemoji (= 0.8.0)
- kramdown (= 1.13.2)
- liquid (= 4.0.0)
- listen (= 3.0.6)
+ jekyll-readme-index (= 0.3.0)
+ jekyll-redirect-from (= 0.16.0)
+ jekyll-relative-links (= 0.6.1)
+ jekyll-remote-theme (= 0.4.3)
+ jekyll-sass-converter (= 1.5.2)
+ jekyll-seo-tag (= 2.8.0)
+ jekyll-sitemap (= 1.4.0)
+ jekyll-swiss (= 1.0.0)
+ jekyll-theme-architect (= 0.2.0)
+ jekyll-theme-cayman (= 0.2.0)
+ jekyll-theme-dinky (= 0.2.0)
+ jekyll-theme-hacker (= 0.2.0)
+ jekyll-theme-leap-day (= 0.2.0)
+ jekyll-theme-merlot (= 0.2.0)
+ jekyll-theme-midnight (= 0.2.0)
+ jekyll-theme-minimal (= 0.2.0)
+ jekyll-theme-modernist (= 0.2.0)
+ jekyll-theme-primer (= 0.6.0)
+ jekyll-theme-slate (= 0.2.0)
+ jekyll-theme-tactile (= 0.2.0)
+ jekyll-theme-time-machine (= 0.2.0)
+ jekyll-titles-from-headings (= 0.5.3)
+ jemoji (= 0.12.0)
+ kramdown (= 2.3.2)
+ kramdown-parser-gfm (= 1.1.0)
+ liquid (= 4.0.4)
mercenary (~> 0.3)
- minima (= 2.1.1)
- rouge (= 1.11.1)
+ minima (= 2.5.1)
+ nokogiri (>= 1.13.6, < 2.0)
+ rouge (= 3.26.0)
terminal-table (~> 1.4)
- github-pages-health-check (1.3.5)
+ github-pages-health-check (1.17.9)
addressable (~> 2.3)
- net-dns (~> 0.8)
+ dnsruby (~> 1.60)
octokit (~> 4.0)
- public_suffix (~> 2.0)
- typhoeus (~> 0.7)
- html-pipeline (2.6.0)
+ public_suffix (>= 3.0, < 5.0)
+ typhoeus (~> 1.3)
+ html-pipeline (2.14.3)
activesupport (>= 2)
nokogiri (>= 1.4)
- i18n (0.8.6)
- jekyll (3.5.1)
+ http_parser.rb (0.8.0)
+ i18n (1.14.1)
+ concurrent-ruby (~> 1.0)
+ jekyll (3.9.3)
addressable (~> 2.4)
colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (>= 0.7, < 2)
jekyll-sass-converter (~> 1.0)
- jekyll-watch (~> 1.1)
- kramdown (~> 1.3)
+ jekyll-watch (~> 2.0)
+ kramdown (>= 1.17, < 3)
liquid (~> 4.0)
mercenary (~> 0.3.3)
pathutil (~> 0.9)
- rouge (~> 1.7)
+ rouge (>= 1.7, < 4)
safe_yaml (~> 1.0)
- jekyll-avatar (0.4.2)
- jekyll (~> 3.0)
- jekyll-coffeescript (1.0.1)
+ jekyll-avatar (0.7.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-coffeescript (1.1.1)
coffee-script (~> 2.2)
+ coffee-script-source (~> 1.11.1)
+ jekyll-commonmark (1.4.0)
+ commonmarker (~> 0.22)
+ jekyll-commonmark-ghpages (0.4.0)
+ commonmarker (~> 0.23.7)
+ jekyll (~> 3.9.0)
+ jekyll-commonmark (~> 1.4.0)
+ rouge (>= 2.0, < 5.0)
jekyll-default-layout (0.1.4)
jekyll (~> 3.0)
- jekyll-feed (0.9.2)
- jekyll (~> 3.3)
- jekyll-gist (1.4.1)
+ jekyll-feed (0.15.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-gist (1.5.0)
octokit (~> 4.2)
- jekyll-github-metadata (2.6.0)
- jekyll (~> 3.1)
+ jekyll-github-metadata (2.13.0)
+ jekyll (>= 3.4, < 5.0)
octokit (~> 4.0, != 4.4.0)
- jekyll-mentions (1.2.0)
- activesupport (~> 4.0)
+ jekyll-include-cache (0.2.1)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-mentions (1.6.0)
html-pipeline (~> 2.3)
- jekyll (~> 3.0)
- jekyll-optional-front-matter (0.2.0)
- jekyll (~> 3.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-optional-front-matter (0.3.2)
+ jekyll (>= 3.0, < 5.0)
jekyll-paginate (1.1.0)
- jekyll-readme-index (0.1.0)
- jekyll (~> 3.0)
- jekyll-redirect-from (0.12.1)
- jekyll (~> 3.3)
- jekyll-relative-links (0.4.1)
- jekyll (~> 3.3)
- jekyll-sass-converter (1.5.0)
+ jekyll-readme-index (0.3.0)
+ jekyll (>= 3.0, < 5.0)
+ jekyll-redirect-from (0.16.0)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-relative-links (0.6.1)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-remote-theme (0.4.3)
+ addressable (~> 2.0)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0)
+ rubyzip (>= 1.3.0, < 3.0)
+ jekyll-sass-converter (1.5.2)
sass (~> 3.4)
- jekyll-seo-tag (2.2.3)
- jekyll (~> 3.3)
- jekyll-sitemap (1.0.0)
- jekyll (~> 3.3)
- jekyll-swiss (0.4.0)
- jekyll-theme-architect (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-cayman (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-dinky (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-hacker (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-leap-day (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-merlot (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-midnight (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-minimal (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-modernist (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-primer (0.4.0)
- jekyll (~> 3.5)
- jekyll-seo-tag (~> 2.2)
- jekyll-theme-slate (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-tactile (0.0.4)
- jekyll (~> 3.3)
- jekyll-theme-time-machine (0.0.4)
- jekyll (~> 3.3)
- jekyll-titles-from-headings (0.4.0)
- jekyll (~> 3.3)
- jekyll-watch (1.5.0)
- listen (~> 3.0, < 3.1)
- jemoji (0.8.0)
- activesupport (~> 4.0)
+ jekyll-seo-tag (2.8.0)
+ jekyll (>= 3.8, < 5.0)
+ jekyll-sitemap (1.4.0)
+ jekyll (>= 3.7, < 5.0)
+ jekyll-swiss (1.0.0)
+ jekyll-theme-architect (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.6.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.2.0)
+ jekyll (> 3.5, < 5.0)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-titles-from-headings (0.5.3)
+ jekyll (>= 3.3, < 5.0)
+ jekyll-watch (2.2.1)
+ listen (~> 3.0)
+ jemoji (0.12.0)
gemoji (~> 3.0)
html-pipeline (~> 2.2)
- jekyll (>= 3.0)
- json (2.1.0)
- kramdown (1.13.2)
- liquid (4.0.0)
- listen (3.0.6)
- rb-fsevent (>= 0.9.3)
- rb-inotify (>= 0.9.7)
+ jekyll (>= 3.0, < 5.0)
+ json (2.6.3)
+ kramdown (2.3.2)
+ rexml
+ kramdown-parser-gfm (1.1.0)
+ kramdown (~> 2.0)
+ liquid (4.0.4)
+ listen (3.8.0)
+ rb-fsevent (~> 0.10, >= 0.10.3)
+ rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
- mini_portile2 (2.2.0)
- minima (2.1.1)
- jekyll (~> 3.3)
- minitest (5.10.3)
- multipart-post (2.0.0)
- net-dns (0.8.0)
- nokogiri (1.8.0)
- mini_portile2 (~> 2.2.0)
- octokit (4.7.0)
- sawyer (~> 0.8.0, >= 0.5.3)
- pathutil (0.14.0)
+ mini_portile2 (2.8.9)
+ minima (2.5.1)
+ jekyll (>= 3.5, < 5.0)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
+ minitest (5.19.0)
+ nokogiri (1.18.9)
+ mini_portile2 (~> 2.8.2)
+ racc (~> 1.4)
+ octokit (4.25.1)
+ faraday (>= 1, < 3)
+ sawyer (~> 0.9)
+ pathutil (0.16.2)
forwardable-extended (~> 2.6)
- public_suffix (2.0.5)
- rb-fsevent (0.10.2)
- rb-inotify (0.9.10)
- ffi (>= 0.5.0, < 2)
- rouge (1.11.1)
- safe_yaml (1.0.4)
- sass (3.5.1)
+ public_suffix (4.0.7)
+ racc (1.8.1)
+ rb-fsevent (0.11.2)
+ rb-inotify (0.10.1)
+ ffi (~> 1.0)
+ rexml (3.4.2)
+ rouge (3.26.0)
+ ruby2_keywords (0.0.5)
+ rubyzip (2.3.2)
+ safe_yaml (1.0.5)
+ sass (3.7.4)
sass-listen (~> 4.0.0)
sass-listen (4.0.0)
rb-fsevent (~> 0.9, >= 0.9.4)
rb-inotify (~> 0.9, >= 0.9.7)
- sawyer (0.8.1)
- addressable (>= 2.3.5, < 2.6)
- faraday (~> 0.8, < 1.0)
+ sawyer (0.9.2)
+ addressable (>= 2.3.5)
+ faraday (>= 0.17.3, < 3)
+ simpleidn (0.2.1)
+ unf (~> 0.1.4)
terminal-table (1.8.0)
unicode-display_width (~> 1.1, >= 1.1.1)
- thread_safe (0.3.6)
- typhoeus (0.8.0)
- ethon (>= 0.8.0)
- tzinfo (1.2.3)
- thread_safe (~> 0.1)
- unicode-display_width (1.3.0)
+ typhoeus (1.4.0)
+ ethon (>= 0.9.0)
+ tzinfo (2.0.6)
+ concurrent-ruby (~> 1.0)
+ unf (0.1.4)
+ unf_ext
+ unf_ext (0.0.8.2)
+ unicode-display_width (1.8.0)
+ webrick (1.8.2)
PLATFORMS
ruby
DEPENDENCIES
+ base64 (~> 0.2.0)
+ bigdecimal (~> 3.1)
+ csv (~> 3.3)
github-pages
json (>= 2.0.0)
+ webrick (>= 1.8)
BUNDLED WITH
- 1.15.3
+ 2.5.23
diff --git a/README.md b/README.md
index aab272030..a091828d8 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
-This projects holds the contents for Elixir website hosted at elixir-lang.org.
+This projects holds the contents for the Elixir website hosted at [elixir-lang.org](https://elixir-lang.org).
-It is automatically transformed by [Jekyll](https://github.com/mojombo/jekyll) into a static site.
+It is automatically transformed by [Jekyll](https://github.com/jekyll/jekyll) into a static site.
## Contributing
@@ -47,7 +47,7 @@ $ bundle exec jekyll serve
```
The generated site will be available at [http://localhost:4000](http://localhost:4000). You can stop the
-server with Ctrl-C.
+server with Ctrl+C.
#### 5. Make your changes and push them
@@ -61,12 +61,10 @@ guide](https://github.com/elixir-lang/elixir/#contributing).
## License
-* "Elixir" and the Elixir logo are copyrighted to [Plataformatec](http://plataformatec.com.br/). You may not reuse anything therein without permission.
+* "Elixir" and the Elixir logo are registered trademarks of the Elixir team. See [our trademark policy](https://elixir-lang.org/trademarks).
* The HTML and CSS are copyrighted to [AlienWp](http://alienwp.com/) under [GPL license, version 2](http://www.gnu.org/licenses/old-licenses/gpl-2.0.html).
* The Social Icons are copyrighted to [Xeloader](http://xeloader.deviantart.com/art/Socialis-2-Freebie-213292616).
* The written textual contents available in the guides and blog are licensed under [Apache License, Version 2.0](http://www.apache.org/licenses/LICENSE-2.0).
-
-* The available docs are licensed under the same license as their projects.
diff --git a/_config.yml b/_config.yml
index aa0e70958..635db0b94 100644
--- a/_config.yml
+++ b/_config.yml
@@ -5,6 +5,15 @@ kramdown:
hard_wrap: false
repository: elixir-lang/elixir-lang.github.com
url: https://elixir-lang.org
+exclude:
+ - _build/
+ - vendor/
+ - Gemfile
+ - Gemfile.lock
+ - CNAME
+ - .gitignore
+ - README.md
+ - js/toc/README.md
plugins:
- jemoji
- jekyll-sitemap
@@ -17,3 +26,4 @@ defaults:
values:
layout: post
permalink: /blog/:year/:month/:day/:title/
+ image: /images/social/elixir-og-card.jpg
diff --git a/_data/elixir-versions.yml b/_data/elixir-versions.yml
index bfe43f0f4..468bdabbf 100644
--- a/_data/elixir-versions.yml
+++ b/_data/elixir-versions.yml
@@ -1,36 +1,88 @@
-stable: v1_6
-
-v1_0:
- name: v1.0
- version: 1.0.5
- docs_zip: false
-
-v1_1:
- name: v1.1
- version: 1.1.1
- docs_zip: true
-
-v1_2:
- name: v1.2
- version: 1.2.6
- docs_zip: true
-
-v1_3:
- name: v1.3
- version: 1.3.4
- docs_zip: true
-
-v1_4:
- name: v1.4
- version: 1.4.5
- docs_zip: true
-
-v1_5:
- name: v1.5
- version: 1.5.3
- docs_zip: true
+stable: v1_19
+
+v1_19:
+ name: v1.19
+ minimum_otp: 26.0
+ recommended_otp: 28.1
+ otp_versions: [28, 27, 26]
+ version: 1.19.4
+
+v1_18:
+ name: v1.18
+ minimum_otp: 26.0
+ recommended_otp: 27.3.4
+ otp_versions: [27, 26, 25]
+ version: 1.18.4
+
+v1_17:
+ name: v1.17
+ minimum_otp: 25.0
+ recommended_otp: 27.1.2
+ otp_versions: [27, 26, 25]
+ version: 1.17.3
+
+v1_16:
+ name: v1.16
+ minimum_otp: 24.0
+ otp_versions: [26, 25, 24]
+ version: 1.16.3
+
+v1_15:
+ name: v1.15
+ minimum_otp: 24.0
+ otp_versions: [26, 25, 24]
+ version: 1.15.8
+
+v1_14:
+ name: v1.14
+ minimum_otp: 23.0
+ otp_versions: [25, 24, 23]
+ version: 1.14.5
+
+v1_13:
+ name: v1.13
+ minimum_otp: 22.0
+ otp_versions: [24, 23, 22]
+ version: 1.13.4
+
+v1_12:
+ name: v1.12
+ minimum_otp: 22.0
+ otp_versions: [24, 23, 22]
+ version: 1.12.3
+
+v1_11:
+ name: v1.11
+ minimum_otp: 21.0
+ otp_versions: [23, 22, 21]
+ version: 1.11.4
+
+v1_10:
+ name: v1.10
+ minimum_otp: 21.0
+ otp_versions: [22, 21]
+ version: 1.10.4
+
+v1_9:
+ name: v1.9
+ minimum_otp: 20.0
+ otp_versions: [22, 21, 20]
+ version: 1.9.4
+
+v1_8:
+ name: v1.8
+ minimum_otp: 20.0
+ otp_versions: [22, 21, 20]
+ version: 1.8.2
+
+v1_7:
+ name: v1.7
+ minimum_otp: 19.0
+ otp_versions: [21, 20, 19]
+ version: 1.7.4
v1_6:
name: v1.6
- version: 1.6.4
- docs_zip: true
\ No newline at end of file
+ minimum_otp: 19.0
+ otp_versions: [21, 20, 19]
+ version: 1.6.6
diff --git a/_data/getting-started.yml b/_data/getting-started.yml
deleted file mode 100644
index bdba92944..000000000
--- a/_data/getting-started.yml
+++ /dev/null
@@ -1,118 +0,0 @@
-- title: Getting Started
- dir: /getting-started/
- pages:
- - title: Introduction
- slug: introduction
-
- - title: Basic types
- slug: basic-types
-
- - title: Basic operators
- slug: basic-operators
-
- - title: Pattern matching
- slug: pattern-matching
-
- - title: case, cond and if
- slug: case-cond-and-if
-
- - title: Binaries, strings and char lists
- slug: binaries-strings-and-char-lists
-
- - title: Keywords and maps
- slug: keywords-and-maps
-
- - title: Modules and Functions
- slug: modules-and-functions
-
- - title: Recursion
- slug: recursion
-
- - title: Enumerables and streams
- slug: enumerables-and-streams
-
- - title: Processes
- slug: processes
-
- - title: IO and the file system
- slug: io-and-the-file-system
-
- - title: alias, require and import
- slug: alias-require-and-import
-
- - title: Module attributes
- slug: module-attributes
-
- - title: Structs
- slug: structs
-
- - title: Protocols
- slug: protocols
-
- - title: Comprehensions
- slug: comprehensions
-
- - title: Sigils
- slug: sigils
-
- - title: try, catch and rescue
- slug: try-catch-and-rescue
-
- - title: Typespecs and behaviours
- slug: typespecs-and-behaviours
-
- - title: Debugging
- slug: debugging
-
- - title: Erlang libraries
- slug: erlang-libraries
-
- - title: Where to go next
- slug: where-to-go-next
-
-
-- title: Mix and OTP
- dir: /getting-started/mix-otp/
- pages:
- - title: Introduction to Mix
- slug: introduction-to-mix
-
- - title: Agent
- slug: agent
-
- - title: GenServer
- slug: genserver
-
- - title: Supervisor and Application
- slug: supervisor-and-application
-
- - title: DynamicSupervisor
- slug: dynamic-supervisor
-
- - title: ETS
- slug: ets
-
- - title: Dependencies and umbrella projects
- slug: dependencies-and-umbrella-projects
-
- - title: Task and gen_tcp
- slug: task-and-gen-tcp
-
- - title: Doctests, patterns and with
- slug: docs-tests-and-with
-
- - title: Distributed tasks and configuration
- slug: distributed-tasks-and-configuration
-
-
-- title: Meta-programming in Elixir
- dir: /getting-started/meta/
- pages:
- - title: Quote and unquote
- slug: quote-and-unquote
-
- - title: Macros
- slug: macros
-
- - title: Domain Specific Languages
- slug: domain-specific-languages
diff --git a/_epub/.eslintrc b/_epub/.eslintrc
deleted file mode 100644
index 535509b69..000000000
--- a/_epub/.eslintrc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "extends": "standard",
- "env": {
- "browser": true
- }
-}
diff --git a/_epub/.gitignore b/_epub/.gitignore
deleted file mode 100644
index 392973856..000000000
--- a/_epub/.gitignore
+++ /dev/null
@@ -1,20 +0,0 @@
-# The directory Mix will write compiled artifacts to.
-/_build/
-
-# The directory Mix downloads your dependencies sources to.
-/deps/
-
-# Ignore .fetch files in case you like to edit your project deps locally.
-/.fetch
-
-# If the VM crashes, it generates a dump, let's ignore it too.
-erl_crash.dump
-
-# Also ignore archive artifacts (built via "mix archive.build").
-*.ez
-
-# Ignore epub artifacts
-*.epub
-
-# Ignore node deps
-/node_modules/
\ No newline at end of file
diff --git a/_epub/README.md b/_epub/README.md
deleted file mode 100644
index bdb9d3087..000000000
--- a/_epub/README.md
+++ /dev/null
@@ -1,6 +0,0 @@
-# Elixir Lang Guides (EPUB format)
-
-Generate EPUB documents for Elixir guides:
-
- $ mix epub
-
diff --git a/_epub/assets/README.md b/_epub/assets/README.md
deleted file mode 100644
index 58d36937c..000000000
--- a/_epub/assets/README.md
+++ /dev/null
@@ -1,53 +0,0 @@
-# Assets
-
-In this directory live all assets for `ElixirLangGuide`. The ready to
-use built versions are found in `priv`. To change any of them read please
-read the following instructions:
-
-## Dependencies
-
-To work on these assets you need to install [Node.js] and [npm] first (probably
-as superuser or administrator). After that execute the following commands:
-
-```bash
-$ yarn global add gulp
-$ yarn install
-```
-
-Now many gulp tasks are available via the `gulp` command line.
-
-## Available [gulp] tasks
-
-If you run [gulp] without any option by default you will lint all JavaScript
-files using [ESLint] and then the `build` task.
-
-#### `build`
-
-This will build a complete bundle, including JavaScript and CSS.
-
-Using the flag `--type production` will result in minified JavaScript and CSS
-bundles.
-
-#### `clean`
-
-Clean all content in the build folder `dist` for each format.
-
-#### `javascript`
-
-Build the JavaScript in `js` into a bundled file using [webpack] for each
-format.
-
-#### `less`
-
-Build the [less] files in `less` into a bundled CSS file for each format.
-
-#### `lint`
-
-Lint all JavaScript files in `js` using [ESLint].
-
-[Node.js]: https://nodejs.org/
-[npm]: https://www.npmjs.com/
-[gulp]: https://www.npmjs.com/package/gulp
-[webpack]: http://webpack.github.io/
-[less]: http://lesscss.org/
-[ESLint]: http://eslint.org/
diff --git a/_epub/assets/js/app.js b/_epub/assets/js/app.js
deleted file mode 100644
index 2eeafb9e4..000000000
--- a/_epub/assets/js/app.js
+++ /dev/null
@@ -1,11 +0,0 @@
-// Dependencies
-// ------------
-
-import hljs from 'highlight.js/build/highlight.pack'
-
-// Setup Highlight.js
-hljs.configure({
- tabReplace: ' ' // 4 spaces
-})
-
-hljs.initHighlightingOnLoad()
diff --git a/_epub/assets/less/app.less b/_epub/assets/less/app.less
deleted file mode 100644
index 8cfb95bae..000000000
--- a/_epub/assets/less/app.less
+++ /dev/null
@@ -1 +0,0 @@
-@import './code';
diff --git a/_epub/assets/less/code.less b/_epub/assets/less/code.less
deleted file mode 100644
index fdcfcc72c..000000000
--- a/_epub/assets/less/code.less
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-
-Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull
-
-*/
-
-.hljs {
- display: block;
- overflow-x: auto;
- padding: 0.5em;
- background: #fdf6e3;
- color: #657b83;
-}
-
-.hljs-comment,
-.hljs-quote {
- color: #93a1a1;
-}
-
-/* Solarized Green */
-.hljs-keyword,
-.hljs-selector-tag,
-.hljs-addition {
- color: #859900;
-}
-
-/* Solarized Cyan */
-.hljs-number,
-.hljs-string,
-.hljs-meta .hljs-meta-string,
-.hljs-literal,
-.hljs-doctag,
-.hljs-regexp {
- color: #2aa198;
-}
-
-/* Solarized Blue */
-.hljs-title,
-.hljs-section,
-.hljs-name,
-.hljs-selector-id,
-.hljs-selector-class {
- color: #268bd2;
-}
-
-/* Solarized Yellow */
-.hljs-attribute,
-.hljs-attr,
-.hljs-variable,
-.hljs-template-variable,
-.hljs-class .hljs-title,
-.hljs-type {
- color: #b58900;
-}
-
-/* Solarized Orange */
-.hljs-symbol,
-.hljs-bullet,
-.hljs-subst,
-.hljs-meta,
-.hljs-meta .hljs-keyword,
-.hljs-selector-attr,
-.hljs-selector-pseudo,
-.hljs-link {
- color: #cb4b16;
-}
-
-/* Solarized Red */
-.hljs-built_in,
-.hljs-deletion {
- color: #dc322f;
-}
-
-.hljs-formula {
- background: #eee8d5;
-}
-
-.hljs-emphasis {
- font-style: italic;
-}
-
-.hljs-strong {
- font-weight: bold;
-}
diff --git a/_epub/assets/webpack.config.js b/_epub/assets/webpack.config.js
deleted file mode 100644
index 2a475ce1a..000000000
--- a/_epub/assets/webpack.config.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var webpack = require('webpack')
-
-var output = {
- filename: 'app.js'
-}
-
-var loaders = [{
- test: /\.js$/,
- exclude: /(node_modules|bower_components)/,
- loader: 'babel-loader',
- query: {
- presets: ['es2015']
- }
-}]
-
-module.exports = {
- development: {
- devtool: 'eval-source-map',
- output: output,
- module: {
- loaders: loaders
- }
- },
- production: {
- output: output,
- module: {
- loaders: loaders
- }
- }
-}
diff --git a/_epub/gulpfile.js b/_epub/gulpfile.js
deleted file mode 100644
index 830618b99..000000000
--- a/_epub/gulpfile.js
+++ /dev/null
@@ -1,126 +0,0 @@
-// Borrowed from ExDoc:
-// https://github.com/elixir-lang/ex_doc
-//
-// Dependencies
-// ------------
-
-var gulp = require('gulp')
-var $ = require('gulp-load-plugins')({camelize: true})
-var sequence = require('run-sequence')
-var del = require('del')
-var LessPluginNpmImport = require('less-plugin-npm-import')
-var LessPluginAutoPrefix = require('less-plugin-autoprefix')
-var webpack = require('webpack-stream')
-var exec = require('child_process').exec
-
-var config = require('./assets/webpack.config')
-
-// Config
-// ------
-
-// Set variable via $ gulp --type production
-var environment = $.util.env.type || 'development'
-var isProduction = environment === 'production'
-
-var distPath = 'priv'
-
-var npmPlugin = new LessPluginNpmImport()
-var autoprefixPlugin = new LessPluginAutoPrefix({
- browsers: ['last 2 versions']
-})
-
-var languages = [
- 'bash',
- 'css',
- 'diff',
- 'elixir',
- 'erlang',
- 'erlang-repl',
- 'xml',
- 'http',
- 'javascript',
- 'json',
- 'markdown',
- 'sql'
-]
-
-// Tasks
-// -----
-
-gulp.task('buildHighlight', function (done) {
- exec('npm install', {
- cwd: './node_modules/highlight.js'
- }, function (err, stdout, stderr) {
- if (err) return done(err)
-
- exec('node tools/build.js -n ' + languages.join(' '), {
- cwd: './node_modules/highlight.js'
- }, function (err, stdout, stderr) {
- if (err) return done(err)
-
- done()
- })
- })
-})
-
-gulp.task('clean', function () {
- return del(distPath)
-})
-
-gulp.task('javascript', ['buildHighlight'], function () {
- return javascript({src: 'assets/js/app.js', dest: distPath})
-})
-
-gulp.task('less', function () {
- return less({src: 'assets/less/app.less', dest: distPath})
-})
-
-gulp.task('lint', function () {
- return gulp.src([
- 'gulpfile.js',
- 'assets/js/**/*.js'
- ])
- .pipe($.eslint())
- .pipe($.eslint.format())
- .pipe($.eslint.failOnError())
-})
-
-gulp.task('build', function (done) {
- sequence(
- 'clean',
- ['javascript', 'less'],
- done
- )
-})
-
-gulp.task('default', ['lint', 'build'])
-
-/**
- * Helpers
- */
-var javascript = function (options) {
- return gulp.src(options.src)
- .pipe(webpack(isProduction ? config.production : config.development))
- .pipe($.if(isProduction, $.uglify()))
- .pipe($.if(isProduction, $.rev()))
- .pipe($.size({title: 'js'}))
- .pipe(gulp.dest(options.dest))
-}
-
-var less = function (options) {
- return gulp.src(options.src)
- .pipe($.less({
- plugins: [
- npmPlugin,
- autoprefixPlugin
- ]
- }))
- .pipe($.plumber())
- .pipe($.if(isProduction, $.cleanCss({
- compatibility: 'ie8',
- processImport: false
- })))
- .pipe($.if(isProduction, $.rev()))
- .pipe($.size({title: 'less'}))
- .pipe(gulp.dest(options.dest))
-}
diff --git a/_epub/lib/elixir_lang_guide.ex b/_epub/lib/elixir_lang_guide.ex
deleted file mode 100644
index 89de0a379..000000000
--- a/_epub/lib/elixir_lang_guide.ex
+++ /dev/null
@@ -1,260 +0,0 @@
-defmodule ElixirLangGuide do
- @moduledoc """
- Generate EPUB documents for Elixir guides.
- """
-
- @type config :: %{
- guide: String.t(),
- homepage: String.t(),
- output: Path.t(),
- root_dir: Path.t(),
- scripts: [Path.t()],
- styles: [Path.t()],
- images: [Path.t()]
- }
-
- @doc "Generate all guides"
- @spec run(Path.t()) :: :ok
- def run(source) do
- config = %{
- guide: nil,
- homepage: "http://elixir-lang.org",
- output: ".",
- root_dir: source,
- scripts: assets("priv/app-*.js"),
- styles: assets("priv/app-*.css"),
- images: []
- }
-
- for guide <- ~w(getting_started meta mix_otp) do
- config |> Map.put(:guide, guide) |> to_epub() |> log()
- end
-
- :ok
- end
-
- defp assets(path) do
- :elixir_lang_guide
- |> Application.app_dir(path)
- |> Path.wildcard()
- end
-
- defp log(file) do
- Mix.shell().info([:green, "Generated guide at #{inspect(file)}"])
- end
-
- @spec to_epub(config) :: String.t()
- defp to_epub(options) do
- nav =
- options.root_dir
- |> Path.expand()
- |> Path.join("_data/getting-started.yml")
- |> YamlElixir.read_from_file()
- |> generate_nav(options)
-
- nav
- |> convert_markdown_pages(options)
- |> to_epub(nav, options)
- end
-
- defp generate_nav(yaml, options) do
- yaml =
- case options.guide do
- "getting_started" -> Enum.at(yaml, 0)
- "mix_otp" -> Enum.at(yaml, 1)
- "meta" -> Enum.at(yaml, 2)
- _ -> raise "invalid guide, allowed: `mix_otp`, `meta` or `getting_started`"
- end
-
- for section <- List.wrap(yaml),
- %{"slug" => slug, "title" => title} <- section["pages"] do
- %{
- id: slug,
- label: title,
- content: slug <> ".xhtml",
- dir: section["dir"],
- scripts: List.wrap(options.scripts),
- styles: List.wrap(options.styles)
- }
- end
- end
-
- defp convert_markdown_pages(config, options) do
- config
- |> Enum.map(&Task.async(fn -> to_xhtml(&1, options) end))
- |> Enum.map(&Task.await(&1, :infinity))
- end
-
- defp to_xhtml(%{content: path, dir: dir} = nav, options) do
- content =
- options.root_dir
- |> Path.expand()
- |> Path.join("#{dir}#{path}")
- |> String.replace(~r/(.*)\.xhtml/, "\\1.markdown")
- |> File.read!()
- |> clean_markdown(options)
- |> Earmark.to_html()
- |> wrap_html(nav)
-
- unless File.exists?(Path.join(options.output, dir)) do
- File.mkdir_p(Path.join(options.output, dir))
- end
-
- file_path = "#{options.output}#{dir}#{path}"
- File.write!(file_path, content)
- file_path
- end
-
- defp to_epub(files, nav, options) do
- title =
- case options.guide do
- "getting_started" -> "Elixir Getting Started Guide"
- "meta" -> "Meta-programming in Elixir"
- "mix_otp" -> "Mix and OTP"
- _ -> raise "invalid guide, allowed: `mix_otp`, `meta` or `getting_started`"
- end
-
- images =
- case options.guide do
- "getting_started" ->
- [
- Path.join(options.root_dir, "images/contents/kv-observer.png"),
- Path.join(options.root_dir, "images/contents/debugger-elixir.png")
- ]
-
- "mix_otp" ->
- [
- Path.join(options.root_dir, "images/contents/kv-observer.png")
- ]
-
- "meta" ->
- []
- end
-
- config = %BUPE.Config{
- title: title,
- creator: "elixir-lang.org",
- unique_identifier: title_to_filename(title),
- source: "#{options.homepage}/getting-started/",
- pages: files,
- scripts: options.scripts,
- styles: options.styles,
- images: images,
- nav: nav
- }
-
- output_file = "#{options.output}/#{title_to_filename(title)}.epub"
- BUPE.build(config, output_file)
- delete_generated_files(files)
- Path.relative_to_cwd(output_file)
- end
-
- defp delete_generated_files(files) do
- Enum.map(files, &File.rm!(&1))
- end
-
- defp title_to_filename(title) do
- title |> String.replace(" ", "-") |> String.downcase()
- end
-
- defp clean_markdown(content, options) do
- content
- |> remove_includes()
- |> remove_span_hidden_hack()
- |> remove_raw_endraw_tags()
- |> remove_frontmatter()
- |> fix_backslashes()
- |> fix_images()
- |> fix_js()
- |> map_links(options)
- end
-
- defp remove_includes(content) do
- content
- |> String.replace("{% include toc.html %}", "")
- |> String.replace("{% include mix-otp-preface.html %}", "")
- end
-
- # The . is a hack used in pattern-matching.md
- defp remove_span_hidden_hack(content) do
- String.replace(content, ~r/# {{ page.title }}(.<\/span>)?/, "")
- end
-
- defp remove_raw_endraw_tags(content) do
- String.replace(content, ~r/{% (end)?raw %}/, "")
- end
-
- defp remove_frontmatter(content) do
- [_frontmatter, content] = String.split(content, ~r/\r?\n---\r?\n/, parts: 2)
- content
- end
-
- defp fix_backslashes(content) do
- String.replace(
- content,
- ~r/backslashes \(`\\`\) on Windows/,
- ~S"backslashes (`\\\\`) on Windows"
- )
- end
-
- defp fix_images(content) do
- content
- |> String.replace(
- ~s{/images/contents/kv-observer.png" width="640},
- "assets/kv-observer.png"
- )
- |> String.replace(
- ~s{/images/contents/debugger-elixir.gif" width="640},
- "assets/debugger-elixir.png"
- )
- end
-
- defp fix_js(content) do
- content
- |> String.replace(~r{}, "")
- |> String.replace([""], "")
- end
-
- defp map_links(content, options) do
- Regex.replace(~r/\[([^\]]+)\]\(([^\)]+)\)/, content, fn _, text, href ->
- case URI.parse(href) do
- %URI{scheme: nil, path: "/getting-started/meta/" <> path} ->
- map_meta_links(text, path, options)
-
- %URI{scheme: nil, path: "/getting-started/mix-otp/" <> path} ->
- map_mix_otp_link(text, path, options)
-
- %URI{scheme: nil, path: "/getting-started/" <> path} ->
- map_getting_started_links(text, path, options)
-
- %URI{scheme: nil, path: "/" <> path} ->
- "[#{text}](#{options.homepage}/#{path})"
-
- _ ->
- "[#{text}](#{href})"
- end
- end)
- end
-
- defp map_meta_links(text, path, %{guide: "meta"}), do: map_section_links(text, path)
-
- defp map_meta_links(text, path, options),
- do: "[#{text}](#{options.homepage}/getting-started/meta/#{path})"
-
- defp map_mix_otp_link(text, path, %{guide: "mix_otp"}), do: map_section_links(text, path)
-
- defp map_mix_otp_link(text, path, options),
- do: "[#{text}](#{options.homepage}/getting-started/mix-otp/#{path})"
-
- defp map_getting_started_links(text, path, %{guide: "getting_started"}),
- do: map_section_links(text, path)
-
- defp map_getting_started_links(text, path, options),
- do: "[#{text}](#{options.homepage}/getting-started/#{path})"
-
- defp map_section_links(text, path), do: "[#{text}](#{String.replace(path, "html", "xhtml")})"
-
- require EEx
- page = Path.expand("templates/page.eex", __DIR__)
- EEx.function_from_file(:defp, :wrap_html, page, [:content, :config])
-end
diff --git a/_epub/lib/templates/page.eex b/_epub/lib/templates/page.eex
deleted file mode 100644
index 388e412e3..000000000
--- a/_epub/lib/templates/page.eex
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
- <%= config.label %>
-
- <%= for style <- config.styles do %>
-
- <% end %>
- <%= for script <- config.scripts do %>
-
- <% end %>
-
-
- <%= config.label %>
- <%= content %>
-
-
diff --git a/_epub/mix.exs b/_epub/mix.exs
deleted file mode 100644
index fa3b0f512..000000000
--- a/_epub/mix.exs
+++ /dev/null
@@ -1,28 +0,0 @@
-defmodule ElixirLangGuide.Mixfile do
- use Mix.Project
-
- def project do
- [app: :elixir_lang_guide,
- version: "0.1.0",
- elixir: "~> 1.4",
- build_embedded: Mix.env == :prod,
- start_permanent: Mix.env == :prod,
- deps: deps(),
- aliases: [epub: &epub/1]]
- end
-
- def application do
- [extra_applications: [:logger]]
- end
-
- defp epub(_args) do
- Mix.Task.run "app.start"
- ElixirLangGuide.run("..")
- end
-
- defp deps do
- [{:yaml_elixir, "~> 1.3"},
- {:earmark, "~> 1.0"},
- {:bupe, "~> 0.3.0"}]
- end
-end
diff --git a/_epub/mix.lock b/_epub/mix.lock
deleted file mode 100644
index 8ea7e0760..000000000
--- a/_epub/mix.lock
+++ /dev/null
@@ -1,5 +0,0 @@
-%{"bupe": {:hex, :bupe, "0.3.0", "3d6d02a0ea67f3441f985ecaf17acdcb56a2deedbdc0b5974ee6e87da66b69f0", [:mix], [], "hexpm"},
- "earmark": {:hex, :earmark, "1.0.3", "89bdbaf2aca8bbb5c97d8b3b55c5dd0cff517ecc78d417e87f1d0982e514557b", [:mix], [], "hexpm"},
- "ex_doc": {:hex, :ex_doc, "0.14.5", "c0433c8117e948404d93ca69411dd575ec6be39b47802e81ca8d91017a0cf83c", [:mix], [{:earmark, "~> 1.0", [hex: :earmark, repo: "hexpm", optional: false]}], "hexpm"},
- "yamerl": {:hex, :yamerl, "0.3.3", "df48fe3e6aeaca05ec6c4b35418aa7c77258d0d1c32d578a2e12a14751c10d42", [:rebar3], [], "hexpm"},
- "yaml_elixir": {:hex, :yaml_elixir, "1.3.0", "5b945c235f0bc9d49c60927834576952c9e106afbc1dfa76ffcf615d7615e35f", [:mix], [{:yamerl, "~> 0.3.2", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm"}}
diff --git a/_epub/package.json b/_epub/package.json
deleted file mode 100644
index 3076dce50..000000000
--- a/_epub/package.json
+++ /dev/null
@@ -1,57 +0,0 @@
-{
- "name": "elixir_getting_started_guide_to_go",
- "version": "0.1.0",
- "description": "Elixir Getting Started Guide (EPUB)",
- "main": "index.js",
- "directories": {
- "doc": "doc",
- "test": "test"
- },
- "scripts": {
- "lint": "node_modules/.bin/gulp lint",
- "test": "node_modules/.bin/gulp test",
- "build": "node_modules/.bin/gulp build --type production"
- },
- "repository": {
- "type": "git",
- "url": "git+https://github.com/milmazz/elixir_getting_started_guide_to_go.git"
- },
- "keywords": [
- "elixir"
- ],
- "author": "",
- "license": "Apache-2.0",
- "bugs": {
- "url": "https://github.com/milmazz/elixir_getting_started_guide_to_go/issues"
- },
- "homepage": "https://github.com/milmazz/elixir_getting_started_guide_to_go#readme",
- "devDependencies": {
- "babel-core": "^6.17.0",
- "babel-loader": "^7.1.1",
- "babel-preset-es2015": "^6.16.0",
- "del": "^3.0.0",
- "eslint": "^4.4.1",
- "eslint-config-standard": "^10.2.1",
- "eslint-plugin-import": "^2.7.0",
- "eslint-plugin-node": "^5.1.1",
- "eslint-plugin-promise": "^3.0.0",
- "eslint-plugin-standard": "^3.0.1",
- "gulp": "^3.9.1",
- "gulp-clean-css": "^3.7.0",
- "gulp-eslint": "^4.0.0",
- "gulp-if": "^2.0.1",
- "gulp-less": "^3.1.0",
- "gulp-load-plugins": "^1.3.0",
- "gulp-plumber": "^1.1.0",
- "gulp-rev": "^8.0.0",
- "gulp-size": "^2.1.0",
- "gulp-uglify": "^3.0.0",
- "gulp-util": "^3.0.7",
- "highlight.js": "isagalaev/highlight.js#9.12.0",
- "less-plugin-autoprefix": "^1.5.1",
- "less-plugin-npm-import": "^2.1.0",
- "run-sequence": "^2.1.0",
- "webpack": "^3.5.2",
- "webpack-stream": "^4.0.0"
- }
-}
diff --git a/_epub/priv/app-769d25bae3.css b/_epub/priv/app-769d25bae3.css
deleted file mode 100644
index 583c5c649..000000000
--- a/_epub/priv/app-769d25bae3.css
+++ /dev/null
@@ -1 +0,0 @@
-.hljs{display:block;overflow-x:auto;padding:.5em;background:#fdf6e3;color:#657b83}.hljs-comment,.hljs-quote{color:#93a1a1}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#859900}.hljs-doctag,.hljs-literal,.hljs-meta .hljs-meta-string,.hljs-number,.hljs-regexp,.hljs-string{color:#2aa198}.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-title{color:#268bd2}.hljs-attr,.hljs-attribute,.hljs-class .hljs-title,.hljs-template-variable,.hljs-type,.hljs-variable{color:#b58900}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-subst,.hljs-symbol{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}
\ No newline at end of file
diff --git a/_epub/priv/app-990b83b456.js b/_epub/priv/app-990b83b456.js
deleted file mode 100644
index ec2f90e13..000000000
--- a/_epub/priv/app-990b83b456.js
+++ /dev/null
@@ -1 +0,0 @@
-!function(e){var n={};function a(t){if(n[t])return n[t].exports;var i=n[t]={i:t,l:!1,exports:{}};return e[t].call(i.exports,i,i.exports,a),i.l=!0,i.exports}a.m=e,a.c=n,a.d=function(e,n,t){a.o(e,n)||Object.defineProperty(e,n,{configurable:!1,enumerable:!0,get:t})},a.n=function(e){var n=e&&e.__esModule?function(){return e.default}:function(){return e};return a.d(n,"a",n),n},a.o=function(e,n){return Object.prototype.hasOwnProperty.call(e,n)},a.p="",a(a.s=0)}([function(e,n,a){"use strict";var t,i=a(1),r=(t=i)&&t.__esModule?t:{default:t};r.default.configure({tabReplace:" "}),r.default.initHighlightingOnLoad()},function(e,n,a){!function(e){"object"==typeof window&&window||"object"==typeof self&&self;e(n)}(function(e){var n=[],a=Object.keys,t={},i={},r=/^(no-?highlight|plain|text)$/i,s=/\blang(?:uage)?-([\w-]+)\b/i,o=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,l="",c={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};function d(e){return e.replace(/&/g,"&").replace(//g,">")}function u(e){return e.nodeName.toLowerCase()}function g(e,n){var a=e&&e.exec(n);return a&&0===a.index}function m(e){return r.test(e)}function b(e){var n,a={},t=Array.prototype.slice.call(arguments,1);for(n in e)a[n]=e[n];return t.forEach(function(e){for(n in e)a[n]=e[n]}),a}function _(e){var n=[];return function e(a,t){for(var i=a.firstChild;i;i=i.nextSibling)3===i.nodeType?t+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:t,node:i}),t=e(i,t),u(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:t,node:i}));return t}(e,0),n}function p(e){function n(e){return e&&e.source||e}function t(a,t){return new RegExp(n(a),"m"+(e.case_insensitive?"i":"")+(t?"g":""))}!function i(r,s){if(!r.compiled){if(r.compiled=!0,r.keywords=r.keywords||r.beginKeywords,r.keywords){var o={},l=function(n,a){e.case_insensitive&&(a=a.toLowerCase()),a.split(" ").forEach(function(e){var a=e.split("|");o[a[0]]=[n,a[1]?Number(a[1]):1]})};"string"==typeof r.keywords?l("keyword",r.keywords):a(r.keywords).forEach(function(e){l(e,r.keywords[e])}),r.keywords=o}r.lexemesRe=t(r.lexemes||/\w+/,!0),s&&(r.beginKeywords&&(r.begin="\\b("+r.beginKeywords.split(" ").join("|")+")\\b"),r.begin||(r.begin=/\B|\b/),r.beginRe=t(r.begin),r.end||r.endsWithParent||(r.end=/\B|\b/),r.end&&(r.endRe=t(r.end)),r.terminator_end=n(r.end)||"",r.endsWithParent&&s.terminator_end&&(r.terminator_end+=(r.end?"|":"")+s.terminator_end)),r.illegal&&(r.illegalRe=t(r.illegal)),null==r.relevance&&(r.relevance=1),r.contains||(r.contains=[]),r.contains=Array.prototype.concat.apply([],r.contains.map(function(e){return(n="self"===e?r:e).variants&&!n.cached_variants&&(n.cached_variants=n.variants.map(function(e){return b(n,{variants:null},e)})),n.cached_variants||n.endsWithParent&&[b(n)]||[n];var n})),r.contains.forEach(function(e){i(e,r)}),r.starts&&i(r.starts,s);var c=r.contains.map(function(e){return e.beginKeywords?"\\.?("+e.begin+")\\.?":e.begin}).concat([r.terminator_end,r.illegal]).map(n).filter(Boolean);r.terminators=c.length?t(c.join("|"),!0):{exec:function(){return null}}}}(e)}function f(e,n,a,i){function r(e,n,a,t){var i='')+n+(a?"":l)}function s(){E+=null!=_.subLanguage?function(){var e="string"==typeof _.subLanguage;if(e&&!t[_.subLanguage])return d(y);var n=e?f(_.subLanguage,y,!0,v[_.subLanguage]):h(y,_.subLanguage.length?_.subLanguage:void 0);return _.relevance>0&&(x+=n.relevance),e&&(v[_.subLanguage]=n.top),r(n.language,n.value,!1,!0)}():function(){var e,n,a,t,i,s,o;if(!_.keywords)return d(y);for(t="",n=0,_.lexemesRe.lastIndex=0,a=_.lexemesRe.exec(y);a;)t+=d(y.substring(n,a.index)),i=_,s=a,o=m.case_insensitive?s[0].toLowerCase():s[0],(e=i.keywords.hasOwnProperty(o)&&i.keywords[o])?(x+=e[1],t+=r(e[0],d(a[0]))):t+=d(a[0]),n=_.lexemesRe.lastIndex,a=_.lexemesRe.exec(y);return t+d(y.substr(n))}(),y=""}function o(e){E+=e.className?r(e.className,"",!0):"",_=Object.create(e,{parent:{value:_}})}function u(e,n){if(y+=e,null==n)return s(),0;var t=function(e,n){var a,t;for(a=0,t=n.contains.length;a")+'"');return y+=n,n.length||1}var m=w(e);if(!m)throw new Error('Unknown language: "'+e+'"');p(m);var b,_=i||m,v={},E="";for(b=_;b!==m;b=b.parent)b.className&&(E=r(b.className,"",!0)+E);var y="",x=0;try{for(var N,k,O=0;_.terminators.lastIndex=O,N=_.terminators.exec(n);)k=u(n.substring(O,N.index),N[0]),O=N.index+k;for(u(n.substr(O)),b=_;b.parent;b=b.parent)b.className&&(E+=l);return{relevance:x,value:E,language:e,top:_}}catch(e){if(e.message&&-1!==e.message.indexOf("Illegal"))return{relevance:0,value:d(n)};throw e}}function h(e,n){n=n||c.languages||a(t);var i={relevance:0,value:d(e)},r=i;return n.filter(w).forEach(function(n){var a=f(n,e,!1);a.language=n,a.relevance>r.relevance&&(r=a),a.relevance>i.relevance&&(r=i,i=a)}),r.language&&(i.second_best=r),i}function v(e){return c.tabReplace||c.useBR?e.replace(o,function(e,n){return c.useBR&&"\n"===e?"
":c.tabReplace?n.replace(/\t/g,c.tabReplace):""}):e}function E(e){var a,t,r,o,l,g,b,p,E,y,x=function(e){var n,a,t,i,r=e.className+" ";if(r+=e.parentNode?e.parentNode.className:"",a=s.exec(r))return w(a[1])?a[1]:"no-highlight";for(n=0,t=(r=r.split(/\s+/)).length;n/g,"\n"):a=e,l=a.textContent,r=x?f(x,l,!0):h(l),(t=_(a)).length&&((o=document.createElementNS("http://www.w3.org/1999/xhtml","div")).innerHTML=r.value,r.value=function(e,a,t){var i=0,r="",s=[];function o(){return e.length&&a.length?e[0].offset!==a[0].offset?e[0].offset"}function c(e){r+=""+u(e)+">"}function g(e){("start"===e.event?l:c)(e.node)}for(;e.length||a.length;){var m=o();if(r+=d(t.substring(i,m[0].offset)),i=m[0].offset,m===e){s.reverse().forEach(c);do{g(m.splice(0,1)[0]),m=o()}while(m===e&&m.length&&m[0].offset===i);s.reverse().forEach(l)}else"start"===m[0].event?s.push(m[0].node):s.pop(),g(m.splice(0,1)[0])}return r+d(t.substr(i))}(t,_(o),l)),r.value=v(r.value),e.innerHTML=r.value,e.className=(g=e.className,b=x,p=r.language,E=b?i[b]:p,y=[g.trim()],g.match(/\bhljs\b/)||y.push("hljs"),-1===g.indexOf(E)&&y.push(E),y.join(" ").trim()),e.result={language:r.language,re:r.relevance},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.relevance}))}function y(){if(!y.called){y.called=!0;var e=document.querySelectorAll("pre code");n.forEach.call(e,E)}}function w(e){return e=(e||"").toLowerCase(),t[e]||t[i[e]]}return e.highlight=f,e.highlightAuto=h,e.fixMarkup=v,e.highlightBlock=E,e.configure=function(e){c=b(c,e)},e.initHighlighting=y,e.initHighlightingOnLoad=function(){addEventListener("DOMContentLoaded",y,!1),addEventListener("load",y,!1)},e.registerLanguage=function(n,a){var r=t[n]=a(e);r.aliases&&r.aliases.forEach(function(e){i[e]=n})},e.listLanguages=function(){return a(t)},e.getLanguage=w,e.inherit=b,e.IDENT_RE="[a-zA-Z]\\w*",e.UNDERSCORE_IDENT_RE="[a-zA-Z_]\\w*",e.NUMBER_RE="\\b\\d+(\\.\\d+)?",e.C_NUMBER_RE="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BINARY_NUMBER_RE="\\b(0b[01]+)",e.RE_STARTERS_RE="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BACKSLASH_ESCAPE={begin:"\\\\[\\s\\S]",relevance:0},e.APOS_STRING_MODE={className:"string",begin:"'",end:"'",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.QUOTE_STRING_MODE={className:"string",begin:'"',end:'"',illegal:"\\n",contains:[e.BACKSLASH_ESCAPE]},e.PHRASAL_WORDS_MODE={begin:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/},e.COMMENT=function(n,a,t){var i=e.inherit({className:"comment",begin:n,end:a,contains:[]},t||{});return i.contains.push(e.PHRASAL_WORDS_MODE),i.contains.push({className:"doctag",begin:"(?:TODO|FIXME|NOTE|BUG|XXX):",relevance:0}),i},e.C_LINE_COMMENT_MODE=e.COMMENT("//","$"),e.C_BLOCK_COMMENT_MODE=e.COMMENT("/\\*","\\*/"),e.HASH_COMMENT_MODE=e.COMMENT("#","$"),e.NUMBER_MODE={className:"number",begin:e.NUMBER_RE,relevance:0},e.C_NUMBER_MODE={className:"number",begin:e.C_NUMBER_RE,relevance:0},e.BINARY_NUMBER_MODE={className:"number",begin:e.BINARY_NUMBER_RE,relevance:0},e.CSS_NUMBER_MODE={className:"number",begin:e.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},e.REGEXP_MODE={className:"regexp",begin:/\//,end:/\/[gimuy]*/,illegal:/\n/,contains:[e.BACKSLASH_ESCAPE,{begin:/\[/,end:/\]/,relevance:0,contains:[e.BACKSLASH_ESCAPE]}]},e.TITLE_MODE={className:"title",begin:e.IDENT_RE,relevance:0},e.UNDERSCORE_TITLE_MODE={className:"title",begin:e.UNDERSCORE_IDENT_RE,relevance:0},e.METHOD_GUARD={begin:"\\.\\s*"+e.UNDERSCORE_IDENT_RE,relevance:0},e.registerLanguage("bash",function(e){var n={className:"variable",variants:[{begin:/\$[\w\d#@][\w\d_]*/},{begin:/\$\{(.*?)}/}]},a={className:"string",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE,n,{className:"variable",begin:/\$\(/,end:/\)/,contains:[e.BACKSLASH_ESCAPE]}]};return{aliases:["sh","zsh"],lexemes:/\b-?[a-z\._]+\b/,keywords:{keyword:"if then else elif fi for while in do done case esac function",literal:"true false",built_in:"break cd continue eval exec exit export getopts hash pwd readonly return shift test times trap umask unset alias bind builtin caller command declare echo enable help let local logout mapfile printf read readarray source type typeset ulimit unalias set shopt autoload bg bindkey bye cap chdir clone comparguments compcall compctl compdescribe compfiles compgroups compquote comptags comptry compvalues dirs disable disown echotc echoti emulate fc fg float functions getcap getln history integer jobs kill limit log noglob popd print pushd pushln rehash sched setcap setopt stat suspend ttyctl unfunction unhash unlimit unsetopt vared wait whence where which zcompile zformat zftp zle zmodload zparseopts zprof zpty zregexparse zsocket zstyle ztcp",_:"-ne -eq -lt -gt -f -d -e -s -l -a"},contains:[{className:"meta",begin:/^#![^\n]+sh\s*$/,relevance:10},{className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[e.inherit(e.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},e.HASH_COMMENT_MODE,a,{className:"string",begin:/'/,end:/'/},n]}}),e.registerLanguage("css",function(e){var n={begin:/[A-Z\_\.\-]+\s*:/,returnBegin:!0,end:";",endsWithParent:!0,contains:[{className:"attribute",begin:/\S/,end:":",excludeEnd:!0,starts:{endsWithParent:!0,excludeEnd:!0,contains:[{begin:/[\w-]+\(/,returnBegin:!0,contains:[{className:"built_in",begin:/[\w-]+/},{begin:/\(/,end:/\)/,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE]}]},e.CSS_NUMBER_MODE,e.QUOTE_STRING_MODE,e.APOS_STRING_MODE,e.C_BLOCK_COMMENT_MODE,{className:"number",begin:"#[0-9A-Fa-f]+"},{className:"meta",begin:"!important"}]}}]};return{case_insensitive:!0,illegal:/[=\/|'\$]/,contains:[e.C_BLOCK_COMMENT_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/},{className:"selector-class",begin:/\.[A-Za-z0-9_-]+/},{className:"selector-attr",begin:/\[/,end:/\]/,illegal:"$"},{className:"selector-pseudo",begin:/:(:)?[a-zA-Z0-9\_\-\+\(\)"'.]+/},{begin:"@(font-face|page)",lexemes:"[a-z-]+",keywords:"font-face page"},{begin:"@",end:"[{;]",illegal:/:/,contains:[{className:"keyword",begin:/\w+/},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,contains:[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,e.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"[a-zA-Z-][a-zA-Z0-9_-]*",relevance:0},{begin:"{",end:"}",illegal:/\S/,contains:[e.C_BLOCK_COMMENT_MODE,n]}]}}),e.registerLanguage("diff",function(e){return{aliases:["patch"],contains:[{className:"meta",relevance:10,variants:[{begin:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{begin:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{begin:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{className:"comment",variants:[{begin:/Index: /,end:/$/},{begin:/={3,}/,end:/$/},{begin:/^\-{3}/,end:/$/},{begin:/^\*{3} /,end:/$/},{begin:/^\+{3}/,end:/$/},{begin:/\*{5}/,end:/\*{5}$/}]},{className:"addition",begin:"^\\+",end:"$"},{className:"deletion",begin:"^\\-",end:"$"},{className:"addition",begin:"^\\!",end:"$"}]}}),e.registerLanguage("elixir",function(e){var n="[a-zA-Z_][a-zA-Z0-9_]*(\\!|\\?)?",a="and false then defined module in return redo retry end for true self when next until do begin unless nil break not case cond alias while ensure or include use alias fn quote",t={className:"subst",begin:"#\\{",end:"}",lexemes:n,keywords:a},i={className:"string",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:/'/,end:/'/},{begin:/"/,end:/"/}]},r={className:"function",beginKeywords:"def defp defmacro",end:/\B\b/,contains:[e.inherit(e.TITLE_MODE,{begin:n,endsParent:!0})]},s=e.inherit(r,{className:"class",beginKeywords:"defimpl defmodule defprotocol defrecord",end:/\bdo\b|$|;/}),o=[i,e.HASH_COMMENT_MODE,s,r,{className:"symbol",begin:":(?!\\s)",contains:[i,{begin:"[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?"}],relevance:0},{className:"symbol",begin:n+":",relevance:0},{className:"number",begin:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",relevance:0},{className:"variable",begin:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{begin:"->"},{begin:"("+e.RE_STARTERS_RE+")\\s*",contains:[e.HASH_COMMENT_MODE,{className:"regexp",illegal:"\\n",contains:[e.BACKSLASH_ESCAPE,t],variants:[{begin:"/",end:"/[a-z]*"},{begin:"%r\\[",end:"\\][a-z]*"}]}],relevance:0}];return t.contains=o,{lexemes:n,keywords:a,contains:o}}),e.registerLanguage("erlang-repl",function(e){return{keywords:{built_in:"spawn spawn_link self",keyword:"after and andalso|10 band begin bnot bor bsl bsr bxor case catch cond div end fun if let not of or orelse|10 query receive rem try when xor"},contains:[{className:"meta",begin:"^[0-9]+> ",relevance:10},e.COMMENT("%","$"),{className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,{begin:"\\?(::)?([A-Z]\\w*(::)?)+"},{begin:"->"},{begin:"ok"},{begin:"!"},{begin:"(\\b[a-z'][a-zA-Z0-9_']*:[a-z'][a-zA-Z0-9_']*)|(\\b[a-z'][a-zA-Z0-9_']*)",relevance:0},{begin:"[A-Z][a-zA-Z0-9_']*",relevance:0}]}}),e.registerLanguage("erlang",function(e){var n="[a-z'][a-zA-Z0-9_']*",a="("+n+":"+n+"|"+n+")",t={keyword:"after and andalso|10 band begin bnot bor bsl bzr bxor case catch cond div end fun if let not of orelse|10 query receive rem try when xor",literal:"false true"},i=e.COMMENT("%","$"),r={className:"number",begin:"\\b(\\d+#[a-fA-F0-9]+|\\d+(\\.\\d+)?([eE][-+]?\\d+)?)",relevance:0},s={begin:"fun\\s+"+n+"/\\d+"},o={begin:a+"\\(",end:"\\)",returnBegin:!0,relevance:0,contains:[{begin:a,relevance:0},{begin:"\\(",end:"\\)",endsWithParent:!0,returnEnd:!0,relevance:0}]},l={begin:"{",end:"}",relevance:0},c={begin:"\\b_([A-Z][A-Za-z0-9_]*)?",relevance:0},d={begin:"[A-Z][a-zA-Z0-9_]*",relevance:0},u={begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0,returnBegin:!0,contains:[{begin:"#"+e.UNDERSCORE_IDENT_RE,relevance:0},{begin:"{",end:"}",relevance:0}]},g={beginKeywords:"fun receive if try case",end:"end",keywords:t};g.contains=[i,s,e.inherit(e.APOS_STRING_MODE,{className:""}),g,o,e.QUOTE_STRING_MODE,r,l,c,d,u];var m=[i,s,g,o,e.QUOTE_STRING_MODE,r,l,c,d,u];o.contains[1].contains=m,l.contains=m,u.contains[1].contains=m;var b={className:"params",begin:"\\(",end:"\\)",contains:m};return{aliases:["erl"],keywords:t,illegal:"(|\\*=|\\+=|-=|/\\*|\\*/|\\(\\*|\\*\\))",contains:[{className:"function",begin:"^"+n+"\\s*\\(",end:"->",returnBegin:!0,illegal:"\\(|#|//|/\\*|\\\\|:|;",contains:[b,e.inherit(e.TITLE_MODE,{begin:n})],starts:{end:";|\\.",keywords:t,contains:m}},i,{begin:"^-",end:"\\.",relevance:0,excludeEnd:!0,returnBegin:!0,lexemes:"-"+e.IDENT_RE,keywords:"-module -record -undef -export -ifdef -ifndef -author -copyright -doc -vsn -import -include -include_lib -compile -define -else -endif -file -behaviour -behavior -spec",contains:[b]},r,e.QUOTE_STRING_MODE,u,c,d,l,{begin:/\.$/}]}}),e.registerLanguage("http",function(e){var n="HTTP/[0-9\\.]+";return{aliases:["https"],illegal:"\\S",contains:[{begin:"^"+n,end:"$",contains:[{className:"number",begin:"\\b\\d{3}\\b"}]},{begin:"^[A-Z]+ (.*?) "+n+"$",returnBegin:!0,end:"$",contains:[{className:"string",begin:" ",end:" ",excludeBegin:!0,excludeEnd:!0},{begin:n},{className:"keyword",begin:"[A-Z]+"}]},{className:"attribute",begin:"^\\w",end:": ",excludeEnd:!0,illegal:"\\n|\\s|=",starts:{end:"$",relevance:0}},{begin:"\\n\\n",starts:{subLanguage:[],endsWithParent:!0}}]}}),e.registerLanguage("javascript",function(e){var n="[A-Za-z$_][0-9A-Za-z$_]*",a={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},t={className:"number",variants:[{begin:"\\b(0[bB][01]+)"},{begin:"\\b(0[oO][0-7]+)"},{begin:e.C_NUMBER_RE}],relevance:0},i={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},r={className:"string",begin:"`",end:"`",contains:[e.BACKSLASH_ESCAPE,i]};i.contains=[e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,t,e.REGEXP_MODE];var s=i.contains.concat([e.C_BLOCK_COMMENT_MODE,e.C_LINE_COMMENT_MODE]);return{aliases:["js","jsx"],keywords:a,contains:[{className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},{className:"meta",begin:/^#!/,end:/$/},e.APOS_STRING_MODE,e.QUOTE_STRING_MODE,r,e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,t,{begin:/[{,]\s*/,relevance:0,contains:[{begin:n+"\\s*:",returnBegin:!0,relevance:0,contains:[{className:"attr",begin:n,relevance:0}]}]},{begin:"("+e.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",contains:[e.C_LINE_COMMENT_MODE,e.C_BLOCK_COMMENT_MODE,e.REGEXP_MODE,{className:"function",begin:"(\\(.*?\\)|"+n+")\\s*=>",returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:n},{begin:/\(\s*\)/},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:s}]}]},{begin:/,end:/(\/\w+|\w+\/)>/,subLanguage:"xml",contains:[{begin:/<\w+\s*\/>/,skip:!0},{begin:/<\w+/,end:/(\/\w+|\w+\/)>/,skip:!0,contains:[{begin:/<\w+\s*\/>/,skip:!0},"self"]}]}],relevance:0},{className:"function",beginKeywords:"function",end:/\{/,excludeEnd:!0,contains:[e.inherit(e.TITLE_MODE,{begin:n}),{className:"params",begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,contains:s}],illegal:/\[|%/},{begin:/\$[(.]/},e.METHOD_GUARD,{className:"class",beginKeywords:"class",end:/[{;=]/,excludeEnd:!0,illegal:/[:"\[\]]/,contains:[{beginKeywords:"extends"},e.UNDERSCORE_TITLE_MODE]},{beginKeywords:"constructor",end:/\{/,excludeEnd:!0}],illegal:/#(?!!)/}}),e.registerLanguage("json",function(e){var n={literal:"true false null"},a=[e.QUOTE_STRING_MODE,e.C_NUMBER_MODE],t={end:",",endsWithParent:!0,excludeEnd:!0,contains:a,keywords:n},i={begin:"{",end:"}",contains:[{className:"attr",begin:/"/,end:/"/,contains:[e.BACKSLASH_ESCAPE],illegal:"\\n"},e.inherit(t,{begin:/:/})],illegal:"\\S"},r={begin:"\\[",end:"\\]",contains:[e.inherit(t)],illegal:"\\S"};return a.splice(a.length,0,i,r),{contains:a,keywords:n,illegal:"\\S"}}),e.registerLanguage("xml",function(e){var n={endsWithParent:!0,illegal:/,relevance:0,contains:[{className:"attr",begin:"[A-Za-z0-9\\._:-]+",relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/},{begin:/'/,end:/'/},{begin:/[^\s"'=<>`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],case_insensitive:!0,contains:[{className:"meta",begin:"",relevance:10,contains:[{begin:"\\[",end:"\\]"}]},e.COMMENT("\x3c!--","--\x3e",{relevance:10}),{begin:"<\\!\\[CDATA\\[",end:"\\]\\]>",relevance:10},{begin:/<\?(php)?/,end:/\?>/,subLanguage:"php",contains:[{begin:"/\\*",end:"\\*/",skip:!0}]},{className:"tag",begin:"",returnEnd:!0,subLanguage:["css","xml"]}},{className:"tag",begin:"
-
-