all repos — hastyscribe @ 420cf626b48b7fe3ec0cd456f78f633fdaca74fa

A professional markdown compiler.

Finished implementation; preparing to release.
h3rald h3rald@h3rald.com
Thu, 31 Aug 2023 16:11:18 +0200
commit

420cf626b48b7fe3ec0cd456f78f633fdaca74fa

parent

95181a83c7a4af9aacd9a69c4e43ec6d6b6a9ad3

M .github/workflows/add-artifacts-to-current-release.yml.github/workflows/add-artifacts-to-current-release.yml

@@ -70,20 +70,14 @@

# Build for Linux - name: Build (Linux) run: | - nimble install -y nifty - nifty install - nifty build discount - nimble build -v -y --passL:-static -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --gc:orc --opt:size + nimble build -v -y --passL:-static -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --mm:refc --opt:size if: matrix.os == 'ubuntu-latest' # Build for macOS/Windows - name: Build (macOS, Windows) shell: bash run: | - nimble install -y nifty - nifty install - nifty build discount - nimble build -v -y -d:release --gc:orc --opt:size + nimble build -v -y -d:release --mm:refc --opt:size if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' # Retrieve ID and Name of the current (draft) release
M .github/workflows/ci.yml.github/workflows/ci.yml

@@ -5,10 +5,8 @@ on:

# Triggers the workflow on push or pull request events but only for the master branch push: branches: [master] - tags-ignore: ['**'] pull_request: branches: [master] - tags-ignore: ['**'] # Allows you to run this workflow manually from the Actions tab workflow_dispatch:

@@ -41,8 +39,5 @@ sh init.sh -y

- name: Build run: | - nimble install -y nifty - nifty install - nifty build discount nimble build -y -d:release --passL:-static --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc ./hastyscribe doc/HastyScribe_UserGuide.md
D LICENSE.ADDITIONAL.md

@@ -1,175 +0,0 @@

-## HastyScribe Font - -Copyright (c) 2013-2018, Fabio Cevasco, with Reserved Font Name 'HastyScribe'. - -Released under the terms of the [Open Font License](http://scripts.sil.org/OFL). - -## Additional Third-Party Software - -### Discount (library) - -Copyright (c) 2007 David Loren Parsons. All rights reserved. - -Released under the terms of the [Discount License (BSD-style)](http://www.pell.portland.or.us/~orc/Code/discount/COPYRIGHT.html). - -### Source Sans Pro (font) - -Copyright 2010, 2012, 2014 [Adobe Systems Incorporated](http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. - -Released under the terms of the [Open Font License](http://scripts.sil.org/OFL). - -### Source Code Pro (font) - -Copyright 2010, 2012, 2014 [Adobe Systems Incorporated](http://www.adobe.com/), with Reserved Font Name 'Source'. All Rights Reserved. Source is a trademark of Adobe Systems Incorporated in the United States and/or other countries. - -Released under the terms of the [Open Font License](http://scripts.sil.org/OFL). - -### FontAwesome (font) - -Copyright (c) Dave Gandy, with Reserved Font Name 'FontAwesome'. - -Released under the terms of the [Open Font License](http://scripts.sil.org/OFL). - -### Mr Bedfort (font) - -Copyright (c) SudTipos, with the Reserved Font Name 'Mr Bedfort'. - -Released under the terms of the [Open Font License](http://scripts.sil.org/OFL). - -## License Texts - -### Discount License - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of works must retain the original copyright notice, this list of -conditions and the following disclaimer. -Redistributions in binary form must reproduce the original copyright notice, this -list of conditions and the following disclaimer in the documentation and/or other -materials provided with the distribution. - -Neither my name (David L Parsons) nor the names of contributors to this code may -be used to endorse or promote products derived from this work without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -### MIT License - -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. - -### Open Font License - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE.
M README.mdREADME.md

@@ -9,7 +9,7 @@ _HastyScribe_ is a simple command-line program able to convert [markdown](http://daringfireball.net/projects/markdown) files into HTML files.

## Usage -**hastyscribe** _filename-or-glob-expression_ **[** _\<options\>_ **]** +**hastyscribe** _filename-or-glob-expression_ **[** _&lt;options&gt;_ **]** Where:

@@ -22,63 +22,7 @@ - **\-\-user-js=&lt;file&gt;** causes HastyScribe to insert the contents of the specified local file as a Javascript script.

- **\-\-output-file=&lt;file&gt;** causes HastyScribe to write output to a local file (Use [\-\-output-file=-](class:opt) to output to standard output). - **\-\-watermark=&lt;file&gt;** causes HastyScribe to embed and display an image as a watermark throughout the document. - **\-\-fragment** causes HastyScribe to output just an HTML fragment instead of a full document, without embedding any image, font or stylesheet. - - **\-\-dump=all|styles|fonts** causes HastyScribe to dump all resources/stylesheets/fonts to the current directory. + - **\-\-noembed** causes styles and images not to be embedded. - **\-\-help** causes HastyScribe to display the usage information and quit. -## FAQs - -### Why is _HastyScribe_ different from other markdown converters? - -Because: - -- It is a cross-platform, self-contained executable file. -- It can generate standalone HTML files. -- It comes with its own stylesheet, which is automatically embedded into every HTML document, along with all the needed web fonts. -- It is built on top of [Discount][discount], which means that besides standard markdown you also get: - - strikethrough - - automatic Table of Contents generation - - [SmartyPants](http://daringfireball.net/projects/smartypants/) substitutions - - paragraph centering - - image sizes - - definition lists - - alphabetic lists - - pseudo-protocols to generate `span` tags with arbitrary CSS classes, `abbr` tags, and anchors - - class blocks - - tables - - fenced code blocks - - [Pandoc](http://johnmacfarlane.net/pandoc/)-style document headers -- It automatically embeds any referenced image as data URI. -- It has supports for text snippets, custom fields, and substitution macros. - -### What can I use it for? - -_HastyScribe_ is best suited to produce self-contained documents such as essays, meeting notes, project status documents, and articles. - -### What language is _HastyScribe_ implemented in? - -HastyScribe is implemented in [Nim][nim], a very expressive language that compiles to C and is able to generate small, standalone and self-contained executable files. - -### How do I build _HastyScribe_ from source? - -1. Download and install [Nim][nim]. -2. Download and build [Nifty][nifty], and put it somewhere in your $PATH. -3. Clone the HastyScribe [repository](https://github.com/h3rald/hastyscribe). -4. Navigate to the HastyScribe repository local folder. -5. Run **nifty install** to download HastyScribe's dependencies. - - Note: Some users may need to install libmarkdown2-dev -6. Run **nifty build discount** to build the Discount markdown library. -7. Run **nim c -d:release hastyscribe.nim**. - - -### Quick Installation - -```sh -nimble install nifty -&& sudo apt install libmarkdown2-dev -&& nimble install hastyscribe -``` -If you are using another operating system without apt you can install libmarkdown2 [here](https://launchpad.net/debian/+source/discount) - -[nim]: http://nim-lang.org/ -[nifty]: https://github.com/h3rald/nifty -[discount]: http://www.pell.portland.or.us/~orc/Code/discount/ +&rarr; For more information, see the [HastyScribe User Guide](https://h3rald.com/hastyscribe/HastyScribe_UserGuide.htm)
M doc/-api.mddoc/-api.md

@@ -8,26 +8,33 @@ {{hs}} exposes the following Nim types:

``` HastyOptions* = object - toc*: bool - input*: string - output*: string - css*: string - js*: string - watermark*: string - fragment*: bool - -HastyFields* = Table[string, proc():string] + toc*: bool + input*: string + output*: string + css*: string + js*: string + watermark*: string + fragment*: bool + embed*: bool +HastyFields* = Table[string, string] HastySnippets* = Table[string, string] - HastyMacros* = Table[string, string] +HastyLinkStyles* = Table[string, string] +HastyIconStyles* = Table[string, string] +HastyNoteStyles* = Table[string, string] +HastyBadgeStyles* = Table[string, string] HastyScribe* = object - options: HastyOptions - fields: HastyFields - snippets: HastySnippets - macros: HastyMacros - document: string + options: HastyOptions + fields: HastyFields + snippets: HastySnippets + macros: HastyMacros + document: string + linkStyles: HastyLinkStyles + iconStyles: HastyIconStyles + noteStyles: HastyNoteStyles + badgeStyles: HastyBadgeStyles ``` ## Procs

@@ -39,21 +46,6 @@

proc newHastyScribe*(options: HastyOptions, fields: HastyFields): HastyScribe Instantiates a new {{hs}} object. - -### dump - - proc dump*(hs: var HastyScribe, data="all", dest=".") - -Saves linked resources to the [dest](class:dir) directory. - -[data](class:kwd) can be set to one of the following values: - -all -: Dumps all resource files. -styles -: Dumps all stylesheet files. -fonts -: Dumps all font files. ### compileFragment
M doc/-credits.mddoc/-credits.md

@@ -5,7 +5,6 @@

* The wonderful [Discount][discount] C library, used to parse markdown code. * The ...awesome [FontAwesome][fa] font, used for all the icons. * The beautiful [Mr Bedfort][sudtipos] font, used as the base for the {{hs}} logo. -* The neat [Source Sans Pro](https://store1.adobe.com/cfusion/store/html/index.cfm?event=displayFontPackage&code=1959) and [Source Code Pro](http://store1.adobe.com/cfusion/store/html/index.cfm?event=displayFontPackage&code=1960) fonts, used for all standard text. Special thanks to:

@@ -19,9 +18,8 @@ [df]: https://daringfireball.net/projects/markdown/

[discount]: http://www.pell.portland.or.us/~orc/Code/discount/ [pandoc]: http://johnmacfarlane.net/pandoc/ [md-syntax]: https://daringfireball.net/projects/markdown/syntax -[fa]:http://fortawesome.github.io/Font-Awesome/ -[fa-icons]:http://fortawesome.github.io/Font-Awesome/icons/ +[fa]:https://fontawesome.com +[fa-icons]:https://fontawesome.com/icons [pme]:http://michelf.com/projects/php-markdown/extra/ [sudtipos]:http://www.sudtipos.com/ [release]:{{release -> https://github.com/h3rald/hastyscribe/releases/download/v}} -[nifty]: https://github.com/h3rald/nifty
M doc/-getting-started.mddoc/-getting-started.md

@@ -18,14 +18,14 @@ [nimble install hastyscribe](class:cmd)

## Building from Source -You can also build HastyScribe from source, if there is no pre-built binary for your platform. +To build on a different operating system and architecture from the ones for which a pre-built binary is provided, you also need to get or build the `markdown` static library (see [Orc/discount](https://github.com/Orc/discount) for more information and sources). -To do so, you can: +Then: 1. Download and install [Nim][nim]. -2. Download and build [Nifty][nifty], and put the nifty executable somewhere in your $PATH. 3. Clone the HastyScribe [repository]({{repo -> https://github.com/h3rald/hastyscribe}}). -4. Navigate to the HastyScribe repository local folder. -5. Run **nifty install** to download HastyScribe's dependencies. -6. Run **nifty build discount** to build the Discount markdown library. -7. Run **nim c -d:release -d:discount hastyscribe.nim** +4. Run the following command: + + `nimble build -d:release --passL:"-static -L<dir> -lmarkdown"` + +Where `<dir>` is a directory containing the `libmarkdown.a` static library.
M doc/-overview.mddoc/-overview.md

@@ -1,6 +1,6 @@

# Overview -[](class:hastyscribe) is a self-contained {{mdlink -> [Markdown][df]}} compiler that can create single-file HTML documents. All documents created by {{hs -> HastyScribe}} use well-formed HTML and embed all stylesheets, fonts, and images that are necessary to display them in any (modern) browser (don't even try to display them in IE8 or lower). +{{hs -> HastyScribe}} is a self-contained {{mdlink -> [Markdown][df]}} compiler that can create single-file HTML documents. All documents created by {{hs}} use well-formed HTML and embed all stylesheets, fonts, and images that are necessary to display them in any (modern) browser (don't even try to display them in IE8 or lower). In other words, all documents created by HastyScribe are constituted by only one [.HTML](class:ext) file, for easy distribution.
M doc/-syntax-block.mddoc/-syntax-block.md

@@ -113,6 +113,41 @@ > * To download an image via HTTPS, you must explicitly recompile {{hs}} with [-d:ssl](class:kwd) and OpenSSL must be installed on your system.

> > If {{hs}} is unable to download an image, it will leave it linked. +## Details + +{{input-text}} + +~~~ +<details> +<summary>Details</summary> +The `details` element can be used to create a disclosure element whose contents are only visible when the element is toggled open. +</details> +~~~ + +{{output-text}} + +<details> +<summary>Details</summary> +The `details` element can be used to create a disclosure element whose contents are only visible when the element is toggled open. +</details> + +## Footnotes + +{{input-text}} + +~~~ +This is some text[^1] + +[^1]: This is a footnote! +~~~ + +{{output-text}} + +This is some text[^1] + +[^1]: This is a footnote! + + {@ -syntax-block-lists.md || 1 @} {@ -syntax-block-classes.md || 1 @}
M doc/-syntax.mddoc/-syntax.md

@@ -78,10 +78,10 @@ > <code>\{\{$month-name\}\}</code> | {{$month-name}}

> <code>\{\{$month-name-abbr\}\}</code> | {{$month-name-abbr}} > <code>\{\{$timezone-offset\}\}</code> | {{$timezone-offset}} -Additionally, you can define your own custom fields via command-line parameters, using the [--field/](class:arg) dynamic parameter, like this: +Additionally, you can define your own custom fields via command-line parameters, using the [\-\-field/](class:arg) dynamic parameter, like this: > %terminal% -> hastyscribe my-document.md --field/product:HastyScribe --field/version:1.2.0 +> hastyscribe my-document.md \-\-field/product:HastyScribe \-\-field/version:1.2.0 In this case it will be possible to access the [product](class:kwd) and [product](class:kwd) fields within [my-document.md](class:file) using <code>\{\{$product\}\}</code> and <code>\{\{$version\}\}</code>.
M doc/-usage.mddoc/-usage.md

@@ -4,7 +4,7 @@ {{hs}} is a command-line application that can compile one or more Markdown files into one or more HTML files with the same name(s).

## Command Line Syntax -[hastyscribe](class:cmd) _filename-or-glob-expression_ **[** [_<options\>_](class:opt) **]** +[hastyscribe](class:cmd) _filename-or-glob-expression_ **[** [_&lt;options&gt;_](class:opt) **]** Where:

@@ -17,10 +17,10 @@ * [\-\-user-js=&lt;file&gt;](class:opt) causes {{hs}} to insert the contents of the specified local file as a Javascript script.

* [\-\-output-file=&lt;file&gt;](class:opt) causes {{hs}} to write output to a local file (Use [\-\-output-file=-](class:opt) to output to standard output). * [\-\-watermark=&lt;file&gt;](class:opt) causes {{hs}} to embed and display an image as a watermark throughout the document. * [\-\-fragment](class:opt) causes {{hs}} to output just an HTML fragment instead of a full document, without embedding any image, font or stylesheet. - * [\-\-dump=all|styles|fonts](class:opt) causes {{hs}} to dump all resources/stylesheets/fonts to the current directory. + * [\-\-noembed](class:opt) causes styles and images not to be embedded. * [\-\-help](class:opt) causes {{hs}} to display the usage information and quit. -## Linux/OSX Examples +## Linux and macOS Examples Executing {{hs}} to compile [my_markdown_file.md](class:file) within the current directory:
M doc/HastyScribe_UserGuide.htmdoc/HastyScribe_UserGuide.htm

@@ -15,7 +15,6 @@ * Correct `block` display not defined in IE 8/9.

*/ article, aside, -details, figcaption, figure, footer,

@@ -62,9 +61,7 @@ */

html { font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; /* 2 */ } /**

@@ -266,7 +263,6 @@ }

/** * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. * 3. Improve usability and consistency of cursor style between image-type * `input` and others. */

@@ -274,8 +270,6 @@ button,

html input[type="button"], input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - /* 2 */ cursor: pointer; /* 3 */ }

@@ -298,27 +292,13 @@ padding: 0;

/* 2 */ } /** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome * (include `-moz` to future-proof). */ input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - /* 2 */ box-sizing: content-box; } /** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -/** * Remove inner padding and border in Firefox 4+. */ button::-moz-focus-inner,

@@ -353,15 +333,12 @@ font-family: monospace;

