Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/shankar/hugo-grapes.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShankar <shankar_m@protonmail.com>2018-10-23 07:19:03 +0300
committerShankar <shankar_m@protonmail.com>2018-10-23 07:19:03 +0300
commit95b0a4ec1d1017d339c7f88b82b05fcf33a7ed83 (patch)
tree8cf2fbfa634eba2e40b8f83c56a8c5fb7b4fd03d
Initial Commit
Signed-off-by: Shankar <shankar_m@protonmail.com>
-rw-r--r--.gitignore13
-rw-r--r--LICENSE21
-rw-r--r--README.md61
-rw-r--r--archetypes/default.md5
-rw-r--r--exampleSite/config.toml25
-rw-r--r--exampleSite/content/_index.md7
-rw-r--r--exampleSite/content/posts/Drakshasava.md12
-rw-r--r--exampleSite/content/posts/The-Fox-and-the-grapes.md20
-rw-r--r--exampleSite/content/posts/code-demo.md76
-rw-r--r--exampleSite/static/img/grapes.svg214
-rw-r--r--images/screenshot.pngbin0 -> 45489 bytes
-rw-r--r--images/tn.pngbin0 -> 75619 bytes
-rw-r--r--layouts/_default/baseof.html9
-rw-r--r--layouts/_default/list.html18
-rw-r--r--layouts/_default/single.html15
-rw-r--r--layouts/_default/terms.html16
-rw-r--r--layouts/_default/time-element.html1
-rw-r--r--layouts/index.html30
-rw-r--r--layouts/partials/footer.html6
-rw-r--r--layouts/partials/head.html8
-rw-r--r--layouts/partials/header.html9
-rw-r--r--static/css/font.css7
-rw-r--r--static/css/solarized-light.css84
-rw-r--r--static/css/styles.css182
-rw-r--r--static/js/highlight.pack.js2
-rw-r--r--theme.toml17
26 files changed, 858 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..604c106
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,13 @@
+
+# Created by https://www.gitignore.io/api/hugo
+
+### Hugo ###
+# Hugo binary
+hugo*
+
+# Generated files at default location
+/public/
+/resources/_gen
+
+
+# End of https://www.gitignore.io/api/hugo
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..2543ffc
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Shankar
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..3e73a95
--- /dev/null
+++ b/README.md
@@ -0,0 +1,61 @@
+# hugo-grapes
+A minimalistic text based theme for Hugo inspired by [hugo-bingo](https://github.com/gundamew/hugo-bingo) theme.
+
+![screenshot](https://github.com/shankar/hugo-grapes/blob/master/images/screenshot.png)
+
+## Usage
+
+### Instructions
+
+1: Install Hugo.
+
+2: Create a new site.
+
+```
+hugo new site mynewsite
+```
+
+3: Change to themes dir.
+
+```
+cd classic/themes
+```
+
+4: Clone the repo
+
+```
+git clone git@github.com:shankar/hugo-grapes.git
+```
+
+5: Copy the `content/`, `static/`, and `config.toml` from the `exampleSite` directory into the classic directory. The existing `content/`, `static/`, and `config.toml` files will be over-written.
+```
+cp -r hugo-grapes/exampleSite/* /path/to/mynewsite
+```
+
+6: Run `hugo server` within `mynewsite` and enjoy and customize to your hearts content!
+
+### New Posts
+
+To make new posts, simply use the command:
+
+```
+hugo new post/awesome-post.md
+```
+
+## Customize
+
+### Change Avatar
+
+1: The Avatar picture is to be placed in the `static` folder under your hugo site. (default picture is located in `static/img` folder)
+
+2: Edit the config.toml file and edit the value of the `avatar` key under `params` to let hugo know its location.
+```
+[params]
+avatar = "path/to/avatar"
+# Path is relative to static folder.
+# Example: "img/grapes.svg" for grapes.svg file located in static/img folder
+```
+
+## License
+
+This theme is released under the MIT License. See [LICENSE](https://github.com/shankar/hugo-grapes/blob/master/LICENSE).
diff --git a/archetypes/default.md b/archetypes/default.md
new file mode 100644
index 0000000..26f317f
--- /dev/null
+++ b/archetypes/default.md
@@ -0,0 +1,5 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
diff --git a/exampleSite/config.toml b/exampleSite/config.toml
new file mode 100644
index 0000000..834d72b
--- /dev/null
+++ b/exampleSite/config.toml
@@ -0,0 +1,25 @@
+baseurl = "https://example.com"
+languageCode = "en-us"
+title = "Hugo Grapes Theme"
+theme = "hugo-grapes"
+enableEmoji = true
+
+[permalinks]
+ post = "/posts/:slug/"
+
+[menu]
+
+ [[menu.main]]
+ identifier = "home"
+ name = "Home"
+ url = "/"
+ weight = 10
+
+ [[menu.main]]
+ identifier = "posts"
+ name = "Posts"
+ url = "/posts"
+ weight = 20
+
+[params]
+avatar = "img/grapes.svg"
diff --git a/exampleSite/content/_index.md b/exampleSite/content/_index.md
new file mode 100644
index 0000000..56743c3
--- /dev/null
+++ b/exampleSite/content/_index.md
@@ -0,0 +1,7 @@
+---
+title: Home
+---
+
+## Grapes
+
+A grape is a fruit, botanically a berry, of the deciduous woody vines of the flowering plant genus Vitis. Grapes can be eaten fresh as table grapes or they can be used for making wine, jam, juice, jelly, grape seed extract, raisins, vinegar, and grape seed oil. Grapes are a non-climacteric type of fruit, generally occurring in clusters.
diff --git a/exampleSite/content/posts/Drakshasava.md b/exampleSite/content/posts/Drakshasava.md
new file mode 100644
index 0000000..e702ca6
--- /dev/null
+++ b/exampleSite/content/posts/Drakshasava.md
@@ -0,0 +1,12 @@
+---
+title: "Drakshasava"
+date: 2018-10-19T19:43:49+05:30
+draft: false
+tags: ["grapes", "ayurvedha", "tonic"]
+categories: ["ayurvedha", "medicine"]
+---
+Drakshasava (Sanskrit: द्राक्षासव) is a traditional Ayurvedic tonic made from grapes.
+Drakshasava is a weak wine because the grape juice is usually only partially fermented. It is also sometimes prepared by using raisin concentrate.
+The tonic is claimed to be beneficial for maladies such as lethargy, weakness and heat exhaustion. Drakshasava is believed to address health imbalances arising from an excess of the Vata-Vayu Dosha and is said to be useful in curing cardiac disorders and hemorrhoids in the Ayurvedic system.
+
+Source: [Introduction to Ayurveda, the science of life](https://books.google.com/books?id=nydrAAAAMAAJ)
diff --git a/exampleSite/content/posts/The-Fox-and-the-grapes.md b/exampleSite/content/posts/The-Fox-and-the-grapes.md
new file mode 100644
index 0000000..0de5f24
--- /dev/null
+++ b/exampleSite/content/posts/The-Fox-and-the-grapes.md
@@ -0,0 +1,20 @@
+---
+title: "The Fox and the Grapes"
+date: 2018-10-19T20:08:42+05:30
+draft: False
+tags: ["grapes", "moral"]
+categories: ["story", "fable"]
+---
+A Fox one day spied a beautiful bunch of ripe grapes hanging from a vine trained along the branches of a tree. The grapes seemed ready to burst with juice, and the Fox's mouth watered as he gazed longingly at them.
+
+The bunch hung from a high branch, and the Fox had to jump for it. The first time he jumped he missed it by a long way. So he walked off a short distance and took a running leap at it, only to fall short once more. Again and again he tried, but in vain.
+
+Now he sat down and looked at the grapes in disgust.
+
+"What a fool I am," he said. "Here I am wearing myself out to get a bunch of sour grapes that are not worth gaping for."
+
+And off he walked very, very scornfully.
+
+Moral of the story:
+
+> There are many who pretend to despise and belittle that which is beyond their reach.
diff --git a/exampleSite/content/posts/code-demo.md b/exampleSite/content/posts/code-demo.md
new file mode 100644
index 0000000..9c49d7b
--- /dev/null
+++ b/exampleSite/content/posts/code-demo.md
@@ -0,0 +1,76 @@
+---
+title: "Code Demo"
+date: 2018-10-18T18:43:49+05:30
+draft: false
+tags: ["json", "bash", "rust"]
+categories: ["code", "programming"]
+---
+
+## Bash
+```bash
+#!/bin/bash
+
+###### CONFIG
+ACCEPTED_HOSTS="/root/.hag_accepted.conf"
+BE_VERBOSE=false
+
+if [ "$UID" -ne 0 ]
+then
+ echo "Superuser rights required"
+ exit 2
+fi
+
+genApacheConf(){
+ echo -e "# Host ${HOME_DIR}$1/$2 :"
+}
+```
+
+## JSON
+```json
+[
+ {
+ "title": "apples",
+ "count": [12000, 20000],
+ "description": {"text": "...", "sensitive": false}
+ },
+ {
+ "title": "oranges",
+ "count": [17500, null],
+ "description": {"text": "...", "sensitive": false}
+ }
+]
+```
+
+## Rust
+```rust
+fn main() {
+ let greetings = ["Hello", "Hola", "Bonjour",
+ "Ciao", "こんにちは", "안녕하세요",
+ "Cześć", "Olá", "Здравствуйте",
+ "Chào bạn", "您好", "Hallo",
+ "Hej", "Ahoj", "سلام","สวัสดี"];
+
+ for (num, greeting) in greetings.iter().enumerate() {
+ print!("{} : ", greeting);
+ match num {
+ 0 => println!("This code is editable and runnable!"),
+ 1 => println!("¡Este código es editable y ejecutable!"),
+ 2 => println!("Ce code est modifiable et exécutable !"),
+ 3 => println!("Questo codice è modificabile ed eseguibile!"),
+ 4 => println!("このコードは編集して実行出来ます!"),
+ 5 => println!("여기에서 코드를 수정하고 실행할 수 있습니다!"),
+ 6 => println!("Ten kod można edytować oraz uruchomić!"),
+ 7 => println!("Este código é editável e executável!"),
+ 8 => println!("Этот код можно отредактировать и запустить!"),
+ 9 => println!("Bạn có thể edit và run code trực tiếp!"),
+ 10 => println!("这段代码是可以编辑并且能够运行的!"),
+ 11 => println!("Dieser Code kann bearbeitet und ausgeführt werden!"),
+ 12 => println!("Den här koden kan redigeras och köras!"),
+ 13 => println!("Tento kód můžete upravit a spustit"),
+ 14 => println!("این کد قابلیت ویرایش و اجرا دارد!"),
+ 15 => println!("โค้ดนี้สามารถแก้ไขได้และรันได้"),
+ _ => {},
+ }
+ }
+}
+```
diff --git a/exampleSite/static/img/grapes.svg b/exampleSite/static/img/grapes.svg
new file mode 100644
index 0000000..83d00aa
--- /dev/null
+++ b/exampleSite/static/img/grapes.svg
@@ -0,0 +1,214 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 139.645 139.645" style="enable-background:new 0 0 139.645 139.645;" xml:space="preserve">
+<g>
+ <g>
+ <g>
+ <path style="fill:#A54D00;" d="M68.29,38.213c0,0-5.883-14.577,0-35.934l7.383,4.31c0,0-5.639,23.382-2.632,32.018L68.29,38.213z
+ "/>
+ </g>
+ <g>
+ <path d="M75.215,40.292l-7.97-0.661l-0.346-0.857C66.65,38.16,60.894,23.479,66.843,1.88L67.361,0l10.031,5.855L77.13,6.94
+ c-0.055,0.23-5.501,23.052-2.674,31.173L75.215,40.292z M69.385,36.798l1.69,0.14c-1.582-8.809,1.884-25.196,2.886-29.612
+ l-4.72-2.755C65.104,21.309,68.338,33.549,69.385,36.798z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <g>
+ <path style="fill:#A8D626;" d="M71.842,37.061c0,0,2.905-22.545,26.65-20.627C98.492,16.434,95.078,40.419,71.842,37.061z"/>
+ </g>
+ <g>
+ <path d="M76.152,38.883c-1.452,0-2.974-0.114-4.525-0.338l-1.462-0.211l0.189-1.465c0.028-0.22,3.1-22.05,25.334-22.05
+ c0.949,0,1.934,0.04,2.925,0.121l1.589,0.128l-0.225,1.578C99.946,16.868,96.575,38.883,76.152,38.883z M73.607,35.761
+ c8.715,0.812,15.297-2.42,19.642-9.547c1.965-3.225,2.966-6.496,3.425-8.379c-0.333-0.011-0.661-0.016-0.985-0.016
+ C79.07,17.819,74.637,31.182,73.607,35.761z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <path style="fill:#A8D626;" d="M67.804,37.061c0,0-2.907-22.545-26.652-20.627C41.152,16.434,44.568,40.419,67.804,37.061z"/>
+ </g>
+ <g>
+ <path d="M63.494,38.883L63.494,38.883c-20.423,0-23.795-22.015-23.827-22.237l-0.225-1.578l1.589-0.128
+ c0.991-0.08,1.975-0.121,2.925-0.121c22.233,0,25.307,21.83,25.335,22.05l0.189,1.465l-1.462,0.211
+ C66.468,38.77,64.945,38.883,63.494,38.883z M42.971,17.834c0.458,1.884,1.459,5.154,3.425,8.379
+ c3.911,6.416,9.663,9.67,17.097,9.67h0.001c0.822,0,1.672-0.041,2.54-0.122C64.971,31.094,60.302,17.28,42.971,17.834z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="69.823" cy="124.821" r="13.325"/>
+ </g>
+ <g>
+ <path d="M69.823,139.645c-8.175,0-14.826-6.65-14.826-14.825s6.651-14.826,14.826-14.826s14.825,6.651,14.825,14.826
+ C84.648,132.995,77.998,139.645,69.823,139.645z M69.823,112.995c-6.521,0-11.826,5.305-11.826,11.826
+ c0,6.52,5.305,11.825,11.826,11.825s11.825-5.305,11.825-11.825C81.648,118.3,76.343,112.995,69.823,112.995z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="58.03" cy="105.446" r="13.325"/>
+ </g>
+ <g>
+ <path d="M58.03,120.272c-8.175,0-14.826-6.651-14.826-14.826c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825C72.855,113.621,66.205,120.272,58.03,120.272z M58.03,93.621
+ c-6.521,0-11.826,5.305-11.826,11.825c0,6.521,5.305,11.826,11.826,11.826c6.52,0,11.825-5.305,11.825-11.826
+ C69.855,98.926,64.55,93.621,58.03,93.621z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="81.615" cy="105.446" r="13.325"/>
+ </g>
+ <g>
+ <path d="M81.616,120.272c-8.175,0-14.826-6.651-14.826-14.826c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825C96.44,113.621,89.79,120.272,81.616,120.272z M81.616,93.621
+ c-6.521,0-11.826,5.305-11.826,11.825c0,6.521,5.305,11.826,11.826,11.826c6.52,0,11.825-5.305,11.825-11.826
+ C93.44,98.926,88.136,93.621,81.616,93.621z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="46.237" cy="86.915" r="13.325"/>
+ </g>
+ <g>
+ <path d="M46.238,101.741c-8.175,0-14.826-6.651-14.826-14.826c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825S54.412,101.741,46.238,101.741z M46.238,75.09c-6.521,0-11.826,5.305-11.826,11.825
+ c0,6.521,5.305,11.826,11.826,11.826c6.52,0,11.825-5.305,11.825-11.826C58.063,80.395,52.758,75.09,46.238,75.09z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="93.408" cy="86.915" r="13.325"/>
+ </g>
+ <g>
+ <path d="M93.408,101.741c-8.175,0-14.826-6.651-14.826-14.826c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825S101.582,101.741,93.408,101.741z M93.408,75.09c-6.521,0-11.826,5.305-11.826,11.825
+ c0,6.521,5.305,11.826,11.826,11.826c6.52,0,11.825-5.305,11.825-11.826C105.233,80.395,99.928,75.09,93.408,75.09z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="69.823" cy="86.915" r="13.325"/>
+ </g>
+ <g>
+ <path d="M69.823,101.741c-8.175,0-14.826-6.651-14.826-14.826c0-8.174,6.651-14.825,14.826-14.825s14.825,6.65,14.825,14.825
+ C84.648,95.09,77.998,101.741,69.823,101.741z M69.823,75.09c-6.521,0-11.826,5.305-11.826,11.825
+ c0,6.521,5.305,11.826,11.826,11.826s11.825-5.305,11.825-11.826C81.648,80.395,76.343,75.09,69.823,75.09z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="46.237" cy="51.538" r="13.325"/>
+ </g>
+ <g>
+ <path d="M46.238,66.363c-8.175,0-14.826-6.65-14.826-14.825c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825C61.063,59.712,54.412,66.363,46.238,66.363z M46.238,39.713
+ c-6.521,0-11.826,5.305-11.826,11.825c0,6.521,5.305,11.825,11.826,11.825c6.52,0,11.825-5.305,11.825-11.825
+ S52.758,39.713,46.238,39.713z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="93.408" cy="51.538" r="13.325"/>
+ </g>
+ <g>
+ <path d="M93.408,66.363c-8.175,0-14.826-6.65-14.826-14.825c0-8.174,6.651-14.825,14.826-14.825
+ c8.174,0,14.825,6.65,14.825,14.825C108.233,59.712,101.582,66.363,93.408,66.363z M93.408,39.713
+ c-6.521,0-11.826,5.305-11.826,11.825c0,6.521,5.305,11.825,11.826,11.825c6.52,0,11.825-5.305,11.825-11.825
+ S99.928,39.713,93.408,39.713z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="69.823" cy="51.538" r="13.325"/>
+ </g>
+ <g>
+ <path d="M69.823,66.363c-8.175,0-14.826-6.65-14.826-14.825c0-8.174,6.651-14.825,14.826-14.825s14.825,6.65,14.825,14.825
+ C84.648,59.712,77.998,66.363,69.823,66.363z M69.823,39.713c-6.521,0-11.826,5.305-11.826,11.825
+ c0,6.521,5.305,11.825,11.826,11.825s11.825-5.305,11.825-11.825C81.648,45.018,76.343,39.713,69.823,39.713z"/>
+ </g>
+ </g>
+ </g>
+ <g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="36.13" cy="67.542" r="13.325"/>
+ </g>
+ <g>
+ <path d="M36.129,82.367c-8.175,0-14.825-6.65-14.825-14.825c0-8.174,6.65-14.825,14.825-14.825s14.826,6.65,14.826,14.825
+ C50.955,75.716,44.304,82.367,36.129,82.367z M36.129,55.717c-6.52,0-11.825,5.305-11.825,11.825s5.305,11.825,11.825,11.825
+ s11.826-5.305,11.826-11.825S42.65,55.717,36.129,55.717z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="83.3" cy="67.542" r="13.325"/>
+ </g>
+ <g>
+ <path d="M83.3,82.367c-8.175,0-14.825-6.65-14.825-14.825c0-8.174,6.65-14.825,14.825-14.825s14.826,6.65,14.826,14.825
+ C98.125,75.716,91.475,82.367,83.3,82.367z M83.3,55.717c-6.521,0-11.825,5.305-11.825,11.825S76.78,79.367,83.3,79.367
+ s11.826-5.305,11.826-11.825C95.125,61.022,89.82,55.717,83.3,55.717z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="103.516" cy="67.542" r="13.325"/>
+ </g>
+ <g>
+ <path d="M103.516,82.367c-8.174,0-14.825-6.65-14.825-14.825c0-8.174,6.65-14.825,14.825-14.825s14.826,6.65,14.826,14.825
+ C118.341,75.716,111.69,82.367,103.516,82.367z M103.516,55.717c-6.52,0-11.825,5.305-11.825,11.825s5.305,11.825,11.825,11.825
+ c6.521,0,11.826-5.305,11.826-11.825C115.341,61.022,110.036,55.717,103.516,55.717z"/>
+ </g>
+ </g>
+ <g>
+ <g>
+ <circle style="fill:#9D2690;" cx="59.715" cy="67.542" r="13.325"/>
+ </g>
+ <g>
+ <path d="M59.714,82.367c-8.174,0-14.825-6.65-14.825-14.825c0-8.174,6.65-14.825,14.825-14.825s14.826,6.65,14.826,14.825
+ C74.54,75.716,67.889,82.367,59.714,82.367z M59.714,55.717c-6.52,0-11.825,5.305-11.825,11.825s5.305,11.825,11.825,11.825
+ c6.521,0,11.826-5.305,11.826-11.825S66.235,55.717,59.714,55.717z"/>
+ </g>
+ </g>
+ </g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/images/screenshot.png b/images/screenshot.png
new file mode 100644
index 0000000..8bfcf13
--- /dev/null
+++ b/images/screenshot.png
Binary files differ
diff --git a/images/tn.png b/images/tn.png
new file mode 100644
index 0000000..2955399
--- /dev/null
+++ b/images/tn.png
Binary files differ
diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html
new file mode 100644
index 0000000..9621706
--- /dev/null
+++ b/layouts/_default/baseof.html
@@ -0,0 +1,9 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.LanguageCode }}">
+ {{- partial "head.html" . -}}
+ <body>
+ {{- partial "header.html" . -}}
+ {{- block "main" . }}{{- end }}
+ {{- partial "footer.html" . -}}
+ </body>
+</html>
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
new file mode 100644
index 0000000..51afbf3
--- /dev/null
+++ b/layouts/_default/list.html
@@ -0,0 +1,18 @@
+{{ define "main" }}
+<main id="list">
+ <div id="posts" class="grape">
+ <div class="container">
+ <h1>{{ .Title }}</h1>
+ <ul>
+ {{ range .Data.Pages }}
+ <li>
+ <a href="{{ .URL }}">{{ .Title }}</a>
+ <p>{{ .Render "time-element" }}</p>
+ <p>{{ .Summary }}...</p>
+ </li>
+ {{ end }}
+ </ul>
+ </div>
+ </div>
+</main>
+{{ end }}
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
new file mode 100644
index 0000000..8c0c350
--- /dev/null
+++ b/layouts/_default/single.html
@@ -0,0 +1,15 @@
+{{ define "main" }}
+<main id="single">
+ <div id="post" class="white">
+ <div class="container">
+ <div id="title">
+ <h1>{{ .Title }}</h1>
+ {{ .Render "time-element" }}
+ </div>
+ <section class="post-content">
+ {{ .Content }}
+ </section>
+ </div>
+ </div>
+</main>
+{{ end }}
diff --git a/layouts/_default/terms.html b/layouts/_default/terms.html
new file mode 100644
index 0000000..478bdf0
--- /dev/null
+++ b/layouts/_default/terms.html
@@ -0,0 +1,16 @@
+{{ define "main" }}
+<main id="terms">
+ <div id="collections" class="grape">
+ <div class="container">
+ <h1>{{ .Title }}</h1>
+ <ul id="groups">
+ {{ range $key, $value := .Data.Terms }}
+ <li>
+ <a href="{{ (print "/" $.Data.Plural "/" (lower $key)) | relURL }}">#{{ $key }}&nbsp;({{ len $value }})</a>
+ </li>
+ {{ end }}
+ </ul>
+ </div>
+ </div>
+</main>
+{{ end }}
diff --git a/layouts/_default/time-element.html b/layouts/_default/time-element.html
new file mode 100644
index 0000000..29f092c
--- /dev/null
+++ b/layouts/_default/time-element.html
@@ -0,0 +1 @@
+<time datetime="{{ .Date.Format "2006-01-02T15:04:05-0700" }}">{{ .Date.Format "2006-01-02" }}</time>
diff --git a/layouts/index.html b/layouts/index.html
new file mode 100644
index 0000000..18f0b81
--- /dev/null
+++ b/layouts/index.html
@@ -0,0 +1,30 @@
+{{ define "main" }}
+<main id="home">
+ <div id="about" class="grape">
+ <div class="container">
+ <div class="avatar">
+ {{ with .Site.Params.avatar }}
+ <img src="{{ . }}" alt="Avatar">
+ {{ end }}
+ </div>
+ <div id="content">
+ {{ .Content }}
+ </div>
+ </div>
+ </div>
+
+ <div id="recent-posts" class="sand">
+ <div class="container">
+ <h2>Recent Posts</h2>
+ <ul>
+ {{ range first 5 .Data.Pages.ByPublishDate.Reverse }}
+ <li>
+ <span>{{ .Render "time-element" }}</span>
+ <a href="{{ .URL }}">{{ .Title }}</a>
+ </li>
+ {{ end }}
+ </ul>
+ </div>
+ </div>
+</main>
+{{ end }}
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
new file mode 100644
index 0000000..f38227b
--- /dev/null
+++ b/layouts/partials/footer.html
@@ -0,0 +1,6 @@
+<footer class="sand">
+ <span class="footer-text">Powered by <a href="https://gohugo.io/" target="_blank">Hugo</a></span>
+</footer>
+<link rel="stylesheet" href="{{ "css/solarized-light.css" | absURL }}"/>
+<script src="{{ "js/highlight.pack.js" | absURL }}"></script>
+<script>hljs.initHighlightingOnLoad();</script>
diff --git a/layouts/partials/head.html b/layouts/partials/head.html
new file mode 100644
index 0000000..c89ca24
--- /dev/null
+++ b/layouts/partials/head.html
@@ -0,0 +1,8 @@
+<head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <title>{{ with .Page.Title }}{{ . }} - {{ end }}{{ .Site.Title }}</title>
+ <base href="{{ .Site.BaseURL }}">
+ <link rel="stylesheet" href="{{ "css/styles.css" | absURL }}">
+ <link rel="stylesheet" href="{{ "css/font.css" | absURL }}">
+</head>
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
new file mode 100644
index 0000000..67df279
--- /dev/null
+++ b/layouts/partials/header.html
@@ -0,0 +1,9 @@
+<header>
+ <nav class="breadcrumb grape">
+ <h4><a href="{{ "/" | relURL }}">{{ .Site.Title }}</a></h4>
+ <div id="space"></div>
+ {{ range .Site.Menus.main }}
+ <a href="{{ .URL | relURL }}">{{ .Name }}</a>
+ {{ end }}
+ </nav>
+</header>
diff --git a/static/css/font.css b/static/css/font.css
new file mode 100644
index 0000000..c851143
--- /dev/null
+++ b/static/css/font.css
@@ -0,0 +1,7 @@
+body {
+ font-family: -apple-system, BlinkMacSystemFont, 'Avenir Next', Avenir, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
+}
+code {
+ font-family: "Lucida Console", Monaco, monospace;
+ font-size: 85%;
+}
diff --git a/static/css/solarized-light.css b/static/css/solarized-light.css
new file mode 100644
index 0000000..fdcfcc7
--- /dev/null
+++ b/static/css/solarized-light.css
@@ -0,0 +1,84 @@
+/*
+
+Orginal Style from ethanschoonover.com/solarized (c) Jeremy Hull <sourdrums@gmail.com>
+
+*/
+
+.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/static/css/styles.css b/static/css/styles.css
new file mode 100644
index 0000000..47a979f
--- /dev/null
+++ b/static/css/styles.css
@@ -0,0 +1,182 @@
+:root {
+ --color: #94618E; /*grape*/
+ --color-dark: #49274A; /*eggplant*/
+ --color-light: #F4DECB; /*sand*/
+ --color-lite: #F9F9F9;
+}
+
+body {
+ margin: 0;
+ height: 100vh;
+ display: flex;
+ flex-direction: column;
+}
+
+#space {
+ flex: auto;
+}
+
+blockquote {
+ font-style: oblique;
+ background: #f9f9f9;
+ border-left: 10px solid #ccc;
+ margin: 1.5em 10px;
+ padding: 0.5em 10px;
+}
+
+/***** Header and Footer *****/
+header,
+footer {
+ width:100%;
+}
+
+header {
+ background: var(--color);
+}
+
+footer {
+ font-size: .8rem;
+ text-align: center;
+ padding: 8px 0px;
+}
+
+.breadcrumb {
+ display: flex;
+ line-height: 2;
+ padding: 0px 16px;
+}
+
+.breadcrumb a {
+ color: var(--color-lite);
+ margin-left: 16px;
+ margin-top: auto;
+}
+
+.breadcrumb h4 {
+ margin: unset;
+ text-indent: -1rem;
+}
+
+/****************************/
+
+/**** Background color by class name ****/
+
+.grape {
+ background: var(--color);
+ color: var(--color-light);
+}
+
+.sand {
+ background: var(--color-light);
+ color: var(--color-dark);
+}
+
+.white {
+ background: var(--color-lite);
+ color: var(--color-dark);
+}
+
+/***************************************/
+
+/**** Position and size elements ****/
+
+main {
+ flex: 1;
+ display: flex;
+ flex-direction: column;
+}
+
+#about,
+#post,
+#posts,
+#recent-posts,
+#collections {
+ flex: auto;
+ display: flex;
+}
+
+#about,
+#collections {
+ text-align: center;
+}
+
+.container {
+ margin: 32px auto;
+ width: 72%;
+}
+
+.avatar {
+ margin: 32px auto 0;
+ width: 160px;
+}
+
+.avatar > img {
+ border-radius: 50%;
+ width: 100%
+}
+
+/***********************************/
+
+.grape li p {
+ font-size: .75rem;
+ margin-top: .25rem;
+ margin-bottom: 0rem;
+}
+
+.grape li,
+.sand li {
+ margin-top: 1.25rem;
+}
+
+#groups {
+ display: flex;
+}
+
+#groups li {
+ margin: 1rem;
+}
+
+a {
+ text-decoration: none;
+}
+
+.grape a {
+ color: var(--color-lite);
+}
+
+.grape a:hover {
+ color: var(--color-light);
+}
+
+.sand a {
+ color: var(--color-dark);
+ font-weight: bold;
+}
+
+.sand a:hover {
+ color: var(--color);
+}
+/****************************/
+
+/***** Content Styling *****/
+
+#title {
+ text-align: center;
+ padding-bottom: 16px;
+}
+
+#title time {
+ color: var(--color);
+}
+
+#title h1 {
+ margin: 0px;
+}
+
+.white a {
+ color: #30B200; /*Green*/
+}
+
+.white a:hover {
+ color: var(--color);
+}
diff --git a/static/js/highlight.pack.js b/static/js/highlight.pack.js
new file mode 100644
index 0000000..469f52a
--- /dev/null
+++ b/static/js/highlight.pack.js
@@ -0,0 +1,2 @@
+/*! highlight.js v9.13.1 | BSD3 License | git.io/hljslicense */
+!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;")}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=M.exec(o))return w(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||w(i))return i}function o(e){var n,t={},r=Array.prototype.slice.call(arguments,1);for(n in e)t[n]=e[n];return r.forEach(function(e){for(n in e)t[n]=e[n]}),t}function c(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function u(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset<r[0].offset?e:r:"start"===r[0].event?e:r:e.length?e:r}function o(e){function r(e){return" "+e.nodeName+'="'+n(e.value).replace('"',"&quot;")+'"'}l+="<"+t(e)+E.map.call(e.attributes,r).join("")+">"}function c(e){l+="</"+t(e)+">"}function u(e){("start"===e.event?o:c)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substring(s,g[0].offset)),s=g[0].offset,g===e){f.reverse().forEach(c);do u(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),u(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){return e.v&&!e.cached_variants&&(e.cached_variants=e.v.map(function(n){return o(e,{v:null},n)})),e.cached_variants||e.eW&&[o(e)]||[e]}function l(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var o={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");o[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):B(a.k).forEach(function(e){c(e,a.k[e])}),a.k=o}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.endSameAsBegin&&(a.e=a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]),a.c=Array.prototype.concat.apply([],a.c.map(function(e){return s("self"===e?a:e)})),a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var u=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=u.length?t(u.join("|"),!0):{exec:function(){return null}}}}r(e)}function f(e,t,a,i){function o(e){return new RegExp(e.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&"),"m")}function c(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t].endSameAsBegin&&(n.c[t].eR=o(n.c[t].bR.exec(e)[0])),n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function s(e,n){return!a&&r(n.iR,e)}function p(e,n){var t=R.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function d(e,n,t,r){var a=r?"":j.classPrefix,i='<span class="'+a,o=t?"":I;return i+=e+'">',i+n+o}function h(){var e,t,r,a;if(!E.k)return n(k);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(k);r;)a+=n(k.substring(t,r.index)),e=p(E,r),e?(M+=e[1],a+=d(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(k);return a+n(k.substr(t))}function b(){var e="string"==typeof E.sL;if(e&&!L[E.sL])return n(k);var t=e?f(E.sL,k,!0,B[E.sL]):g(k,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(B[E.sL]=t.top),d(t.language,t.value,!1,!0)}function v(){y+=null!=E.sL?b():h(),k=""}function m(e){y+=e.cN?d(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function N(e,n){if(k+=e,null==n)return v(),0;var t=c(n,E);if(t)return t.skip?k+=n:(t.eB&&(k+=n),v(),t.rB||t.eB||(k=n)),m(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?k+=n:(a.rE||a.eE||(k+=n),v(),a.eE&&(k=n));do E.cN&&(y+=I),E.skip||E.sL||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&(r.endSameAsBegin&&(r.starts.eR=r.eR),m(r.starts,"")),a.rE?0:n.length}if(s(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"<unnamed>")+'"');return k+=n,n.length||1}var R=w(e);if(!R)throw new Error('Unknown language: "'+e+'"');l(R);var x,E=i||R,B={},y="";for(x=E;x!==R;x=x.parent)x.cN&&(y=d(x.cN,"",!0)+y);var k="",M=0;try{for(var C,A,S=0;;){if(E.t.lastIndex=S,C=E.t.exec(t),!C)break;A=N(t.substring(S,C.index),C[0]),S=C.index+A}for(N(t.substr(S)),x=E;x.parent;x=x.parent)x.cN&&(y+=I);return{r:M,value:y,language:e,top:E}}catch(O){if(O.message&&-1!==O.message.indexOf("Illegal"))return{r:0,value:n(t)};throw O}}function g(e,t){t=t||j.languages||B(L);var r={r:0,value:n(e)},a=r;return t.filter(w).filter(x).forEach(function(n){var t=f(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function p(e){return j.tabReplace||j.useBR?e.replace(C,function(e,n){return j.useBR&&"\n"===e?"<br>":j.tabReplace?n.replace(/\t/g,j.tabReplace):""}):e}function d(e,n,t){var r=n?y[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function h(e){var n,t,r,o,s,l=i(e);a(l)||(j.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(/<br[ \/]*>/g,"\n")):n=e,s=n.textContent,r=l?f(l,s,!0):g(s),t=c(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=u(t,c(o),s)),r.value=p(r.value),e.innerHTML=r.value,e.className=d(e.className,l,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function b(e){j=o(j,e)}function v(){if(!v.called){v.called=!0;var e=document.querySelectorAll("pre code");E.forEach.call(e,h)}}function m(){addEventListener("DOMContentLoaded",v,!1),addEventListener("load",v,!1)}function N(n,t){var r=L[n]=t(e);r.aliases&&r.aliases.forEach(function(e){y[e]=n})}function R(){return B(L)}function w(e){return e=(e||"").toLowerCase(),L[e]||L[y[e]]}function x(e){var n=w(e);return n&&!n.disableAutodetect}var E=[],B=Object.keys,L={},y={},k=/^(no-?highlight|plain|text)$/i,M=/\blang(?:uage)?-([\w-]+)\b/i,C=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,I="</span>",j={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0};return e.highlight=f,e.highlightAuto=g,e.fixMarkup=p,e.highlightBlock=h,e.configure=b,e.initHighlighting=v,e.initHighlightingOnLoad=m,e.registerLanguage=N,e.listLanguages=R,e.getLanguage=w,e.autoDetection=x,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\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.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|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)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("cpp",function(t){var e={cN:"keyword",b:"\\b[a-z\\d_]*_t\\b"},r={cN:"string",v:[{b:'(u8?|U|L)?"',e:'"',i:"\\n",c:[t.BE]},{b:'(u8?|U|L)?R"\\(',e:'\\)"'},{b:"'\\\\?.",e:"'",i:"."}]},s={cN:"number",v:[{b:"\\b(0b[01']+)"},{b:"(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)"},{b:"(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)"}],r:0},i={cN:"meta",b:/#\s*[a-z]+\b/,e:/$/,k:{"meta-keyword":"if else elif endif define undef warning error line pragma ifdef ifndef include"},c:[{b:/\\\n/,r:0},t.inherit(r,{cN:"meta-string"}),{cN:"meta-string",b:/<[^\n>]*>/,e:/$/,i:"\\n"},t.CLCM,t.CBCM]},a=t.IR+"\\s*\\(",c={keyword:"int float while private char catch import module export virtual operator sizeof dynamic_cast|10 typedef const_cast|10 const for static_cast|10 union namespace unsigned long volatile static protected bool template mutable if public friend do goto auto void enum else break extern using asm case typeid short reinterpret_cast|10 default double register explicit signed typename try this switch continue inline delete alignof constexpr decltype noexcept static_assert thread_local restrict _Bool complex _Complex _Imaginary atomic_bool atomic_char atomic_schar atomic_uchar atomic_short atomic_ushort atomic_int atomic_uint atomic_long atomic_ulong atomic_llong atomic_ullong new throw return and or not",built_in:"std string cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap array shared_ptr abort abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr",literal:"true false nullptr NULL"},n=[e,t.CLCM,t.CBCM,s,r];return{aliases:["c","cc","h","c++","h++","hpp"],k:c,i:"</",c:n.concat([i,{b:"\\b(deque|list|queue|stack|vector|map|set|bitset|multiset|multimap|unordered_map|unordered_set|unordered_multiset|unordered_multimap|array)\\s*<",e:">",k:c,c:["self",e]},{b:t.IR+"::",k:c},{v:[{b:/=/,e:/;/},{b:/\(/,e:/\)/},{bK:"new throw return else",e:/;/}],k:c,c:n.concat([{b:/\(/,e:/\)/,k:c,c:n.concat(["self"]),r:0}]),r:0},{cN:"function",b:"("+t.IR+"[\\*&\\s]+)+"+a,rB:!0,e:/[{;=]/,eE:!0,k:c,i:/[^\w\s\*&]/,c:[{b:a,rB:!0,c:[t.TM],r:0},{cN:"params",b:/\(/,e:/\)/,k:c,r:0,c:[t.CLCM,t.CBCM,r,s,e,{b:/\(/,e:/\)/,k:c,r:0,c:["self",t.CLCM,t.CBCM,r,s,e]}]},t.CLCM,t.CBCM,i]},{cN:"class",bK:"class struct",e:/[{;:]/,c:[{b:/</,e:/>/,c:["self"]},t.TM]}]),exports:{preprocessor:i,strings:r,k:c}}});hljs.registerLanguage("ini",function(e){var b={cN:"string",c:[e.BE],v:[{b:"'''",e:"'''",r:10},{b:'"""',e:'"""',r:10},{b:'"',e:'"'},{b:"'",e:"'"}]};return{aliases:["toml"],cI:!0,i:/\S/,c:[e.C(";","$"),e.HCM,{cN:"section",b:/^\s*\[+/,e:/\]+/},{b:/^[a-z0-9\[\]_-]+\s*=\s*/,e:"$",rB:!0,c:[{cN:"attr",b:/[a-z0-9\[\]_-]+/},{b:/=/,eW:!0,r:0,c:[{cN:"literal",b:/\bon|off|true|false|yes|no\b/},{cN:"variable",v:[{b:/\$[\w\d"][\w\d_]*/},{b:/\$\{(.*?)}/}]},b,{cN:"number",b:/([\+\-]+)?[\d]+_[\d_]+/},e.NM]}]}]}});hljs.registerLanguage("haskell",function(e){var i={v:[e.C("--","$"),e.C("{-","-}",{c:["self"]})]},a={cN:"meta",b:"{-#",e:"#-}"},l={cN:"meta",b:"^#",e:"$"},c={cN:"type",b:"\\b[A-Z][\\w']*",r:0},n={b:"\\(",e:"\\)",i:'"',c:[a,l,{cN:"type",b:"\\b[A-Z][\\w]*(\\((\\.\\.|,|\\w+)\\))?"},e.inherit(e.TM,{b:"[_a-z][\\w']*"}),i]},s={b:"{",e:"}",c:n.c};return{aliases:["hs"],k:"let in if then else case of where do module import hiding qualified type data newtype deriving class instance as default infix infixl infixr foreign export ccall stdcall cplusplus jvm dotnet safe unsafe family forall mdo proc rec",c:[{bK:"module",e:"where",k:"module where",c:[n,i],i:"\\W\\.|;"},{b:"\\bimport\\b",e:"$",k:"import qualified as hiding",c:[n,i],i:"\\W\\.|;"},{cN:"class",b:"^(\\s*)?(class|instance)\\b",e:"where",k:"class family instance where",c:[c,n,i]},{cN:"class",b:"\\b(data|(new)?type)\\b",e:"$",k:"data family type newtype deriving",c:[a,c,n,s,i]},{bK:"default",e:"$",c:[c,n,i]},{bK:"infix infixl infixr",e:"$",c:[e.CNM,i]},{b:"\\bforeign\\b",e:"$",k:"foreign import export ccall stdcall cplusplus jvm dotnet safe unsafe",c:[c,e.QSM,i]},{cN:"meta",b:"#!\\/usr\\/bin\\/env runhaskell",e:"$"},a,l,e.QSM,e.CNM,c,e.inherit(e.TM,{b:"^[_a-z][\\w']*"}),i,{b:"->|<-"}]}});hljs.registerLanguage("go",function(e){var t={keyword:"break default func interface select case map struct chan else goto package switch const fallthrough if range type continue for import return var go defer bool byte complex64 complex128 float32 float64 int8 int16 int32 int64 string uint8 uint16 uint32 uint64 int uint uintptr rune",literal:"true false iota nil",built_in:"append cap close complex copy imag len make new panic print println real recover delete"};return{aliases:["golang"],k:t,i:"</",c:[e.CLCM,e.CBCM,{cN:"string",v:[e.QSM,{b:"'",e:"[^\\\\]'"},{b:"`",e:"`"}]},{cN:"number",v:[{b:e.CNR+"[dflsi]",r:1},e.CNM]},{b:/:=/},{cN:"function",bK:"func",e:/\s*\{/,eE:!0,c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:t,i:/["']/}]}]}});hljs.registerLanguage("cal",function(e){var r="div mod in and or not xor asserterror begin case do downto else end exit for if of repeat then to until while with var",t="false true",c=[e.CLCM,e.C(/\{/,/\}/,{r:0}),e.C(/\(\*/,/\*\)/,{r:10})],n={cN:"string",b:/'/,e:/'/,c:[{b:/''/}]},o={cN:"string",b:/(#\d+)+/},a={cN:"number",b:"\\b\\d+(\\.\\d+)?(DT|D|T)",r:0},i={cN:"string",b:'"',e:'"'},d={cN:"function",bK:"procedure",e:/[:;]/,k:"procedure|10",c:[e.TM,{cN:"params",b:/\(/,e:/\)/,k:r,c:[n,o]}].concat(c)},s={cN:"class",b:"OBJECT (Table|Form|Report|Dataport|Codeunit|XMLport|MenuSuite|Page|Query) (\\d+) ([^\\r\\n]+)",rB:!0,c:[e.TM,d]};return{cI:!0,k:{keyword:r,literal:t},i:/\/\*/,c:[n,o,a,i,e.NM,s,d]}});hljs.registerLanguage("rust",function(e){var t="([ui](8|16|32|64|128|size)|f(32|64))?",r="alignof as be box break const continue crate do else enum extern false fn for if impl in let loop match mod mut offsetof once priv proc pub pure ref return self Self sizeof static struct super trait true type typeof unsafe unsized use virtual while where yield move default",n="drop i8 i16 i32 i64 i128 isize u8 u16 u32 u64 u128 usize f32 f64 str char bool Box Option Result String Vec Copy Send Sized Sync Drop Fn FnMut FnOnce ToOwned Clone Debug PartialEq PartialOrd Eq Ord AsRef AsMut Into From Default Iterator Extend IntoIterator DoubleEndedIterator ExactSizeIterator SliceConcatExt ToString assert! assert_eq! bitflags! bytes! cfg! col! concat! concat_idents! debug_assert! debug_assert_eq! env! panic! file! format! format_args! include_bin! include_str! line! local_data_key! module_path! option_env! print! println! select! stringify! try! unimplemented! unreachable! vec! write! writeln! macro_rules! assert_ne! debug_assert_ne!";return{aliases:["rs"],k:{keyword:r,literal:"true false Some None Ok Err",built_in:n},l:e.IR+"!?",i:"</",c:[e.CLCM,e.C("/\\*","\\*/",{c:["self"]}),e.inherit(e.QSM,{b:/b?"/,i:null}),{cN:"string",v:[{b:/r(#*)"(.|\n)*?"\1(?!#)/},{b:/b?'\\?(x\w{2}|u\w{4}|U\w{8}|.)'/}]},{cN:"symbol",b:/'[a-zA-Z_][a-zA-Z0-9_]*/},{cN:"number",v:[{b:"\\b0b([01_]+)"+t},{b:"\\b0o([0-7_]+)"+t},{b:"\\b0x([A-Fa-f0-9_]+)"+t},{b:"\\b(\\d[\\d_]*(\\.[0-9_]+)?([eE][+-]?[0-9_]+)?)"+t}],r:0},{cN:"function",bK:"fn",e:"(\\(|<)",eE:!0,c:[e.UTM]},{cN:"meta",b:"#\\!?\\[",e:"\\]",c:[{cN:"meta-string",b:/"/,e:/"/}]},{cN:"class",bK:"type",e:";",c:[e.inherit(e.UTM,{endsParent:!0})],i:"\\S"},{cN:"class",bK:"trait enum struct union",e:"{",c:[e.inherit(e.UTM,{endsParent:!0})],i:"[\\w\\d]"},{b:e.IR+"::",k:{built_in:n}},{b:"->"}]}});hljs.registerLanguage("json",function(e){var i={literal:"true false null"},n=[e.QSM,e.CNM],r={e:",",eW:!0,eE:!0,c:n,k:i},t={b:"{",e:"}",c:[{cN:"attr",b:/"/,e:/"/,c:[e.BE],i:"\\n"},e.inherit(r,{b:/:/})],i:"\\S"},c={b:"\\[",e:"\\]",c:[e.inherit(r)],i:"\\S"};return n.splice(n.length,0,t,c),{c:n,k:i,i:"\\S"}});hljs.registerLanguage("python",function(e){var r={keyword:"and elif is global as in if from raise for except finally print import pass return exec else break not with class assert yield try while continue del or def lambda async await nonlocal|10 None True False",built_in:"Ellipsis NotImplemented"},b={cN:"meta",b:/^(>>>|\.\.\.) /},c={cN:"subst",b:/\{/,e:/\}/,k:r,i:/#/},a={cN:"string",c:[e.BE],v:[{b:/(u|b)?r?'''/,e:/'''/,c:[e.BE,b],r:10},{b:/(u|b)?r?"""/,e:/"""/,c:[e.BE,b],r:10},{b:/(fr|rf|f)'''/,e:/'''/,c:[e.BE,b,c]},{b:/(fr|rf|f)"""/,e:/"""/,c:[e.BE,b,c]},{b:/(u|r|ur)'/,e:/'/,r:10},{b:/(u|r|ur)"/,e:/"/,r:10},{b:/(b|br)'/,e:/'/},{b:/(b|br)"/,e:/"/},{b:/(fr|rf|f)'/,e:/'/,c:[e.BE,c]},{b:/(fr|rf|f)"/,e:/"/,c:[e.BE,c]},e.ASM,e.QSM]},s={cN:"number",r:0,v:[{b:e.BNR+"[lLjJ]?"},{b:"\\b(0o[0-7]+)[lLjJ]?"},{b:e.CNR+"[lLjJ]?"}]},i={cN:"params",b:/\(/,e:/\)/,c:["self",b,s,a]};return c.c=[a,s,b],{aliases:["py","gyp"],k:r,i:/(<\/|->|\?)|=>/,c:[b,s,a,e.HCM,{v:[{cN:"function",bK:"def"},{cN:"class",bK:"class"}],e:/:/,i:/[${=;\n,]/,c:[e.UTM,i,{b:/->/,eW:!0,k:"None"}]},{cN:"meta",b:/^[\t ]*@/,e:/$/},{b:/\b(print|exec)\(/}]}});hljs.registerLanguage("diff",function(e){return{aliases:["patch"],c:[{cN:"meta",r:10,v:[{b:/^@@ +\-\d+,\d+ +\+\d+,\d+ +@@$/},{b:/^\*\*\* +\d+,\d+ +\*\*\*\*$/},{b:/^\-\-\- +\d+,\d+ +\-\-\-\-$/}]},{cN:"comment",v:[{b:/Index: /,e:/$/},{b:/={3,}/,e:/$/},{b:/^\-{3}/,e:/$/},{b:/^\*{3} /,e:/$/},{b:/^\+{3}/,e:/$/},{b:/\*{5}/,e:/\*{5}$/}]},{cN:"addition",b:"^\\+",e:"$"},{cN:"deletion",b:"^\\-",e:"$"},{cN:"addition",b:"^\\!",e:"$"}]}});hljs.registerLanguage("bash",function(e){var t={cN:"variable",v:[{b:/\$[\w\d#@][\w\d_]*/},{b:/\$\{(.*?)}/}]},s={cN:"string",b:/"/,e:/"/,c:[e.BE,t,{cN:"variable",b:/\$\(/,e:/\)/,c:[e.BE]}]},a={cN:"string",b:/'/,e:/'/};return{aliases:["sh","zsh"],l:/\b-?[a-z\._]+\b/,k:{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"},c:[{cN:"meta",b:/^#![^\n]+sh\s*$/,r:10},{cN:"function",b:/\w[\w\d_]*\s*\(\s*\)\s*\{/,rB:!0,c:[e.inherit(e.TM,{b:/\w[\w\d_]*/})],r:0},e.HCM,s,a,t]}});hljs.registerLanguage("crystal",function(e){function b(e,b){var r=[{b:e,e:b}];return r[0].c=r,r}var r="(_[uif](8|16|32|64))?",c="[a-zA-Z_]\\w*[!?=]?",i="!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",n="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\][=?]?",s={keyword:"abstract alias as as? asm begin break case class def do else elsif end ensure enum extend for fun if include instance_sizeof is_a? lib macro module next nil? of out pointerof private protected rescue responds_to? return require select self sizeof struct super then type typeof union uninitialized unless until when while with yield __DIR__ __END_LINE__ __FILE__ __LINE__",literal:"false nil true"},t={cN:"subst",b:"#{",e:"}",k:s},a={cN:"template-variable",v:[{b:"\\{\\{",e:"\\}\\}"},{b:"\\{%",e:"%\\}"}],k:s},l={cN:"string",c:[e.BE,t],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%w?\\(",e:"\\)",c:b("\\(","\\)")},{b:"%w?\\[",e:"\\]",c:b("\\[","\\]")},{b:"%w?{",e:"}",c:b("{","}")},{b:"%w?<",e:">",c:b("<",">")},{b:"%w?/",e:"/"},{b:"%w?%",e:"%"},{b:"%w?-",e:"-"},{b:"%w?\\|",e:"\\|"},{b:/<<-\w+$/,e:/^\s*\w+$/}],r:0},u={cN:"string",v:[{b:"%q\\(",e:"\\)",c:b("\\(","\\)")},{b:"%q\\[",e:"\\]",c:b("\\[","\\]")},{b:"%q{",e:"}",c:b("{","}")},{b:"%q<",e:">",c:b("<",">")},{b:"%q/",e:"/"},{b:"%q%",e:"%"},{b:"%q-",e:"-"},{b:"%q\\|",e:"\\|"},{b:/<<-'\w+'$/,e:/^\s*\w+$/}],r:0},_={b:"("+i+")\\s*",c:[{cN:"regexp",c:[e.BE,t],v:[{b:"//[a-z]*",r:0},{b:"/",e:"/[a-z]*"},{b:"%r\\(",e:"\\)",c:b("\\(","\\)")},{b:"%r\\[",e:"\\]",c:b("\\[","\\]")},{b:"%r{",e:"}",c:b("{","}")},{b:"%r<",e:">",c:b("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}]}],r:0},o={cN:"regexp",c:[e.BE,t],v:[{b:"%r\\(",e:"\\)",c:b("\\(","\\)")},{b:"%r\\[",e:"\\]",c:b("\\[","\\]")},{b:"%r{",e:"}",c:b("{","}")},{b:"%r<",e:">",c:b("<",">")},{b:"%r/",e:"/"},{b:"%r%",e:"%"},{b:"%r-",e:"-"},{b:"%r\\|",e:"\\|"}],r:0},w={cN:"meta",b:"@\\[",e:"\\]",c:[e.inherit(e.QSM,{cN:"meta-string"})]},f=[a,l,u,_,o,w,e.HCM,{cN:"class",bK:"class module struct",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<"}]},{cN:"class",bK:"lib enum union",e:"$|;",i:/=/,c:[e.HCM,e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"})],r:10},{cN:"function",bK:"def",e:/\B\b/,c:[e.inherit(e.TM,{b:n,endsParent:!0})]},{cN:"function",bK:"fun macro",e:/\B\b/,c:[e.inherit(e.TM,{b:n,endsParent:!0})],r:5},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":",c:[l,{b:n}],r:0},{cN:"number",v:[{b:"\\b0b([01_]*[01])"+r},{b:"\\b0o([0-7_]*[0-7])"+r},{b:"\\b0x([A-Fa-f0-9_]*[A-Fa-f0-9])"+r},{b:"\\b(([0-9][0-9_]*[0-9]|[0-9])(\\.[0-9_]*[0-9])?([eE][+-]?[0-9_]*[0-9])?)"+r}],r:0}];return t.c=f,a.c=f.slice(1),{aliases:["cr"],l:c,k:s,c:f}});hljs.registerLanguage("ruby",function(e){var b="[a-zA-Z_]\\w*[!?=]?|[-+~]\\@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?",r={keyword:"and then defined module in return redo if BEGIN retry end for self when next until do begin unless END rescue else break undef not super class case require yield alias while ensure elsif or include attr_reader attr_writer attr_accessor",literal:"true false nil"},c={cN:"doctag",b:"@[A-Za-z]+"},a={b:"#<",e:">"},s=[e.C("#","$",{c:[c]}),e.C("^\\=begin","^\\=end",{c:[c],r:10}),e.C("^__END__","\\n$")],n={cN:"subst",b:"#\\{",e:"}",k:r},t={cN:"string",c:[e.BE,n],v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/`/,e:/`/},{b:"%[qQwWx]?\\(",e:"\\)"},{b:"%[qQwWx]?\\[",e:"\\]"},{b:"%[qQwWx]?{",e:"}"},{b:"%[qQwWx]?<",e:">"},{b:"%[qQwWx]?/",e:"/"},{b:"%[qQwWx]?%",e:"%"},{b:"%[qQwWx]?-",e:"-"},{b:"%[qQwWx]?\\|",e:"\\|"},{b:/\B\?(\\\d{1,3}|\\x[A-Fa-f0-9]{1,2}|\\u[A-Fa-f0-9]{4}|\\?\S)\b/},{b:/<<(-?)\w+$/,e:/^\s*\w+$/}]},i={cN:"params",b:"\\(",e:"\\)",endsParent:!0,k:r},d=[t,a,{cN:"class",bK:"class module",e:"$|;",i:/=/,c:[e.inherit(e.TM,{b:"[A-Za-z_]\\w*(::\\w+)*(\\?|\\!)?"}),{b:"<\\s*",c:[{b:"("+e.IR+"::)?"+e.IR}]}].concat(s)},{cN:"function",bK:"def",e:"$|;",c:[e.inherit(e.TM,{b:b}),i].concat(s)},{b:e.IR+"::"},{cN:"symbol",b:e.UIR+"(\\!|\\?)?:",r:0},{cN:"symbol",b:":(?!\\s)",c:[t,{b:b}],r:0},{cN:"number",b:"(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b",r:0},{b:"(\\$\\W)|((\\$|\\@\\@?)(\\w+))"},{cN:"params",b:/\|/,e:/\|/,k:r},{b:"("+e.RSR+"|unless)\\s*",k:"unless",c:[a,{cN:"regexp",c:[e.BE,n],i:/\n/,v:[{b:"/",e:"/[a-z]*"},{b:"%r{",e:"}[a-z]*"},{b:"%r\\(",e:"\\)[a-z]*"},{b:"%r!",e:"![a-z]*"},{b:"%r\\[",e:"\\][a-z]*"}]}].concat(s),r:0}].concat(s);n.c=d,i.c=d;var l="[>?]>",o="[\\w#]+\\(\\w+\\):\\d+:\\d+>",u="(\\w+-)?\\d+\\.\\d+\\.\\d(p\\d+)?[^>]+>",w=[{b:/^\s*=>/,starts:{e:"$",c:d}},{cN:"meta",b:"^("+l+"|"+o+"|"+u+")",starts:{e:"$",c:d}}];return{aliases:["rb","gemspec","podspec","thor","irb"],k:r,i:/\/\*/,c:s.concat(w).concat(d)}});hljs.registerLanguage("yaml",function(e){var b="true false yes no null",a="^[ \\-]*",r="[a-zA-Z_][\\w\\-]*",t={cN:"attr",v:[{b:a+r+":"},{b:a+'"'+r+'":'},{b:a+"'"+r+"':"}]},c={cN:"template-variable",v:[{b:"{{",e:"}}"},{b:"%{",e:"}"}]},l={cN:"string",r:0,v:[{b:/'/,e:/'/},{b:/"/,e:/"/},{b:/\S+/}],c:[e.BE,c]};return{cI:!0,aliases:["yml","YAML","yaml"],c:[t,{cN:"meta",b:"^---s*$",r:10},{cN:"string",b:"[\\|>] *$",rE:!0,c:l.c,e:t.v[0].b},{b:"<%[%=-]?",e:"[%-]?%>",sL:"ruby",eB:!0,eE:!0,r:0},{cN:"type",b:"!"+e.UIR},{cN:"type",b:"!!"+e.UIR},{cN:"meta",b:"&"+e.UIR+"$"},{cN:"meta",b:"\\*"+e.UIR+"$"},{cN:"bullet",b:"^ *-",r:0},e.HCM,{bK:b,k:{literal:b}},e.CNM,l]}});hljs.registerLanguage("swift",function(e){var i={keyword:"#available #colorLiteral #column #else #elseif #endif #file #fileLiteral #function #if #imageLiteral #line #selector #sourceLocation _ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype associativity break case catch class continue convenience default defer deinit didSet do dynamic dynamicType else enum extension fallthrough false fileprivate final for func get guard if import in indirect infix init inout internal is lazy left let mutating nil none nonmutating open operator optional override postfix precedence prefix private protocol Protocol public repeat required rethrows return right self Self set static struct subscript super switch throw throws true try try! try? Type typealias unowned var weak where while willSet",literal:"true false nil",built_in:"abs advance alignof alignofValue anyGenerator assert assertionFailure bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords enumerate equal fatalError filter find getBridgedObjectiveCType getVaList indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare map max maxElement min minElement numericCast overlaps partition posix precondition preconditionFailure print println quickSort readLine reduce reflect reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split startsWith stride strideof strideofValue swap toString transcode underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers withUnsafePointer withUnsafePointers withVaList zip"},t={cN:"type",b:"\\b[A-Z][\\wÀ-ʸ']*",r:0},n=e.C("/\\*","\\*/",{c:["self"]}),r={cN:"subst",b:/\\\(/,e:"\\)",k:i,c:[]},a={cN:"string",c:[e.BE,r],v:[{b:/"""/,e:/"""/},{b:/"/,e:/"/}]},o={cN:"number",b:"\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b",r:0};return r.c=[o],{k:i,c:[a,e.CLCM,n,t,o,{cN:"function",bK:"func",e:"{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{b:/</,e:/>/},{cN:"params",b:/\(/,e:/\)/,endsParent:!0,k:i,c:["self",o,a,e.CBCM,{b:":"}],i:/["']/}],i:/\[|%/},{cN:"class",bK:"struct protocol class extension enum",k:i,e:"\\{",eE:!0,c:[e.inherit(e.TM,{b:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/})]},{cN:"meta",b:"(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|@infix|@prefix|@postfix|@autoclosure|@testable|@available|@nonobjc|@NSApplicationMain|@UIApplicationMain)"},{bK:"import",e:/$/,c:[e.CLCM,n]}]}}); \ No newline at end of file
diff --git a/theme.toml b/theme.toml
new file mode 100644
index 0000000..942e44d
--- /dev/null
+++ b/theme.toml
@@ -0,0 +1,17 @@
+name = "hugo-grapes"
+license = "MIT"
+licenselink = "https://github.com/shankar/hugo-grapes/blob/master/LICENSE"
+description = "Text based minimalistic Hugo theme"
+homepage = "https://github.com/shankar/hugo-grapes"
+tags = ["minimalist", "simple", "clean", "blog", "responsive"]
+features = ["blog"]
+min_version = "0.41"
+
+[author]
+ name = "Shankar"
+ homepage = "https://shankar.me/"
+
+[original]
+ name = "Bing-Sheng Chen"
+ homepage = "https://bschen.tw/"
+ repo = "https://github.com/gundamew/hugo-bingo"