Last Update Friday, April 19, 2024 at 9:30:03 PM

EasyDoc Reference

๐Ÿ”ด๐Ÿ”ต


Configuration

๐Ÿ“„ Global Configuration

.env file
EASYDOC_LANG_FALLBACK=en
EASYDOC_TITLE_FALLBACK=Documentation

EASYDOC_BRAND_URL=https://grandgeorg.de
EASYDOC_BRAND_NAME=Grandgeorg
EASYDOC_BRAND_SECONDARY=Websolutions

EASYDOC_TOC_INCLUDELEVEL=[1,2,3,4]

# EASYDOC_DISABLE_BRAND=true
# EASYDOC_DISABLE_TOC=true
# EASYDOC_DISABLE_SITE_NAV=true
# EASYDOC_DISABLE_TAG_NAVIGATOR=true
# EASYDOC_DISABLE_NAVIGATION_BAR=true

๐Ÿ“„ Per page overrides in front matter

docs/*.md files
---
lang: de
title: Page Title
brandURL: https://domain.tld
brandName: My Project
brandSecondary: Reserach
tocIncludeLevel: [1, 2, 3, 4]
# disableBrand: true
# disableToc: true
# disableSiteNav: true
# disableTagNavigator: true
# disableNavigationBar: true
---
Configuration parameters
.env: EASYDOC_LANG_FALLBACK | frontmatter: lang
Language of the document and EsayDoc language (see lang/langs.js)
.env: EASYDOC_TITLE_FALLBACK | frontmatter: title
Title of the document
.env: EASYDOC_BRAND_URL | frontmatter: brandURL
URL the brand link should point to.
.env: EASYDOC_BRAND_NAME | frontmatter: brandName
Main brand claim string (default style in red).
.env: EASYDOC_BRAND_SECONDARY | frontmatter: brandSecondary
Secondary brand claim string (default style in blue).
.env: EASYDOC_TOC_INCLUDELEVEL | frontmatter: tocIncludeLevel
Header include level for table of contents.
.env: EASYDOC_DISABLE_BRAND | frontmatter: disableBrand
Disable brand claim and link in navbar and footer.
.env: EASYDOC_DISABLE_TOC | frontmatter: disableToc
Disable table of contents.
.env: EASYDOC_DISABLE_SITE_NAV | frontmatter: disableSiteNav
Disable site navigation.
.env: EASYDOC_DISABLE_TAG_NAVIGATOR | frontmatter: disableTagNavigator
Disable tag navigator.
.env: EASYDOC_DISABLE_NAVIGATION_BAR | frontmatter: disableNavigationBar
Completely disable the navigation bar.

๐Ÿ“„ Site Navigation

Define individual menu items for site navigation.

nav.js example file
exports.nav = [
  {
    "title": "Easydoc",
    "url": "easydoc.html",
  },
  {
    "title": "Some Title",
    "url": "some-URL",
  }
];
๐Ÿ–ฟ easydoc directory structure
๐Ÿ— easydoc
 โ”œ๐Ÿ—€ .git
 โ”œ๐Ÿ—€ .vscode
 โ”œ๐ŸŸข docs
 โ”‚ โ””๐Ÿ— index.md ๐Ÿ–ค
 โ”œ๐Ÿ—€ lang ๐Ÿ–Š๏ธ
 โ”œ๐Ÿ— manual ๐Ÿ“Œ
 โ”‚ โ”œ๐Ÿ—€ assets
 โ”‚ โ”œ๐Ÿ—€ img
 โ”‚ โ”œ๐Ÿ— easydoc.html
 โ”‚ โ”œ๐Ÿ— easydoc.md
 โ”‚ โ”œ๐Ÿ— easydoc-reference.html
 โ”‚ โ””๐Ÿ— easydoc-reference.md 
 โ”œ๐Ÿ—€ node_modules
 โ”œ๐Ÿ—€ setup ๐Ÿ–Š๏ธ
 โ”œ๐Ÿ—€ src ๐Ÿ–Š๏ธ
 โ”œ๐Ÿ—€ templates ๐Ÿ–Š๏ธ
 โ”œ๐Ÿ”ต www
 โ”‚ โ”œ๐Ÿ—€ assets ๐Ÿ–Š๏ธ
 โ”‚ โ”œ๐ŸŸข img
 โ”‚ โ”œ๐Ÿ— index.html ๐Ÿ–ค
 โ”‚ โ””๐Ÿ— meta.js ๐Ÿ–ค
 โ”œ๐Ÿ— .env โœ๏ธ
 โ”œ๐Ÿ— .gitignore
 โ”œ๐Ÿ— .hintrc
 โ”œ๐Ÿ— index.js ๐Ÿ–Š๏ธ
 โ”œ๐Ÿ— nav.js โœ๏ธ
 โ”œ๐Ÿ— nodemon.json
 โ”œ๐Ÿ— package.json
 โ”œ๐Ÿ— package-lock.json
 โ””๐Ÿ— webpack.config.js

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•โ”โ”ˆ๐Ÿ’ฌโ”ˆโ”โ•โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚  ๐ŸŸข input directories. Start creating files here.          โ”‚
โ”‚  ๐Ÿ”ต output directory. Html files will be generated here.   โ”‚
โ”‚  โœ๏ธ configure EasyDoc                                      โ”‚
โ”‚  ๐Ÿ–Š๏ธ change EasyDoc                                         โ”‚
โ”‚  ๐Ÿ“Œ It's me. You are reading these documents right now.    โ”‚
โ”‚  ๐Ÿ–ค Remove these documentation files for a blank start.    โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•โ”โ”ˆ๐Ÿ’ฌโ”ˆโ”โ•โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Markdown

Typography & Elements

Typographic replacements

ยฉ ยฉ ยฎ ยฎ โ„ข โ„ข ยฑ
ellipsis โ€ฆ ellipsis โ€ฆ ellipsis โ€ฆ ellipsis โ€ฆ ellipsis โ€ฆ
!!! ??? , โ€“ โ€”
โ€œSmartypants, double quotesโ€ and โ€˜single quotesโ€™

(c) (C) (r) (R) (tm) (TM) +-  
ellipsis .. ellipsis ... ellipsis ..... ellipsis ..... ellipsis ....  
!!!!!! ???? ,,  -- ---  
"Smartypants, double quotes" and 'single quotes'
Emphasis

This is bold text
This is bold text
This is italic text
This is italic text
Strikethrough

**This is bold text**  
__This is bold text__  
*This is italic text*  
_This is italic text_  
~~Strikethrough~~
Blockquotes

Blockquotes can also be nestedโ€ฆ

โ€ฆby using additional greater-than signs right next to each otherโ€ฆ

โ€ฆor with spaces between arrows.

> Blockquotes can also be nested...
>> ...by using additional greater-than signs right next to each other...
> > > ...or with spaces between arrows.

Unordered lists
  • Create a list by starting a line with +, -, or *
  • Sub-lists are made by indenting 2 spaces:
    • Marker character change forces new list start:
      • Ac tristique libero volutpat at
      • Facilisis in pretium nisl aliquet
      • Nulla volutpat aliquam velit
  • Very easy!
+ Create a list by starting a line with `+`, `-`, or `*`
+ Sub-lists are made by indenting 2 spaces:
  - Marker character change forces new list start:
    - Ac tristique libero volutpat at
    * Facilisis in pretium nisl aliquet
    - Nulla volutpat aliquam velit
+ Very easy!
Ordered lists
  1. Lorem ipsum dolor sit amet
  2. Consectetur adipiscing elit

Lists can be interrupted and then resumed

  1. Integer molestie lorem at massa
  2. Ac tristique libero volutpat at
    1. sub in enim justo
    2. sub venenatis vitae
    3. sub consequat vitae
  3. Facilisis in pretium nisl aliquet
  4. Nulla volutpat aliquam velit

Start numbering with offset:

  1. scelerisque ut mollis sed
  2. faucibus orci luctus
1. Lorem ipsum dolor sit amet
2. Consectetur adipiscing elit

Lists can be interrupted and then resumed

3. Integer molestie lorem at massa
4. Ac tristique libero volutpat at
    1. sub in enim justo
    2. sub venenatis vitae
    3. sub consequat vitae
5. Facilisis in pretium nisl aliquet
6. Nulla volutpat aliquam velit

Start numbering with offset:

18. scelerisque ut mollis sed
19. faucibus orci luctus
Definition lists
Some Definition Title 1
Type: string
Default: empty
Some description
Some Definition Title 2
Type: bool
Default: true
Some description
with lazy continuation.

Other style:

Term 1
Definition 1a
Definition 1a
Term 2
Definition 2a
Definition 2b
Some Definition Title 1
: Type: `string`
: Default: `empty`
: Some description

Some Definition Title 2
: Type: `bool`
: Default: `true`
: Some description  
with lazy continuation.

_Other style:_

Term 1
  ~ Definition 1a
  ~ Definition 1b

Term 2
  ~ Definition 2a
  ~ Definition 2b
Tables
Option Description active
data path to data files to supply the data that will be passed into templates. โœ…
engine engine to be used for processing templates. Handlebars is the default. โŒ
ext extension to be used for dest files. โœ…

Right aligned columns

Option Description active
data path to data files to supply the data that will be passed into templates. โœ…
engine engine to be used for processing templates. Handlebars is the default. โŒ
ext extension to be used for dest files. โŒ
| Option | Description | active |
| ------ | ----------- |:------:|
| data   | path to data files to supply the data that will be passed into templates. | โœ… |
| engine | engine to be used for processing templates. Handlebars is the default. | โŒ |
| ext    | extension to be used for dest files. | โœ… |

Right aligned columns

| Option | Description | active |
| ------:| -----------:|:------:|
| data   | path to data files to supply the data that will be passed into templates. | โœ… |
| engine | engine to be used for processing templates. Handlebars is the default. | โŒ |
| ext    | extension to be used for dest files. | โŒ |
Links

metager
metager with title
Autoconverted link https://grandgeorg.de

[metager](https://metager.de/)  
[metager with title](https://metager.de/ "MetaGer")  
Autoconverted link https://grandgeorg.de  
Images
Fullsize

Test blue and transparent

Small with title

Test green and transparent

##### Fullsize {.text-center}
![Test blue and transparent](img/test-blue-1920x1080.png)
##### Small with title {.text-center}
![Test green and transparent](img/test-green-320x180.png "Test Image small")

Markdown Plugins

flowcharts

Refer to the documentation from flowchart.js

Example 1

st=>start: Start e=>end: The End op1=>operation: My Operation|current sub1=>subroutine: My Subroutine cond=>condition: Has option? io=>inputoutput: catch something... st->op1->cond cond(yes)->io->e cond(no)->sub1(right)->op1

Example 2

st=>start: Start:>https://grandgeorg.de[blank] e=>end:>https://grandgeorg.de op1=>operation: My Operation sub1=>subroutine: My Subroutine cond=>condition: Yes or No?:>https://grandgeorg.de io=>inputoutput: catch something... para=>parallel: parallel tasks st->op1->cond cond(yes)->io->e cond(no)->para para(path1, bottom)->sub1(right)->op1 para(path2, top)->op1
#### Example 1

@flowstart
st=>start: Start
e=>end: The End
op1=>operation: My Operation|current
sub1=>subroutine: My Subroutine
cond=>condition: Has option?
io=>inputoutput: catch something...

st->op1->cond
cond(yes)->io->e
cond(no)->sub1(right)->op1
@flowend

#### Example 2

@flowstart
st=>start: Start:>https://grandgeorg.de[blank]
e=>end:>https://grandgeorg.de
op1=>operation: My Operation
sub1=>subroutine: My Subroutine
cond=>condition: Yes
or No?:>https://grandgeorg.de
io=>inputoutput: catch something...
para=>parallel: parallel tasks

st->op1->cond
cond(yes)->io->e
cond(no)->para
para(path1, bottom)->sub1(right)->op1
para(path2, top)->op1
@flowend
Task lists
  • Mercury
  • Venus
  • Earth (Orbit/Moon)
  • Mars
  • Jupiter
  • Saturn
  • Uranus
  • Neptune
  • Comet Haley
- [ ] Mercury
- [x] Venus
- [x] Earth (Orbit/Moon)
- [x] Mars
- [ ] Jupiter
- [ ] Saturn
- [ ] Uranus
- [ ] Neptune
- [ ] Comet Haley
Footnotes

Here is a footnote reference,[1] and another.[2]

Here is a footnote reference,[^1] and another.[^longnote]

[^1]: Here is the footnote.
[^longnote]: Here's one with multiple lines  
  [HTML](https://en.wikipedia.org/wiki/HTML) Hyper Text Markup Language  
  [W3C](https://www.w3.org/)  World Wide Web Consortium
Attributes

Place any HTML-attribute after a block

Here is another focusable block

Place any HTML-attribute after a block {.text-center}

Here is another focusable block {.text-right #attributes-sample-id tabindex="0"}

Custom containers

Info Container

๐Ÿ“˜ This is an info title

๐Ÿ—ฒ FYI - so that you know โ€ฆ
Here is a link for you

::: info ๐Ÿ“˜ This is an info title
๐Ÿ—ฒ FYI - so that you know ...  
Here is a [link for you][def]
:::

Tip Container

๐Ÿ“— This is a tip title

FYI - so that you know โ€ฆ
Here is a link for you

::: tip ๐Ÿ“— This is a tip title
FYI - so that you know ...  
Here is a [link for you][def]
:::

Warning Container

โš ๏ธ This is a warning title

Here be dragons ๐ŸฆŽ
Here is a link for you

::: warning โš ๏ธ This is a warning title
**Here be dragons ๐ŸฆŽ**  
Here is a [link for you][def]
:::

Danger Container

โ—๏ธ This is a danger title

Attention! you are going to die โ€ฆ
โ€ฆ just kidding! ๐Ÿ˜‰

Here is a link for you

::: danger โ—๏ธ This is a danger title
**Attention! you are going to die ...**  
... just kidding! ๐Ÿ˜‰

Here is a [link for you][def]
:::

Line Container

๐Ÿ’ฌ This is a line title

FYI - so that you know โ€ฆ
Here is a link for you

::: line ๐Ÿ’ฌ This is a line title
FYI - so that you know ...  
Here is a [link for you][def]
:::

Details Container

Click on this summary to see the details

Here are some funny details.

  • Detail 1
  • Detail 2
  • Detail 3
::: details Click on this summary to see the details
Here are some **funny** details.
- Detail 1
- Detail 2
- Detail 3
:::

Filetree Container

filetree container example with unicode characters & emojis
 ๐Ÿ–ฟ /etc/apache2/  
  โ”Š
  โ”œ๐Ÿ— sites-available
  โ”‚ โ”œ๐Ÿ— subdomain-one.domain.tld.conf
  โ”‚ โ””๐Ÿ— subdomain-two.domain.tld.conf    
  โ”Š
  โ”Š
 ๐Ÿ–ฟ /var/www/  
  โ”Š
  โ”œ๐Ÿ— subdomain-one.domain.tld
  โ”‚ โ”œ๐Ÿ— data  
  โ”‚ โ”‚ โ”œ๐Ÿ— database  
  โ”‚ โ”‚ โ”œ๐Ÿ— extensions  
  โ”‚ โ”‚ โ””๐ŸŸข uploads  
  โ”‚ โ””๐Ÿ— docker-compose.yml  
  โ”Š
  โ”œ๐Ÿ— subdomain-two.domain.tld  
  โ”‚ โ”œ๐Ÿ— data  
  โ”‚ โ”‚ โ”œ๐Ÿ— database  
  โ”‚ โ”‚ โ”œ๐Ÿ— extensions  
  โ”‚ โ”‚ โ””๐ŸŸข uploads  
  โ”Š โ””๐Ÿ— docker-compose.yml 

โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•โ”โ”ˆโ˜€๏ธโ”ˆโ”โ•โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚   ๐ŸŸข image uploads.    โ”‚
โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•โ”โ”ˆ๐ŸŒ™โ”ˆโ”โ•โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ

Syntax Highlighting

EasyDoc uses Prism to highlight syntax in code blocks.

Supported languages

Plugins

To get your own configuration go to: prismjs


Prism Plugins

Line Numbers
Line Numbers Example
(function () {
  "use strict";
  document.addEventListener("DOMContentLoaded", function () {
    const state = {
      global: {
        lastActiveElement: Element | null,
        currentInputIsMouse: false,
        filename: window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1),
      },
      nav: {
        isOpen: false,
        ps: pubsub(),
        ignoreClickOutsideClass: ["ignore_click_outside"],
      },
      meta: typeof easydocMeta !== "undefined" ? easydocMeta : false,
      selectedTags: [],
      tagCloud: {
        sort: "name",
        order: "asc",
        tags: [],
      },
      pageCards: [],
    };
    const elMenuToggle = document.querySelector(".burger");
    const elMain = document.querySelector("main");
    const elNavigationDrawer = document.querySelector(".navigation-drawer");
    const elContainer = document.querySelector(".content");
    const toggleBurger = burger();
    // ...
  });
})();

Specify the data-start (Number) attribute for line numbers.
The above example uses .line-numbers class and data-start="1000".

```js {.line-numbers data-start="1000"}

Refer to the manual at Prism Plugins - Line Numbers

Line Highlight & Linkable Line Numbers
Line Highlight Example
(function () {
  "use strict";
  document.addEventListener("DOMContentLoaded", function () {
    const state = {
      global: {
        lastActiveElement: Element | null,
        currentInputIsMouse: false,
        filename: window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1),
      },
      nav: {
        isOpen: false,
        ps: pubsub(),
        ignoreClickOutsideClass: ["ignore_click_outside"],
      },
      meta: typeof easydocMeta !== "undefined" ? easydocMeta : false,
      selectedTags: [],
      tagCloud: {
        sort: "name",
        order: "asc",
        tags: [],
      },
      pageCards: [],
    };
    const elMenuToggle = document.querySelector(".burger");
    const elMain = document.querySelector("main");
    const elNavigationDrawer = document.querySelector(".navigation-drawer");
    const elContainer = document.querySelector(".content");
    const toggleBurger = burger();
    // ...
  });
})();

Specify the data-line attribute to highlight lines.
The above example uses data-line="8,24-25".

```js {.line-numbers data-line="8,24-25"}
Linkable Line Numbers
(function () {
  "use strict";
  document.addEventListener("DOMContentLoaded", function () {
    const state = {
      global: {
        lastActiveElement: Element | null,
        currentInputIsMouse: false,
        filename: window.location.pathname.substring(window.location.pathname.lastIndexOf('/') + 1),
      },
      nav: {
        isOpen: false,
        ps: pubsub(),
        ignoreClickOutsideClass: ["ignore_click_outside"],
      },
      meta: typeof easydocMeta !== "undefined" ? easydocMeta : false,
      selectedTags: [],
      tagCloud: {
        sort: "name",
        order: "asc",
        tags: [],
      },
      pageCards: [],
    };
    const elMenuToggle = document.querySelector(".burger");
    const elMain = document.querySelector("main");
    const elNavigationDrawer = document.querySelector(".navigation-drawer");
    const elContainer = document.querySelector(".content");
    const toggleBurger = burger();
    // ...
  });
})();

Add class .linkable-line-numbers to make lines selectable.

```js {.line-numbers .linkable-line-numbers}

โš ๏ธ You may not want to use .linkable-line-numbers together with data-line attribute, as the linked line marker will overwrite the highlighted marker, when the line is clicked.


Refer to the manual at Prism Plugins - Line Highlight

Commad Line
Command Line Example
apt-get update
apt-get upgrade
apt-get --assume-yes install curl vim mc htop imagemagick git nodejs npm
... some output from last command

Add class .command-line to code block.
You may specify data-userand data-host as well as the lines for the output with the data-output attribute.

```sh {.command-line data-user="root" data-host="someserver.tld" data-output="4"}

Refer to the manual at Prism Plugins - Commad Line

Show Language

Refer to the manual at Prism Plugins - Show Language

Toolbar

Refer to the manual at Prism Plugins - Toolbar

Copy to Clipboard Button

Refer to the manual at Prism Plugins - Copy to Clipboard Button


Syntax Highlighting Examples

You can also look up Examples at Prism

HTML
<!DOCTYPE html>
<html lang="en">
  <head>
	<meta charset="utf-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>My Title</title>
	<style>
    @media print {
      p { color: red !important; }
		}
	</style>
</head>
<body>
	<h1>My Heading</h1>
	<script>
    if (document) {
      console.log('foo');
	}
	</script>
</body>
</html>
CSS
body, html {
  padding: 0;
  margin: 0;
  background-color: #000;
}

*, *:before, *:after {
  box-sizing: border-box;
}

a, article, aside, blockquote, body, code, dd, div, dl, dt, fieldset,
figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, legend, li,
main, nav, ol, p, pre, section, table, td, textarea, th, tr, ul {
  box-sizing: border-box;
}

hr {
  border-top-color: hsla(0,0%,100%,.1)
}

table {
  border-collapse: collapse;
}

tr:nth-child(2n) {
  background-color: rgb(32, 34, 35);
}

@media (min-width: 480px) {
  .content {
    padding: 2rem 2.5rem 1rem;
  }
  .mtime {
    padding: 0.7rem 2.5rem 0;
  }
}
JavaScript
"use strict";

const path = require("path");
const fs = require("fs");
const pug = require("pug");
const fm = require("front-matter");

const md = require("markdown-it")({
  html: true,
  linkify: true,
  typographer: true,
});
md.use(require("markdown-it-deflist"));
md.use(require("markdown-it-container"), "tip");

const docsDir = path.join(__dirname, "docs");
const templateDir = path.join(__dirname, "templates");
const layout = path.join(templateDir, "layout.pug");
const distDir = path.join(__dirname, "www");
const rgxExt = /\.(?:md)$/;
const outExt = ".html";

// iterate over files
fs.readdir(docsDir, (err, files) => {
  if (err) {
    return console.log("Unable to scan directory: " + err);
  }
  files.forEach((file) => {
    let fmData = fm(fs.readFileSync(path.join(docsDir, file), "utf-8"));
    let stats = fs.statSync(path.join(docsDir, file));
    const page = pug.renderFile(layout, {
      content: md.render(fmData.body),
      attributes: {
        title: fmData.attributes.title
          ? fmData.attributes.title
          : "Documentation",
        lang: fmData.attributes.lang ? fmData.attributes.lang : "en",
        mtime: stats.mtime,
      },
    });
    fs.writeFileSync(path.join(distDir, file.replace(rgxExt, outExt)), page);
  });
});
Apache Configuration
<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    ServerName subdomain.domain.tld
    Redirect permanent / https://subdomain.domain.tld/
    ErrorLog ${APACHE_LOG_DIR}/subdomain.domain.tld.error.log
    CustomLog ${APACHE_LOG_DIR}/subdomain.domain.tld.access.log combined
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost *:443>
        ServerAdmin webmaster@localhost
        ServerName subdomain.domain.tld
        DocumentRoot /var/www/html

        SSLEngine on
        SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
        SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA256
        SSLHonorCipherOrder on
        SSLOptions +StrictRequire
        SSLCertificateKeyFile /etc/letsencrypt/live/subdomain.domain.tld/privkey.pem
        SSLCertificateFile  /etc/letsencrypt/live/subdomain.domain.tld/fullchain.pem

        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        Header set Access-Control-Allow-Origin "*"
        Protocols h2 http/1.1

        ProxyPass /.well-known/acme-challenge !

        ProxyPass /phpmyadmin/  http://localhost:8080/
        ProxyPassReverse /phpmyadmin/ http://localhost:8080/

        ProxyPass /  http://localhost:8055/
        ProxyPassReverse / http://localhost:8055/

        ErrorLog ${APACHE_LOG_DIR}/subdomain.domain.tld.error.log
        CustomLog ${APACHE_LOG_DIR}/subdomain.domain.tld.access.log combined

        <FilesMatch "\.(phtml|php)$">
            SSLOptions +StdEnvVars
        </FilesMatch>

    </VirtualHost>
</IfModule>
Bash / Shell
apt get update
apt get upgrade
cd /etc/apache2/sites-available
ls -la
vim ./000-default-ssl.conf
Batch
@ECHO OFF
IF NOT "%~1"=="" GOTO Syntax
 
:: Check for WinPE first, as WMI might not be available in WinPE
REG.EXE Query HKLM\SYSTEM\ControlSet001\Control\MiniNT >NUL 2>&1
IF NOT ERRORLEVEL 1 (
	ECHO Windows PE
	EXIT /B 3
)
 
:: Check for "regular" boot state
WMIC.EXE Path Win32_ComputerSystem Get BootupState | FIND.EXE "Normal boot" >NUL
IF NOT ERRORLEVEL 1 (
	ECHO Normal
	EXIT /B 0
)
 
WMIC.EXE Path Win32_ComputerSystem Get BootupState | FIND.EXE "Fail-safe boot" >NUL
IF NOT ERRORLEVEL 1 (
	ECHO Safe mode
	EXIT /B 1
)
 
WMIC.EXE Path Win32_ComputerSystem Get BootupState | FIND.EXE "Fail-safe with network boot" >NUL
IF NOT ERRORLEVEL 1 (
	ECHO Safe mode with network
	EXIT /B 2
)
 
ECHO Unknown
EXIT /B -1
 
 
:Syntax
ECHO.
ECHO BootState.bat,  Version 1.04
ECHO Show Windows' boot state
ECHO.
ECHO Usage:    BootState.bat
ECHO.
ECHO Notes:    Boot state is returned as string and as "errorlevel" ^(return code^):
ECHO               "Normal"                    ^(errorlevel = 0^)
ECHO               "Safe mode"                 ^(errorlevel = 1^)
ECHO               "Safe mode with network"    ^(errorlevel = 2^)
ECHO               "Windows PE"                ^(errorlevel = 3^)
ECHO           In case of ^(command line^) errors, the errorlevel will be -1.
EXIT /B -1
C-like
int factorialSafe(int n) {
    int result = 1;
    if(n<0)
        return -1;
    for (int i = 1; i <= n; ++i)
        result *= i;
    return result;
}
Diff
diff --git a/docs/www/css/style.css b/docs/www/css/style.css
index a0b00ff..d4a3c3e 100644
--- a/docs/www/css/style.css
+++ b/docs/www/css/style.css
@@ -15,12 +15,36 @@ body {
     box-sizing: border-box;
 }
 
-a, article, aside, blockquote, body, code, dd, div, dl, dt, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, legend, li, main, nav, ol, p, pre, section, table, td, textarea, th, tr, ul {
+a, article, aside, blockquote, body, code, dd, div, dl, dt, fieldset,
+figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, legend, li,
+main, nav, ol, p, pre, section, table, td, textarea, th, tr, ul {
     box-sizing: border-box;
 }
 
 hr {
-    border-top-color: hsla(0,0%,100%,.1)
+    border: none;
+    border-top: 1px solid #666;
+}
+
+table {
+    border-collapse: collapse;
+}
+
+tr:nth-child(2n) {
+    background-color: rgb(32, 34, 35);
+}
+
+tr:hover {
+    background-color: rgb(44, 47, 48);
+}
+
+th, td {
+    text-align: left;
+    border: 1px solid rgb(59, 62, 64);
+    padding: 0.5rem;
+}
+th {
+    background-color: #24292d;
 }
 
 dt {
@@ -35,9 +59,11 @@ a code {
     color: #2196f3;
 }
 
+
+/* layout */
+
 .page {
     display: block;
-    /* padding-bottom: 2rem; */
 }
 .mtime {
     max-width: 1200px;
@@ -70,9 +96,13 @@ a code {
 }
 
 .content img {
-    max-width: 100%
+    max-width: 100%;
+    border-radius: 6px;
 }
 
+
+/* code blocks */
+
 .content pre[class*=language-] {
     border-radius: 6px;
     padding-top: 2.5rem;
Docker
FROM ubuntu:20.04

ENV APACHE_RUN_USER     www-data
ENV APACHE_RUN_GROUP    www-data
ENV APACHE_LOG_DIR      /var/log/apache2
ENV APACHE_PID_FILE     /var/run/apache2.pid
ENV APACHE_RUN_DIR      /var/run/apache2
ENV APACHE_LOCK_DIR     /var/lock/apache2
ENV APACHE_LOG_DIR      /var/log/apache2

ENV CA_PROVIDENCE_VERSION=1.7.13
ENV CA_PROVIDENCE_DIR=/var/www/providence
ENV CA_PAWTUCKET_VERSION=1.7.13
ENV CA_PAWTUCKET_DIR=/var/www

ENV DEBIAN_FRONTEND=noninteractive

RUN apt-get update && apt-get install -y apache2 \
	curl \
	wget \
	zip \
	php7.4 \
	php7.4-curl \
	php7.4-gd \
	php7.4-xml \
	php7.4-zip \
	php-mysql \
	php-ldap \
	libapache2-mod-php7.4 \
	mysql-client \
	ffmpeg \
	ghostscript \
	imagemagick \
	libreoffice

#GMAGICK
RUN apt-get install -y php-pear php7.4-dev graphicsmagick libgraphicsmagick1-dev \
	&& pecl install gmagick-2.0.4RC1

# https://github.com/collectiveaccess/providence/archive/refs/tags/$CA_PROVIDENCE_VERSION.gz
RUN curl -SsL https://github.com/collectiveaccess/providence/archive/refs/tags/$CA_PROVIDENCE_VERSION.tar.gz | tar -C /var/www/ -xzf -
RUN mv /var/www/providence-$CA_PROVIDENCE_VERSION /var/www/providence
RUN cd $CA_PROVIDENCE_DIR && cp setup.php-dist setup.php

RUN curl -SsL https://github.com/collectiveaccess/pawtucket2/archive/refs/tags/$CA_PAWTUCKET_VERSION.tar.gz | tar -C /var/www/ -xzf -
RUN mv $CA_PAWTUCKET_DIR/pawtucket2-$CA_PAWTUCKET_VERSION/* /var/www
RUN cd $CA_PAWTUCKET_DIR && cp setup.php-dist setup.php

RUN sed -i "s@DocumentRoot \/var\/www\/html@DocumentRoot \/var\/www@g" /etc/apache2/sites-available/000-default.conf
RUN rm -rf /var/www/html
RUN ln -s /$CA_PROVIDENCE_DIR/media /$CA_PAWTUCKET_DIR/media

RUN chown -R www-data:www-data /var/www

# Create a backup of the default conf files in case directory is mounted
RUN mkdir -p /var/ca/providence/conf
RUN cp -r /$CA_PROVIDENCE_DIR/app/conf/* /var/ca/providence/conf

# Copy our local files
COPY php.ini /etc/php/7.4/apache2/php.ini
COPY entrypoint.sh /entrypoint.sh
RUN chmod 777 /entrypoint.sh

# Run apcache from entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD [ "/usr/sbin/apache2", "-DFOREGROUND" ]
EditorConfig
# EditorConfig is awesome: https://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

# Matches multiple files with brace expansion notation
# Set default charset
[*.{js,py}]
charset = utf-8

# 4 space indentation
[*.py]
indent_style = space
indent_size = 4

# Tab indentation (no size specified)
[Makefile]
indent_style = tab

# Indentation override for all JS under lib directory
[lib/**.js]
indent_style = space
indent_size = 2

# Matches the exact files either package.json or .travis.yml
[{package.json,.travis.yml}]
indent_style = space
indent_size = 2
Git
$ git diff
diff --git file.txt file.txt
index 6214953..1d54a52 100644
--- file.txt
+++ file.txt
@@ -1 +1,2 @@
-Here's my tetx file
+Here's my text file
+And this is the second line
GrapQL
query withFragments {
  user(id: 4) {
    friends(first: 10) {
      ...friendFields
    }
    mutualFriends(first: 10) {
      ...friendFields
    }
  }
}

fragment friendFields on User {
  id
  name
  profilePic(size: 50)
}
INI
# Automatically generated for Debian scripts. DO NOT TOUCH!
[client]
host     = localhost
user     = root
password = <YOUR MYSQL ROOT PASSWORD>
socket   = /var/run/mysqld/mysqld.sock
[mysql_upgrade]
host     = localhost
user     = root
password = <YOUR MYSQL ROOT PASSWORD>
socket   = /var/run/mysqld/mysqld.sock
basedir  = /usr
JSON
{
  "firstName": "John",
  "lastName": "Smith",
  "age": 25,
  "categories": [
    {
      "id": 19,
      "category": "Venue",
      "comment": null,
      "pivot": {
        "address_id": 6213,
        "category_id": 19,
        "updated_by": 34,
        "created_by": 34,
        "created_at": "2004-03-10T15:18:27.000000Z",
        "updated_at": "2004-03-10T15:18:27.000000Z"
      }
    }
  ],
}
Less
.foo (@bg: #f5f5f5, @color: #900) {
  background: @bg;
  color: @color;
}
.bar {
  .foo();
}
.class1 {
  .mixin(@margin: 20px; @color: #33acfe);
}
.class2 {
  .mixin(#efca44; @padding: 40px);
}
@mySelector: banner;
.@{mySelector} {
  font-weight: bold;
}
@property: color;
.widget {
  @{property}: #0ee;
  background-@{property}: #999;
}
Markdown
Title 1
==

Title 2
-------

# Title 1 {.text-center}
## Title 2
### Title 3
#### Title 4
##### Title 5
###### Title 6

- listitem 1
- listitem 2
- listitem 3

MongoDB
{
	'_id': ObjectId('5ec72ffe00316be87cab3927'),
	'code': Code('function () { return 22; }'),
	'binary': BinData(1, '232sa3d323sd232a32sda3s2d3a2s1d23s21d3sa'),
	'dbref': DBRef('namespace', ObjectId('5ec72f4200316be87cab3926'), 'db'),
	'timestamp': Timestamp(0, 0),
	'long': NumberLong(9223372036854775807),
	'decimal': NumberDecimal('1000.55'),
	'integer': 100,
	'maxkey': MaxKey(),
	'minkey': MinKey(),
	'isodate': ISODate('2012-01-01T00:00:00.000Z'),
	'regexp': RegExp('prism(js)?', 'i'),
	'string': 'Hello World',
	'numberArray': [1, 2, 3],
	'stringArray': ['1','2','3'],
	'randomKey': null,
	'object': { 'a': 1, 'b': 2 },
	'max_key2': MaxKey(),
	'number': 1234,
	'invalid-key': 123,
	noQuotesKey: 'value',
}
db.users.find({
	_id: { $nin: ObjectId('5ec72ffe00316be87cab3927') },
	age: { $gte: 18, $lte: 99 },
	field: { $exists: true }
})
Nginx
server { # simple reverse-proxy
  listen       80;
  server_name  domain2.com www.domain2.com;
  access_log   logs/domain2.access.log  main;
  
  # serve static files
  
  location ~ ^/(images|javascript|js|css|flash|media|static)/  {
    root    /var/www/virtual/big.server.com/htdocs;
    expires 30d;
  }

  # pass requests for dynamic content to rails/turbogears/zope, et al
  location / {
    proxy_pass      http://127.0.0.1:8080;
  }
}
PHP
declare(strict_types=1);
/*
 * This file is part of the Gws package.
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

namespace Gws\Image;

use Gws\System\Msg;

/**
 * Image Compressor
 *
 * @author Viktor Grandgeorg <viktor@grandgeorg.de>
 */
class Compressor
{
    use Msg;

    protected $sysconf;
    protected $logger;
    protected $conf;
    protected $cFormat;
    protected $mandatories = [
        'input_dir',
        'output_dir',
        'resize',
        'jpeg_recompress'
    ];
    protected $ext = array('jpg', 'jpeg');

    public function __construct($sysconf, $logger, $conf)
    {
        $this->sysconf = $sysconf;
        $this->logger = $logger;
        $this->conf = $conf;
    }

    public function run(): int
    {
        foreach ($this->conf->get('formats') as $format) {
            if ($this->validateFormat($format) &&
                $this->validateDir($format['input_dir']) &&
                $this->validateDir($format['output_dir'], true))
            {
                $this->cFormat = array_merge(
                    $this->defaults,
                    $format,
                    [
                        'input_dir_realpath' => realpath($format['input_dir']),
                        'output_dir_realpath' => realpath($format['output_dir'])
                    ]
                );
                $this->filterJrcMethod();
                $this->dispatchImages();
            } else {
                return 1;        
            }
        }
        return 0;
    }

    protected function validateFormat(array $format): bool
    {
        foreach ($this->mandatories as $mandatory) {
            if (!array_key_exists($mandatory, $format)) {
                $this->msg(
                    sprintf($this->sysconf->get('msg'), $mandatory) . "\n", 
                    'all', 'debug', $format
                );
                return false;
            }
        }
        return true;
    }

    // ...
}
PHPDoc
/** @var \DateTime[] An array of DateTime objects. */
/** @var string[] An array of string objects. */
/** @var callable[] An array of with callable functions or methods. */

/** @var \ArrayObject|\DateTime[] */
$dates = array()

/**
 * @param bool|\DateTime $foo the first argument
 * @return string|null
 */
function bar($foo) { ... }
PowerShell
Function SayHello([string]$name) {
    Write-Host "Hello, $name."
}
$Names = @("Bob", "Alice")

$Names | ForEach {
    SayHello $_
}
Pug
doctype html
html(lang=attributes.lang)
  head
    title=attributes.title
    meta(charset="UTF-8")
    meta(name="viewport" content="width=device-width, initial-scale=1.0")
    link(rel='stylesheet' href='assets/css/style.min.css')
    link(rel="stylesheet" href="assets/css/prism.min.css")
    script(src="assets/js/clipboard.min.js")
    script(src="assets/js/prism.js")
    script(src="assets/js/raphael.min.js")
    script(src="assets/js/flowchart.min.js")
    script(src="assets/js/app.min.js")
    script(src="meta.js")
  body
    if !attributes.disableNavigationBar
      .navbar
        if !attributes.disableBrand
          a.navbar__brand(href=attributes.brandURL)
            if attributes.brandName
              span.brand #{attributes.brandName}
            if attributes.brandSecondary
              span.brand-second #{attributes.brandSecondary}
        .navbar__controls
          if !attributes.disableTagNavigator
            button.btn-tag-nav.navitem#open-tag-navigation(aria-label="open tag navigation" title="open tag navigation" role="button")
              span.navitem-title #{t.tagNav}
          if !attributes.disableBurger
            button.burger(aria-expanded="false" aria-label="navigation menu")
              span.burger__line.burger__line-1(aria-hidden="true" focusable="false")
              span.burger__line.burger__line-2(aria-hidden="true" focusable="false")
              span.burger__line.burger__line-3(aria-hidden="true" focusable="false")
      if !attributes.disableBurger
        nav.navigation-drawer(aria-label="Main menu")
          if !attributes.disableToc
            h3.nav-title.text-center #{t.toc}
            .toc !{toc}
          if !attributes.disableSiteNav
            .sitenav !{sitenav}

    main.page
      .mtime #{t.mtime} #{attributes.mtime}
      .content !{content}
      .footer
        if !attributes.disableBrand
          a(href=attributes.brandURL class="brand-link")
            if attributes.brandName
              span.brand #{attributes.brandName}
            if attributes.brandSecondary
              span.brand-second #{attributes.brandSecondary}
Python
from itertools import (accumulate, chain)
from operator import mul

# factorials :: [Integer]
def factorials(n):
    return list(
        accumulate(chain([1], range(1, 1 + n)), mul)
    )

print(factorials(5))
 
# -> [1, 1, 2, 6, 24, 120]
Sass (scss)
@mixin scrollbars($size, $foreground-color,  $foreground-color-hover, $background-color, $border-radius, $border-width) {

  // For Google Chrome
  &::-webkit-scrollbar {
    width: $size;
  }

  &::-webkit-scrollbar-thumb {
    background-color: $foreground-color;
    border-radius: $border-radius;
    border: $border-width solid $background-color
  }

  &::-webkit-scrollbar-thumb:hover {
    background-color: $foreground-color-hover;
  }

  &::-webkit-scrollbar-track {
    background-color: $background-color;
  }

  // For Internet Explorer
  & {
    scrollbar-face-color: $foreground-color;
    scrollbar-track-color: $background-color;
  }

  // For FireFox
  & {
    scrollbar-color: $foreground-color $background-color;
    @if $size < 10px {
      scrollbar-width: thin;
    } @else {
      scrollbar-width: auto;
    }
  }
}

$navbar-height: 41px;

.navigation-drawer {
  position: fixed;
  top: $navbar-height;
  right: 0;
  bottom: 0;
  width: 100vw;
  max-width: 414px;
  overflow-y: auto;
  display: none;
  flex-direction: column;
  justify-content: space-between;
  transition: transform .5s ease-out;
  transform: translateX(100%);
  background-color: var(--clr-base-d600);
  border-left: 1px solid var(--clr-base-d400);
  @include scrollbars(6px, #555, #666, #070f17, 3px, 0px);
  ul {
    list-style: none;
    padding: 0;
    margin: 0;
    li {
      margin-bottom: 0.5rem;
      a {
        display: inline-block;
        width: 100%;
        color: var(--clr-base-l250);
        background-color: var(--clr-base-d400);
        border-radius: 6px;
        border: 1px solid var(--clr-base-d300);
        &:hover, &.active:hover {
          background-color: var(--clr-base);
          border-color: var(--clr-base-l100);
          color: var(--clr-base-l500);
        }
        &:active {
          background-color: var(--clr-base);
          color: var(--clr-base-l500);
        }
        &.active, &.router-link-active {
          background-color: var(--clr-base-d200);
          border: 1px solid var(--clr-base-d100);
          color: var(--clr-base-l250-inv);
        }
      }
    }
  }
}
SQL
SELECT `user` AS `usr`, `host`, `password`, `plugin` FROM mysql.user;
UPDATE mysql.user SET plugin='' WHERE user='root';
FLUSH PRIVILEGES;
TypeScript
import {
  Ref,
  UnwrapRef,
  ComputedRef,
  WritableComputedOptions,
  DebuggerOptions,
  WritableComputedRef
} from '@vue/runtime-dom'

declare const RefType: unique symbol

declare const enum RefTypes {
  Ref = 1,
  ComputedRef = 2,
  WritableComputedRef = 3
}

type RefValue<T> = T extends null | undefined
  ? T
  : T & { [RefType]?: RefTypes.Ref }

type ComputedRefValue<T> = T extends null | undefined
  ? T
  : T & { [RefType]?: RefTypes.ComputedRef }

type WritableComputedRefValue<T> = T extends null | undefined
  ? T
  : T & { [RefType]?: RefTypes.WritableComputedRef }

type NormalObject<T extends object> = T & { [RefType]?: never }

/**
 * Vue ref transform macro for binding refs as reactive variables.
 */
declare function _$<T>(arg: ComputedRef<T>): ComputedRefValue<T>
declare function _$<T>(arg: WritableComputedRef<T>): WritableComputedRefValue<T>
declare function _$<T>(arg: Ref<T>): RefValue<T>
declare function _$<T extends object>(arg?: T): DestructureRefs<T>

type DestructureRefs<T extends object> = {
  [K in keyof T]: T[K] extends ComputedRef<infer V>
    ? ComputedRefValue<V>
    : T[K] extends WritableComputedRef<infer V>
    ? WritableComputedRefValue<V>
    : T[K] extends Ref<infer V>
    ? RefValue<V>
    : T[K]
}
YAML
version: '3.8'

services:
  server:
    image: gitea/gitea:1.15.6
    restart: always
    container_name: gitea
    environment:
      USER_UID: "${USER_UID}"
      USER_GID: "${USER_GID}"
      GITEA__database__DB_TYPE: mysql
      GITEA__database__HOST: db:3306
      GITEA__database__NAME: "${MYSQL_DATABASE}"
      GITEA__database__USER: "${MYSQL_USER}"
      GITEA__database__PASSWD: "${MYSQL_PASSWORD}"
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
      - /home/git/.ssh/:/data/git/.ssh
    ports:
      - "3000:3000"
      - "127.0.0.1:2222:22"
    depends_on:
      - db
  db:
    image: "mariadb:${MARIADB_VERSION}"
    restart: always
    cap_add:
      - SYS_NICE
    networks:
      - gitea
    volumes:
      - "./mysql:${MARIADB_DATA_DIR}"
    environment:
      MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
      MYSQL_USER: "${MYSQL_USER}"
      MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
      MYSQL_DATABASE: "${MYSQL_DATABASE}"
networks:
  gitea:
    external: false

Icons

Here you find a curated list of unicode icon characters and emojis you may find usefull.

emojis in body

files

๐Ÿ“„ ๐Ÿ“ ๐Ÿ“‘ ๐Ÿ“œ ๐Ÿ“ƒ ๐Ÿงพ

folder

๐Ÿ“ ๐Ÿ“‚ ๐Ÿ—‚๏ธ

hands

โœ‹ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ‘† ๐Ÿ‘‡ โ˜๏ธ ๐Ÿ‘ ๐Ÿ‘Ž
โœ‹๐Ÿป ๐Ÿ‘ˆ๐Ÿป ๐Ÿ‘‰๐Ÿป ๐Ÿ‘†๐Ÿป ๐Ÿ‘‡๐Ÿป โ˜๐Ÿป ๐Ÿ‘๐Ÿป ๐Ÿ‘Ž๐Ÿป
โœ‹๐Ÿผ ๐Ÿ‘ˆ๐Ÿผ ๐Ÿ‘‰๐Ÿผ ๐Ÿ‘†๐Ÿผ ๐Ÿ‘‡๐Ÿผ โ˜๐Ÿผ ๐Ÿ‘๐Ÿผ ๐Ÿ‘Ž๐Ÿผ
โœ‹๐Ÿฝ ๐Ÿ‘ˆ๐Ÿฝ ๐Ÿ‘‰๐Ÿฝ ๐Ÿ‘†๐Ÿฝ ๐Ÿ‘‡๐Ÿฝ โ˜๐Ÿฝ ๐Ÿ‘๐Ÿฝ ๐Ÿ‘Ž๐Ÿฝ
โœ‹๐Ÿพ ๐Ÿ‘ˆ๐Ÿพ ๐Ÿ‘‰๐Ÿพ ๐Ÿ‘†๐Ÿพ ๐Ÿ‘‡๐Ÿพ โ˜๐Ÿพ ๐Ÿ‘๐Ÿพ ๐Ÿ‘Ž๐Ÿพ
โœ‹๐Ÿฟ ๐Ÿ‘ˆ๐Ÿฟ ๐Ÿ‘‰๐Ÿฟ ๐Ÿ‘†๐Ÿฟ ๐Ÿ‘‡๐Ÿฟ โ˜๐Ÿฟ ๐Ÿ‘๐Ÿฟ ๐Ÿ‘Ž๐Ÿฟ

user

๐Ÿ‘ฉโ€๐Ÿ’ผ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘ฉ ๐Ÿง‘ ๐Ÿ‘ฑโ€โ™‚๏ธ ๐Ÿ‘ฉโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿป ๐Ÿง‘๐Ÿป ๐Ÿ‘ฑ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿผ ๐Ÿง‘๐Ÿผ ๐Ÿ‘ฑ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฝ ๐Ÿง‘๐Ÿฝ ๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿพ ๐Ÿง‘๐Ÿพ ๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฟ ๐Ÿง‘๐Ÿฟ ๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ
๐Ÿ‘ค ๐Ÿ‘ฅ

computer

๐Ÿ–ฅ๏ธ ๐Ÿ’ป
๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘จโ€๐Ÿ’ป ๐Ÿง‘โ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป ๐Ÿง‘๐Ÿผโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป ๐Ÿง‘๐Ÿพโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฟโ€๐Ÿ’ป

phone

๐Ÿ“ฑ ๐Ÿ“ฒ ๐Ÿ“ž โ˜Ž๏ธ

symbols

โŒ โญ•๏ธ ๐Ÿ›‘ โ›”๏ธ ๐Ÿ“› ๐Ÿ’ฏ ๐Ÿ’ข โ™จ๏ธ
โš ๏ธ โ˜ข๏ธ โ˜ฃ๏ธ
โ—๏ธ โ• โ“ โ” โ€ผ๏ธ โ‰๏ธ
โž• โž– โœ–๏ธ
โŽ โœณ๏ธ โ‡๏ธ โœด๏ธ
๐Ÿ”€ ๐Ÿ” ๐Ÿ”‚ ๐Ÿ”ƒ ๐Ÿ”„
โฉ โช โซ โฌ
๐Ÿ”ผ ๐Ÿ”ฝ

checkmarks

โœ”๏ธ โœ… โ˜‘๏ธ

speach & bubbles

๐Ÿ“ฃ ๐Ÿ“ข ๐Ÿ’ฌ ๐Ÿ—จ๏ธ ๐Ÿ’ญ ๐Ÿ—ฏ๏ธ ๐Ÿ‘โ€๐Ÿ—จ ๐Ÿ‘๏ธ

primitives

๐Ÿ”˜ ๐Ÿ”ด ๐ŸŸ  ๐ŸŸก ๐ŸŸข ๐Ÿ”ต ๐ŸŸฃ โšซ๏ธ โšช๏ธ ๐ŸŸค
๐ŸŸฅ ๐ŸŸง ๐ŸŸจ ๐ŸŸฉ ๐ŸŸฆ ๐ŸŸช โฌ›๏ธ โฌœ๏ธ ๐ŸŸซ
๐Ÿ”บ ๐Ÿ”ป
๐Ÿ”ธ ๐Ÿ”น ๐Ÿ”ถ ๐Ÿ”ท
๐Ÿ”ณ ๐Ÿ”ฒ โ–ช๏ธ โ–ซ๏ธ โ—พ๏ธ โ—ฝ๏ธ โ—ผ๏ธ โ—ป๏ธ

traffic

๐Ÿšง ๐Ÿšฆ ๐Ÿšฅ

time & navigation

๐Ÿงญ โฑ โฒ โŒ›๏ธ โณ

electricity

๐Ÿ”‹ ๐Ÿ”Œ

mechanics

๐Ÿงฐ ๐Ÿ”ง ๐Ÿ”จ ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿงฒ ๐Ÿ—œ๏ธ

weapon

๐Ÿ”ซ ๐Ÿ’ฃ ๐Ÿงจ

test

๐Ÿ’Š ๐Ÿฉธ ๐Ÿงฌ ๐Ÿงซ ๐Ÿงช โš—๏ธ ๐ŸŒก๏ธ

security

๐Ÿ”‘ ๐Ÿ—๏ธ ๐Ÿ” ๐Ÿ” ๐Ÿ”’ ๐Ÿ”“

๐Ÿ” ๐Ÿ”Ž

office

๐Ÿ—‘ ๐Ÿ—ƒ๏ธ ๐Ÿ“‹ ๐Ÿ“ฅ ๐Ÿ“ค ๐Ÿ“ฆ

mail

๐Ÿงง โœ‰๏ธ ๐Ÿ“ฉ ๐Ÿ“จ ๐Ÿ“ง ๐Ÿ“ช ๐Ÿ“ซ ๐Ÿ“ฌ ๐Ÿ“ญ ๐Ÿ“ฎ ๐Ÿ“ฏ

tag

๐Ÿ”–๐Ÿท๏ธ

books

๐Ÿ““ ๐Ÿ“” ๐Ÿ“’ ๐Ÿ“• ๐Ÿ“— ๐Ÿ“˜ ๐Ÿ“™ ๐Ÿ“š ๐Ÿ“– ๐Ÿ—’๏ธ

edit

๐Ÿ“Œ ๐Ÿ“ โœ‚๏ธ โœ๏ธ ๐Ÿ–‹๏ธ ๐Ÿ–Š๏ธ ๐Ÿ–Œ๏ธ ๐Ÿ–๏ธ โœ’๏ธ

stars

๐Ÿ’ซ โญ๏ธ ๐ŸŒŸ โœจ โšก๏ธ โ˜€๏ธ โ˜„๏ธ ๐ŸŒŒ

elements

๐Ÿ’ฅ ๐Ÿ”ฅ ๐ŸŒช ๐ŸŒˆ ๐Ÿ’ง ๐Ÿ’ฆ โ„๏ธ

tickets

๐ŸŽซ ๐ŸŽŸ

image

๐ŸŽจ ๐Ÿ“ท ๐Ÿ“ธ ๐Ÿ“น ๐ŸŽฅ ๐Ÿ“ฝ๏ธ ๐ŸŽž๏ธ ๐ŸŽฌ

audio

๐ŸŽค ๐ŸŽง ๐ŸŽผ ๐ŸŽต ๐ŸŽถ ๐Ÿ”ˆ ๐Ÿ”‡ ๐Ÿ”‰ ๐Ÿ”Š

light

๐Ÿ’ก ๐Ÿช”

globe / earth

๐ŸŒ ๐Ÿ—บ ๐ŸŒŽ ๐ŸŒ ๐ŸŒ

hearts

โค๏ธ ๐Ÿงก ๐Ÿ’› ๐Ÿ’š ๐Ÿ’™ ๐Ÿ’œ ๐Ÿ–ค ๐Ÿค ๐ŸคŽ ๐Ÿ’– ๐Ÿ’ž ๐Ÿ’”

flags

๐Ÿณ๏ธ ๐Ÿด ๐Ÿ ๐Ÿšฉ ๐Ÿณ๏ธโ€๐ŸŒˆ ๐Ÿณ๏ธ ๐Ÿดโ€โ˜ ๏ธ

calendar

๐Ÿ“… ๐Ÿ“† ๐Ÿ—“๏ธ

charts

๐Ÿ“ˆ ๐Ÿ“‰ ๐Ÿ“Š

misc

โ™ป๏ธ ๐Ÿณ ๐Ÿฉน ๐Ÿšธ ๐Ÿšจ ๐Ÿ‘” ๐Ÿ‘ฝ๏ธ ๐Ÿ’€ โš—๏ธ ๐Ÿž


emojis in code

files
๐Ÿ“„ ๐Ÿ“ ๐Ÿ“‘ ๐Ÿ“œ ๐Ÿ“ƒ ๐Ÿงพ

folder
๐Ÿ“ ๐Ÿ“‚ ๐Ÿ—‚๏ธ

hands
โœ‹ ๐Ÿ‘ˆ ๐Ÿ‘‰ ๐Ÿ‘† ๐Ÿ‘‡ โ˜๏ธ ๐Ÿ‘ ๐Ÿ‘Ž
โœ‹๐Ÿป ๐Ÿ‘ˆ๐Ÿป ๐Ÿ‘‰๐Ÿป ๐Ÿ‘†๐Ÿป ๐Ÿ‘‡๐Ÿป โ˜๐Ÿป ๐Ÿ‘๐Ÿป ๐Ÿ‘Ž๐Ÿป
โœ‹๐Ÿผ ๐Ÿ‘ˆ๐Ÿผ ๐Ÿ‘‰๐Ÿผ ๐Ÿ‘†๐Ÿผ ๐Ÿ‘‡๐Ÿผ โ˜๐Ÿผ ๐Ÿ‘๐Ÿผ ๐Ÿ‘Ž๐Ÿผ
โœ‹๐Ÿฝ ๐Ÿ‘ˆ๐Ÿฝ ๐Ÿ‘‰๐Ÿฝ ๐Ÿ‘†๐Ÿฝ ๐Ÿ‘‡๐Ÿฝ โ˜๐Ÿฝ ๐Ÿ‘๐Ÿฝ ๐Ÿ‘Ž๐Ÿฝ
โœ‹๐Ÿพ ๐Ÿ‘ˆ๐Ÿพ ๐Ÿ‘‰๐Ÿพ ๐Ÿ‘†๐Ÿพ ๐Ÿ‘‡๐Ÿพ โ˜๐Ÿพ ๐Ÿ‘๐Ÿพ ๐Ÿ‘Ž๐Ÿพ
โœ‹๐Ÿฟ ๐Ÿ‘ˆ๐Ÿฟ ๐Ÿ‘‰๐Ÿฟ ๐Ÿ‘†๐Ÿฟ ๐Ÿ‘‡๐Ÿฟ โ˜๐Ÿฟ ๐Ÿ‘๐Ÿฟ ๐Ÿ‘Ž๐Ÿฟ

user
๐Ÿ‘ฉโ€๐Ÿ’ผ ๐Ÿ‘จโ€๐Ÿ’ผ ๐Ÿ‘ฉ ๐Ÿง‘ ๐Ÿ‘ฑโ€โ™‚๏ธ ๐Ÿ‘ฉโ€๐Ÿฆณ ๐Ÿ‘ค ๐Ÿ‘ฅ 
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿป ๐Ÿง‘๐Ÿป ๐Ÿ‘ฑ๐Ÿป ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿผ ๐Ÿง‘๐Ÿผ ๐Ÿ‘ฑ๐Ÿผ ๐Ÿ‘ฉ๐Ÿผโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฝ ๐Ÿง‘๐Ÿฝ ๐Ÿ‘ฑ๐Ÿฝโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿพ ๐Ÿง‘๐Ÿพ ๐Ÿ‘ฑ๐Ÿพโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿพโ€๐Ÿฆณ
๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ผ ๐Ÿ‘ฉ๐Ÿฟ ๐Ÿง‘๐Ÿฟ ๐Ÿ‘ฑ๐Ÿฟโ€โ™‚๏ธ ๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿฆณ

computer
๐Ÿ–ฅ๏ธ ๐Ÿ’ป
๐Ÿ‘ฉโ€๐Ÿ’ป ๐Ÿ‘จโ€๐Ÿ’ป ๐Ÿง‘โ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿปโ€๐Ÿ’ป ๐Ÿง‘๐Ÿปโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿผโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿผโ€๐Ÿ’ป ๐Ÿง‘๐Ÿผโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿฝโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฝโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฝโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿพโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป ๐Ÿง‘๐Ÿพโ€๐Ÿ’ป
๐Ÿ‘ฉ๐Ÿฟโ€๐Ÿ’ป ๐Ÿ‘จ๐Ÿฟโ€๐Ÿ’ป ๐Ÿง‘๐Ÿฟโ€๐Ÿ’ป
โŒจ๏ธ 

phone
๐Ÿ“ฑ ๐Ÿ“ฒ ๐Ÿ“ž โ˜Ž๏ธ

symbols
โŒ โญ•๏ธ ๐Ÿ›‘ โ›”๏ธ ๐Ÿ“› ๐Ÿ’ฏ ๐Ÿ’ข โ™จ๏ธ 
โš ๏ธ โ˜ข๏ธ โ˜ฃ๏ธ
โ—๏ธ โ• โ“ โ” โ€ผ๏ธ โ‰๏ธ
โž• โž– โœ–๏ธ
โŽ โœณ๏ธ โ‡๏ธ โœด๏ธ
๐Ÿ”€ ๐Ÿ” ๐Ÿ”‚ ๐Ÿ”ƒ ๐Ÿ”„
โฉ โช โซ โฌ
๐Ÿ”ผ ๐Ÿ”ฝ

checkmarks
โœ”๏ธ โœ… โ˜‘๏ธ

speach & bubbles
๐Ÿ“ฃ ๐Ÿ“ข ๐Ÿ’ฌ ๐Ÿ—จ๏ธ ๐Ÿ’ญ ๐Ÿ—ฏ๏ธ ๐Ÿ‘โ€๐Ÿ—จ ๐Ÿ‘๏ธ

primitives
๐Ÿ”˜ ๐Ÿ”ด ๐ŸŸ  ๐ŸŸก ๐ŸŸข ๐Ÿ”ต ๐ŸŸฃ โšซ๏ธ โšช๏ธ ๐ŸŸค 
๐ŸŸฅ ๐ŸŸง ๐ŸŸจ ๐ŸŸฉ ๐ŸŸฆ ๐ŸŸช โฌ›๏ธ โฌœ๏ธ ๐ŸŸซ
๐Ÿ”บ ๐Ÿ”ป 
๐Ÿ”ธ ๐Ÿ”น ๐Ÿ”ถ ๐Ÿ”ท 
๐Ÿ”ณ ๐Ÿ”ฒ โ–ช๏ธ โ–ซ๏ธ โ—พ๏ธ โ—ฝ๏ธ โ—ผ๏ธ โ—ป๏ธ 

traffic
๐Ÿšง ๐Ÿšฆ ๐Ÿšฅ

time & navigation
๐Ÿงญ โฑ โฒ โŒ›๏ธ โณ

electricity
๐Ÿ”‹ ๐Ÿ”Œ

mechanics
๐Ÿงฐ ๐Ÿ”ง ๐Ÿ”จ ๐Ÿ› ๏ธ โš™๏ธ ๐Ÿงฒ ๐Ÿ—œ๏ธ

weapon
๐Ÿ”ซ ๐Ÿ’ฃ ๐Ÿงจ

test
๐Ÿ’Š ๐Ÿฉธ ๐Ÿงฌ ๐Ÿงซ ๐Ÿงช โš—๏ธ ๐ŸŒก๏ธ

security
๐Ÿ”‘ ๐Ÿ—๏ธ ๐Ÿ” ๐Ÿ” ๐Ÿ”’ ๐Ÿ”“

search
๐Ÿ” ๐Ÿ”Ž

office
๐Ÿ—‘ ๐Ÿ—ƒ๏ธ ๐Ÿ“‹ ๐Ÿ“ฅ ๐Ÿ“ค ๐Ÿ“ฆ

mail
๐Ÿงง โœ‰๏ธ ๐Ÿ“ฉ ๐Ÿ“จ ๐Ÿ“ง
๐Ÿ“ช ๐Ÿ“ซ ๐Ÿ“ฌ ๐Ÿ“ญ ๐Ÿ“ฎ ๐Ÿ“ฏ

tag
๐Ÿ”–๐Ÿท๏ธ

books
๐Ÿ““ ๐Ÿ“” ๐Ÿ“’ ๐Ÿ“• ๐Ÿ“— ๐Ÿ“˜ ๐Ÿ“™ ๐Ÿ“š ๐Ÿ“– ๐Ÿ—’๏ธ

edit
๐Ÿ“Œ ๐Ÿ“ โœ‚๏ธ โœ๏ธ ๐Ÿ–‹๏ธ ๐Ÿ–Š๏ธ ๐Ÿ–Œ๏ธ ๐Ÿ–๏ธ โœ’๏ธ

stars
๐Ÿ’ซ โญ๏ธ ๐ŸŒŸ โœจ โšก๏ธ โ˜€๏ธ โ˜„๏ธ ๐ŸŒŒ

elements
๐Ÿ’ฅ ๐Ÿ”ฅ ๐ŸŒช ๐ŸŒˆ ๐Ÿ’ง ๐Ÿ’ฆ โ„๏ธ

tickets
๐ŸŽซ ๐ŸŽŸ

image
๐ŸŽจ ๐Ÿ“ท ๐Ÿ“ธ ๐Ÿ“น ๐ŸŽฅ ๐Ÿ“ฝ๏ธ ๐ŸŽž๏ธ ๐ŸŽฌ 

audio
๐ŸŽค ๐ŸŽง ๐ŸŽผ ๐ŸŽต ๐ŸŽถ ๐Ÿ”ˆ ๐Ÿ”‡ ๐Ÿ”‰ ๐Ÿ”Š

light
๐Ÿ’ก ๐Ÿช”

globe ๐ŸŒ
earth map ๐Ÿ—บ
earth america ๐ŸŒŽ
earth europe & africa ๐ŸŒ
earth asia & pacific ๐ŸŒ

hearts
โค๏ธ ๐Ÿงก ๐Ÿ’› ๐Ÿ’š ๐Ÿ’™ ๐Ÿ’œ ๐Ÿ–ค ๐Ÿค ๐ŸคŽ ๐Ÿ’– ๐Ÿ’ž ๐Ÿ’” card: โ™ฅ๏ธ

flags
๐Ÿณ๏ธ ๐Ÿด ๐Ÿ ๐Ÿšฉ ๐Ÿณ๏ธโ€๐ŸŒˆ ๐Ÿณ๏ธ ๐Ÿดโ€โ˜ ๏ธ

calendar
๐Ÿ“… ๐Ÿ“† ๐Ÿ—“๏ธ

charts
๐Ÿ“ˆ ๐Ÿ“‰ ๐Ÿ“Š

misc
โ™ป๏ธ ๐Ÿณ ๐Ÿฉน ๐Ÿšธ ๐Ÿšจ ๐Ÿ‘” ๐Ÿ‘ฝ๏ธ ๐Ÿ’€ โš—๏ธ ๐Ÿž

unicode characters in code
unicode characters

files
๐Ÿ—‹ ๐Ÿ—Œ ๐Ÿ— ยท ๐Ÿ—Ž ๐Ÿ— ๐Ÿ–น ๐Ÿ— ๐Ÿ–บ ๐Ÿ–ป ยท ๐Ÿ—… ๐Ÿ—† ๐Ÿ—‡ ยท ๐Ÿ—ˆ ๐Ÿ—‰ ๐Ÿ—Š ยท ๐Ÿ—‘

folders
๐Ÿ–ฟ ๐Ÿ— ๐Ÿ—€

hands
โ˜› โ˜ž

computer
๐Ÿ–ฅ ๐Ÿ–ง ๐Ÿ–ณ ๐Ÿ–ด ๐Ÿ–ต ๐Ÿ–ธ ๐Ÿ—”
๐Ÿ—” ๐Ÿ—• ๐Ÿ—– ๐Ÿ—— ๐Ÿ—˜ ๐Ÿ—™ ๐Ÿ—š ๐Ÿ—› ๐Ÿ—œ ๐Ÿ—

phone & mail
โ˜Ž ๐Ÿ•ป ๐Ÿ•ผ ๐Ÿ•ฝ ๐Ÿ•พ ๐Ÿ•ฟ ๐Ÿ–€ ๐Ÿ– 
๐Ÿ–‚ ๐Ÿ–ƒ ๐Ÿ–„ ๐Ÿ–… ๐Ÿ–† 

speach & bubbles
๐Ÿ•ฉ ๐Ÿ•ช ๐Ÿ•ซ ๐Ÿ•ฌ ๐Ÿ•ญ
๐Ÿ—จ ๐Ÿ—ฉ ๐Ÿ—ช ๐Ÿ—ซ ๐Ÿ—ฌ ๐Ÿ—ญ ๐Ÿ—ฎ ๐Ÿ—ฏ ๐Ÿ—ฐ ๐Ÿ—ฑ ๐Ÿ—ฒ ๐Ÿ—ฃ

edit
๐Ÿ–ˆ ๐Ÿ–‰ ๐Ÿ–Š ๐Ÿ–‹ ๐Ÿ–Œ ๐Ÿ–

checkmarks
๐Ÿ—ธ ๐Ÿ—น ๐Ÿ—ด ๐Ÿ—ต ๐Ÿ—ถ ๐Ÿ—ท โŒฆโŒง 

flags
๐Ÿฒ ๐Ÿณ

symbols
โ€ผ๏ธ โ‰๏ธ ๐Ÿต ๐Ÿถ โ‹†
โญ โฎ โฏ โดโตโถโทโธโนโบ
โ– โ–กโ–ชโ–ซ โ—Œโ—‹โ—โ—™โ—ฆ โ–ฒโ–บโ–ผโ—„ ๐Ÿž๐Ÿž‚๐Ÿžƒ๐Ÿž€
๐Ÿž…๐Ÿž…๐Ÿž‡๐Ÿž‰ ๐Ÿž‘๐Ÿž’๐Ÿž“ ๐Ÿž”๐Ÿž•๐Ÿž– 
๐Ÿžค๐Ÿžฅ๐Ÿžฆ๐Ÿžง ๐Ÿžช๐Ÿžซ๐Ÿžฌ๐Ÿžญ๐Ÿžฎ ๐Ÿžฏ๐Ÿžฐ๐Ÿžฑ๐Ÿžฒ๐Ÿžณ๐Ÿžด
๐Ÿžต๐Ÿžถ๐Ÿžท๐Ÿžธ๐Ÿžน๐Ÿžบ ๐Ÿžป๐Ÿžผ๐Ÿžฝ๐Ÿžพ๐Ÿžฟ ๐ŸŸˆ
๐ŸŸ‰๐ŸŸŠ๐ŸŸŒ๐ŸŸ๐ŸŸŽ๐ŸŸ ๐ŸŸ’๐ŸŸ”

arrows
๐Ÿ €๐Ÿ ๐Ÿ ‚๐Ÿ ƒ ๐Ÿ „๐Ÿ …๐Ÿ †๐Ÿ ‡ ๐Ÿ ˆ๐Ÿ ‰๐Ÿ Š๐Ÿ ‹ ๐Ÿ ๐Ÿ ‘๐Ÿ ’๐Ÿ “ ๐Ÿ ”๐Ÿ •๐Ÿ –๐Ÿ — 
๐Ÿ ˜๐Ÿ ™๐Ÿ š๐Ÿ › ๐Ÿ œ๐Ÿ ๐Ÿ ž๐Ÿ Ÿ ๐Ÿ  ๐Ÿ ก๐Ÿ ข๐Ÿ ฃ ๐Ÿ ค๐Ÿ ฅ๐Ÿ ฆ๐Ÿ ง ๐Ÿ ง๐Ÿ จ๐Ÿ ฉ๐Ÿ ช๐Ÿ ซ
๐Ÿ ฌ๐Ÿ ญ๐Ÿ ฎ๐Ÿ ฏ ๐Ÿ ฐ๐Ÿ ฑ๐Ÿ ฒ๐Ÿ ณ ๐Ÿ ด๐Ÿ ต๐Ÿ ถ๐Ÿ ท ๐Ÿ ธ๐Ÿ น๐Ÿ บ๐Ÿ ป ๐Ÿ ผ๐Ÿ ฝ๐Ÿ พ๐Ÿ ฟ
๐Ÿก€๐Ÿก๐Ÿก‚๐Ÿกƒ ๐Ÿก„๐Ÿก…๐Ÿก†๐Ÿก‡ โ‡ฆโ‡งโ‡จโ‡ฉโ‡ณ โ‡ โ‡กโ‡ขโ‡ฃ ๐Ÿข๐Ÿข‘๐Ÿข’๐Ÿข“
๐Ÿก๐Ÿก‘๐Ÿก’๐Ÿก“๐Ÿก”๐Ÿก•๐Ÿก–๐Ÿก—๐Ÿก˜๐Ÿก™ ๐Ÿก ๐Ÿกก๐Ÿกข๐Ÿกฃ๐Ÿกค๐Ÿกฅ๐Ÿกฆ๐Ÿกง ๐Ÿกจ๐Ÿกฉ๐Ÿกช๐Ÿกซ๐Ÿกฌ๐Ÿกญ๐Ÿกฎ๐Ÿกฏ
๐Ÿกฐ๐Ÿกฑ๐Ÿกฒ๐Ÿกณ๐Ÿกด๐Ÿกต๐Ÿกถ๐Ÿกท ๐Ÿกธ๐Ÿกน๐Ÿกบ๐Ÿกป๐Ÿกผ๐Ÿกฝ๐Ÿกพ๐Ÿกฟ ๐Ÿข€๐Ÿข๐Ÿข‚๐Ÿขƒ๐Ÿข„๐Ÿข…๐Ÿข†๐Ÿข‡
โ†โ†‘โ†’โ†“โ†”โ†•โ†จ โ‡ต โ‡ฝโ‡พโ‡ฟ 

misc
โŒจ โŒ• โŒ– โŒ˜ โ˜บโ˜ป โ™ชโ™ซ

connectors
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ•”โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•—
โ”‚  borders  โ”‚ โ•‘  borders  โ•‘
โ”œโ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”ค โ• โ•โ•โ•โ•โ•โ•ฆโ•โ•โ•โ•โ•โ•ฃ
โ”‚  a  โ”‚  b  โ”‚ โ•‘  a  โ•‘  b  โ•‘
โ”œโ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”ค โ• โ•โ•โ•โ•โ•โ•ฌโ•โ•โ•โ•โ•โ•ฃ
โ”‚  c  โ”‚  d  โ”‚ โ•‘  c  โ•‘  d  โ•‘
โ””โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”˜ โ•šโ•โ•โ•โ•โ•โ•ฉโ•โ•โ•โ•โ•โ•
โ•’โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•• โ•“โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•–
โ”‚  borders  โ”‚ โ•‘  borders  โ•‘
โ•žโ•โ•โ•โ•โ•โ•คโ•โ•โ•โ•โ•โ•ก โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ฅโ”€โ”€โ”€โ”€โ”€โ•ข
โ”‚  a  โ”‚  b  โ”‚ โ•‘  a  โ•‘  b  โ•‘
โ•žโ•โ•โ•โ•โ•โ•ชโ•โ•โ•โ•โ•โ•ก โ•Ÿโ”€โ”€โ”€โ”€โ”€โ•ซโ”€โ”€โ”€โ”€โ”€โ•ข
โ”‚  c  โ”‚  d  โ”‚ โ•‘  c  โ•‘  d  โ•‘
โ•˜โ•โ•โ•โ•โ•โ•งโ•โ•โ•โ•โ•โ•› โ•™โ”€โ”€โ”€โ”€โ”€โ•จโ”€โ”€โ”€โ”€โ”€โ•œ

โ”€ โ”‚ โ”Œ โ” โ”” โ”˜ โ”œ โ”ค โ”ฌ โ”ด โ”ผ
โ• โ•‘ โ•” โ•— โ•š โ• โ•  โ•ฃ โ•ฆ โ•ฉ โ•ฌ 
    โ•’ โ•• โ•˜ โ•› โ•ž โ•ก โ•ค โ•ง โ•ช
    โ•“ โ•– โ•™ โ•œ โ•Ÿ โ•ข โ•ฅ โ•จ โ•ซ


โ”โ”โ”โ”โ”โ”โ€ขโƒยฐโ€ขยฐโ€ยฐโ€ขยฐโƒโ€ขโ”โ”โ”โ”โ”โ”“

โœงหš       ๐Ÿ๐ŸŽ         หšโœง

โ”—โ”โ”โ”โ”โ”โ€ขโƒยฐโ€ขยฐโ€ยฐโ€ขยฐโƒโ€ขโ”โ”โ”โ”โ”โ”›


  1. Here is the footnote. โ†ฉ๏ธŽ

  2. Hereโ€™s one with multiple lines
    HTML Hyper Text Markup Language
    W3C World Wide Web Consortium โ†ฉ๏ธŽ