font-weight: 400; } .mix-no-border-radius { - -webkit-border-radius: 0px; - -moz-border-radius: 0px; border-radius: 0px; } @media screen and (max-width: 639px) { .mix-responsive { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .mix-responsive td { white-space: nowrap;

@@ -472,7 +449,6 @@ @media screen and (max-width: 639px) {

pre { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } pre td { white-space: nowrap;

@@ -483,9 +459,6 @@ box-shadow: none;

border: none; line-height: 1.2em; } -pre .hljs { - padding: 0 3px; -} .responsive { width: 100%; }

@@ -493,7 +466,6 @@ @media screen and (max-width: 639px) {

.responsive { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .responsive td { white-space: nowrap;

@@ -528,10 +500,8 @@ }

hr { border: 0; height: 1px; - background-image: -webkit-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -moz-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -ms-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -o-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); + background: #333; + background-image: linear-gradient(to right, #ccc, #333, #ccc); } .center { margin: auto;

@@ -610,11 +580,7 @@ padding: 0 3px 0;

display: inline-block; width: auto; margin: 1px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

@@ -650,11 +616,7 @@ padding: 0 3px 0;

display: inline-block; width: auto; margin: 1px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

@@ -710,16 +672,18 @@ a:hover,

a:visited:hover { text-decoration: underline; } +a.hastyscribe-logo:before { + display: inline; +} +a.hastyscribe-logo img { + vertical-align: middle; +} /* Checkboxes */ li.github_checkbox { list-style-type: none; } .note { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -756,18 +720,13 @@ color: #264c72;

} .note pre, .note code { - font-size: 400; color: #19324c; } .note a { color: #132639; } .tip { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -804,18 +763,13 @@ color: #009926;

} .tip pre, .tip code { - font-size: 400; color: #006619; } .tip a { color: #004d13; } .warning { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -852,18 +806,13 @@ color: #705400;

} .warning pre, .warning code { - font-size: 400; color: #3d2e00; } .warning a { color: #241b00; } .blank-sidebar { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -900,18 +849,13 @@ color: #555;

} .blank-sidebar pre, .blank-sidebar code { - font-size: 400; color: #3b3b3b; } .blank-sidebar a { color: #2f2f2f; } .sidebar { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -948,18 +892,13 @@ color: #555;

} .sidebar pre, .sidebar code { - font-size: 400; color: #3b3b3b; } .sidebar a { color: #2f2f2f; } .output { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -987,11 +926,7 @@ margin-right: 80px;

} } .terminal { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -1027,7 +962,6 @@ @media screen and (max-width: 639px) {

.terminal { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .terminal td { white-space: nowrap;

@@ -1064,11 +998,7 @@ color: #009926;

content: "$ "; } .terminal-su { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -1104,7 +1034,6 @@ @media screen and (max-width: 639px) {

.terminal-su { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .terminal-su td { white-space: nowrap;

@@ -1154,6 +1083,54 @@ margin-left: 80px;

margin-right: 80px; } } +details { + font-size: 95%; + background-clip: padding-box; + border-radius: 3px; + margin: 10px auto; + padding: 2px 4px 0 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); + color: #555; + background-color: #f8f8f8; + border: 1px solid #fefefe; + display: block; +} +details code, +details samp, +details pre { + color: #555; +} +details a { + color: #264c72; +} +details p { + margin: 0 auto; +} +@media screen and (min-width: 880px) { + details { + margin-left: 80px; + margin-right: 80px; + } +} +details > summary::before { + content: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z' /%3E %3C/svg%3E"); + display: inline-block; + margin-right: 2px; + vertical-align: text-top; + height: 11px; + width: 11px; +} +details[open] > summary::before { + content: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z' /%3E %3C/svg%3E"); +} +summary { + cursor: pointer; + font-weight: bold; +} +summary > * { + display: inline; +} .headings h1 { font-size: 2em; }

@@ -1241,9 +1218,6 @@ @media print {

body { width: 700px; } - @prince-pdf { - prince-pdf-page-mode: show-bookmarks; - } /* Table of Contents */ #toc { width: 650px;

@@ -1330,7 +1304,6 @@ display: none;

} h1 { margin-bottom: 50px; - string-set: title content(); border-bottom: 0; } h2 {

@@ -1344,37 +1317,14 @@ h4,

h5, h6 { page-break-after: avoid; - prince-bookmark-state: closed; - } - #footer { - display: none; - } - @page :first { - @top-center { - content: ""; - } } @page { size: A4; margin: 50pt 30pt 50pt 30pt; padding-top: 20pt; - @top-center { - font-family: 'Arial'; - font-size: 0.8em; - content: string(title); - } - } - @page :left { - @bottom-left { - content: counter(page); - font-family: "Arial", "Sans Serif"; - font-size: 0.8em; - } - } - @page :right { @bottom-right { content: counter(page); - font-family: "Arial", "Sans Serif"; + font-family: 'sans-serif'; font-size: 0.8em; } }

@@ -1484,15 +1434,13 @@ .tip > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23009926' d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z' /%3E %3C/svg%3E") }

.note > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23264c72' d='M32 32C32 14.3 46.3 0 64 0H320c17.7 0 32 14.3 32 32s-14.3 32-32 32H290.5l11.4 148.2c36.7 19.9 65.7 53.2 79.5 94.7l1 3c3.3 9.8 1.6 20.5-4.4 28.8s-15.7 13.3-26 13.3H32c-10.3 0-19.9-4.9-26-13.3s-7.7-19.1-4.4-28.8l1-3c13.8-41.5 42.8-74.8 79.5-94.7L93.5 64H64C46.3 64 32 49.7 32 32zM160 384h64v96c0 17.7-14.3 32-32 32s-32-14.3-32-32V384z' /%3E %3C/svg%3E") } .tip > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23009926' d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM369 209L241 337c-9.4 9.4-24.6 9.4-33.9 0l-64-64c-9.4-9.4-9.4-24.6 0-33.9s24.6-9.4 33.9 0l47 47L335 175c9.4-9.4 24.6-9.4 33.9 0s9.4 24.6 0 33.9z' /%3E %3C/svg%3E") } .warning > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23705400' d='M256 32c14.2 0 27.3 7.5 34.5 19.8l216 368c7.3 12.4 7.3 27.7 .2 40.1S486.3 480 472 480H40c-14.3 0-27.6-7.7-34.7-20.1s-7-27.8 .2-40.1l216-368C228.7 39.5 241.8 32 256 32zm0 128c-13.3 0-24 10.7-24 24V296c0 13.3 10.7 24 24 24s24-10.7 24-24V184c0-13.3-10.7-24-24-24zm32 224a32 32 0 1 0 -64 0 32 32 0 1 0 64 0z' /%3E %3C/svg%3E") } -.sidebar > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z' /%3E %3C/svg%3E") }a[href*='github.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z' /%3E %3C/svg%3E") } -a[href$='.zip']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z' /%3E %3C/svg%3E") } -a[href$='.zip']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z' /%3E %3C/svg%3E") } -a[href$='.zip']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z' /%3E %3C/svg%3E") } +.sidebar > p:first-child:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M256 512A256 256 0 1 0 256 0a256 256 0 1 0 0 512zM216 336h24V272H216c-13.3 0-24-10.7-24-24s10.7-24 24-24h48c13.3 0 24 10.7 24 24v88h8c13.3 0 24 10.7 24 24s-10.7 24-24 24H216c-13.3 0-24-10.7-24-24s10.7-24 24-24zm40-208a32 32 0 1 1 0 64 32 32 0 1 1 0-64z' /%3E %3C/svg%3E") }a[href^='#document-top']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z' /%3E %3C/svg%3E") } +a[href^='http']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z' /%3E %3C/svg%3E") } a[href*='github.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z' /%3E %3C/svg%3E") } -a[href*='github.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z' /%3E %3C/svg%3E") } +a[href$='.zip']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z' /%3E %3C/svg%3E") } +a[href^='mailto']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z' /%3E %3C/svg%3E") } a[href*='twitter.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z' /%3E %3C/svg%3E") } -a[href*='linkedin.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z' /%3E %3C/svg%3E") } -a[href*='github.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z' /%3E %3C/svg%3E") }</style> +a[href*='linkedin.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z' /%3E %3C/svg%3E") }</style>

@@ -1535,7 +1483,7 @@ </li>

<li><a href="#Usage">Usage</a> <ul> <li><a href="#Command-Line-Syntax">Command Line Syntax</a></li> - <li><a href="#Linux/OSX-Examples">Linux/OSX Examples</a></li> + <li><a href="#Linux-and-macOS-Examples">Linux and macOS Examples</a></li> <li><a href="#Windows-Examples">Windows Examples</a></li> </ul> </li>

@@ -1562,6 +1510,8 @@ <li><a href="#Tables">Tables</a></li>

<li><a href="#Block-Quotes">Block Quotes</a></li> <li><a href="#Code-Blocks">Code Blocks</a></li> <li><a href="#Images">Images</a></li> + <li><a href="#Details">Details</a></li> + <li><a href="#Footnotes">Footnotes</a></li> <li><a href="#Lists">Lists</a> <ul> <li><a href="#Unordered-Lists">Unordered Lists</a></li>

@@ -1610,14 +1560,14 @@ </li>

</ul> </div> <div id="main"> -<a name="Overview"></a> +<a id="Overview"></a> <h2>Overview<a href="#document-top" title="Go to top"></a></h2> -<p><span class="hastyscribe"></span> is a self-contained <a href="https://daringfireball.net/projects/markdown/">Markdown</a> compiler that can create single-file HTML documents. All documents created by HastyScribe use well-formed HTML and embed all stylesheets, fonts, and images that are necessary to display them in any (modern) browser (don&rsquo;t even try to display them in IE8 or lower).</p> +<p>HastyScribe is a self-contained <a href="https://daringfireball.net/projects/markdown/">Markdown</a> compiler that can create single-file HTML documents. All documents created by HastyScribe use well-formed HTML and embed all stylesheets, fonts, and images that are necessary to display them in any (modern) browser (don&rsquo;t even try to display them in IE8 or lower).</p> <p>In other words, all documents created by HastyScribe are constituted by only one <span class="ext">.HTML</span> file, for easy distribution.</p> -<a name="Rationale"></a> +<a id="Rationale"></a> <h3>Rationale<a href="#document-top" title="Go to top"></a></h3> <p>There are plenty of programs and services that can convert <a href="https://daringfireball.net/projects/markdown/">Markdown</a> into HTML but they are typically either too simple &ndash;they convert markdown code into an HTML fragment&ndash; or too complex &ndash;they produce a well-formed document, but they require too much configuration, or the installation of additional software dependencies.</p>

@@ -1633,10 +1583,10 @@ <li>is a single, small executable file, with no dependencies. To be fair, it&rsquo;s about 1MB in size when compiled for OSX &ndash; but that&rsquo;s only because the HastyScribe executable embeds all the fonts and stylesheets it needs to produce documents.</li>

</ul> -<a name="Key-Features"></a> +<a id="Key-Features"></a> <h3>Key Features<a href="#document-top" title="Go to top"></a></h3> -<a name="Standard-Markdown"></a> +<a id="Standard-Markdown"></a> <h4>Standard Markdown<a href="#document-top" title="Go to top"></a></h4> <p>HastyScribe supports standard markdown for formatting text. Markdown is a lightweight markup language created by John Gruber, and used on many web sites and programs to enable users to write HTML code <em>without actually writing HTML tags</em>.</p>

@@ -1645,7 +1595,7 @@ <div class="tip"><p>Tip</p>

<p>You can learn about Markdown syntax in the <a href="#Syntax-Reference">Syntax Reference</a> section of this document. Alternatively, you can also read the original <a href="https://daringfireball.net/projects/markdown/syntax">Markdown syntax page</a> on John Gruber&rsquo;s blog, Daring Fireball.</p></div> -<a name="Discount-Extensions"></a> +<a id="Discount-Extensions"></a> <h4>Discount Extensions<a href="#document-top" title="Go to top"></a></h4> <p>Standard markdown is great, but sometimes you wish it had a few more features, like tables or fenced code blocks perhaps. The good news is that under the hood HastyScribe uses <a href="http://www.pell.portland.or.us/~orc/Code/discount/">Discount</a>, a markdown compiler library written in C that extends markdown with a few useful extensions, which allow you to, for example:</p>

@@ -1657,27 +1607,27 @@ <li>create definition lists and alphabetical lists</li>

</ul> -<a name="Text-Snippets"></a> +<a id="Text-Snippets"></a> <h4>Text Snippets<a href="#document-top" title="Go to top"></a></h4> <p>Although not part of neither markdown nor Discount, HastyScribe allows you to create text <a href="#Snippets">snippets</a> to reuse content. Useful when you have to use a sentence or a formatted block of text over and over in a document, or shorten long words (like the word <em>HastyScribe</em> in this document <span class="fa-face-smile"></span>).</p> -<a name="Custom-Fields"></a> +<a id="Custom-Fields"></a> <h4>Custom Fields<a href="#document-top" title="Go to top"></a></h4> <p>HastyScribe also supports <a href="#Fields">fields</a> to easily include things like the current date or time, but also custom values specified as command-line parameters.</p> -<a name="Content-Transclusion"></a> +<a id="Content-Transclusion"></a> <h4>Content Transclusion<a href="#document-top" title="Go to top"></a></h4> <p>When managing long documents, you can take advantage of HastyScribe&rsquo;s <a href="#Transclusion">transclusion</a> support to split your content into several files, and transclude them as you see fit.</p> -<a name="Substitution-Macros"></a> +<a id="Substitution-Macros"></a> <h4>Substitution Macros<a href="#document-top" title="Go to top"></a></h4> <p>If you find yourself writing chunks of text that follows the same format except for some content, you can define simple text substitution <a href="#Macros">macros</a> for even higher content reuse.</p> -<a name="Image-(and-font)-Embedding"></a> +<a id="Image-(and-font)-Embedding"></a> <h4>Image (and font) Embedding<a href="#document-top" title="Go to top"></a></h4> <p>HastyScribe only produces single HTML files. With <em>no dependencies</em>:</p>

@@ -1688,12 +1638,12 @@ <li>All referenced images (both local and remote) are automatically embedded using the <a href="http://en.wikipedia.org/wiki/Data_URI_scheme">data URI scheme</a>.</li>

</ul> -<a name="FontAwesome-Icons"></a> +<a id="FontAwesome-Icons"></a> <h4>FontAwesome Icons<a href="#document-top" title="Go to top"></a></h4> -<p><a href="http://fortawesome.github.io/Font-Awesome/">FontAwesome</a> icons can be used in <a href="#Badges">badges</a> or simply to customize text. <span class="fa-thumbs-up"></span></p> +<p><a href="https://fontawesome.com">FontAwesome</a> icons can be used in <a href="#Badges">badges</a> or simply to customize text. <span class="fa-thumbs-up"></span></p> -<a name="Notes,-tips,-warnings,-sidebars-and-badges"></a> +<a id="Notes,-tips,-warnings,-sidebars-and-badges"></a> <h4>Notes, tips, warnings, sidebars and badges<a href="#document-top" title="Go to top"></a></h4> <div class="sidebar"><p>About notes etc.</p>

@@ -1702,65 +1652,65 @@ <p>HastyScribe has built-in <a href="#Tips">tips</a>, <a href="#Notes">notes</a>, <a href="#Warnings">warnings</a>, <a href="#Sidebars">sidebars</a>, like this one.</p></div>

<p><span class="draftcomment">&hellip;and this is a comment badge.</span></p> -<a name="Responsive-Design"></a> +<a id="Responsive-Design"></a> <h4>Responsive Design<a href="#document-top" title="Go to top"></a></h4> <p>All HTML documents created by HastyScribe are responsive and can be viewed perfectly on small devices.</p> -<a name="Printed-Media-Support"></a> +<a id="Printed-Media-Support"></a> <h4>Printed Media Support<a href="#document-top" title="Go to top"></a></h4> <p>HastyScribe&rsquo;s stylesheet contains styles that are specific for printed media. This means that if you try to print an HTML file generated by HastyScribe it will paginate properly and it will display headers and footers (with page numbers).</p> -<a name="Getting-Started"></a> +<a id="Getting-Started"></a> <h2>Getting Started<a href="#document-top" title="Go to top"></a></h2> -<a name="Downloading-Pre-built-Binaries"></a> +<a id="Downloading-Pre-built-Binaries"></a> <h3>Downloading Pre-built Binaries<a href="#document-top" title="Go to top"></a></h3> <p>The easiest way to get HastyScribe is by downloading one of the prebuilt binaries from the <a href="https://github.com/h3rald/hastyscribe/releases/download/v">Github Release Page</a>:</p> <ul> -<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v/hastyscribe_v_macosx_x64.zip">HastyScribe for Mac OS X (x64)</a></li> -<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v/hastyscribe_v_windows_x64.zip">HastyScribe for Windows (x64)</a></li> -<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v/hastyscribe_v_linux_x64.zip">HastyScribe for Linux (x64)</a></li> +<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v2.0.0/hastyscribe_v2.0.0_macosx_x64.zip">HastyScribe for Mac OS X (x64)</a></li> +<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v2.0.0/hastyscribe_v2.0.0_windows_x64.zip">HastyScribe for Windows (x64)</a></li> +<li><a href="https://github.com/h3rald/hastyscribe/releases/download/v2.0.0/hastyscribe_v2.0.0_linux_x64.zip">HastyScribe for Linux (x64)</a></li> </ul> -<a name="Installing-using-Nimble"></a> +<a id="Installing-using-Nimble"></a> <h3>Installing using Nimble<a href="#document-top" title="Go to top"></a></h3> <p>If you already have <a href="http://nim-lang.org/">Nim</a> installed on your computer, you can simply run</p> <p><span class="cmd">nimble install hastyscribe</span></p> -<a name="Building-from-Source"></a> +<a id="Building-from-Source"></a> <h3>Building from Source<a href="#document-top" title="Go to top"></a></h3> -<p>You can also build HastyScribe from source, if there is no pre-built binary for your platform.</p> +<p>To build on a different operating system and architecture from the ones for which a pre-built binary is provided, you also need to get or build the <code>markdown</code> static library (see <a href="https://github.com/Orc/discount">Orc/discount</a> for more information and sources).</p> -<p>To do so, you can:</p> +<p>Then:</p> <ol> <li>Download and install <a href="http://nim-lang.org/">Nim</a>.</li> -<li>Download and build <a href="https://github.com/h3rald/nifty">Nifty</a>, and put the nifty executable somewhere in your $PATH.</li> <li>Clone the HastyScribe <a href="https://github.com/h3rald/hastyscribe">repository</a>.</li> -<li>Navigate to the HastyScribe repository local folder.</li> -<li>Run <strong>nifty install</strong> to download HastyScribe&rsquo;s dependencies.</li> -<li>Run <strong>nifty build discount</strong> to build the Discount markdown library.</li> -<li>Run <strong>nim c -d:release -d:discount hastyscribe.nim</strong></li> +<li><p>Run the following command:</p> + +<p><code>nimble build -d:release --passL:"-static -L&lt;dir&gt; -lmarkdown"</code></p></li> </ol> -<a name="Usage"></a> +<p>Where <code>&lt;dir&gt;</code> is a directory containing the <code>libmarkdown.a</code> static library.</p> + +<a id="Usage"></a> <h2>Usage<a href="#document-top" title="Go to top"></a></h2> <p>HastyScribe is a command-line application that can compile one or more Markdown files into one or more HTML files with the same name(s).</p> -<a name="Command-Line-Syntax"></a> +<a id="Command-Line-Syntax"></a> <h3>Command Line Syntax<a href="#document-top" title="Go to top"></a></h3> -<p><span class="cmd">hastyscribe</span> <em>filename-or-glob-expression</em> <strong>[</strong> <span class="opt"><em><options\></em></span> <strong>]</strong></p> +<p><span class="cmd">hastyscribe</span> <em>filename-or-glob-expression</em> <strong>[</strong> <span class="opt"><em>&lt;options&gt;</em></span> <strong>]</strong></p> <p>Where:</p>

@@ -1776,15 +1726,15 @@ <li><span class="opt">--user-js=&lt;file&gt;</span> causes HastyScribe to insert the contents of the specified local file as a Javascript script.</li>

<li><span class="opt">--output-file=&lt;file&gt;</span> causes HastyScribe to write output to a local file (Use <span class="opt">--output-file=-</span> to output to standard output).</li> <li><span class="opt">--watermark=&lt;file&gt;</span> causes HastyScribe to embed and display an image as a watermark throughout the document.</li> <li><span class="opt">--fragment</span> causes HastyScribe to output just an HTML fragment instead of a full document, without embedding any image, font or stylesheet.</li> -<li><span class="opt">--dump=all|styles|fonts</span> causes HastyScribe to dump all resources/stylesheets/fonts to the current directory.</li> +<li><span class="opt">--noembed</span> causes styles and images not to be embedded.</li> <li><span class="opt">--help</span> causes HastyScribe to display the usage information and quit.</li> </ul> </li> </ul> -<a name="Linux/OSX-Examples"></a> -<h3>Linux/OSX Examples<a href="#document-top" title="Go to top"></a></h3> +<a id="Linux-and-macOS-Examples"></a> +<h3>Linux and macOS Examples<a href="#document-top" title="Go to top"></a></h3> <p>Executing HastyScribe to compile <span class="file">my_markdown_file.md</span> within the current directory:</p>

@@ -1794,7 +1744,7 @@ <p>Executing HastyScribe to compile all <span class="ext">.md</span> files within the current directory:</p>

<div class="terminal"><p>./hastyscribe *.md</p></div> -<a name="Windows-Examples"></a> +<a id="Windows-Examples"></a> <h3>Windows Examples<a href="#document-top" title="Go to top"></a></h3> <p>Executing HastyScribe to compile <span class="file">my_markdown_file.md</span> within the current directory:</p>

@@ -1809,10 +1759,10 @@ <div class="tip"><p>Tip</p>

<p>You can also drag a Markdown file directly on <span class="kwd">hastyscribe.exe</span> to compile it to HTML.</p></div> -<a name="Syntax-Reference"></a> +<a id="Syntax-Reference"></a> <h2>Syntax Reference<a href="#document-top" title="Go to top"></a></h2> -<a name="Document-Headers"></a> +<a id="Document-Headers"></a> <h3>Document Headers<a href="#document-top" title="Go to top"></a></h3> <p>HastyScribe supports <a href="http://johnmacfarlane.net/pandoc/">Pandoc</a>-style Document Headers, as implemented by the <a href="http://www.pell.portland.or.us/~orc/Code/discount/">Discount</a> library. Basically, you can specify the title of the document, author and date as the first three lines of the document, prepending each with a <span class="kwd">%</span>, like this</p>

@@ -1830,7 +1780,7 @@ <li>If you want to use the current date, enter <span class="kwd">% -</span> in the third line.</li>

</ul> </div> -<a name="Transclusion"></a> +<a id="Transclusion"></a> <h3>Transclusion<a href="#document-top" title="Go to top"></a></h3> <p>When writing a long document, it is often useful to split it into many different files, to manage its contents better. HastyScribe provides basic content transclusion support through the following syntax:</p>

@@ -1847,7 +1797,7 @@ <li>Heading offset will only work if headings are created using <span class="kwd">#</span>s. Underline syntax for <span class="kwd">h1</span> and <span class="kwd">h2</span> is not supported.</li>

</ul> </div> -<a name="Snippets"></a> +<a id="Snippets"></a> <h3>Snippets<a href="#document-top" title="Go to top"></a></h3> <p>If you want to reuse a few words or even entire blocks of texts, you can use HastyScribe&rsquo;s snippets.</p>

@@ -1866,7 +1816,7 @@ <p>When a document is compiled, both snippets <em>and snippet defininotions</em> are evaluated to their body text. To avoid snippet definitions being evaluated, you can use a double arrow (<span class="kwd">=></span>) in the definition:</p>

<p><code>{{test => This snippet definition will not be evaluated to its body text.}}</code></p></div> -<a name="Fields"></a> +<a id="Fields"></a> <h3>Fields<a href="#document-top" title="Go to top"></a></h3> <p>Besides user-defined snippets, HastyScribe also support fields, which can be used to insert current time and date information in a variety of formats:</p>

@@ -1881,51 +1831,51 @@ </thead>

<tbody> <tr> <td><code>{{$timestamp}}</code> </td> -<td> 1693412724</td> +<td> 1693490700</td> </tr> <tr> <td><code>{{$date}}</code> </td> -<td> 2023-08-30</td> +<td> 2023-08-31</td> </tr> <tr> <td><code>{{$full-date}}</code> </td> -<td> Wednesday, August 30, 2023</td> +<td> Thursday, August 31, 2023</td> </tr> <tr> <td><code>{{$long-date}}</code> </td> -<td> August 30, 2023</td> +<td> August 31, 2023</td> </tr> <tr> <td><code>{{$medium-date}}</code> </td> -<td> Aug 30, 2023</td> +<td> Aug 31, 2023</td> </tr> <tr> <td><code>{{$short-date}}</code> </td> -<td> 8/30/23</td> +<td> 8/31/23</td> </tr> <tr> <td><code>{{$short-time}}</code> </td> -<td> 18:25 PM</td> +<td> 16:05 PM</td> </tr> <tr> <td><code>{{$short-time-24}}</code> </td> -<td> 18:25</td> +<td> 16:05</td> </tr> <tr> <td><code>{{$time}}</code> </td> -<td> 18:25:24 PM</td> +<td> 16:05:00 PM</td> </tr> <tr> <td><code>{{$time-24}}</code> </td> -<td> 18:25:24</td> +<td> 16:05:00</td> </tr> <tr> <td><code>{{$day}}</code> </td> -<td> 30</td> +<td> 31</td> </tr> <tr> <td><code>{{$short-day}}</code> </td> -<td> 30</td> +<td> 31</td> </tr> <tr> <td><code>{{$month}}</code> </td>

@@ -1945,11 +1895,11 @@ <td> 23</td>

</tr> <tr> <td><code>{{$weekday}}</code> </td> -<td> Wednesday</td> +<td> Thursday</td> </tr> <tr> <td><code>{{$weekday-abbr}}</code> </td> -<td> 30</td> +<td> 31</td> </tr> <tr> <td><code>{{$month-name}}</code> </td>

@@ -1967,13 +1917,13 @@ </tbody>

</table> </div> -<p>Additionally, you can define your own custom fields via command-line parameters, using the <span class="arg">&ndash;field/</span> dynamic parameter, like this:</p> +<p>Additionally, you can define your own custom fields via command-line parameters, using the <span class="arg">--field/</span> dynamic parameter, like this:</p> -<div class="terminal"><p>hastyscribe my-document.md &ndash;field/product:HastyScribe &ndash;field/version:1.2.0</p></div> +<div class="terminal"><p>hastyscribe my-document.md --field/product:HastyScribe --field/version:1.2.0</p></div> <p>In this case it will be possible to access the <span class="kwd">product</span> and <span class="kwd">product</span> fields within <span class="file">my-document.md</span> using <code>{{$product}}</code> and <code>{{$version}}</code>.</p> -<a name="Macros"></a> +<a id="Macros"></a> <h3>Macros<a href="#document-top" title="Go to top"></a></h3> <p>If snippets are not enough, and you want to reuse chunks of <em>similar</em> content, you can define substitution macros using the following syntax:</p>

@@ -1994,7 +1944,7 @@ <li>You can define macros using either <span class="kwd">-></span> or <span class="kwd">=></span>, although <span class="kwd">=></span> is preferred.</li>

</ul> </div> -<a name="Inline-Formatting"></a> +<a id="Inline-Formatting"></a> <h3>Inline Formatting<a href="#document-top" title="Go to top"></a></h3> <p>The following table lists all the most common ways to format inline text:</p>

@@ -2071,7 +2021,7 @@ <div class="tip"><p>Tip</p>

<p>The <span class="kwd">kwd</span>, <span class="kwd">opt</span>, <span class="kwd">file</span>, <span class="kwd">dir</span>, <span class="kwd">arg</span>, <span class="kwd">tt</span> and <span class="kwd">cmd</span> classes are all rendered as inline monospace text. <span class="kwd">kwd</span> and <span class="ext">ext</span> are also rendered in bold.</p></div> -<a name="SmartyPants-Substitutions"></a> +<a id="SmartyPants-Substitutions"></a> <h4>SmartyPants Substitutions<a href="#document-top" title="Go to top"></a></h4> <p>Special characters can be easily entered using some special character sequences.</p>

@@ -2095,10 +2045,10 @@ <li><code>A^B</code> becomes A<sup>B</sup>. Complex superscripts can be enclosed in brackets, so <code>A^(B+2)</code> &rarr; A<sup>B+2</sup>.</li>

</ul> -<a name="Icons"></a> +<a id="Icons"></a> <h4>Icons<a href="#document-top" title="Go to top"></a></h4> -<p>HastyScribe bundles the <a href="http://fortawesome.github.io/Font-Awesome/">FontAwesome</a> icon font. To prepend an icon to text you can use Discount&rsquo;s <em>class:</em> pseudo-protocol, and specify a valid <span class="kwd">fa-*</span> (non-alias) class.</p> +<p>HastyScribe bundles the <a href="https://fontawesome.com">FontAwesome</a> icon font. To prepend an icon to text you can use Discount&rsquo;s <em>class:</em> pseudo-protocol, and specify a valid <span class="kwd">fa-*</span> (non-alias) class.</p> <p>Examples:</p>

@@ -2128,9 +2078,9 @@ </div>

<div class="tip"><p>Tip</p> -<p>See the <a href="http://fortawesome.github.io/Font-Awesome/icons/">FontAwesome Icon Reference</a> for a complete list of all CSS classes to use for icons (aliases are not supported).</p></div> +<p>See the <a href="https://fontawesome.com/icons">FontAwesome Icon Reference</a> for a complete list of all CSS classes to use for icons (aliases are not supported).</p></div> -<a name="Badges"></a> +<a id="Badges"></a> <h4>Badges<a href="#document-top" title="Go to top"></a></h4> <p>Badges are shorthands for <a href="#Icons">Icons</a> formatted with different colors. To add a <em>badge</em> to some inline text, use the corresponding class among those listed in the following table. For example, the following code:</p>

@@ -2380,7 +2330,7 @@ </tbody>

</table> </div> -<a name="Anchors"></a> +<a id="Anchors"></a> <h4>Anchors<a href="#document-top" title="Go to top"></a></h4> <p>You can define HTML anchors inline by wrapping their ID in hashes. For example, the following code:</p>

@@ -2401,7 +2351,7 @@ <li>IDs must start with a letter, and can contain letters, numbers, and any of the following characters: <code>_</code> <code>-</code> <code>.</code> <code>:</code></li>

</ul> </div> -<a name="Links"></a> +<a id="Links"></a> <h4>Links<a href="#document-top" title="Go to top"></a></h4> <div class="responsive"><table>

@@ -2447,10 +2397,10 @@ <li><a href="https://it.linkedin.com/in/fabiocevasco">fabiocevasco</a></li>

</ul> </div> -<a name="Block-level-Formatting"></a> +<a id="Block-level-Formatting"></a> <h3>Block-level Formatting<a href="#document-top" title="Go to top"></a></h3> -<a name="Headings"></a> +<a id="Headings"></a> <h4>Headings<a href="#document-top" title="Go to top"></a></h4> <p>Headings can be specified simply by prepending <span class="kwd">#</span>s to text, as follows:</p>

@@ -2467,7 +2417,7 @@ <div class="note"><p>Note</p>

<p>If you use <a href="#Document-Headers">Document Headers</a>, A <span class="kwd">H1</span> is used for the title of the HastyScribe document. Within the document, start using headings from <span class="kwd">H2</span>.</p></div> -<a name="Tables"></a> +<a id="Tables"></a> <h4>Tables<a href="#document-top" title="Go to top"></a></h4> <p>HastyScribe supports <a href="http://michelf.com/projects/php-markdown/extra/">PHP Markdown Extra</a> table syntax using pipes and dashes.</p>

@@ -2519,7 +2469,7 @@ <div class="sidebar"><p>Responsive Tables</p>

<p>To make tables responsive, put them in a <em>responsive</em> block, like in the previous example. The <span class="kwd">responsive</span> class causes a table not to shrink and makes it scrollable horizontally on small devices.</p></div> -<a name="Block-Quotes"></a> +<a id="Block-Quotes"></a> <h4>Block Quotes<a href="#document-top" title="Go to top"></a></h4> <p>Block quotes can be created simply by prepending a <span class="kwd">></span> to a line, and they can be nested by prepending additional <span class="kwd">></span>s.</p>

@@ -2536,7 +2486,7 @@ <blockquote><p>This is a block quote.</p>

<blockquote><p>This is a nested quote.</p></blockquote></blockquote> -<a name="Code-Blocks"></a> +<a id="Code-Blocks"></a> <h4>Code Blocks<a href="#document-top" title="Go to top"></a></h4> <p>To format a block of source code, indent it by at least four spaces. Here&rsquo;s the result:</p>

@@ -2556,7 +2506,7 @@ <div class="warning"><p>Warning</p>

<p>HastyScribe does not support syntax highlighting for code blocks. To do so, it would require Javascript and HastyScribe is currently kept purposedly &ldquo;Javascript-free&rdquo;.</p></div> -<a name="Images"></a> +<a id="Images"></a> <h4>Images<a href="#document-top" title="Go to top"></a></h4> <p>The following HastyScribe Markdown code:</p>

@@ -2585,10 +2535,42 @@

<p>If HastyScribe is unable to download an image, it will leave it linked.</p></div> -<a name="Lists"></a> +<a id="Details"></a> +<h4>Details<a href="#document-top" title="Go to top"></a></h4> + +<p>The following HastyScribe Markdown code:</p> + +<pre><code>&lt;details&gt; +&lt;summary&gt;Details&lt;/summary&gt; +The `details` element can be used to create a disclosure element whose contents are only visible when the element is toggled open. +&lt;/details&gt; +</code></pre> + +<p>Produces the following output:</p> + +<p><details> +<summary>Details</summary> +The <code>details</code> element can be used to create a disclosure element whose contents are only visible when the element is toggled open. +</details></p> + +<a id="Footnotes"></a> +<h4>Footnotes<a href="#document-top" title="Go to top"></a></h4> + +<p>The following HastyScribe Markdown code:</p> + +<pre><code>This is some text[^1] + +[^1]: This is a footnote! +</code></pre> + +<p>Produces the following output:</p> + +<p>This is some text<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup></p> + +<a id="Lists"></a> <h4>Lists<a href="#document-top" title="Go to top"></a></h4> -<a name="Unordered-Lists"></a> +<a id="Unordered-Lists"></a> <h5>Unordered Lists<a href="#document-top" title="Go to top"></a></h5> <p>The following HastyScribe Markdown code:</p>

@@ -2607,7 +2589,7 @@ <li>And another&hellip;</li>

</ul> -<a name="Ordered-Lists"></a> +<a id="Ordered-Lists"></a> <h5>Ordered Lists<a href="#document-top" title="Go to top"></a></h5> <p>The following HastyScribe Markdown code:</p>

@@ -2630,7 +2612,7 @@ <div class="tip"><p>Tip</p>

<p>You don&rsquo;t have to write numbers in order &ndash; any number followed by a dot will do.</p></div> -<a name="Alphabetical-Lists"></a> +<a id="Alphabetical-Lists"></a> <h5>Alphabetical Lists<a href="#document-top" title="Go to top"></a></h5> <p>The following HastyScribe Markdown code:</p>

@@ -2653,7 +2635,7 @@ <div class="tip"><p>Tip</p>

<p>You don&rsquo;t have to write letters in order &ndash; any letter followed by a dot will do.</p></div> -<a name="Checklists"></a> +<a id="Checklists"></a> <h5>Checklists<a href="#document-top" title="Go to top"></a></h5> <p>The following HastyScribe Markdown code:</p>

@@ -2672,7 +2654,7 @@ <li>[x] Done!</li>

</ul> -<a name="Unstyled-Lists"></a> +<a id="Unstyled-Lists"></a> <h5>Unstyled Lists<a href="#document-top" title="Go to top"></a></h5> <p>The following HastyScribe Markdown code:</p>

@@ -2692,7 +2674,7 @@ <li>And another&hellip;</li>

</ul> </div> -<a name="Nested-Lists"></a> +<a id="Nested-Lists"></a> <h5>Nested Lists<a href="#document-top" title="Go to top"></a></h5> <p>To create a list within a list, simply indent the whole nested list with four space.</p>

@@ -2729,7 +2711,7 @@ </li>

</ul> -<a name="Definition-Lists"></a> +<a id="Definition-Lists"></a> <h5>Definition Lists<a href="#document-top" title="Go to top"></a></h5> <p>In some cases you may want to write a list of terms and their corresponding definitions. You could use an ordinary unordered list, but semantically speaking the <em>proper</em> type of list to use in this case is a definition list.</p>

@@ -2774,10 +2756,10 @@ =definition list=

A list of terms and definitions. </code></pre> -<a name="Class-Blocks"></a> +<a id="Class-Blocks"></a> <h4>Class Blocks<a href="#document-top" title="Go to top"></a></h4> -<a name="Notes"></a> +<a id="Notes"></a> <h5>Notes<a href="#document-top" title="Go to top"></a></h5> <p><a href="http://www.pell.portland.or.us/~orc/Code/discount/">Discount</a> supports the definition of <em>class blocks</em>: <span class="kwd">div</span>s with a class attribute. The syntax is very similar to the one used for <a href="#Block-Quotes">block quotes</a>, with the addition of the class name wrapped in <span class="kwd">%</span>s on the first line.</p>

@@ -2798,7 +2780,7 @@ <div class="note"><p>Note</p>

<p>This is a note.</p></div> -<a name="Tips"></a> +<a id="Tips"></a> <h5>Tips<a href="#document-top" title="Go to top"></a></h5> <p>Tips are used for optional information that can help the user in some way.</p>

@@ -2817,7 +2799,7 @@ <div class="tip"><p>Tip</p>

<p>This is a tip.</p></div> -<a name="Warnings"></a> +<a id="Warnings"></a> <h5>Warnings<a href="#document-top" title="Go to top"></a></h5> <p>Warnings are used for important information the user should not overlook.</p>

@@ -2836,7 +2818,7 @@ <div class="warning"><p>Warning</p>

<p>This is a warning or an important note.</p></div> -<a name="Sidebars"></a> +<a id="Sidebars"></a> <h5>Sidebars<a href="#document-top" title="Go to top"></a></h5> <p>Sidebars are used for digressions and asides.</p>

@@ -2856,7 +2838,7 @@ <div class="sidebar"><p>This is a <em>sidebar</em></p>

<p>Although not always placed on the side of the page, <em>sidebars</em> contain additional content and asides.</p></div> -<a name="Blank-Sidebars"></a> +<a id="Blank-Sidebars"></a> <h5>Blank Sidebars<a href="#document-top" title="Go to top"></a></h5> <p>Blank sidebars can be customized to include custom icons. They are suitable for conditional (operating system or browser specific) instructions.</p>

@@ -2875,7 +2857,7 @@ <div class="blank-sidebar"><p><span class="chrome"></span><span class="firefox"></span><span class="edge"></span> Browser Support</p>

<p>This web app supports only modern browsers, i.e. the latest versions of Google Chrome, Mozilla Firefox and Microsoft Edge, but <em>not</em> Microsoft Internet Explorer.</p></div> -<a name="Terminal-Sessions"></a> +<a id="Terminal-Sessions"></a> <h5>Terminal Sessions<a href="#document-top" title="Go to top"></a></h5> <p>Terminal sessions are used to display commands entered in a terminal, in sequence, without displaying their output.</p>

@@ -2912,12 +2894,12 @@ <p>Produces the following output:</p>

<div class="terminal-su"><p>shutdown -h now</p></div> -<a name="Nim-API"></a> +<a id="Nim-API"></a> <h2>Nim API<a href="#document-top" title="Go to top"></a></h2> <p>Besides its command libe, you can also import HastyScribe as a library within your <a href="https://nim-lang.org">Nim</a> program.</p> -<a name="Types"></a> +<a id="Types"></a> <h3>Types<a href="#document-top" title="Go to top"></a></h3> <p>HastyScribe exposes the following Nim types:</p>

@@ -2945,12 +2927,12 @@ macros: HastyMacros

document: string </code></pre> -<a name="Procs"></a> +<a id="Procs"></a> <h3>Procs<a href="#document-top" title="Go to top"></a></h3> <p>HastyScribe exposes the following <span class="kwd">proc</span>s.</p> -<a name="newHastyScribe"></a> +<a id="newHastyScribe"></a> <h4>newHastyScribe<a href="#document-top" title="Go to top"></a></h4> <pre><code> proc newHastyScribe*(options: HastyOptions, fields: HastyFields): HastyScribe

@@ -2958,7 +2940,7 @@ </code></pre>

<p>Instantiates a new HastyScribe object.</p> -<a name="dump"></a> +<a id="dump"></a> <h4>dump<a href="#document-top" title="Go to top"></a></h4> <pre><code> proc dump*(hs: var HastyScribe, data="all", dest=".")

@@ -2977,7 +2959,7 @@ <dt>fonts</dt>

<dd>Dumps all font files.</dd> </dl> -<a name="compileFragment"></a> +<a id="compileFragment"></a> <h4>compileFragment<a href="#document-top" title="Go to top"></a></h4> <pre><code> proc compileFragment*(hs: var HastyScribe, input, dir: string, toc = false): string {.discardable.}

@@ -2985,7 +2967,7 @@ </code></pre>

<p>Compiles the <span class="kwd">input</span> markdown text into an HTML fragment, without embedding stylesheets or fonts. <span class="kwd">dir</span> identifies the directory containing the input text (it is only used to resolve transclusions).</p> -<a name="compileDocument"></a> +<a id="compileDocument"></a> <h4>compileDocument<a href="#document-top" title="Go to top"></a></h4> <pre><code> proc compileDocument*(hs: var HastyScribe, input, dir: string): string {.discardable.}

@@ -2993,7 +2975,7 @@ </code></pre>

<p>Compiles the <span class="kwd">input</span> markdown text into a self-contained HTML document, embedding stylesheets and fonts. <span class="kwd">dir</span> identifies the directory containing the input text (it is only used to resolve transclusions).</p> -<a name="compile"></a> +<a id="compile"></a> <h4>compile<a href="#document-top" title="Go to top"></a></h4> <pre><code> proc compile*(hs: var HastyScribe, input_file: string)

@@ -3001,16 +2983,15 @@ </code></pre>

<p>Compiles the markdown file <span class="kwd">input_file</span> into a self-contained HTML document.</p> -<a name="Credits"></a> +<a id="Credits"></a> <h2>Credits<a href="#document-top" title="Go to top"></a></h2> <p>HastyScribe is powered by the following open source software (see <a href="https://github.com/h3rald/hastyscribe/blob/master/LICENSE.md">LICENSE.md</a> for licensing details):</p> <ul> <li>The wonderful <a href="http://www.pell.portland.or.us/~orc/Code/discount/">Discount</a> C library, used to parse markdown code.</li> -<li>The &hellip;awesome <a href="http://fortawesome.github.io/Font-Awesome/">FontAwesome</a> font, used for all the icons.</li> +<li>The &hellip;awesome <a href="https://fontawesome.com">FontAwesome</a> font, used for all the icons.</li> <li>The beautiful <a href="http://www.sudtipos.com/">Mr Bedfort</a> font, used as the base for the HastyScribe logo.</li> -<li>The neat <a href="https://store1.adobe.com/cfusion/store/html/index.cfm?event=displayFontPackage&amp;code=1959">Source Sans Pro</a> and <a href="http://store1.adobe.com/cfusion/store/html/index.cfm?event=displayFontPackage&amp;code=1960">Source Code Pro</a> fonts, used for all standard text.</li> </ul>

@@ -3023,10 +3004,20 @@ </ul>

<p style="text-align:center;"> <span class="fa-creative-commons"></span> <span class="fa-creative-commons-by"></span> <span class="fa-creative-commons-nc"></span> <span class="fa-creative-commons-nd"></span></p> +<div class="footnotes"> +<hr/> +<ol> +<li id="fn:1"> +This is a footnote!<a href="#fnref:1" rev="footnote">&#8617;</a></li> +</ol> +</div> + </div> <div id="footer"> - <p><span class="copy"></span> Fabio Cevasco &ndash; August 30, 2023</p> - <p><span>Powered by</span> <a href="https://h3rald.com/hastyscribe"><span class="hastyscribe"></span></a></p> + <p><span class="copy"></span> Fabio Cevasco &ndash; August 31, 2023</p> + <p><span>Powered by</span> <a href="https://h3rald.com/hastyscribe" class="hastyscribe-logo"> <img src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20width='350.755'%20height='102.312'%3E%3Cg%20font-family='Mr%20Bedfort'%20font-size='72'%20font-weight='400'%20letter-spacing='0'%20style='line-height:125%25;-inkscape-font-specification:Mr%20Bedfort'%20word-spacing='0'%3E%3Cpath%20d='m17.352%2044.784-1.296-5.616c-3.552-1.2-7.2-2.52-10.944-3.96-.048%200-.072.024-.072.072.048%201.008%204.152%204.176%2012.312%209.504m6.12-3.24c.96%204.224%201.56%206.96%201.8%208.208%2011.424%206.96%2018.744%2010.464%2021.96%2010.512l-3.888-13.896c-6.432-1.248-13.056-2.856-19.872-4.824M18%204.752l-.288%204.608c0%204.464%201.512%2013.32%204.536%2026.568%206.24%201.92%2012.792%203.576%2019.656%204.968-1.968-7.44-3.408-13.848-4.32-19.224-.912-5.424-1.368-11.208-1.368-17.352.096-.528%201.032-1.368%202.808-2.52C40.848.6%2042.144%200%2042.912%200c.384%200%20.576.264.576.792l-.36%205.04c0%207.776%202.016%2019.872%206.048%2036.288%205.664.864%2010.944%201.368%2015.84%201.512.336%200%20.504.168.504.504%200%20.288-1.056%201.008-3.168%202.16-2.112%201.152-3.36%201.728-3.744%201.728-2.256%200-4.944-.192-8.064-.576l2.808%2010.08c0%20.816-1.704%202.208-5.112%204.176-3.84%200-11.376-3.336-22.608-10.008.48%202.688.768%205.04.864%207.056-.096.096-1.056.576-2.88%201.44-1.824.864-2.856%201.296-3.096%201.296-.624%200-.936-.456-.936-1.368-.432-4.56-1.056-9-1.872-13.32-4.896-3.168-9.072-6.048-12.528-8.64C1.728%2035.52%200%2033.912%200%2033.336c0-.768%201.584-2.088%204.752-3.96l.216-.144c3.264%201.536%206.48%202.88%209.648%204.032-2.736-10.416-4.104-17.496-4.104-21.24%200-1.68.192-3%20.576-3.96.096-.144%201.152-.816%203.168-2.016%202.016-1.2%203.168-1.8%203.456-1.8.192%200%20.288.168.288.504M78.01%2040.104c.144-.288%201.44-.432%203.888-.432%202.496%200%203.744.36%203.744%201.08%200%20.144-.144.432-.432.864-1.68%202.304-2.52%204.704-2.52%207.2%200%202.496.576%204.56%201.728%206.192%201.2%201.584%202.712%202.376%204.536%202.376%202.976%200%206-2.112%209.072-6.336l.504.864c-3.744%205.952-7.872%208.928-12.384%208.928-3.408%200-6.024-1.752-7.848-5.256-.768%201.152-2.016%202.232-3.744%203.24-1.728%201.008-3.36%201.512-4.896%201.512-4.176%200-6.264-1.752-6.264-5.256%200-2.736%201.152-5.592%203.456-8.568%202.352-3.024%204.656-4.536%206.912-4.536.192%200%20.288.072.288.216%200%20.144-.096.312-.288.504-1.008.528-1.872%201.632-2.592%203.312a13.12%2013.12%200%200%200-1.008%205.04c0%203.504%201.344%205.256%204.032%205.256.768%200%201.488-.192%202.16-.576.72-.432%201.152-1.032%201.296-1.8a14.973%2014.973%200%200%201-.936-5.256c0-1.824.072-3.36.216-4.608.384-2.64.744-3.96%201.08-3.96'/%3E%3Cpath%20d='m119.772%2051.048.504.864c-2.016%203.216-4.44%205.664-7.272%207.344-2.832%201.728-5.52%202.592-8.064%202.592-5.136%200-8.544-2.208-10.224-6.624%200-.24.552-1.032%201.656-2.376%201.104-1.344%201.824-2.016%202.16-2.016.384%200%20.6.12.648.36.288%201.536%201.08%203.168%202.376%204.896%201.344%201.728%202.568%202.592%203.672%202.592%201.728%200%202.616-.48%202.664-1.44%200-1.488-1.752-3.744-5.256-6.768-1.296-1.152-2.496-2.616-3.6-4.392-1.056-1.824-1.584-3.696-1.584-5.616%200-.384.072-.648.216-.792%202.112-1.92%203.504-2.88%204.176-2.88.528%200%20.792.408.792%201.224.048%201.776.792%203.624%202.232%205.544%201.488%201.872%202.928%203.672%204.32%205.4%201.44%201.728%202.16%203.456%202.16%205.184%200%201.68-.84%203.192-2.52%204.536%203.936-.096%207.584-2.64%2010.944-7.632'/%3E%3Cpath%20d='M122.633%2024.264c.768%2022.56%204.248%2033.84%2010.44%2033.84%202.64%200%205.808-2.352%209.504-7.056l.504.864c-4.512%206.72-8.832%2010.08-12.96%2010.08-4.08%200-7.392-3.12-9.936-9.36-2.544-6.288-3.888-14.64-4.032-25.056%200%200-.347-5.071%200-4.827.096-3.648.264-5.229.504-8.493%200-.432.216-.72.648-.864%202.88-1.152%204.488-1.728%204.824-1.728.384%200%20.576.216.576.648a165.13%20165.13%200%200%200-.144%206.552'/%3E%3Cpath%20d='M157.87%2082.728c0%203.984%201.176%207.728%203.528%2011.232%202.352%203.504%204.536%205.256%206.552%205.256%201.728%200%202.592-1.536%202.592-4.608%200-2.256-.84-5.712-2.52-10.368a1998.05%201998.05%200%200%200-2.808-7.704%20452.798%20452.798%200%200%201-2.952-8.136c-2.928%204.464-4.392%209.24-4.392%2014.328m15.84%205.544c0%204.704-.792%208.208-2.376%2010.512-1.584%202.352-3.6%203.528-6.048%203.528-3.12%200-6-1.68-8.64-5.04-2.592-3.312-3.888-7.44-3.888-12.384.336-3.408%201.248-6.552%202.736-9.432%201.536-2.88%203.576-5.856%206.12-8.928-1.632-4.464-2.76-7.992-3.384-10.584-2.064%202.64-4.44%203.96-7.128%203.96-2.688%200-5.04-1.368-7.056-4.104-2.016-2.736-3.024-6.672-3.024-11.808%200-.528.384-.888%201.152-1.08%202.304-.48%203.624-.72%203.96-.72.576%200%20.864.288.864.864%200%204.368.984%207.8%202.952%2010.296%201.248%201.536%202.808%202.304%204.68%202.304%201.008%200%202.064-.456%203.168-1.368-.72-3.216-1.08-5.904-1.08-8.064%200-2.208.504-3.816%201.512-4.824%202.064-1.2%203.216-1.8%203.456-1.8.48%200%20.72.36.72%201.08%200%205.232.96%2010.752%202.88%2016.56l1.224%203.816c3.6-3.888%206.336-7.224%208.208-10.008l.504.864c-1.152%201.824-2.208%203.312-3.168%204.464a161.359%20161.359%200%200%201-3.096%203.6%20676.433%20676.433%200%200%201-2.016%202.376c3.504%2010.032%205.424%2015.912%205.76%2017.64.672%203.408%201.008%206.168%201.008%208.28'/%3E%3Cpath%20d='M178.334%2012.888c0%204.608%202.736%208.904%208.208%2012.888%202.544-6.528%203.816-11.712%203.816-15.552%200-1.68-.552-3.24-1.656-4.68-1.104-1.44-2.352-2.16-3.744-2.16-1.344%200-2.568.72-3.672%202.16-1.056%201.44-1.824%202.88-2.304%204.32-.432%201.392-.648%202.4-.648%203.024m-9.36%2046.944c-.336.336-.624.504-.864.504-.384%200-.576-.192-.576-.576%200-.384.096-.696.288-.936%202.16-2.4%204.704-6.024%207.632-10.872a162.099%20162.099%200%200%200%208.064-15.12c-6.144-4.272-9.216-8.64-9.216-13.104%200-2.976.696-6%202.088-9.072%201.44-3.072%203.336-5.616%205.688-7.632%202.4-2.016%204.68-3.024%206.84-3.024%202.208%200%203.696.528%204.464%201.584.816%201.008%201.224%202.496%201.224%204.464%200%203.696-2.232%2010.608-6.696%2020.736%201.584%201.056%203.696%202.352%206.336%203.888a295.464%20295.464%200%200%201%206.84%203.888%2056.857%2056.857%200%200%201%205.76%203.816c3.936%203.024%205.904%206.312%205.904%209.864%200%203.504-1.824%206.792-5.472%209.864-3.648%203.024-7.344%204.536-11.088%204.536-5.904%200-11.16-3.072-15.768-9.216-.528-.72-.792-1.32-.792-1.8%200-.528.6-1.272%201.8-2.232%201.2-1.008%202.136-1.512%202.808-1.512.144%200%20.264.072.36.216%201.296%202.256%203.624%204.656%206.984%207.2%203.36%202.544%206.648%203.816%209.864%203.816%203.984-.288%205.976-2.256%205.976-5.904%200-3.072-1.752-5.952-5.256-8.64-2.592-1.968-5.784-4.032-9.576-6.192-3.792-2.208-6.408-3.792-7.848-4.752-5.808%2012.192-11.064%2020.928-15.768%2026.208M230.382%2041.688c0-1.44-.912-2.16-2.736-2.16-1.824%200-3.336.816-4.536%202.448-1.2%201.632-1.8%203.72-1.8%206.264%200%202.496.96%204.776%202.88%206.84%201.968%202.016%204.896%203.024%208.784%203.024%202.448%200%204.824-.576%207.128-1.728%202.352-1.2%204.344-2.976%205.976-5.328l.504.864c-1.728%203.12-4.392%205.544-7.992%207.272-3.552%201.728-7.152%202.592-10.8%202.592-3.6%200-6.552-.768-8.856-2.304-2.256-1.488-3.384-3.648-3.384-6.48%200-3.6%201.416-7.008%204.248-10.224%202.88-3.216%206.456-4.824%2010.728-4.824%201.488%200%202.592.384%203.312%201.152.72.72%201.08%201.704%201.08%202.952%200%201.2-.432%202.4-1.296%203.6-.864%201.152-1.848%201.728-2.952%201.728-.576%200-1.176-.216-1.8-.648-.576-.48-.864-.864-.864-1.152%200-.336.12-.6.36-.792.24-.24.528-.456.864-.648.768-.384%201.152-1.2%201.152-2.448'/%3E%3Cpath%20d='m251.359%2047.088-1.368-.072c-.48%200-.816.216-1.008.648-.576%201.44-1.488%203.072-2.736%204.896l-.576-.792c.96-1.296%201.704-2.928%202.232-4.896%200-.384-.168-.648-.504-.792-2.16-.72-3.24-2.616-3.24-5.688%200-.672.576-1.296%201.728-1.872%201.152-.624%202.112-.936%202.88-.936.768%200%201.152.336%201.152%201.008%200%203.6%201.68%205.4%205.04%205.4.816%200%201.464-.072%201.944-.216.528-.192.816-.288.864-.288.48%200%20.72.36.72%201.08%200%20.672-.192%201.152-.576%201.44-.336.24-.72.792-1.152%201.656-.432.816-.648%201.776-.648%202.88%200%202.16.624%203.864%201.872%205.112%201.296%201.2%202.88%201.8%204.752%201.8%201.92%200%203.816-.552%205.688-1.656%201.872-1.104%203.504-2.688%204.896-4.752l.504.864c-1.68%202.928-4.008%205.28-6.984%207.056-2.976%201.776-5.64%202.664-7.992%202.664-4.8%200-7.2-2.184-7.2-6.552%200-.816.288-1.92.864-3.312.576-1.392%201.152-2.568%201.728-3.528l.864-1.44c0-.192-.072-.288-.216-.288-1.536.384-2.712.576-3.528.576'/%3E%3Cpath%20d='M273.24%2042.84c-.24%202.016-.36%203.672-.36%204.968%200%204.56.864%208.112%202.592%2010.656%201.776%202.496%203.912%203.744%206.408%203.744%202.544%200%205.064-.888%207.56-2.664%202.496-1.728%204.824-4.272%206.984-7.632l-.504-.864c-3.744%205.136-7.2%207.704-10.368%207.704-2.016%200-3.648-1.08-4.896-3.24-1.248-2.16-1.872-5.088-1.872-8.784%200-1.92.168-3.864.504-5.832%200-.432-.192-.648-.576-.648-.336%200-1.944.576-4.824%201.728-.432.144-.648.432-.648.864m5.976-15.48c.768.816%201.152%201.8%201.152%202.952s-.384%202.136-1.152%202.952c-.72.816-1.608%201.224-2.664%201.224-1.008%200-1.872-.408-2.592-1.224-.72-.816-1.08-1.8-1.08-2.952s.36-2.136%201.08-2.952c.72-.816%201.584-1.224%202.592-1.224%201.056%200%201.944.408%202.664%201.224'/%3E%3Cpath%20d='M310.14%2045.36c-.576%200-.864.576-.864%201.728%200%201.152.456%202.52%201.368%204.104.96%201.536%202.16%202.76%203.6%203.672.048-.24.072-.6.072-1.08%200-2.112-.408-4.032-1.224-5.76-.816-1.776-1.8-2.664-2.952-2.664m-13.464-24.912c0%209.6%201.104%2017.76%203.312%2024.48%202.16-5.904%203.24-13.8%203.24-23.688%200-4.272-.264-7.8-.792-10.584s-1.248-4.176-2.16-4.176c-1.2%200-2.112%201.296-2.736%203.888-.576%202.544-.864%205.904-.864%2010.08m11.448-6.84c0%204.704-.816%2010.32-2.448%2016.848-1.584%206.528-3.312%2011.832-5.184%2015.912%201.488%204.224%203.192%207.488%205.112%209.792%201.92%202.256%203.672%203.384%205.256%203.384s2.64-.984%203.168-2.952c-2.16-.96-4.008-2.496-5.544-4.608-1.488-2.112-2.232-4.224-2.232-6.336%200-1.104.264-1.992.792-2.664.528-.672%201.296-1.008%202.304-1.008%202.496%200%204.416.96%205.76%202.88%201.392%201.872%202.088%204.128%202.088%206.768%200%201.488-.24%202.904-.72%204.248.48.144%201.032.216%201.656.216%202.64%200%204.992-1.68%207.056-5.04l.576.72c-2.16%203.696-4.872%205.544-8.136%205.544-.384%200-.96-.048-1.728-.144-1.68%203.12-4.224%204.68-7.632%204.68-3.936%200-7.536-2.352-10.8-7.056-1.584-2.352-2.856-5.568-3.816-9.648-1.008-4.128-1.512-8.712-1.512-13.752%200-5.04.432-9.6%201.296-13.68.816-4.08%202.064-7.44%203.744-10.08%201.68-2.64%203.6-3.96%205.76-3.96%203.456%200%205.184%203.312%205.184%209.936'/%3E%3Cpath%20d='m332.694%2037.656.072-.936c0-.576-.648-.864-1.944-.864a5.858%205.858%200%200%200-3.528%201.152c-1.008.768-1.512%201.8-1.512%203.096%200%202.304%201.656%203.456%204.968%203.456.528%200%201.056-.072%201.584-.216a5.437%205.437%200%200%201%201.728-.288c.576%200%20.864.192.864.576%200%20.048-.192.168-.576.36-.384.144-.864.384-1.44.72-.528.336-1.08.768-1.656%201.296-1.344%201.248-2.016%202.952-2.016%205.112s.648%203.816%201.944%204.968c1.296%201.104%202.976%201.656%205.04%201.656s4.176-.6%206.336-1.8a14.695%2014.695%200%200%200%205.256-4.896l.504.864c-1.824%203.168-4.368%205.664-7.632%207.488-3.216%201.872-6.168%202.808-8.856%202.808-2.64%200-4.68-.552-6.12-1.656-1.392-1.104-2.088-2.52-2.088-4.248%200-1.776.432-3.408%201.296-4.896.864-1.488%201.608-2.544%202.232-3.168.672-.672%201.152-1.128%201.44-1.368.336-.288.504-.48.504-.576%200-.144-.024-.216-.072-.216-1.536.576-3.024.864-4.464.864-2.544%200-3.816-1.032-3.816-3.096%200-2.784%201.584-5.184%204.752-7.2%203.168-2.016%205.928-3.024%208.28-3.024%202.4%200%203.6.576%203.6%201.728%200%20.72-.384%201.488-1.152%202.304-.768.816-1.464%201.224-2.088%201.224-.96%200-1.44-.408-1.44-1.224'/%3E%3C/g%3E%3Ctext%20xml:space='preserve'%20x='280.368'%20y='13.976'%20font-family='Mr%20Bedfort'%20font-size='40'%20font-weight='400'%20letter-spacing='0'%20style='line-height:125%25;-inkscape-font-specification:Mr%20Bedfort'%20transform='translate(-177.39%20-82.362)'%20word-spacing='0'/%3E%3Cpath%20fill-rule='evenodd'%20d='M99.36%2029.25c-.061-.106.474-.57%201.596-1.31%201.123-.74%202.835-1.75%205.15-2.876%202.313-1.127%205.233-2.365%208.729-3.583%203.496-1.218%207.573-2.41%2012.103-3.567%205.291-1.357%2011.259-2.645%2017.812-3.778%206.554-1.133%2013.693-2.108%2021.297-2.923%2013.686-1.47%2028.926-2.381%2045.127-2.565%207.483-.085%2015.175-.02%2023.015.229%207.834.248%2015.51.67%2022.968%201.25%2014.92%201.156%2028.998%202.957%2041.703%205.435%206.104%201.186%2011.931%202.505%2017.35%204.046%205.42%201.541%2010.433%203.303%2014.965%205.263%204.145%201.79%207.906%203.808%2011.06%206.11%201.442%201.044%202.772%202.171%203.92%203.37%201.146%201.199%202.11%202.469%202.864%203.785a13.434%2013.434%200%200%201%201.512%203.986c.295%201.494.276%202.914.074%204.176a14.011%2014.011%200%200%201-1.3%203.977%2016.406%2016.406%200%200%201-1.587%202.577c-.977%201.305-1.626%201.855-1.732%201.773-.106-.082.333-.802%201.064-2.196a22.47%2022.47%200%200%200%201.191-2.616c.393-1.05.749-2.284.853-3.7a10.664%2010.664%200%200%200-.315-3.59c-.293-1.107-.799-2.24-1.502-3.34-.713-1.123-1.625-2.201-2.717-3.229-1.092-1.027-2.363-2.005-3.75-2.943-3.044-2.044-6.684-3.82-10.755-5.44-4.459-1.771-9.383-3.354-14.721-4.736-5.338-1.383-11.09-2.564-17.15-3.648-12.586-2.244-26.524-3.873-41.336-4.949a561.489%20561.489%200%200%200-22.791-1.181%20602.786%20602.786%200%200%200-22.847-.285c-16.088.1-31.21.836-44.806%202.057-7.56.68-14.646%201.492-21.154%202.44-6.509.95-12.44%202.035-17.714%203.176-4.53.984-8.59%201.971-12.085%202.975a106.17%20106.17%200%200%200-8.788%202.925c-2.358.907-4.145%201.7-5.364%202.228-1.22.527-1.876.783-1.938.677z'/%3E%3C/svg%3E +" width="80" height="23" alt="HastyScribe"> + </a></p> </div> </div>
D nifty.json

@@ -1,54 +0,0 @@

-{ - "storage": "packages", - "commands": { - "build": { - "name+configure.sh": { - "pwd": "{{name}}", - "cmd": "sh configure.sh --github-checkbox=input && make" - } - }, - "install": { - "git+src": { - "cmd": "git clone {{src}} --depth 1" - }, - "git+src+tag": { - "cmd": "git clone --branch {{tag}} {{src}} --depth 1" - }, - "curl+src+name": { - "cmd": "curl {{src}} -o {{name}}" - }, - "_syntax": "install [<package>]", - "_description": "Installs the specified package (or all mapped packages) to the storage directory." - }, - "upgrade": { - "_syntax": "upgrade [<package>]", - "_description": "Upgrades the specified previously-installed package (or all packages).", - "git+name": { - "cmd": "git pull", - "pwd": "{{name}}" - }, - "curl+src+name": { - "cmd": "curl {{src}} -o {{name}}" - } - } - }, - "packages": { - "hastystyles": { - "name": "hastystyles", - "src": "https://github.com/h3rald/hastystyles.git", - "git": true - }, - "discount": { - "configure.sh": true, - "name": "discount", - "src": "https://github.com/Orc/discount.git", - "tag": "v2.2.7", - "git": true - }, - "niftylogger.nim": { - "name": "niftylogger.nim", - "src": "https://raw.githubusercontent.com/h3rald/nifty/master/src/niftypkg/niftylogger.nim", - "curl": true - } - } -}
M src/hastyscribe.nimsrc/hastyscribe.nim

@@ -278,7 +278,7 @@ discard def.match(peg_notestyle_def, matches)

hs.noteStyles[matches[1].strip] = matches[0].strip # Links let peg_linkstyle_def = peg""" - definition <- { 'a[href' ('^=' / '*=' / '$=') '\'' {link} '\']:before' \s* @ (\n / $) } + definition <- { 'a[href' { ('^=' / '*=' / '$=') '\'' link } '\']:before' \s* @ (\n / $) } link <- [a-z0-9-.#]+ """ for def in stylesheet_links.findAll(peg_linkstyle_def):

@@ -382,27 +382,36 @@ # Check links

let linkHrefs = html.querySelectorAll("a[href]") .mapIt(it.attr("href")) var linkRules = newSeq[string]() + # Add #document-top rule because it is always needed and added at the end. + linkRules.add hs.linkStyles["^='#document-top"] for href in linkHrefs: for key in hs.linkStyles.keys.toSeq: - if href.contains(key) and not linkRules.contains(key): - linkRules.add hs.linkStyles[key] - break + if not linkRules.contains(hs.linkStyles[key]): + let op = key[0..1] + let value = key[3..^1] # Skip first ' + var matches = newSeq[string]() # Save matches in order of priority + if op == "$=" and href.endsWith(value): + matches.add key + if op == "*=" and href.contains(value): + matches.add key + if op == "^=" and href.startsWith(value): + matches.add key + # Add last match + if matches.len > 0: + linkRules.add hs.linkStyles[matches[^1]] + break result &= linkRules.join("\n") result = result.style_tag # Public API -proc dump*(hs: var HastyScribe, data="all", dest=".") = - if data == "all" or data == "styles": - (dest/"hastyscribe.css").writeFile(stylesheet) - proc compileFragment*(hs: var HastyScribe, input, dir: string, toc = false): string {.discardable.} = hs.options.input = input hs.document = hs.options.input # Parse transclusions, fields, snippets, and macros hs.document = hs.preprocess(hs.document, dir) # Process markdown - var flags = MKD_EXTRA_FOOTNOTE or MKD_NOHEADER or MKD_DLEXTRA or MKD_FENCEDCODE or MKD_GITHUBTAGS or MKD_HTML5ANCHOR + var flags = MKD_EXTRA_FOOTNOTE or MKD_NOHEADER or MKD_DLEXTRA or MKD_FENCEDCODE or MKD_GITHUBTAGS or MKD_URLENCODEDANCHOR if toc: flags = flags or MKD_TOC hs.document = hs.document.md(flags)

@@ -428,6 +437,10 @@ title_tag = ""

header_tag = "" toc = "" metadata = TMDMetaData(title:"", author:"", date:"", toc:"", css:"") + let logo_datauri = encode_image(hastyscribe_logo, "svg") + let hastyscribe_svg = """ + <img src="$#" width="80" height="23" alt="HastyScribe"> + """ % [logo_datauri] # Process markdown hs.document = hs.document.md(0, metadata) # Manage metadata

@@ -492,7 +505,7 @@ $body

</div> <div id="footer"> <p>$author_footer $date</p> - <p><span>Powered by</span> <a href="https://h3rald.com/hastyscribe"><span class="hastyscribe"></span></a></p> + <p><span>Powered by</span> <a href="https://h3rald.com/hastyscribe" class="hastyscribe-logo">$hastyscribe_svg</a></p> </div> </div> $js

@@ -504,6 +517,7 @@ "author_footer", author_footer,

"date", timeinfo.format("MMMM d, yyyy"), "toc", toc, "main_css_tag", main_css_tag, + "hastyscribe_svg", hastyscribe_svg, "optional_css_tag", optional_css_tag, "user_css_tag", user_css_tag, "headings", headings,

@@ -514,6 +528,8 @@ "js", user_js_tag]

if hs.options.embed: hs.embed_images(dir) hs.document = add_jump_to_top_links(hs.document) + # Use IDs instead of names for anchors + hs.document = hs.document.replace("<a name=", "<a id=") return hs.document proc compile*(hs: var HastyScribe, input_file: string) =

@@ -558,7 +574,6 @@ --watermark=<file> Use the image in <file> as a watermark.

--noembed If specified, styles and images will not be embedded. --fragment If specified, an HTML fragment will be generated, without embedding images ir stylesheets. - --dump=all|styles Dumps all resources to the current directory. --help Display the usage information."""

@@ -566,7 +581,6 @@ var input = ""

var files = newSeq[string](0) var options = HastyOptions(toc: true, output: "", css: "", watermark: "", fragment: false, embed: true) var fields = initTable[string, string]() - var dumpdata = "" # Parse Parameters

@@ -576,11 +590,6 @@ of cmdArgument:

input = key of cmdShortOption, cmdLongOption: case key - of "dump": - if not ["all", "styles"].contains(val): - fatal "[dump] Invalid value: " & val - quit(7) - dumpdata = val of "notoc": options.toc = false of "noembed":

@@ -611,7 +620,7 @@ discard

for file in walkFiles(input): files.add(file) - if files.len == 0 and dumpdata == "": + if files.len == 0: if input == "": echo usage quit(0)

@@ -619,9 +628,6 @@ fatal "\"$1\" does not match any file" % [input]

quit(2) else: var hs = newHastyScribe(options, fields) - if dumpdata != "": - hs.dump(dumpdata) - quit(0) try: for file in files: hs.compile(file)
M src/hastyscribepkg/consts.nimsrc/hastyscribepkg/consts.nim

@@ -5,6 +5,7 @@ stylesheet_badges* = "./data/hastystyles.badges.css".slurp

stylesheet_icons* = "./data/hastystyles.icons.css".slurp stylesheet_links* = "./data/hastystyles.links.css".slurp stylesheet_notes* = "./data/hastystyles.notes.css".slurp + hastyscribe_logo* = "./data/hastyscribe.svg".slurp watermark_style* = """ #container { position: relative;
M src/hastyscribepkg/data/hastystyles.csssrc/hastyscribepkg/data/hastystyles.css

@@ -7,7 +7,6 @@ * Correct `block` display not defined in IE 8/9.

*/ article, aside, -details, figcaption, figure, footer,

@@ -54,9 +53,7 @@ */

html { font-family: sans-serif; /* 1 */ - -ms-text-size-adjust: 100%; - /* 2 */ - -webkit-text-size-adjust: 100%; + text-size-adjust: 100%; /* 2 */ } /**

@@ -258,7 +255,6 @@ }

/** * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` * and `video` controls. - * 2. Correct inability to style clickable `input` types in iOS. * 3. Improve usability and consistency of cursor style between image-type * `input` and others. */

@@ -266,8 +262,6 @@ button,

html input[type="button"], input[type="reset"], input[type="submit"] { - -webkit-appearance: button; - /* 2 */ cursor: pointer; /* 3 */ }

@@ -290,27 +284,13 @@ padding: 0;

/* 2 */ } /** - * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome * (include `-moz` to future-proof). */ input[type="search"] { - -webkit-appearance: textfield; - /* 1 */ - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - /* 2 */ box-sizing: content-box; } /** - * Remove inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ -input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} -/** * Remove inner padding and border in Firefox 4+. */ button::-moz-focus-inner,

@@ -345,15 +325,12 @@ font-family: monospace;

font-weight: 400; } .mix-no-border-radius { - -webkit-border-radius: 0px; - -moz-border-radius: 0px; border-radius: 0px; } @media screen and (max-width: 639px) { .mix-responsive { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .mix-responsive td { white-space: nowrap;

@@ -464,7 +441,6 @@ @media screen and (max-width: 639px) {

pre { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } pre td { white-space: nowrap;

@@ -475,9 +451,6 @@ box-shadow: none;

border: none; line-height: 1.2em; } -pre .hljs { - padding: 0 3px; -} .responsive { width: 100%; }

@@ -485,7 +458,6 @@ @media screen and (max-width: 639px) {

.responsive { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .responsive td { white-space: nowrap;

@@ -520,10 +492,8 @@ }

hr { border: 0; height: 1px; - background-image: -webkit-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -moz-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -ms-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); - background-image: -o-linear-gradient(left, rgba(99, 99, 99, 0), rgba(99, 99, 99, 0.75), rgba(99, 99, 99, 0)); + background: #333; + background-image: linear-gradient(to right, #ccc, #333, #ccc); } .center { margin: auto;

@@ -602,11 +572,7 @@ padding: 0 3px 0;

display: inline-block; width: auto; margin: 1px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

@@ -642,11 +608,7 @@ padding: 0 3px 0;

display: inline-block; width: auto; margin: 1px; - -webkit-border-radius: 2px; - -moz-border-radius: 2px; border-radius: 2px; - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1);

@@ -702,16 +664,18 @@ a:hover,

a:visited:hover { text-decoration: underline; } +a.hastyscribe-logo:before { + display: inline; +} +a.hastyscribe-logo img { + vertical-align: middle; +} /* Checkboxes */ li.github_checkbox { list-style-type: none; } .note { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -748,18 +712,13 @@ color: #264c72;

} .note pre, .note code { - font-size: 400; color: #19324c; } .note a { color: #132639; } .tip { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -796,18 +755,13 @@ color: #009926;

} .tip pre, .tip code { - font-size: 400; color: #006619; } .tip a { color: #004d13; } .warning { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -844,18 +798,13 @@ color: #705400;

} .warning pre, .warning code { - font-size: 400; color: #3d2e00; } .warning a { color: #241b00; } .blank-sidebar { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -892,18 +841,13 @@ color: #555;

} .blank-sidebar pre, .blank-sidebar code { - font-size: 400; color: #3b3b3b; } .blank-sidebar a { color: #2f2f2f; } .sidebar { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -940,18 +884,13 @@ color: #555;

} .sidebar pre, .sidebar code { - font-size: 400; color: #3b3b3b; } .sidebar a { color: #2f2f2f; } .output { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -979,11 +918,7 @@ margin-right: 80px;

} } .terminal { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -1019,7 +954,6 @@ @media screen and (max-width: 639px) {

.terminal { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .terminal td { white-space: nowrap;

@@ -1056,11 +990,7 @@ color: #009926;

content: "$ "; } .terminal-su { - -moz-background-clip: padding; - -webkit-background-clip: padding-box; background-clip: padding-box; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; border-radius: 3px; margin: 10px auto; padding: 2px 4px 0 4px;

@@ -1096,7 +1026,6 @@ @media screen and (max-width: 639px) {

.terminal-su { overflow-y: hidden; overflow-x: auto; - -webkit-overflow-scrolling: touch; } .terminal-su td { white-space: nowrap;

@@ -1146,6 +1075,54 @@ margin-left: 80px;

margin-right: 80px; } } +details { + font-size: 95%; + background-clip: padding-box; + border-radius: 3px; + margin: 10px auto; + padding: 2px 4px 0 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + text-shadow: 0 1px 0 rgba(255, 255, 255, 0.8); + color: #555; + background-color: #f8f8f8; + border: 1px solid #fefefe; + display: block; +} +details code, +details samp, +details pre { + color: #555; +} +details a { + color: #264c72; +} +details p { + margin: 0 auto; +} +@media screen and (min-width: 880px) { + details { + margin-left: 80px; + margin-right: 80px; + } +} +details > summary::before { + content: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M438.6 278.6c12.5-12.5 12.5-32.8 0-45.3l-160-160c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3L338.8 224 32 224c-17.7 0-32 14.3-32 32s14.3 32 32 32l306.7 0L233.4 393.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0l160-160z' /%3E %3C/svg%3E"); + display: inline-block; + margin-right: 2px; + vertical-align: text-top; + height: 11px; + width: 11px; +} +details[open] > summary::before { + content: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%23555555' d='M169.4 470.6c12.5 12.5 32.8 12.5 45.3 0l160-160c12.5-12.5 12.5-32.8 0-45.3s-32.8-12.5-45.3 0L224 370.8 224 64c0-17.7-14.3-32-32-32s-32 14.3-32 32l0 306.7L54.6 265.4c-12.5-12.5-32.8-12.5-45.3 0s-12.5 32.8 0 45.3l160 160z' /%3E %3C/svg%3E"); +} +summary { + cursor: pointer; + font-weight: bold; +} +summary > * { + display: inline; +} .headings h1 { font-size: 2em; }

@@ -1233,9 +1210,6 @@ @media print {

body { width: 700px; } - @prince-pdf { - prince-pdf-page-mode: show-bookmarks; - } /* Table of Contents */ #toc { width: 650px;

@@ -1322,7 +1296,6 @@ display: none;

} h1 { margin-bottom: 50px; - string-set: title content(); border-bottom: 0; } h2 {

@@ -1336,37 +1309,14 @@ h4,

h5, h6 { page-break-after: avoid; - prince-bookmark-state: closed; - } - #footer { - display: none; - } - @page :first { - @top-center { - content: ""; - } } @page { size: A4; margin: 50pt 30pt 50pt 30pt; padding-top: 20pt; - @top-center { - font-family: 'Arial'; - font-size: 0.8em; - content: string(title); - } - } - @page :left { - @bottom-left { - content: counter(page); - font-family: "Arial", "Sans Serif"; - font-size: 0.8em; - } - } - @page :right { @bottom-right { content: counter(page); - font-family: "Arial", "Sans Serif"; + font-family: 'sans-serif'; font-size: 0.8em; } }
M src/hastyscribepkg/data/hastystyles.links.csssrc/hastyscribepkg/data/hastystyles.links.css

@@ -1,5 +1,5 @@

a[href*='amazon.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z' /%3E %3C/svg%3E") } -a[href='#document-top']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z' /%3E %3C/svg%3E") } +a[href^='#document-top']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M246.6 41.4c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 109.3 361.4 246.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3l-160-160zm160 352l-160-160c-12.5-12.5-32.8-12.5-45.3 0l-160 160c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L224 301.3 361.4 438.6c12.5 12.5 32.8 12.5 45.3 0s12.5-32.8 0-45.3z' /%3E %3C/svg%3E") } a[href*='bitbucket.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z' /%3E %3C/svg%3E") } a[href*='blogger.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M162.4 196c4.8-4.9 6.2-5.1 36.4-5.1 27.2 0 28.1.1 32.1 2.1 5.8 2.9 8.3 7 8.3 13.6 0 5.9-2.4 10-7.6 13.4-2.8 1.8-4.5 1.9-31.1 2.1-16.4.1-29.5-.2-31.5-.8-10.3-2.9-14.1-17.7-6.6-25.3zm61.4 94.5c-53.9 0-55.8.2-60.2 4.1-3.5 3.1-5.7 9.4-5.1 13.9.7 4.7 4.8 10.1 9.2 12 2.2 1 14.1 1.7 56.3 1.2l47.9-.6 9.2-1.5c9-5.1 10.5-17.4 3.1-24.4-5.3-4.7-5-4.7-60.4-4.7zm223.4 130.1c-3.5 28.4-23 50.4-51.1 57.5-7.2 1.8-9.7 1.9-172.9 1.8-157.8 0-165.9-.1-172-1.8-8.4-2.2-15.6-5.5-22.3-10-5.6-3.8-13.9-11.8-17-16.4-3.8-5.6-8.2-15.3-10-22C.1 423 0 420.3 0 256.3 0 93.2 0 89.7 1.8 82.6 8.1 57.9 27.7 39 53 33.4c7.3-1.6 332.1-1.9 340-.3 21.2 4.3 37.9 17.1 47.6 36.4 7.7 15.3 7-1.5 7.3 180.6.2 115.8 0 164.5-.7 170.5zm-85.4-185.2c-1.1-5-4.2-9.6-7.7-11.5-1.1-.6-8-1.3-15.5-1.7-12.4-.6-13.8-.8-17.8-3.1-6.2-3.6-7.9-7.6-8-18.3 0-20.4-8.5-39.4-25.3-56.5-12-12.2-25.3-20.5-40.6-25.1-3.6-1.1-11.8-1.5-39.2-1.8-42.9-.5-52.5.4-67.1 6.2-27 10.7-46.3 33.4-53.4 62.4-1.3 5.4-1.6 14.2-1.9 64.3-.4 62.8 0 72.1 4 84.5 9.7 30.7 37.1 53.4 64.6 58.4 9.2 1.7 122.2 2.1 133.7.5 20.1-2.7 35.9-10.8 50.7-25.9 10.7-10.9 17.4-22.8 21.8-38.5 3.2-10.9 2.9-88.4 1.7-93.9z' /%3E %3C/svg%3E") } a[href*='codepen.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M502.285 159.704l-234-156c-7.987-4.915-16.511-4.96-24.571 0l-234 156C3.714 163.703 0 170.847 0 177.989v155.999c0 7.143 3.714 14.286 9.715 18.286l234 156.022c7.987 4.915 16.511 4.96 24.571 0l234-156.022c6-3.999 9.715-11.143 9.715-18.286V177.989c-.001-7.142-3.715-14.286-9.716-18.285zM278 63.131l172.286 114.858-76.857 51.429L278 165.703V63.131zm-44 0v102.572l-95.429 63.715-76.857-51.429L234 63.131zM44 219.132l55.143 36.857L44 292.846v-73.714zm190 229.715L61.714 333.989l76.857-51.429L234 346.275v102.572zm22-140.858l-77.715-52 77.715-52 77.715 52-77.715 52zm22 140.858V346.275l95.429-63.715 76.857 51.429L278 448.847zm190-156.001l-55.143-36.857L468 219.132v73.714z' /%3E %3C/svg%3E") }

@@ -7,17 +7,17 @@ a[href*='deviantart.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 320 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M320 93.2l-98.2 179.1 7.4 9.5H320v127.7H159.1l-13.5 9.2-43.7 84c-.3 0-8.6 8.6-9.2 9.2H0v-93.2l93.2-179.4-7.4-9.2H0V102.5h156l13.5-9.2 43.7-84c.3 0 8.6-8.6 9.2-9.2H320v93.1z' /%3E %3C/svg%3E") }

a[href*='digg.chrome']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M81.7 172.3H0v174.4h132.7V96h-51v76.3zm0 133.4H50.9v-92.3h30.8v92.3zm297.2-133.4v174.4h81.8v28.5h-81.8V416H512V172.3H378.9zm81.8 133.4h-30.8v-92.3h30.8v92.3zm-235.6 41h82.1v28.5h-82.1V416h133.3V172.3H225.1v174.4zm51.2-133.3h30.8v92.3h-30.8v-92.3zM153.3 96h51.3v51h-51.3V96zm0 76.3h51.3v174.4h-51.3V172.3z' /%3E %3C/svg%3E") } a[href*='discordapp.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 640 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M524.531,69.836a1.5,1.5,0,0,0-.764-.7A485.065,485.065,0,0,0,404.081,32.03a1.816,1.816,0,0,0-1.923.91,337.461,337.461,0,0,0-14.9,30.6,447.848,447.848,0,0,0-134.426,0,309.541,309.541,0,0,0-15.135-30.6,1.89,1.89,0,0,0-1.924-.91A483.689,483.689,0,0,0,116.085,69.137a1.712,1.712,0,0,0-.788.676C39.068,183.651,18.186,294.69,28.43,404.354a2.016,2.016,0,0,0,.765,1.375A487.666,487.666,0,0,0,176.02,479.918a1.9,1.9,0,0,0,2.063-.676A348.2,348.2,0,0,0,208.12,430.4a1.86,1.86,0,0,0-1.019-2.588,321.173,321.173,0,0,1-45.868-21.853,1.885,1.885,0,0,1-.185-3.126c3.082-2.309,6.166-4.711,9.109-7.137a1.819,1.819,0,0,1,1.9-.256c96.229,43.917,200.41,43.917,295.5,0a1.812,1.812,0,0,1,1.924.233c2.944,2.426,6.027,4.851,9.132,7.16a1.884,1.884,0,0,1-.162,3.126,301.407,301.407,0,0,1-45.89,21.83,1.875,1.875,0,0,0-1,2.611,391.055,391.055,0,0,0,30.014,48.815,1.864,1.864,0,0,0,2.063.7A486.048,486.048,0,0,0,610.7,405.729a1.882,1.882,0,0,0,.765-1.352C623.729,277.594,590.933,167.465,524.531,69.836ZM222.491,337.58c-28.972,0-52.844-26.587-52.844-59.239S193.056,219.1,222.491,219.1c29.665,0,53.306,26.82,52.843,59.239C275.334,310.993,251.924,337.58,222.491,337.58Zm195.38,0c-28.971,0-52.843-26.587-52.843-59.239S388.437,219.1,417.871,219.1c29.667,0,53.307,26.82,52.844,59.239C470.715,310.993,447.538,337.58,417.871,337.58Z' /%3E %3C/svg%3E") } a[href*='dropbox.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 528 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M264.4 116.3l-132 84.3 132 84.3-132 84.3L0 284.1l132.3-84.3L0 116.3 132.3 32l132.1 84.3zM131.6 395.7l132-84.3 132 84.3-132 84.3-132-84.3zm132.8-111.6l132-84.3-132-83.6L395.7 32 528 116.3l-132.3 84.3L528 284.8l-132.3 84.3-131.3-85z' /%3E %3C/svg%3E") } -a[href^=mailto]:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z' /%3E %3C/svg%3E") } +a[href^='mailto']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4L236.8 313.6c11.4 8.5 27 8.5 38.4 0L492.8 150.4c12.1-9.1 19.2-23.3 19.2-38.4c0-26.5-21.5-48-48-48H48zM0 176V384c0 35.3 28.7 64 64 64H448c35.3 0 64-28.7 64-64V176L294.4 339.2c-22.8 17.1-54 17.1-76.8 0L0 176z' /%3E %3C/svg%3E") } a[href*='etsy.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M384 348c-1.75 10.75-13.75 110-15.5 132-117.879-4.299-219.895-4.743-368.5 0v-25.5c45.457-8.948 60.627-8.019 61-35.25 1.793-72.322 3.524-244.143 0-322-1.029-28.46-12.13-26.765-61-36v-25.5c73.886 2.358 255.933 8.551 362.999-3.75-3.5 38.25-7.75 126.5-7.75 126.5H332C320.947 115.665 313.241 68 277.25 68h-137c-10.25 0-10.75 3.5-10.75 9.75V241.5c58 .5 88.5-2.5 88.5-2.5 29.77-.951 27.56-8.502 40.75-65.251h25.75c-4.407 101.351-3.91 61.829-1.75 160.25H257c-9.155-40.086-9.065-61.045-39.501-61.5 0 0-21.5-2-88-2v139c0 26 14.25 38.25 44.25 38.25H263c63.636 0 66.564-24.996 98.751-99.75H384z' /%3E %3C/svg%3E") } a[href*='facebook.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M504 256C504 119 393 8 256 8S8 119 8 256c0 123.78 90.69 226.38 209.25 245V327.69h-63V256h63v-54.64c0-62.15 37-96.48 93.67-96.48 27.14 0 55.52 4.84 55.52 4.84v61h-31.28c-30.8 0-40.41 19.12-40.41 38.73V256h68.78l-11 71.69h-57.78V501C413.31 482.38 504 379.78 504 256z' /%3E %3C/svg%3E") } a[href$='.pdf']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M0 64C0 28.7 28.7 0 64 0H224V128c0 17.7 14.3 32 32 32H384V304H176c-35.3 0-64 28.7-64 64V512H64c-35.3 0-64-28.7-64-64V64zm384 64H256V0L384 128zM176 352h32c30.9 0 56 25.1 56 56s-25.1 56-56 56H192v32c0 8.8-7.2 16-16 16s-16-7.2-16-16V448 368c0-8.8 7.2-16 16-16zm32 80c13.3 0 24-10.7 24-24s-10.7-24-24-24H192v48h16zm96-80h32c26.5 0 48 21.5 48 48v64c0 26.5-21.5 48-48 48H304c-8.8 0-16-7.2-16-16V368c0-8.8 7.2-16 16-16zm32 128c8.8 0 16-7.2 16-16V400c0-8.8-7.2-16-16-16H320v96h16zm80-112c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v32h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H448v48c0 8.8-7.2 16-16 16s-16-7.2-16-16V432 368z' /%3E %3C/svg%3E") } a[href$='.zip']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 384 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M64 0C28.7 0 0 28.7 0 64V448c0 35.3 28.7 64 64 64H320c35.3 0 64-28.7 64-64V160H256c-17.7 0-32-14.3-32-32V0H64zM256 0V128H384L256 0zM96 48c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm0 64c0-8.8 7.2-16 16-16h32c8.8 0 16 7.2 16 16s-7.2 16-16 16H112c-8.8 0-16-7.2-16-16zm-6.3 71.8c3.7-14 16.4-23.8 30.9-23.8h14.8c14.5 0 27.2 9.7 30.9 23.8l23.5 88.2c1.4 5.4 2.1 10.9 2.1 16.4c0 35.2-28.8 63.7-64 63.7s-64-28.5-64-63.7c0-5.5 .7-11.1 2.1-16.4l23.5-88.2zM112 336c-8.8 0-16 7.2-16 16s7.2 16 16 16h32c8.8 0 16-7.2 16-16s-7.2-16-16-16H112z' /%3E %3C/svg%3E") } a[href*='flickr.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM144.5 319c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5zm159 0c-35.1 0-63.5-28.4-63.5-63.5s28.4-63.5 63.5-63.5 63.5 28.4 63.5 63.5-28.4 63.5-63.5 63.5z' /%3E %3C/svg%3E") } a[href*='foursquare.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 368 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M323.1 3H49.9C12.4 3 0 31.3 0 49.1v433.8c0 20.3 12.1 27.7 18.2 30.1 6.2 2.5 22.8 4.6 32.9-7.1C180 356.5 182.2 354 182.2 354c3.1-3.4 3.4-3.1 6.8-3.1h83.4c35.1 0 40.6-25.2 44.3-39.7l48.6-243C373.8 25.8 363.1 3 323.1 3zm-16.3 73.8l-11.4 59.7c-1.2 6.5-9.5 13.2-16.9 13.2H172.1c-12 0-20.6 8.3-20.6 20.3v13c0 12 8.6 20.6 20.6 20.6h90.4c8.3 0 16.6 9.2 14.8 18.2-1.8 8.9-10.5 53.8-11.4 58.8-.9 4.9-6.8 13.5-16.9 13.5h-73.5c-13.5 0-17.2 1.8-26.5 12.6 0 0-8.9 11.4-89.5 108.3-.9.9-1.8.6-1.8-.3V75.9c0-7.7 6.8-16.6 16.6-16.6h219c8.2 0 15.6 7.7 13.5 17.5z' /%3E %3C/svg%3E") } -a[href^=git]:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z' /%3E %3C/svg%3E") } +a[href^='git']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M216.29 158.39H137C97 147.9 6.51 150.63 6.51 233.18c0 30.09 15 51.23 35 61-25.1 23-37 33.85-37 49.21 0 11 4.47 21.14 17.89 26.81C8.13 383.61 0 393.35 0 411.65c0 32.11 28.05 50.82 101.63 50.82 70.75 0 111.79-26.42 111.79-73.18 0-58.66-45.16-56.5-151.63-63l13.43-21.55c27.27 7.58 118.7 10 118.7-67.89 0-18.7-7.73-31.71-15-41.07l37.41-2.84zm-63.42 241.9c0 32.06-104.89 32.1-104.89 2.43 0-8.14 5.27-15 10.57-21.54 77.71 5.3 94.32 3.37 94.32 19.11zm-50.81-134.58c-52.8 0-50.46-71.16 1.2-71.16 49.54 0 50.82 71.16-1.2 71.16zm133.3 100.51v-32.1c26.75-3.66 27.24-2 27.24-11V203.61c0-8.5-2.05-7.38-27.24-16.26l4.47-32.92H324v168.71c0 6.51.4 7.32 6.51 8.14l20.73 2.84v32.1zm52.45-244.31c-23.17 0-36.59-13.43-36.59-36.61s13.42-35.77 36.59-35.77c23.58 0 37 12.62 37 35.77s-13.42 36.61-37 36.61zM512 350.46c-17.49 8.53-43.1 16.26-66.28 16.26-48.38 0-66.67-19.5-66.67-65.46V194.75c0-5.42 1.05-4.06-31.71-4.06V154.5c35.78-4.07 50-22 54.47-66.27h38.63c0 65.83-1.34 61.81 3.26 61.81H501v40.65h-60.56v97.15c0 6.92-4.92 51.41 60.57 26.84z' /%3E %3C/svg%3E") } a[href*='github.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z' /%3E %3C/svg%3E") } a[href*='gitlab.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M503.5 204.6L502.8 202.8L433.1 21.02C431.7 17.45 429.2 14.43 425.9 12.38C423.5 10.83 420.8 9.865 417.9 9.57C415 9.275 412.2 9.653 409.5 10.68C406.8 11.7 404.4 13.34 402.4 15.46C400.5 17.58 399.1 20.13 398.3 22.9L351.3 166.9H160.8L113.7 22.9C112.9 20.13 111.5 17.59 109.6 15.47C107.6 13.35 105.2 11.72 102.5 10.7C99.86 9.675 96.98 9.295 94.12 9.587C91.26 9.878 88.51 10.83 86.08 12.38C82.84 14.43 80.33 17.45 78.92 21.02L9.267 202.8L8.543 204.6C-1.484 230.8-2.72 259.6 5.023 286.6C12.77 313.5 29.07 337.3 51.47 354.2L51.74 354.4L52.33 354.8L158.3 434.3L210.9 474L242.9 498.2C246.6 500.1 251.2 502.5 255.9 502.5C260.6 502.5 265.2 500.1 268.9 498.2L300.9 474L353.5 434.3L460.2 354.4L460.5 354.1C482.9 337.2 499.2 313.5 506.1 286.6C514.7 259.6 513.5 230.8 503.5 204.6z' /%3E %3C/svg%3E") } -a[href^=http]:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z' /%3E %3C/svg%3E") } +a[href^='http']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M352 256c0 22.2-1.2 43.6-3.3 64H163.3c-2.2-20.4-3.3-41.8-3.3-64s1.2-43.6 3.3-64H348.7c2.2 20.4 3.3 41.8 3.3 64zm28.8-64H503.9c5.3 20.5 8.1 41.9 8.1 64s-2.8 43.5-8.1 64H380.8c2.1-20.6 3.2-42 3.2-64s-1.1-43.4-3.2-64zm112.6-32H376.7c-10-63.9-29.8-117.4-55.3-151.6c78.3 20.7 142 77.5 171.9 151.6zm-149.1 0H167.7c6.1-36.4 15.5-68.6 27-94.7c10.5-23.6 22.2-40.7 33.5-51.5C239.4 3.2 248.7 0 256 0s16.6 3.2 27.8 13.8c11.3 10.8 23 27.9 33.5 51.5c11.6 26 20.9 58.2 27 94.7zm-209 0H18.6C48.6 85.9 112.2 29.1 190.6 8.4C165.1 42.6 145.3 96.1 135.3 160zM8.1 192H131.2c-2.1 20.6-3.2 42-3.2 64s1.1 43.4 3.2 64H8.1C2.8 299.5 0 278.1 0 256s2.8-43.5 8.1-64zM194.7 446.6c-11.6-26-20.9-58.2-27-94.6H344.3c-6.1 36.4-15.5 68.6-27 94.6c-10.5 23.6-22.2 40.7-33.5 51.5C272.6 508.8 263.3 512 256 512s-16.6-3.2-27.8-13.8c-11.3-10.8-23-27.9-33.5-51.5zM135.3 352c10 63.9 29.8 117.4 55.3 151.6C112.2 482.9 48.6 426.1 18.6 352H135.3zm358.1 0c-30 74.1-93.6 130.9-171.9 151.6c25.5-34.2 45.2-87.7 55.3-151.6H493.4z' /%3E %3C/svg%3E") } a[href*='google.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 488 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M488 261.8C488 403.3 391.1 504 248 504 110.8 504 0 393.2 0 256S110.8 8 248 8c66.8 0 123 24.5 166.3 64.9l-67.5 64.9C258.5 52.6 94.3 116.6 94.3 256c0 86.5 69.1 156.6 153.7 156.6 98.2 0 135-70.4 140.8-106.9H248v-85.3h236.1c2.3 12.7 3.9 24.9 3.9 41.4z' /%3E %3C/svg%3E") } a[href*='plus.google.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M256,8C119.1,8,8,119.1,8,256S119.1,504,256,504,504,392.9,504,256,392.9,8,256,8ZM185.3,380a124,124,0,0,1,0-248c31.3,0,60.1,11,83,32.3l-33.6,32.6c-13.2-12.9-31.3-19.1-49.4-19.1-42.9,0-77.2,35.5-77.2,78.1S142.3,334,185.3,334c32.6,0,64.9-19.1,70.1-53.3H185.3V238.1H302.2a109.2,109.2,0,0,1,1.9,20.7c0,70.8-47.5,121.2-118.8,121.2ZM415.5,273.8v35.5H380V273.8H344.5V238.3H380V202.8h35.5v35.5h35.2v35.5Z' /%3E %3C/svg%3E") } a[href*='news.ycombinator.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M0 32v448h448V32H0zm21.2 197.2H21c.1-.1.2-.3.3-.4 0 .1 0 .3-.1.4zm218 53.9V384h-31.4V281.3L128 128h37.3c52.5 98.3 49.2 101.2 59.3 125.6 12.3-27 5.8-24.4 60.6-125.6H320l-80.8 155.1z' /%3E %3C/svg%3E") }

@@ -26,11 +26,11 @@ a[href*='instagram.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M224.1 141c-63.6 0-114.9 51.3-114.9 114.9s51.3 114.9 114.9 114.9S339 319.5 339 255.9 287.7 141 224.1 141zm0 189.6c-41.1 0-74.7-33.5-74.7-74.7s33.5-74.7 74.7-74.7 74.7 33.5 74.7 74.7-33.6 74.7-74.7 74.7zm146.4-194.3c0 14.9-12 26.8-26.8 26.8-14.9 0-26.8-12-26.8-26.8s12-26.8 26.8-26.8 26.8 12 26.8 26.8zm76.1 27.2c-1.7-35.9-9.9-67.7-36.2-93.9-26.2-26.2-58-34.4-93.9-36.2-37-2.1-147.9-2.1-184.9 0-35.8 1.7-67.6 9.9-93.9 36.1s-34.4 58-36.2 93.9c-2.1 37-2.1 147.9 0 184.9 1.7 35.9 9.9 67.7 36.2 93.9s58 34.4 93.9 36.2c37 2.1 147.9 2.1 184.9 0 35.9-1.7 67.7-9.9 93.9-36.2 26.2-26.2 34.4-58 36.2-93.9 2.1-37 2.1-147.8 0-184.8zM398.8 388c-7.8 19.6-22.9 34.7-42.6 42.6-29.5 11.7-99.5 9-132.1 9s-102.7 2.6-132.1-9c-19.6-7.8-34.7-22.9-42.6-42.6-11.7-29.5-9-99.5-9-132.1s-2.6-102.7 9-132.1c7.8-19.6 22.9-34.7 42.6-42.6 29.5-11.7 99.5-9 132.1-9s102.7-2.6 132.1 9c19.6 7.8 34.7 22.9 42.6 42.6 11.7 29.5 9 99.5 9 132.1s2.7 102.7-9 132.1z' /%3E %3C/svg%3E") }

a[href*='jsfiddle.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 576 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M510.634 237.462c-4.727-2.621-5.664-5.748-6.381-10.776-2.352-16.488-3.539-33.619-9.097-49.095-35.895-99.957-153.99-143.386-246.849-91.646-27.37 15.25-48.971 36.369-65.493 63.903-3.184-1.508-5.458-2.71-7.824-3.686-30.102-12.421-59.049-10.121-85.331 9.167-25.531 18.737-36.422 44.548-32.676 76.408.355 3.025-1.967 7.621-4.514 9.545-39.712 29.992-56.031 78.065-41.902 124.615 13.831 45.569 57.514 79.796 105.608 81.433 30.291 1.031 60.637.546 90.959.539 84.041-.021 168.09.531 252.12-.48 52.664-.634 96.108-36.873 108.212-87.293 11.54-48.074-11.144-97.3-56.832-122.634zm21.107 156.88c-18.23 22.432-42.343 35.253-71.28 35.65-56.874.781-113.767.23-170.652.23 0 .7-163.028.159-163.728.154-43.861-.332-76.739-19.766-95.175-59.995-18.902-41.245-4.004-90.848 34.186-116.106 9.182-6.073 12.505-11.566 10.096-23.136-5.49-26.361 4.453-47.956 26.42-62.981 22.987-15.723 47.422-16.146 72.034-3.083 10.269 5.45 14.607 11.564 22.198-2.527 14.222-26.399 34.557-46.727 60.671-61.294 97.46-54.366 228.37 7.568 230.24 132.697.122 8.15 2.412 12.428 9.848 15.894 57.56 26.829 74.456 96.122 35.142 144.497zm-87.789-80.499c-5.848 31.157-34.622 55.096-66.666 55.095-16.953-.001-32.058-6.545-44.079-17.705-27.697-25.713-71.141-74.98-95.937-93.387-20.056-14.888-41.99-12.333-60.272 3.782-49.996 44.071 15.859 121.775 67.063 77.188 4.548-3.96 7.84-9.543 12.744-12.844 8.184-5.509 20.766-.884 13.168 10.622-17.358 26.284-49.33 38.197-78.863 29.301-28.897-8.704-48.84-35.968-48.626-70.179 1.225-22.485 12.364-43.06 35.414-55.965 22.575-12.638 46.369-13.146 66.991 2.474C295.68 280.7 320.467 323.97 352.185 343.47c24.558 15.099 54.254 7.363 68.823-17.506 28.83-49.209-34.592-105.016-78.868-63.46-3.989 3.744-6.917 8.932-11.41 11.72-10.975 6.811-17.333-4.113-12.809-10.353 20.703-28.554 50.464-40.44 83.271-28.214 31.429 11.714 49.108 44.366 42.76 78.186z' /%3E %3C/svg%3E") } a[href*='kickstarter.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M400 480H48c-26.4 0-48-21.6-48-48V80c0-26.4 21.6-48 48-48h352c26.4 0 48 21.6 48 48v352c0 26.4-21.6 48-48 48zM199.6 178.5c0-30.7-17.6-45.1-39.7-45.1-25.8 0-40 19.8-40 44.5v154.8c0 25.8 13.7 45.6 40.5 45.6 21.5 0 39.2-14 39.2-45.6v-41.8l60.6 75.7c12.3 14.9 39 16.8 55.8 0 14.6-15.1 14.8-36.8 4-50.4l-49.1-62.8 40.5-58.7c9.4-13.5 9.5-34.5-5.6-49.1-16.4-15.9-44.6-17.3-61.4 7l-44.8 64.7v-38.8z' /%3E %3C/svg%3E") } a[href*='linkedin.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M416 32H31.9C14.3 32 0 46.5 0 64.3v383.4C0 465.5 14.3 480 31.9 480H416c17.6 0 32-14.5 32-32.3V64.3c0-17.8-14.4-32.3-32-32.3zM135.4 416H69V202.2h66.5V416zm-33.2-243c-21.3 0-38.5-17.3-38.5-38.5S80.9 96 102.2 96c21.2 0 38.5 17.3 38.5 38.5 0 21.3-17.2 38.5-38.5 38.5zm282.1 243h-66.4V312c0-24.8-.5-56.7-34.5-56.7-34.6 0-39.9 27-39.9 54.9V416h-66.4V202.2h63.7v29.2h.9c8.9-16.8 30.6-34.5 62.9-34.5 67.2 0 79.7 44.3 79.7 101.9V416z' /%3E %3C/svg%3E") } -a[href^=magnet]:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M0 160v96C0 379.7 100.3 480 224 480s224-100.3 224-224V160H320v96c0 53-43 96-96 96s-96-43-96-96V160H0zm0-32H128V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64zm320 0H448V64c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32v64z' /%3E %3C/svg%3E") } +a[href^='magnet']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M0 160v96C0 379.7 100.3 480 224 480s224-100.3 224-224V160H320v96c0 53-43 96-96 96s-96-43-96-96V160H0zm0-32H128V64c0-17.7-14.3-32-32-32H32C14.3 32 0 46.3 0 64v64zm320 0H448V64c0-17.7-14.3-32-32-32H352c-17.7 0-32 14.3-32 32v64z' /%3E %3C/svg%3E") } a[href*='mastodon.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z' /%3E %3C/svg%3E") } a[href*='medium.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 640 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M180.5,74.262C80.813,74.262,0,155.633,0,256S80.819,437.738,180.5,437.738,361,356.373,361,256,280.191,74.262,180.5,74.262Zm288.25,10.646c-49.845,0-90.245,76.619-90.245,171.095s40.406,171.1,90.251,171.1,90.251-76.619,90.251-171.1H559C559,161.5,518.6,84.908,468.752,84.908Zm139.506,17.821c-17.526,0-31.735,68.628-31.735,153.274s14.2,153.274,31.735,153.274S640,340.631,640,256C640,171.351,625.785,102.729,608.258,102.729Z' /%3E %3C/svg%3E") } a[href*='npmjs.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 576 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M288 288h-32v-64h32v64zm288-128v192H288v32H160v-32H0V160h576zm-416 32H32v128h64v-96h32v96h32V192zm160 0H192v160h64v-32h64V192zm224 0H352v128h64v-96h32v96h32v-96h32v96h32V192z' /%3E %3C/svg%3E") } -a[href^=tel]:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z' /%3E %3C/svg%3E") } +a[href^='tel']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M164.9 24.6c-7.7-18.6-28-28.5-47.4-23.2l-88 24C12.1 30.2 0 46 0 64C0 311.4 200.6 512 448 512c18 0 33.8-12.1 38.6-29.5l24-88c5.3-19.4-4.6-39.7-23.2-47.4l-96-40c-16.3-6.8-35.2-2.1-46.3 11.6L304.7 368C234.3 334.7 177.3 277.7 144 207.3L193.3 167c13.7-11.2 18.4-30 11.6-46.3l-40-96z' /%3E %3C/svg%3E") } a[href*='pinterest.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 496 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M496 256c0 137-111 248-248 248-25.6 0-50.2-3.9-73.4-11.1 10.1-16.5 25.2-43.5 30.8-65 3-11.6 15.4-59 15.4-59 8.1 15.4 31.7 28.5 56.8 28.5 74.8 0 128.7-68.8 128.7-154.3 0-81.9-66.9-143.2-152.9-143.2-107 0-163.9 71.8-163.9 150.1 0 36.4 19.4 81.7 50.3 96.1 4.7 2.2 7.2 1.2 8.3-3.3.8-3.4 5-20.3 6.9-28.1.6-2.5.3-4.7-1.7-7.1-10.1-12.5-18.3-35.3-18.3-56.6 0-54.7 41.4-107.6 112-107.6 60.9 0 103.6 41.5 103.6 100.9 0 67.1-33.9 113.6-78 113.6-24.3 0-42.6-20.1-36.7-44.8 7-29.5 20.5-61.3 20.5-82.6 0-19-10.2-34.9-31.4-34.9-24.9 0-44.9 25.7-44.9 60.2 0 22 7.4 36.8 7.4 36.8s-24.5 103.8-29 123.2c-5 21.4-3 51.6-.9 71.2C65.4 450.9 0 361.1 0 256 0 119 111 8 248 8s248 111 248 248z' /%3E %3C/svg%3E") } a[href*='quora.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M440.5 386.7h-29.3c-1.5 13.5-10.5 30.8-33 30.8-20.5 0-35.3-14.2-49.5-35.8 44.2-34.2 74.7-87.5 74.7-153C403.5 111.2 306.8 32 205 32 105.3 32 7.3 111.7 7.3 228.7c0 134.1 131.3 221.6 249 189C276 451.3 302 480 351.5 480c81.8 0 90.8-75.3 89-93.3zM297 329.2C277.5 300 253.3 277 205.5 277c-30.5 0-54.3 10-69 22.8l12.2 24.3c6.2-3 13-4 19.8-4 35.5 0 53.7 30.8 69.2 61.3-10 3-20.7 4.2-32.7 4.2-75 0-107.5-53-107.5-156.7C97.5 124.5 130 71 205 71c76.2 0 108.7 53.5 108.7 157.7.1 41.8-5.4 75.6-16.7 100.5z' /%3E %3C/svg%3E") } a[href*='reddit.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M201.5 305.5c-13.8 0-24.9-11.1-24.9-24.6 0-13.8 11.1-24.9 24.9-24.9 13.6 0 24.6 11.1 24.6 24.9 0 13.6-11.1 24.6-24.6 24.6zM504 256c0 137-111 248-248 248S8 393 8 256 119 8 256 8s248 111 248 248zm-132.3-41.2c-9.4 0-17.7 3.9-23.8 10-22.4-15.5-52.6-25.5-86.1-26.6l17.4-78.3 55.4 12.5c0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.3 24.9-24.9s-11.1-24.9-24.9-24.9c-9.7 0-18 5.8-22.1 13.8l-61.2-13.6c-3-.8-6.1 1.4-6.9 4.4l-19.1 86.4c-33.2 1.4-63.1 11.3-85.5 26.8-6.1-6.4-14.7-10.2-24.1-10.2-34.9 0-46.3 46.9-14.4 62.8-1.1 5-1.7 10.2-1.7 15.5 0 52.6 59.2 95.2 132 95.2 73.1 0 132.3-42.6 132.3-95.2 0-5.3-.6-10.8-1.9-15.8 31.3-16 19.8-62.5-14.9-62.5zM302.8 331c-18.2 18.2-76.1 17.9-93.6 0-2.2-2.2-6.1-2.2-8.3 0-2.5 2.5-2.5 6.4 0 8.6 22.8 22.8 87.3 22.8 110.2 0 2.5-2.2 2.5-6.1 0-8.6-2.2-2.2-6.1-2.2-8.3 0zm7.7-75c-13.6 0-24.6 11.1-24.6 24.9 0 13.6 11.1 24.6 24.6 24.6 13.8 0 24.9-11.1 24.9-24.6 0-13.8-11-24.9-24.9-24.9z' /%3E %3C/svg%3E") }

@@ -44,4 +44,4 @@ a[href*='vimeo.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 448 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M403.2 32H44.8C20.1 32 0 52.1 0 76.8v358.4C0 459.9 20.1 480 44.8 480h358.4c24.7 0 44.8-20.1 44.8-44.8V76.8c0-24.7-20.1-44.8-44.8-44.8zM377 180.8c-1.4 31.5-23.4 74.7-66 129.4-44 57.2-81.3 85.8-111.7 85.8-18.9 0-34.8-17.4-47.9-52.3-25.5-93.3-36.4-148-57.4-148-2.4 0-10.9 5.1-25.4 15.2l-15.2-19.6c37.3-32.8 72.9-69.2 95.2-71.2 25.2-2.4 40.7 14.8 46.5 51.7 20.7 131.2 29.9 151 67.6 91.6 13.5-21.4 20.8-37.7 21.8-48.9 3.5-33.2-25.9-30.9-45.8-22.4 15.9-52.1 46.3-77.4 91.2-76 33.3.9 49 22.5 47.1 64.7z' /%3E %3C/svg%3E") }

a[href*='wikipedia.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 640 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M640 51.2l-.3 12.2c-28.1.8-45 15.8-55.8 40.3-25 57.8-103.3 240-155.3 358.6H415l-81.9-193.1c-32.5 63.6-68.3 130-99.2 193.1-.3.3-15 0-15-.3C172 352.3 122.8 243.4 75.8 133.4 64.4 106.7 26.4 63.4.2 63.7c0-3.1-.3-10-.3-14.2h161.9v13.9c-19.2 1.1-52.8 13.3-43.3 34.2 21.9 49.7 103.6 240.3 125.6 288.6 15-29.7 57.8-109.2 75.3-142.8-13.9-28.3-58.6-133.9-72.8-160-9.7-17.8-36.1-19.4-55.8-19.7V49.8l142.5.3v13.1c-19.4.6-38.1 7.8-29.4 26.1 18.9 40 30.6 68.1 48.1 104.7 5.6-10.8 34.7-69.4 48.1-100.8 8.9-20.6-3.9-28.6-38.6-29.4.3-3.6 0-10.3.3-13.6 44.4-.3 111.1-.3 123.1-.6v13.6c-22.5.8-45.8 12.8-58.1 31.7l-59.2 122.8c6.4 16.1 63.3 142.8 69.2 156.7L559.2 91.8c-8.6-23.1-36.4-28.1-47.2-28.3V49.6l127.8 1.1.2.5z' /%3E %3C/svg%3E") } a[href*='wordpress.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z' /%3E %3C/svg%3E") } a[href*='yahoo.']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 512 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M223.69,141.06,167,284.23,111,141.06H14.93L120.76,390.19,82.19,480h94.17L317.27,141.06Zm105.4,135.79a58.22,58.22,0,1,0,58.22,58.22A58.22,58.22,0,0,0,329.09,276.85ZM394.65,32l-93,223.47H406.44L499.07,32Z' /%3E %3C/svg%3E") } -a[href*='youtube.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 576 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z' /%3E %3C/svg%3E") }+a[href*='youtube.com']:before { background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 576 512' xmlns='http://www.w3.org/2000/svg'%3E %3Cpath fill='%234183c4' d='M549.655 124.083c-6.281-23.65-24.787-42.276-48.284-48.597C458.781 64 288 64 288 64S117.22 64 74.629 75.486c-23.497 6.322-42.003 24.947-48.284 48.597-11.412 42.867-11.412 132.305-11.412 132.305s0 89.438 11.412 132.305c6.281 23.65 24.787 41.5 48.284 47.821C117.22 448 288 448 288 448s170.78 0 213.371-11.486c23.497-6.321 42.003-24.171 48.284-47.821 11.412-42.867 11.412-132.305 11.412-132.305s0-89.438-11.412-132.305zm-317.51 213.508V175.185l142.739 81.205-142.739 81.201z' /%3E %3C/svg%3E") }
M src/hastyscribepkg/markdown.nimsrc/hastyscribepkg/markdown.nim

@@ -106,17 +106,16 @@ MKD_FENCEDCODE* = 0x02000000

MKD_IDANCHOR* = 0x04000000 MKD_GITHUBTAGS* = 0x08000000 MKD_URLENCODEDANCHOR* = 0x10000000 - MKD_HTML5ANCHOR* = 0x10000000 MKD_LATEX* = 0x40000000 MKD_EMBED* = MKD_NOLINKS or MKD_NOIMAGE or MKD_TAGTEXT ## High Level API import - pegs + std/pegs const - DefaultFlags = MKD_TOC or MKD_1_COMPAT or MKD_EXTRA_FOOTNOTE or MKD_DLEXTRA or MKD_FENCEDCODE or MKD_GITHUBTAGS or MKD_HTML5ANCHOR or MKD_LATEX + DefaultFlags = MKD_TOC or MKD_1_COMPAT or MKD_EXTRA_FOOTNOTE or MKD_DLEXTRA or MKD_FENCEDCODE or MKD_GITHUBTAGS or MKD_URLENCODEDANCHOR or MKD_LATEX type TMDMetaData* = object title*: string
M src/hastyscribepkg/niftylogger.nimsrc/hastyscribepkg/niftylogger.nim

@@ -1,7 +1,7 @@

import - logging, - strutils, - terminal, + std/logging, + std/strutils, + std/terminal, std/exitprocs if isatty(stdin):
M src/hastyscribepkg/utils.nimsrc/hastyscribepkg/utils.nim

@@ -1,8 +1,8 @@

import - base64, - os, - strutils, - pegs + std/base64, + std/os, + std/strutils, + std/pegs import consts

@@ -14,8 +14,19 @@ proc style_link_tag*(css: string): string =

result = "<link rel=\"stylesheet\" href=\"$1\"/>" % [css] proc encode_image*(contents, format: string): string = - let enc_contents = contents.encode - return "data:image/$format;base64,$enc_contents" % ["format", format, "enc_contents", enc_contents] + if format == "svg": + let encoded_svg = contents + .replace("\"", "'") + .replace("%", "%25") + .replace("#", "%23") + .replace("{", "%7B") + .replace("}", "%7D") + .replace("<", "%3C") + .replace(">", "%3E") + .replace(" ", "%20") + return "data:image/svg+xml,$#" % [encoded_svg] + else: + return "data:image/$format;base64,$enc_contents" % ["format", format, "enc_contents", contents.encode] proc encode_image_file*(file, format: string): string = if (file.fileExists):

@@ -38,26 +49,3 @@ result = (watermark_style % [img]).style_tag

proc add_jump_to_top_links*(document: string): string = result = document.replacef(peg"{'</h' [23456] '>'}", "<a href=\"#document-top\" title=\"Go to top\"></a>$1") - -proc encode_font*(font, format: string): string = - let enc_contents = font.encode - return "data:application/$format;charset=utf-8;base64,$enc_contents" % ["format", format, "enc_contents", enc_contents] - -proc create_font_face*(font, family, style: string, weight: int, embed=true): string= - var font_src = "" - if embed: - font_src = encode_font(font, "x-font-woff") - else: - font_src = font - return """ - @font-face { - font-family:"$family"; - src:url($font) format('woff'); - font-style:$style; - font-weight:$weight; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; - } - """ % ["family", family, "font", font_src, "style", style, "weight", $weight] - -
D src/nifty.json

@@ -1,54 +0,0 @@

-{ - "storage": "packages", - "commands": { - "build": { - "name+configure.sh": { - "pwd": "{{name}}", - "cmd": "./configure.sh && make" - } - }, - "install": { - "git+src": { - "cmd": "git clone {{src}} --depth 1" - }, - "git+src+tag": { - "cmd": "git clone --branch {{tag}} {{src}} --depth 1" - }, - "curl+src+name": { - "cmd": "curl {{src}} -o {{name}}" - }, - "_syntax": "install [<package>]", - "_description": "Installs the specified package (or all mapped packages) to the storage directory." - }, - "upgrade": { - "_syntax": "upgrade [<package>]", - "_description": "Upgrades the specified previously-installed package (or all packages).", - "git+name": { - "cmd": "git pull", - "pwd": "{{name}}" - }, - "curl+src+name": { - "cmd": "curl {{src}} -o {{name}}" - } - } - }, - "packages": { - "hastystyles": { - "name": "hastystyles", - "src": "https://github.com/h3rald/hastystyles.git", - "git": true - }, - "discount": { - "configure.sh": true, - "name": "discount", - "src": "https://github.com/Orc/discount.git", - "tag": "v2.2.2", - "git": true - }, - "niftylogger.nim": { - "name": "niftylogger.nim", - "src": "https://raw.githubusercontent.com/h3rald/nifty/master/lib/niftylogger.nim", - "curl": true - } - } -}