├── LICENSE.md ├── README.md ├── _MD_Gen.ahk ├── ahkpm.json ├── example.ahk ├── index.html ├── index.md ├── pic.jpg ├── style.css └── test unicode emoji.txt /LICENSE.md: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 TheArkive 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # M-ArkDown_ahk2 2 | 3 | A markdown to HTML generator with a few extra features. 4 | 5 | Markdown reference links/images are currently supported! 6 | 7 | [Markdown Cheat Sheet](https://github.com/sk1418/markdown-cheatsheet) 8 | 9 | [Main Page](https://thearkive.github.io/M-ArkDown_ahk2/) 10 | -------------------------------------------------------------------------------- /_MD_Gen.ahk: -------------------------------------------------------------------------------- 1 | ; ================================================ 2 | ; Example Script - this just asks for a file and 3 | ; uses make_html() to convert the M-ArkDown into html. 4 | ; ================================================ 5 | 6 | ; file_path := FileSelect("1",A_ScriptDir '\index.md',"Select markdown file:","Markdown (*.md)") 7 | ; If !file_path 8 | ; ExitApp 9 | 10 | ; SplitPath file_path,,&dir,,&file_title 11 | 12 | ; If FileExist(dir "\" file_title ".html") 13 | ; FileDelete dir "\" file_title ".html" 14 | 15 | ; md_txt := FileRead(file_path) 16 | 17 | ; css := FileRead("style.css") 18 | 19 | ; options := {css:css 20 | ; , font_name:"Segoe UI" 21 | ; , font_size:16 22 | ; , font_weight:400 23 | ; , line_height:"1.6"} ; 1.6em - put decimals in "" for easier accuracy/handling. 24 | 25 | ; html := make_html(md_txt, options, true) ; true/false = use some github elements 26 | 27 | ; FileAppend html, dir "\" file_title ".html", "UTF-8" 28 | 29 | ; Run dir "\" file_title ".html" ; open and test 30 | 31 | ; dbg(_in) { ; AHK v2 32 | ; Loop Parse _in, "`n", "`r" 33 | ; OutputDebug "AHK: " A_LoopField 34 | ; } 35 | 36 | ; ================================================ 37 | ; make_html(_in_html, options_obj:="", github:=false) 38 | ; 39 | ; Ignore the last 2 params. Those are used internally. 40 | ; 41 | ; See above for constructing the options_obj. 42 | ; 43 | ; The "github" param is a work in progress, and tries to enforce some of the expected basics 44 | ; that are circumvented with my "flavor" of markdown. 45 | ; 46 | ; Current effects when [ github := true ]: 47 | ; * H1 and H2 always have underline (the [underline] tag still takes effect when specified) 48 | ; * the '=' is not usable for making an
, but --- *** and ___ still make
49 | ; 50 | ; ================================================ 51 | 52 | make_html(_in_text, options:="", github:=false, final:=true, md_type:="") { 53 | 54 | If !RegExMatch(_in_text,"[`r`n]+$") && (final) && md_type!="header" { ; add trailing CRLF if doesn't exist 55 | _in_text .= "`r`n" 56 | } 57 | 58 | html1 := "`r`n`r`n" 60 | toc_html1 := '
' 61 | . '
' ; hamburger (3 horizontal lines) icon 62 | . '
' 63 | toc_html2 := "
" ; end toc-container and toc-contents 64 | html3 := '
`r`n' ;
65 | html4 := "
" ;
66 | 67 | body := "" 68 | toc := [], do_toc := false 69 | do_nav := false, nav_arr := [] 70 | ref := Map(), ref.CaseSense := false 71 | foot := Map(), ref.CaseSense := false 72 | 73 | link_ico := "•" ; 🔗 • 74 | 75 | Static chk_id := 0 ; increments throughout entire document 76 | 77 | If (final) 78 | css := options.css 79 | 80 | a := StrSplit(_in_text,"`n","`r") 81 | i := 0 82 | 83 | ref_link_rgx := '^\x5B(\^)?([\w ]+)\x5D:([^"]+)(?:"([^"]+)")?' 84 | in_code := false, code_tag := "" 85 | 86 | While (i < a.Length) { ; parse for ref-style links and footnotes first 87 | i++, line := strip_comment(a[i]) 88 | 89 | If !in_code && RegExMatch(line,"^(``{3,4})$",&c) 90 | in_code := true, code_tag := c[1] ; , msgbox("IN CODE`n`n" line "`n" a[i+1] "`n" a[i+2] "`n" a[i+3]) 91 | 92 | Else If in_code && RegExMatch(line,"^(``{3,4})",&c) && c[1]=code_tag 93 | in_code := false, code_tag := "" 94 | 95 | If !in_code && RegExMatch(line,ref_link_rgx,&m) { 96 | If m[1] 97 | foot[m[2]] := {link:m[3],title:m[4]} ; foot notes 98 | Else 99 | ref[m[2]] := {link:m[3],title:m[4]} ; reference-style links / images 100 | } 101 | } 102 | 103 | i := 0 104 | While (i < a.Length) { ; ( ) \x28 \x29 ; [ ] \x5B \x5D ; { } \x7B \x7D 105 | 106 | i++, line := a[i] 107 | 108 | If line="" 109 | options.debug := true 110 | 111 | line := strip_comment(line) 112 | ul := "", ul2 := "" 113 | ol := "", ol2 := "", ol_type := "" 114 | 115 | If RegExMatch(line,ref_link_rgx) ; skip ref-style links and footnotes 116 | Continue 117 | 118 | ; If RegExMatch(line,"^') 128 | Break 129 | } 130 | 131 | While (i < a.Length && RegExMatch(line,"\\$")) ; concatenate lines ending in `\` with next line 132 | line := SubStr(line,1,-1) '
' strip_comment(a[++i]) 133 | 134 | If final && RegExMatch(line, "^"),"|") 137 | nav_arr.RemoveAt(1) 138 | Continue 139 | } 140 | 141 | box_block := "" ; ... 142 | If line="" { 143 | While (line != '') { 144 | If !line_inc() 145 | Break 146 | box_block .= (box_block?'`r`n':'') line 147 | } 148 | 149 | If (box_block = "") ; skip an empty box block 150 | Continue 151 | 152 | box_block := StrReplace(box_block,'`r`n','`r`n
') 153 | 154 | body .= (body?'`r`n':'') '
' inline_code(box_block) "
" 155 | } 156 | 157 | code_block := "" ; code block 158 | If RegExMatch(line,"i)^(``````)([a-z]+)?$",&n) || RegExMatch(line,"i)^(````````)([a-z]+)?$",&n) { 159 | match := n[1] 160 | If !line_inc() 161 | Break 162 | 163 | While (line != match) { 164 | code_block .= (code_block?"`r`n":"") line 165 | If !line_inc() 166 | Break 167 | } 168 | 169 | If n[2] = "pp" 170 | code_block := prettyprint(code_block, options) 171 | Else 172 | code_block := conv(code_block) 173 | 174 | body .= (body?"`r`n":"") "
" code_block "
" 175 | Continue 176 | } 177 | 178 | ; header h1 - h6 179 | If RegExMatch(line, "^(#+) (.+?)(?:\x5B[ \t]*(\w+)[ \t]*\x5D)?$", &n) { 180 | depth := StrLen(n[1]) 181 | , title := inline_code(Trim(n[2]," `t")) 182 | , _class := (depth <= 2 || n[3]="underline") ? "underline" : "" 183 | 184 | id := rem_txt_color(title) ; remove color text code for the id 185 | id := undo(id) 186 | id := RegExReplace(RegExReplace(StrLower(StrReplace(id," - ","-")),"[\[\]\{\}\(\)\@\!\.]",""),"[ \.]","-") 187 | 188 | opener := "' 189 | 190 | body .= (body?"`r`n":"") opener title 191 | . '' link_ico '' 192 | . '' 193 | 194 | toc.Push([depth, title, id]) 195 | Continue 196 | } 197 | 198 | ; alt header h1 and h2 199 | ; ------ or ======= as underline in next_line 200 | next_line := a.Has(i+1) ? strip_comment(a[i+1]) : "" 201 | If next_line && line && RegExMatch(next_line,"^(\-+|=+)$") { 202 | depth := (SubStr(next_line,1,1) = "=") ? 1 : 2 203 | 204 | id := rem_txt_color(line) ; remove color text code for the id 205 | id := undo(id) 206 | id := RegExReplace(RegExReplace(StrLower(id),"[\[\]\{\}\(\)\@\!<>\|]",""),"[ \.]","-") 207 | opener := "' 208 | 209 | body .= (body?"`r`n":"") opener inline_code(line) 210 | . '' link_ico '' 211 | . '' 212 | 213 | toc.Push([depth, line, id]), i++ ; increase line count to skip the ---- or ==== form next_line 214 | Continue 215 | } 216 | 217 | ; check list 218 | If RegExMatch(line,"^\- \x5B([ xX])\x5D (.+)",&n) { 219 | body .= (body?"`r`n":"") '
    ' 220 | While RegExMatch(line,"^\- \x5B([ xX])\x5D (.+)",&n) { 221 | chk := (n[1]="x") ? 'checked=""' : '' 222 | body .= '`r`n
  • ' 223 | . '
  • ' 224 | chk_id++ 225 | If !line_inc() 226 | Break 227 | } 228 | body .= '
' 229 | Continue 230 | } 231 | 232 | ; spoiler 233 | spoiler_text := "" 234 | If RegExMatch(line, "^]+)>$", &match) { 235 | disp_text := match[1] 236 | If !line_inc() 237 | Break 238 | 239 | While !RegExMatch(line, "^$") { 240 | spoiler_text .= (spoiler_text?"`r`n":"") line 241 | If !line_inc() 242 | throw Error("No closing tag found.",-1) 243 | } 244 | 245 | body .= (body?"`r`n":"") '

' 246 | . disp_text "" make_html(spoiler_text,options,github,false,"spoiler") "

" 247 | Continue 248 | } 249 | 250 | ; hr 251 | if RegExMatch(line, "^(\-{3,}|_{3,}|\*{3,}|={3,})(?:\x5B[ \t]*([^\x5D]+)*[ \t]*\x5D)?$", &match) { 252 | hr_style := "" 253 | 254 | If match[2] { 255 | For i, style in StrSplit(match[2]," ","`t") { 256 | If (SubStr(style, -2) = "px") 257 | hr_style .= (hr_style?" ":"") "border-top-width: " style ";" 258 | Else If RegExMatch(style, "(dotted|dashed|solid|double|groove|ridge|inset|outset|none|hidden)") 259 | hr_style .= (hr_style?" ":"") "border-top-style: " style ";" 260 | Else If InStr(style,"opacity")=1 261 | hr_style .= (hr_style?" ":"") style ";" 262 | Else 263 | hr_style .= (hr_style?" ":"") "border-top-color: " style ";" 264 | } 265 | 266 | } Else { 267 | hr_style := "opacity: 0.25;" 268 | } 269 | 270 | body .= (body?"`r`n":"") '
' 271 | Continue 272 | } 273 | 274 | ; blockquote 275 | If RegExMatch(line, "^\> *(.*)") { 276 | blockquote := "" 277 | While RegExMatch(line, "^\> *(.*)", &match) { 278 | blockquote .= (blockquote?"`r`n":"") match[1] 279 | If !line_inc() 280 | Break 281 | } 282 | 283 | body .= (body?"`r`n":"") "
" make_html(blockquote,options,github, false, "blockquote") "
" 284 | Continue 285 | } 286 | 287 | ; table 288 | If RegExMatch(line, "^\|.*?\|$") { 289 | table := "", lines := 0 290 | While RegExMatch(line, "^\|.*?\|$") { 291 | table .= (table?"`r`n":"") line, lines++ 292 | If !line_inc() 293 | Break 294 | } 295 | 296 | If lines < 3 297 | Continue 298 | 299 | If (table) { 300 | b := [], h := [], body .= (body?"`r`n":"") '' 301 | 302 | Loop Parse table, "`n", "`r" 303 | { 304 | body .= "" 305 | c := StrSplit(A_LoopField,"|"), c.RemoveAt(1), c.RemoveAt(c.Length) 306 | 307 | If (A_Index = 1) { 308 | For i, t in c { ; table headers 309 | txt := inline_code(Trim(t," `t")) ; , align := "center" 310 | If RegExMatch(txt,"^(:)?(.+?)(:)?$",&n) { 311 | align := (n[1]&&n[3]) ? "center" : (n[3]) ? "right" : "left" 312 | txt := n[2], h.Push([align,txt]) 313 | } Else 314 | h.Push(["",txt]) 315 | } 316 | 317 | } Else If (A_Index = 2) { 318 | For i, t in c { 319 | align := "left" ; column alignment 320 | If RegExMatch(t,"^(:)?\-+(:)?$",&n) 321 | align := (n[1]&&n[2]) ? "center" : (n[2]) ? "right" : "left" 322 | b.Push(align) 323 | body .= '' 324 | } 325 | 326 | } Else { 327 | For i, t in c 328 | body .= '' 329 | 330 | } 331 | body .= "" 332 | } 333 | body .= "
' h[i][2] '' Trim(inline_code(t)," `t") '
" 334 | Continue 335 | } 336 | } 337 | 338 | ; ordered and unordered lists 339 | list_rgx := '^( *)' ; leading spaces (no tabs) 340 | . '([\*\+\-]|\d+(?:\.|\x29))' ; */+/- or 1. or 1) 341 | . '( +)' ; at least one more space 342 | . '(.+)' ; list content 343 | 344 | list := [] 345 | While RegExMatch(line,list_rgx,&n) { 346 | itm := LT_spec(n[2]) ; bullet item ... [ -, *, +, 1., or 1) ] 347 | tag := LT_tag(n[2]) ; ol or ul 348 | pre := n.Len[1] ; spaces before bullet item 349 | lead := pre + n.Len[2] + n.Len[3] ; # chars before actual list text 350 | 351 | txt := n[4] 352 | While RegExMatch(txt,"\\$") && (i < a.Length) ; append lines ending in '\' 353 | txt := SubStr(txt,1,-1) '
' strip_comment(a[++i]) 354 | 355 | list.Push({itm:t, tag:tag, pre:pre, lead:lead, txt:txt, line:n[2] ' ' txt}) 356 | 357 | If !line_inc() 358 | Break 359 | } 360 | 361 | d := 1 ; depth - for make_list() 362 | err := false ; checking for poorly formatted ordered lists 363 | While list.Length { ; add all lists, normally is one, but can be multiple 364 | body .= '`r`n' make_list(list) 365 | If err 366 | Break 367 | Continue 368 | } 369 | 370 | If list.Length { ; if no errs in list, then list array should be blank at this point 371 | body .= '`r`n' AtoT(list) ; dump remaining plain text 372 | Continue 373 | } 374 | 375 | ; ======================================================================= 376 | ; ... 377 | ; ======================================================================= 378 | 379 | If RegExMatch(md_type,"^(ol|ul)") { ; ordered/unordered lists 380 | body .= (body?"`r`n":"") inline_code(line) 381 | Continue 382 | } 383 | 384 | body .= (body?"`r`n":"") "

" inline_code(line) "

" 385 | } 386 | 387 | ; processing toc ; try to process exact height 388 | final_toc := "", toc_width := 0, toc_height := 0 389 | If (Final && do_toc) { 390 | temp := Gui() 391 | temp.SetFont("s" options.font_size, options.font_name) 392 | 393 | depth := toc[1][1] 394 | diff := (depth > 1) ? depth - 1 : 0 395 | indent := "     " 396 | 397 | For i, item in toc { ; 1=depth, 2=title, 3=id 398 | depth := item[1] - diff - 1 399 | ctl := temp.Add( "Text",, rpt(" ",depth) "• " undo(rem_txt_color(item[2])) ) 400 | ctl.GetPos(,,&w, &h) 401 | toc_width := (w > toc_width) ? w : toc_width 402 | toc_height += options.font_size * 2 403 | 404 | final_toc .= (final_toc?"`r`n":"") '' 405 | . '
' (depth?rpt(indent,depth):"") 406 | . "• " item[2] "
" 407 | } 408 | 409 | temp.Destroy() 410 | } 411 | 412 | ; processing navigation menu 413 | nav_str := "" 414 | If (final && do_nav) { 415 | temp := Gui() 416 | temp.SetFont("s" options.font_size, options.font_name) 417 | 418 | Loop nav_arr.Length { 419 | txt := nav_arr[A_Index] 420 | title := SubStr(txt, 1, (sep := InStr(txt, "=")) - 1) 421 | 422 | ctl := temp.Add("Text",,title) 423 | ctl.GetPos(,,&w) 424 | toc_width := (w > toc_width) ? w : toc_width 425 | toc_height += options.font_size * 2 426 | 427 | nav_str .= (final_toc?"`r`n":"") '' 428 | . '
' title '
' 429 | } 430 | 431 | (do_toc) ? nav_str .= "
" : "" 432 | temp.Destroy() 433 | } 434 | 435 | ; processing TOC 436 | user_menu := "" 437 | If Final && (do_nav || do_toc) 438 | user_menu := toc_html1 nav_str final_toc toc_html2 439 | 440 | If final { 441 | If (do_nav && do_toc) 442 | toc_height += Round(options.font_size * Float(options.line_height)) ; multiply by body line-height 443 | 444 | css := StrReplace(css, "[_toc_width_]",toc_width + 25) ; account for scrollbar width 445 | css := StrReplace(css, "[_toc_height_]",Round(toc_height)) 446 | css := StrReplace(css, "[_font_name_]", options.font_name) 447 | css := StrReplace(css, "[_font_size_]", options.font_size) 448 | css := StrReplace(css, "[_font_weight_]", options.font_weight) 449 | css := StrReplace(css, "[_line_height_]", Round(options.line_height,1)) 450 | 451 | If (do_toc || do_nav) 452 | result := html1 . css . html2 . user_menu . html3 . body . html4 453 | Else 454 | result := html1 . css . html2 . html3 . body . html4 455 | } Else 456 | result := body 457 | 458 | return result 459 | 460 | ; ======================================================================= 461 | ; Local Functions 462 | ; ======================================================================= 463 | 464 | ; GitHub spec for lists: 465 | ; https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#lists 466 | make_list(_L_) { ; o props = {itm, tag, pre, lead, txt} 467 | _tag := _L_[1].tag, _itm := _L_[1].itm 468 | _pre := _L_[1].pre, _lead := _L_[1].lead, t := "" 469 | _txt := inline_code(_L_[1].txt) ; process escapes first line of list to determine optional list style 470 | 471 | rgx := '\x5B *(?:type=([1AaIi]|disc|circle|square|none)) *\x5D$' 472 | If (_typ := RegExMatch(_txt,rgx,&y) ? y[1] : '') ; if list style found ... 473 | _L_[1].txt := RegExReplace(_L_[1].txt,rgx) ; ... remove it after recording it 474 | 475 | If (_tag = 'ol') 476 | t := (_typ) ? (' type="' _typ '"') : (' type="' ((d=1) ? '1' : (d=2) ? 'i' : 'a') '"') 477 | Else 478 | t := (_typ) ? (' style="list-style-type:' _typ ';"') : '' 479 | 480 | list_html := '<' _L_[1].tag t '>' ; GitHub list levels ... 1. > i. > a. 481 | end_tag := '' 482 | 483 | _i := 0 484 | While (_L_.Length) { 485 | o := _L_[1] 486 | 487 | If (o.pre >= _lead) { ; step in on proper indent (check GitHub spec) o.pre != _pre 488 | d++ ; increase depth 489 | If (r:=make_list(_L_)) && err ; if ordered list isn't properly numbered return only the 'good' part of the list 490 | return list_html '`r`n' end_tag ; ... and quit parsing 491 | list_html .= r 492 | 493 | Continue 494 | } Else If (o.pre < _pre) { ; stepping back 495 | d-- ; decrease depth 496 | return '`r`n' list_html '`r`n' end_tag 497 | } Else If (o.tag != _tag) ; if changing unordered list types ... 498 | || (o.tag="ul" && o.itm != _itm) { ; ... or if next bullet type (*, +, -) doesn't match previous 499 | d := 1 ; reset depth for new list 500 | return '`r`n' list_html '`r`n' end_tag ; ... this starts a new list, according to GitHub spec 501 | } 502 | 503 | _i++ 504 | 505 | If ( o.tag = 'ol' && _i != Integer(o.itm) ) { ; if ordered list numbers are not in sequence ... 506 | err := true ; ... flag err and return the 'good' part of the list 507 | return '`r`n' list_html '`r`n' end_tag 508 | } 509 | 510 | list_html .= '`r`n
  • ' inline_code(o.txt) '
  • ' 511 | 512 | _tag := o.tag, _itm := o.itm 513 | _pre := o.pre, _lead := o.lead 514 | _L_.RemoveAt(1) 515 | } 516 | 517 | list_html .= '`r`n' end_tag 518 | 519 | return list_html 520 | } 521 | 522 | AtoT(_a_) { ; for dumping the remaining text of a poorly formated list 523 | _txt_ := '

    ' 524 | For i, o in _a_ 525 | _txt_ .= ((i>1)?'
    ':'') inline_code(o.line) 526 | return _txt_ '

    ' 527 | } 528 | 529 | LT_tag(_in_) => IsInteger(t:=Trim(_in_,".)")) ? "ol" : IsAlpha(t) ? "" : "ul" ; list type 530 | 531 | LT_spec(_in_) => IsInteger(t:=Trim(_in_,".)")) ? Integer(t) : t 532 | 533 | rem_txt_color(_in_) => RegExReplace(RegExReplace(_in_,''),"") 534 | 535 | inline_code(_in, is_code := false) { 536 | output := _in, check := "" 537 | 538 | While (check != output) { ; repeat until no changes are made 539 | check := output 540 | 541 | ; inline code / inline code colors 542 | While RegExMatch(output, "``(.+?)``", &x) { 543 | 544 | is_code := true 545 | 546 | If RegExMatch(x[1],"^\#[\da-fA-F]{3,3}$") 547 | || RegExMatch(x[1],"^\#[\da-fA-F]{6,6}$") 548 | || RegExMatch(x[1],"^rgb\(\d{1,3}, *\d{1,3}, *\d{1,3}\)$") 549 | || RegExMatch(x[1],"^hsl\(\d{1,3}, *\d{1,3}%, *\d{1,3}%\)$") { 550 | repl := '' x[1] ' ' 556 | output := StrReplace(output, x[0], repl,,,1) 557 | } Else { 558 | repl := conv(x[1]) 559 | output := StrReplace(output, x[0], "" repl "",,,1) 560 | } 561 | } 562 | 563 | ; box ... 564 | While RegExMatch(output, "(.+?)", &x) 565 | output := StrReplace(output,x[0],'' x[1] '') 566 | 567 | ; pretty print ... 568 | While RegExMatch(output, "(.+?)", &x) 569 | output := StrReplace(output,x[0],'' prettyprint(x[1],options) '') 570 | 571 | ; escape characters 572 | While RegExMatch(output,"(\\)(.)",&x) 573 | output := StrReplace(output,x[0],"&#" Ord(x[2]) ";") 574 | 575 | ; colored text 576 | While RegExMatch(output, "(.+?)", &x) && (StrLen(x[1])=3 || StrLen(x[1])=6) && !IsInCode() { 577 | output := StrReplace(output, x[0], '' x[2] '',,,1) 578 | } 579 | 580 | ; image 581 | While RegExMatch(output, "!\x5B *([^\x5D]*) *\x5D\x28 *([^\x29]+) *\x29(?:\x28 *([^\x29]+) *\x29)?", &x) && !IsInCode() { 582 | dims := (dm:=Trim(x[3],"()")) ? " " dm : "" 583 | output := StrReplace(output, x[0], '' x[1] '',,,1) 584 | } 585 | 586 | ; image reference-style 587 | While RegExMatch(output, "!\x5B *([^\x5D]*) *\x5D\x5B *([^\x5D]+) *\x5D(?:\x28 *([^\x29]+) *\x29)?", &x) 588 | && ref.Has(x[2]) ; ref link stored 589 | && !IsInCode() { 590 | dims := x[3] ? " " x[3] : "" 591 | output := StrReplace(output, x[0], '' x[1] '',,,1) 592 | } 593 | 594 | ; link / url 595 | While RegExMatch(output, "\x5B *([^\x5D]+) *\x5D\x28 *([^\x29]+) *\x29", &x) && !IsInCode() { 596 | rel := RegExMatch(x[2],"^#[\w\-]+") ? "" : 'noopener noreferrer' 597 | tgt := RegExMatch(x[2],"^#[\w\-]+") ? "" : '_blank' 598 | output := StrReplace(output, x[0], '' x[1] "",,,1) 599 | } 600 | 601 | ; link / url reference-style 1 602 | While RegExMatch(output, "\x5B *([^\x5D]+) *\x5D\x5B *([^\x5D]+) *\x5D", &x) 603 | && ref.Has(x[2]) 604 | && !IsInCode() { 605 | ; rel := 606 | output := StrReplace(output, x[0] 607 | , '' x[1] "",,,1) 608 | } 609 | 610 | ; link / url reference-style 2 611 | While RegExMatch(output, "\x5B *([^\x5D]+) *\x5D", &x) 612 | && ref.Has(x[1]) 613 | && !IsInCode() 614 | output := StrReplace(output, x[0] 615 | , '' 616 | . (ref[x[1]].title?ref[x[1]].title:x[1]) "",,,1) 617 | 618 | ; strong + emphasis (bold + italics) 619 | While (RegExMatch(output, "(?" x[1] "",,,1) 622 | } 623 | 624 | ; strong (bold) 625 | While (RegExMatch(output, "(?" x[1] "",,,1) 628 | } 629 | 630 | ; emphasis (italics) 631 | While (RegExMatch(output, "(?" x[1] "",,,1) 634 | } 635 | 636 | ; strikethrough 637 | While RegExMatch(output, "(?" x[1] "",,,1) 639 | } 640 | 641 | return output 642 | 643 | IsInCode() => ((st := x.Pos[0]-6) < 1) ? false : RegExMatch(output," *\Q" x[0] "\E",,st) ? true : false 644 | } 645 | 646 | line_inc(concat:="") { 647 | (i < a.Length) ? (line := (concat?concat:"") strip_comment(a[++i]), result:=true) : (line := "", result:=false) 648 | return result 649 | } 650 | 651 | strip_comment(_in_) => RTrim(RegExReplace(_in_,"^(.+)<\!\-\-[^>]+\-\->","$1")," `t") 652 | 653 | ; conv(_in_) => StrReplace(StrReplace(StrReplace(_in_,'&','&'),'<','<'),'>','>') 654 | 655 | rpt(x,y) => StrReplace(Format("{:-" y "}","")," ",x) ; string repeat ... x=str, y=iterations 656 | 657 | e(_) { 658 | r := "" 659 | For ch in StrSplit(_) 660 | r .= ("&#x" Format("{:X}",Ord(ch)) ";") 661 | return r 662 | } 663 | 664 | conv(_) { 665 | static chr_list := ['&','<','>','"',"'",'\',"``",'=','+','-','/','*',',',':','^','|','!','?','.','~'] 666 | For ch in chr_list 667 | _ := StrReplace(_,ch,e(ch)) 668 | return _ 669 | } 670 | } 671 | 672 | prettyprint(_in_, options) { 673 | Static rgm := RegExMatch 674 | cd := options.code 675 | out := "" 676 | 677 | in_line_comment := false 678 | in_comment := false 679 | 680 | in_string := false 681 | c_str := "" 682 | 683 | line := "" 684 | 685 | i := 1, c := "" 686 | 687 | arr := StrSplit(_in_) 688 | 689 | Loop arr.Length { 690 | 691 | L := c ; last character 692 | , c := arr[i] 693 | ; , L := SubStr(line,-1) 694 | ; , L2 := SubStr(line,-2) 695 | ; , L3 := SubStr(line,-3) 696 | , N := arr.Has(i+1) ? arr[i+1] : "" 697 | 698 | If (in_string && c!=c_str) 699 | || (in_line_comment && c!='`n' && c!='`r') 700 | || (in_comment && c!='/' && L!='*') { 701 | line .= c, i++ 702 | Continue 703 | } 704 | 705 | Switch c { 706 | Case '`r', '`n': 707 | If in_line_comment { 708 | out .= span(cd.comment, conv(line) ) 709 | line := "" 710 | in_line_comment := false 711 | } 712 | 713 | out .= conv(line) c 714 | line := "" 715 | 716 | Case '"', "'": 717 | If (c_str="") { 718 | out .= conv(line) 719 | c_str := line := c 720 | in_string := true 721 | 722 | } Else If (c = c_str) && (L != "``") { 723 | out .= span(cd.str, conv(line c) ) 724 | c_str := line := "" 725 | in_string := false 726 | 727 | } 728 | 729 | Case ';': 730 | out .= conv(line) 731 | line := c 732 | in_line_comment := true 733 | 734 | Case '*': 735 | If (L='/') { 736 | out .= conv(SubStr(line,1,-1)), line := '/*' 737 | in_comment := true 738 | 739 | } Else 740 | line .= c 741 | 742 | Case '/': 743 | If (L='*') && in_comment { 744 | out .= span(cd.comment, conv(line c) ) 745 | line := "" 746 | in_comment := false 747 | 748 | } Else 749 | line .= c 750 | 751 | Case '+','-','*','/','=','!','~','&','^','|','>','<','?': 752 | Static punct := '+-*/=!~&^|>>>=|<<=|>>=|>>>|<<|>>|\^=|\&=|\x7C=|\.=|//=|/=|\*=|\-=|\+=|:=|//|\*\*|\+\+|\-\-|\*|/|\^|\!|\x7C|~)" 754 | , rgx_comp := "(!==|!=|~=|==|<=|>=|&&|\x7C\x7C|\?\?|:|\?|>|<|=)" 755 | 756 | If (!InStr(N,punct) && (N!="")) || (N="") { 757 | If RegExMatch(line c,rgx_math "$",&y) { 758 | out .= conv(SubStr(line c,1,y.Pos-1)) 759 | out .= span(cd.math, conv(y[1]) ) 760 | line := "" 761 | } Else If RegExMatch(line c,rgx_comp "$",&y) { 762 | out .= conv(SubStr(line c,1,y.Pos-1)) 763 | out .= span(cd.compare, conv(y[1]) ) 764 | line := "" 765 | } Else If (c='-' && !IsInteger(N)) || (c='+') { 766 | out .= conv(line) span(cd.math, c ) 767 | line := "" 768 | } Else 769 | line .= c 770 | } Else 771 | line .= c 772 | 773 | Case '(',')','[',']','{','}': 774 | out .= conv(line) span(cd.bc, conv(c) ) 775 | line := "" 776 | 777 | Case ',': 778 | out .= conv(line) span(cd.comma, c ) 779 | line := "" 780 | 781 | Case '.': 782 | If (IsAlnum(L) || L="_" || L=")" || L="]") && (IsAlpha(N) || N="_") { 783 | out .= conv(line) span(cd.objdot, conv(c) ) 784 | line := "" 785 | } Else 786 | line .= c 787 | 788 | Default: 789 | line .= c 790 | } 791 | 792 | i++ 793 | } 794 | 795 | If in_line_comment { 796 | out .= span(cd.comment, conv(line) ), line := "" 797 | } 798 | 799 | out .= conv(line) 800 | 801 | return out 802 | 803 | ; conv(_in_) => StrReplace(StrReplace(StrReplace(_in_,'&','&'),'<','<'),'>','>') 804 | 805 | span(_clr, _) => '' _ '' 806 | 807 | e(_) { 808 | r := "" 809 | For ch in StrSplit(_) 810 | r .= ("&#x" Format("{:X}",Ord(ch)) ";") 811 | return r 812 | } 813 | 814 | conv(_) { 815 | static chr_list := ['&','<','>','"',"'",'\',"``",'=','+','-','/','*',',',':','^','|','!','?','.','~'] 816 | For ch in chr_list 817 | _ := StrReplace(_,ch,e(ch)) 818 | return _ 819 | } 820 | } 821 | 822 | convert(_) { 823 | static chr_list := ['&','<','>','"',"'",'\',"``",'=','+','-','/','*',',',':','^','|','!','?','.','~'] 824 | For ch in chr_list 825 | _ := StrReplace(_,ch,e(ch)) 826 | return _ 827 | 828 | e(_) { 829 | r := "" 830 | For ch in StrSplit(_) 831 | r .= ("&#x" Format("{:X}",Ord(ch)) ";") 832 | return r 833 | } 834 | } 835 | 836 | undo(_) { 837 | static chr_list := ['<','>','"',"'",'\',"``",'=','+','-','/','*',',',':','^','|','!','?','&','.','~'] 838 | For ch in chr_list 839 | _ := StrReplace(_,e(ch),ch) 840 | return _ 841 | 842 | e(_) { 843 | r := "" 844 | For ch in StrSplit(_) 845 | r .= ("&#x" Format("{:X}",Ord(ch)) ";") 846 | return r 847 | } 848 | } 849 | 850 | -------------------------------------------------------------------------------- /ahkpm.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "1.1.0", 3 | "description": "A special flavor of markdown for generating docs or GitHub Pages", 4 | "repository": "https://github.com/TheArkive/M-ArkDown_ahk2", 5 | "website": "https://thearkive.github.io/M-ArkDown_ahk2/", 6 | "license": "MIT", 7 | "issueTracker": "https://github.com/TheArkive/M-ArkDown_ahk2/issues", 8 | "include": "_MD_Gen.ahk", 9 | "author": { 10 | "name": "TheArkive", 11 | "email": "", 12 | "website": "" 13 | }, 14 | "scripts": {}, 15 | "dependencies": {} 16 | } -------------------------------------------------------------------------------- /example.ahk: -------------------------------------------------------------------------------- 1 | #Include _MD_Gen.ahk 2 | 3 | dir := A_ScriptDir 4 | 5 | If FileExist(A_ScriptDir "\temp.html") 6 | FileDelete(A_ScriptDir "\temp.html") 7 | 8 | md_txt := FileRead("index.md") 9 | 10 | css := FileRead("style.css") 11 | 12 | code := {comma:"#60F" 13 | , par:"#60F" ; () 14 | , bk:"#60F" ; [] 15 | , bc:"#60F" ; {} 16 | , tag:"#F00" ; <...> 17 | , str:"#066" ; '' and "" 18 | , math:"#06F" ; + - * / & ^ | ! 19 | , compare:"#0CF" ; && || == > < >= <= 20 | , assign:"#06F" ; = := 21 | , number:"#0FF" ; not yet supported 22 | , objdot:"#06F" 23 | , comment:"#080" 24 | , flat_comments:true 25 | } 26 | 27 | options := {css:css 28 | , font_name:"Segoe UI" 29 | , font_size:16 30 | , font_weight:400 31 | , line_height:1.6 32 | , code:code 33 | , debug:false} 34 | 35 | html := make_html(md_txt, options, true) ; true/false = use some github elements 36 | 37 | FileAppend html, A_ScriptDir "\temp.html", "UTF-8" 38 | 39 | Run '"' A_ScriptDir '\temp.html"' ; open and test 40 | 41 | 42 | 43 | dbg(_in) { ; AHK v2 44 | Loop Parse _in, "`n", "`r" 45 | OutputDebug "AHK: " A_LoopField 46 | } -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 |  284 | 285 |
    317 |

    318 |

    (M)ArkDown Cheatsheet

    319 |

    320 |

    This markdown spec has been designed to adhere to the GitHub standard of markdown, except for elements that deal with GitHub specific items, like commits, comments, etc.

    321 |

    322 |

    A few features have been added for flexibility and convenience.

    323 |

    324 |

    Inline code and Code Blocks

    325 |

    326 |

    The \ character is used to escape any character and translate it to the corresponding HTML entity, ie. &#[code];.

    327 |

    328 |

    So this *text* is not formatted since it has the _backslash_ prior to the markup elements.

    329 |

    330 |
    So this \*text\* is not formatted since it has the \_backslash\_ prior to the markup elements.
    331 |

    332 |

    It is not necessary to escape characters when using inline code.

    333 |

    334 |
    It is not necessary to escape characters when using `inline code`.
    335 |

    336 |

    It is also not necessary to escape characters using code blocks.

    337 |

    338 |
    ```
     339 | This is a code block.
     340 | ```
    341 |

    342 |

    Check out the Basic writing and formatting synatx on GitHub. I used this page as a reference for how to generate the HTML, and most of the content listed on this link should work with this script.

    343 |

    344 | 345 |

    346 |

    Reference style links and images can be put anywhere in the document, and the will not appear until used.

    347 |

    348 |

    Create a reference-style link:

    349 |

    350 |
    [name]: link_or_image_link "title"
    351 |

    352 |
    353 |

    354 |

    Note that there cannot be any whitespace before the [name]. The title is put in the title attribute of the HTML code. The title is optional. At a minimum you must specify a reference name, and the link.

    355 |

    356 |

    In this example, the reference links are defined at the bottom of this section, but you will not see them unless you look at the markdown document. Defining the example reference links looks like this:

    357 |

    358 |
    [ref tag 1]: pic.jpg "test reference-style image"
     359 | 
     360 | [google]: https://www.google.com "googly eyes"
     361 | 
     362 | [yahoo]: https://www.yahoo.com
    363 |

    364 |
    365 |

    366 |

    Example code:

    367 |

    368 |
    [yahoo]
     369 | 
     370 | [This is the google link][google] (<- hover here)
     371 | 
     372 | ![optional alt text][ref tag 1]
    373 |

    374 |

    Result:

    375 |

    376 |

    yahoo

    377 |

    378 |

    This is the google link (<- hover here)

    379 |

    380 |

    optional alt text <- hover here

    381 |

    382 |
    383 |

    384 |

    Note that when defining the url to a web page or image in a reference link, you can use relative links.

    385 |

    386 |

    It is a best practice to not place reference link definitions inside other markdown (such as block-quotes, etc). If you do, it may work, but unexpected things are also likely to happen.

    387 |

    388 |

    389 |

    390 |

    391 |

    Emphasis (Italics)

    392 |

    393 |

    Example:

    394 |

    395 |
    *This text has emphasis.*
     396 | _This text also has emphasis._
    397 |

    398 |

    Result:

    399 |

    400 |

    This text has emphasis.

    401 |

    This text also has emphasis.

    402 |

    403 |

    Strong (Bold)

    404 |

    405 |

    Example:

    406 |

    407 |
    **This text is strong.**
     408 | __This text is also strong.__
    409 |

    410 |

    Result:

    411 |

    412 |

    This text is strong.

    413 |

    This text is also strong.

    414 |

    415 |

    Emphasis + Strong (Italic + Bold)

    416 |

    417 |

    Example:

    418 |

    419 |
    ***This text has strong + emphasis.***
     420 | ___This text has strong + emphasis.___
    421 |

    422 |

    Result:

    423 |

    424 |

    This text has strong + emphasis.

    425 |

    This text has strong + emphasis.

    426 |

    427 |

    Bold + Italics nesting

    428 |

    429 |

    Example:

    430 |

    431 |
    You can *also **nest*** the code **in a *variety*** of different ways.
    432 |

    433 |

    Result:

    434 |

    435 |

    You can also nest the code in a variety of different ways.

    436 |

    437 |
    438 |

    439 |

    And don't forget that starting a line with *** or ___ expects to end with a corresponding *** or ___.

    440 |

    441 |

    When nesting, it generally helps for readability to alternate between using * and _, rather than using, ie. * and **, or _ and __.

    442 |

    443 |

    Spacing

    444 |

    445 |

    As with regular markdown, spacing is mostly automatic. If you want to use manual line breaks use the backslash \.

    446 |

    447 |

    Example:

    448 |

    449 |
    Testing a manual line\
     450 | break.
    451 |

    452 |

    Result:

    453 |

    454 |

    Testing a manual line
    break.

    455 |

    456 |
    457 |

    458 |

    And without the backslash \ ...

    459 |

    460 |

    Example:

    461 |

    462 |
    Testing a manual line
     463 | break (no backslash).
    464 |

    465 |

    Result:

    466 |

    467 |

    Testing a manual line

    468 |

    break (no backslash).

    469 |

    470 |
    471 |

    472 |

    You can also add additional blank lines.

    473 |

    474 |

    Example:

    475 |

    476 |
    Here is a line with 2 blank lines beneath.\
     477 | \
     478 | \
     479 | Next visible line.
    480 |

    481 |

    Result:

    482 |

    483 |

    Here is a line with 2 blank lines beneath.


    Next visible line.

    484 |

    485 |

    Colored Text

    486 |

    487 |

    This is one of the elements that is not compatible with GitHub markdown.

    488 |

    489 |

    Example:

    490 |

    491 |
    Here <c=#F08899>is</c> <c=#FF0>some</c> <c=#33D>colored text</c>.
    492 |

    493 |

    Result:

    494 |

    495 |

    Here is some colored text.

    496 |

    497 |

    Colors

    498 |

    499 |

    Example:

    500 |

    501 |
    `#00F`
     502 | `#FF0000`
     503 | `rgb(0,255,0)`
     504 | `hsl(25, 100%, 50%)`
    505 |

    506 |

    Result:

    507 |

    508 |

    #00F

    509 |

    #FF0000

    510 |

    rgb(0,255,0)

    511 |

    hsl(25, 100%, 50%)

    512 |

    513 |

    Check lists

    514 |

    515 |

    Example:

    516 |

    517 |
    Here is a checklist:
     518 | - [x] Checked item
     519 | - [ ] Unchecked item
     520 | - [x] Checked item
     521 | - [ ] Unchecked item
    522 |

    523 |

    Result:

    524 |

    525 |

    Here is a checklist:

    526 |
      527 |
    • 528 |
    • 529 |
    • 530 |
    531 |
    532 |

    533 |

    Check the included css file to see how you can customize the checkbox. Search for input[type="checkbox"].

    534 |

    535 |

    Table of Contents and Navigation code

    536 |

    537 |

    538 |

    539 |

    540 |

    You can place the <toc> and <nav|...> tags anywhere in your document.

    541 |

    542 |

    Example Code:

    543 |

    544 |
    <toc>
     545 | <nav|asdf1=www.google.com|asdf2=www.yahoo.com>
    546 |

    547 |

    You can see the toc and nav icon in the top right:

    548 |

    549 |

    This feature is not compatible with GitHub markdown. But GitHub does the same thing automatically with an icon on the top-left of your markdown documents.

    550 |

    551 |

    Heading code

    552 |

    553 |

    Headings, with or without underline. If you want automatic underline for h1 and h2 without adding [underline] tag, just change the css (usually setting border-bottom property is best).

    554 |

    555 |

    For consistency with the [underline] tag, if you want to show brackets ([]) then use the \ to escape them. Escaping brackets will still be compatible with GitHub markdown.

    556 |

    557 |

    Note that the [underline] tag is not compatible with GitHub markdown.

    558 |

    559 |

    Example Code:

    560 |

    561 |
    #### \[Heading 4\]
     562 | ##### Heading 5[underline]
     563 | ###### Heading <6>
     564 | 
     565 | Alt H1 (one or more '=' below)
     566 | =
     567 | 
     568 | Alt H2 (one or more '-' below)
     569 | -
    570 |

    571 |

    Result:

    572 |

    573 |
    574 |

    575 |

    Click to see Headings

    [Heading 4]

    576 |
    Heading 5
    577 |
    Heading <6>
    578 |

    579 |

    Alt H1 (one or more '=' below)

    580 |

    581 |

    Alt H2 (one or more '-' below)

    582 |

    583 |
    584 |

    585 |

    Blockquote code

    586 |

    587 |

    Example Code:

    588 |

    589 |
    > This is testing a blockquote.
     590 | >
     591 | > [Google link](https://www.google.com) / [Yahoo link](https://www.yahoo.com)
    592 |

    593 |

    Result:

    594 |

    595 |

    This is testing a blockquote.

    596 |

    597 |

    Google link / Yahoo link

    598 |
    599 |

    600 |

    Note that you can put almost any markdown element into a blockquote, even another blockquote.

    601 |

    602 |

    Images

    603 |

    604 |

    Example:

    605 |
    [![Label 1](pic.jpg)(width=200)](https://www.google.com)  ![Label 2](pic.jpg)(height=200)
     606 | 
     607 | Third pic (using reference-style link):\
     608 | ![Label 3][ref tag 1]
    609 |

    610 |

    Result:

    611 |

    612 |

    Label 1 Label 2

    613 |

    614 |

    Third pic (using reference-style link):
    Label 3

    615 |

    616 |
    617 |

    618 |

    The 1st pic has width=200 set and is also a link.

    619 |

    620 |

    The 2nd pic is separated by a space, and on the same line having height=200 set. If a pic is too large/wide to fit on the same line, it will usually be put on the next line down.

    621 |

    622 |

    The 3rd pic has no dimensions set and is full size, and is also a reference style link. The reference link was defined above in the Reference-Style Links section.

    623 |

    624 |

    The 2nd set of parenthesis to specify the dimensions is not supported with the GitHub spec. You would need to do this with HTML.

    625 |

    626 |

    Horizontal Rule <hr>

    627 |

    628 |

    Just like regular markdown, the <hr> can be added by ---, ___, and *** (according to the GitHub spec). In my version of markdown you can also use ===.

    629 |

    630 |

    Another extra feature, not supported in GitHub, is the ability to define the style of the <hr> with an extra [style tag]. Note that each individual style must NOT have spaces, meaning the opacity:0.5 must be typed without spaces within the [style tag]. Other styles not listed here can also be added and will function normally, as long as the style is separated by a space and contain no spaces.

    631 |

    632 |
    633 |

    634 |

    Example:

    635 |

    636 |
    ---
     637 | 
     638 | ___
     639 | 
     640 | ***
     641 | 
     642 | ---[red solid]
     643 | 
     644 | ---[2px red dashed opacity:0.25]
     645 | 
     646 | ===[4px dashed blue]
     647 | 
     648 | ***[4px double pink opacity:0.5]
    649 |

    650 |
    651 |

    652 |

    Result:

    653 |

    654 |

    Click to see <hr>

    The first 3 are the default without a [tag].

    655 |

    656 |
    657 |

    658 |
    659 |

    660 |
    661 |

    662 |

    The rest are custom.

    663 |

    664 |
    665 |

    666 |
    667 |

    668 |
    669 |

    670 |

    671 |

    672 |

    673 |

    674 |

    Please note, that in order to show a double line you must specify a style width of at least 3px or greater to actually see both lines.

    675 |

    676 |

    Also, in the GitHub spec, you don't make a <hr> with ===, unless you are making an h1 Header (see Header section).

    677 |

    678 |

    Lists

    679 |

    680 |

    Basic List Formatting

    681 |

    682 |

    Ordered lists use only numbers, but you can set the format to one of the following formats:

    683 |

    684 |
    SymbolType
    A, aalphabetical numbering
    I, iRoman numeral numbering
    1normal Arabic numbering
    685 |

    By default, an ordered list is numbered with Arabic numbers (the numbers you are used to looking at).

    686 |

    687 |

    Unordered lists use *, -, or +.

    688 |

    689 |
      690 |
    • This is an
    • 691 |
    • unordered list.
    • 692 |
    693 |

    694 |

    Ordered lists use 1. or 1).

    695 |

    696 |
      697 |
    1. This is an
    2. 698 |
    3. ordered list.
    4. 699 |
    700 |

    701 |
    702 |

    703 |

    Alignment is important no matter what type of list you make. A single list can be indented, but must be indented equally for all items. Indenting a list will not change how it is displayed.

    704 |

    705 |

    Example:

    706 |

    707 |
        1. Item 1
     708 |     2. Item 2
     709 | 
     710 | - Item 1
     711 | - Item 2
    712 |

    713 |

    Result:

    714 |

    715 |
      716 |
    1. Item 1
    2. 717 |
    3. Item 2
    4. 718 |
    719 |

    720 |
      721 |
    • Item 1
    • 722 |
    • Item 2
    • 723 |
    724 |

    725 |
    726 |

    727 |

    Ordered List Formatting Issues

    728 |

    729 |

    Note than when making an ordered list, the numbers must be sequential.

    730 |

    731 |

    If you don't use the proper numerical sequence in an ordered list, then list parsing is halted at the point where the proper sequence is broken.

    732 |

    733 |

    Example:

    734 |

    735 |
    1. Item 1
     736 | 2. Item 2
     737 | 4. Item 3
    738 |

    739 |

    Result:

    740 |

    741 | 742 |
      743 |
    1. Item 1
    2. 744 |
    3. Item 2
    4. 745 |
    746 |

    4. Item 3

    747 |
    748 |

    749 |

    Unordered List Format

    750 |

    751 |

    And when making an unordered list, the symbol you use must be the same for the entire list.

    752 |

    753 |

    If you don't do this, then the point wher the bullet symbol changes will start a new list.

    754 |

    755 |

    Example:

    756 |

    757 |
    - Item 1
     758 | - Item 2
     759 | + Item 3
     760 | + Item 4
    761 |

    762 |

    Result:

    763 |

    764 | 765 |
      766 |
    • Item 1
    • 767 |
    • Item 2
    • 768 |
    769 |
      770 |
    • Item 3
    • 771 |
    • Item 4
    • 772 |
    773 |

    774 |
    775 |

    776 |

    Nesting Lists

    777 |

    778 |

    You can nest ordered and unordered lists in any combination, and to any depth (theoretically). When doing so you need to ensure that the number/bullet for the nested list item starts where the list item text starts, or goes past that point.

    779 |

    780 |

    Example:

    781 |

    782 |
    - Item 1
     783 |   - Item 2
     784 | 
     785 | 1. Item 1
     786 |    1. Item 2
     787 | 
     788 | * Item 1        (you can indent a full 4 spaces
     789 |     * Item 2    and go past the item text from the previous line)
    790 |

    791 |

    Result:

    792 |

    793 |
      794 |
    • Item 1
      • 795 |
      • Item 2
      • 796 |
      797 |
    798 |

    799 |
      800 |
    1. Item 1
      1. 801 |
      2. Item 2
      3. 802 |
      803 |
    804 |

    805 |
      806 |
    • Item 1
      • 807 |
      • Item 2
      • 808 |
      809 |
    810 |

    811 |
    812 |

    813 |

    Custom List Numbering (Ordered)

    814 |

    815 |

    For ordered lists, you can define custom list types by specifying [type=?] on the first line of the list, where ? is 1, A, a, I, or i. Make sure to not put spaces around the equal sign (=).

    816 |

    817 |

    Example:

    818 |

    819 |
    1. Item 1[type=I]
     820 | 2. Item 2
     821 | 3. Item 3
     822 |     - Item 4
     823 |     - Item 5
     824 |     - Item 6
     825 |         1. Item 7[type=A]
     826 |         2. Item 8
     827 |         3. Item 9
     828 | 4. Item 10
     829 | 5. Item 11
    830 |

    831 |

    Result:

    832 |

    833 |
      834 |
    1. Item 1
    2. 835 |
    3. Item 2
    4. 836 |
    5. Item 3
    6. 837 |
        838 |
      • Item 4
      • 839 |
      • Item 5
      • 840 |
      • Item 6
      • 841 |
          842 |
        1. Item 7
        2. 843 |
        3. Item 8
        4. 844 |
        5. Item 9
        6. 845 |
        846 |
      847 |
    7. Item 10
    8. 848 |
    9. Item 11
    10. 849 |
    850 |

    851 |

    Note that the default numbering format for this script, and GitHub is as follows:

    852 |

    853 |
    1. Item 1                   (type = 1)  Level 1
     854 |     i. Item 2               (type = i)  Level 2
     855 |         a. Item 3           (type = a)  Level 3 and beyond ...
     856 |             ...             Type I and A (upper case) are not used by default
    857 |

    858 |

    This is not copatible with GitHub markdown. For consistency, if you want to use [ and ] in your list items, escape them with \, ie. \[ and \].

    859 |

    860 |
    861 |

    862 |

    Custom List Symbol (Unordered)

    863 |

    864 |

    For unordered lists you can define custom bullet symbols by specifying [type=?] on the first line of the list, where ? is disc, circle, square, or none.

    865 |

    866 |

    Type none is useful if you want to use custom symbols (ie. emojis - ✅).

    867 |

    868 |

    Example:

    869 |

    870 |
    - item 1 (disc) [type=disc]
     871 |     - item 2 (circle) [type=circle]
     872 |         - item 3 (square) [type=square]
     873 |             - ✅ item 4 (none) [type=none]
    874 |

    875 |

    Result:

    876 |

    877 |
      878 |
    • item 1 (disc)
      • 879 |
      • item 2 (circle)
        • 880 |
        • item 3 (square)
          • 881 |
          • ✅ item 4 (none)
          • 882 |
          883 |
        884 |
      885 |
    886 |

    887 |

    Note that the default symbols for unordered lists are as follows:

    888 |

    889 |
    - item 1            (type = disc)   Level 1
     890 |     - item 2        (type = circle) Level 2
     891 |         - item 3    (type = square) Level 3 and beyond ...
     892 |             ...
    893 |

    894 |

    This is not copatible with GitHub markdown. For consistency, if you want to use [ and ] in your list items, escape them with \, ie. \[ and \].

    895 |

    896 |

    Tables

    897 |

    898 |

    Tables are the same as GitHub markdown except you can set the alignment of the headers and data separately.

    899 |

    900 |

    Like markdown you use the colon : to determine alignment: right: , :center: , and :left or left (no colon).

    901 |

    902 |

    If you want to use a literal colon in a header you must escape it with backslash: \:. Eescaping the : is compatible with GitHub.

    903 |

    904 |

    If you don't specify alignment for column headers, then they will use the alignment specified in the 2nd row, and if no alignment is specified, then the default center alignment will be used for column headers, just like GitHub markdown.

    905 |

    906 |

    Column headers and data will also take most inline formatting, like emphasis, strong, links, and others.

    907 |

    908 |

    Example:

    909 |

    910 |
    |               *right\:*:| ~~left~~             |      center\:       |
     911 | |-------------------------|---------------------:|:-------------------:|
     912 | |aaaaaaaaaaaaaaaaaaaa     |bbbbbbbbbbbbbbbbbbbbbb|ccccccccccccccccccccc|
     913 | |1                        |2                     |3                    |
     914 | |manual line<br>break     | data2                | data3               |
     915 | | [link](http://test.com) | **bold**  `code`     | *emphasis*          |
     916 | 
     917 | The table/columns do not have to be perfectly spaced as shown above.
    918 |

    919 |

    Result:

    920 |

    921 |
    right:leftcenter:
    aaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccc
    123
    manual line
    break
    data2data3
    linkbold codeemphasis
    922 |

    Box

    923 |

    924 |

    The <box>...</box> tag is meant to be like a "custom code block". If you want to display literal code/markdown then you need to use the escape character \. Other than that, any other markdown and tags covered in this implementation will be processed. This tag will give you the border of code tags and also display the font as monospace.

    925 |

    926 |

    The <box> tag is not compatible with GitHub markdown.

    927 |

    928 |
    This is an <box><c=#F00F00>*\*inline\**</c> <c=#0F0>__\_\_box\_\___</c></box> tag with formatting.
     929 | 
     930 | <box>
     931 | This *is* a <c=#00F>_\_code\__</c> <c=#880>**\*\*box\*\***</c> block with <c=#FF0>formatting</c>.
     932 | 
     933 | Note the opening and closing tags must be on separate lines.
     934 | </box>
    935 |

    936 |

    Result:

    937 |

    938 |

    This is an *inline* __box__ tag with formatting.

    939 |

    940 |
    This is a _code_ **box** block with formatting. 941 |
    942 |
    Note the opening and closing tags must be on separate lines. 943 |
    944 |

    945 |

    946 |

    Pretty Print

    947 |

    948 |

    The <pp>...</pp> tag is meant for inline pretty print. Inline pretty print will not have a border and the text color will not be changed, but the font will be changed to monospace.

    949 |

    950 |

    To do code block pretty print, simply add pp after the opening of the code block.

    951 |

    952 |
    This is <pp>inline(pretty,print)</pp>.
     953 | 
     954 | ```pp
     955 | ; This is pretty print in a code block.
     956 | 
     957 | class test {
     958 |     prop := value
     959 | 
     960 |     method(a, b) => (a + b)
     961 | 
     962 |     method2(c, d) {
     963 |         return (c / d)
     964 |     }
     965 | }
     966 | ```
    967 |

    968 |

    Result:

    969 |

    970 |

    This is inline(pretty,print).

    971 |

    972 |
    ; This is pretty print in a code block.
     973 | 
     974 | class test {
     975 |     prop := value
     976 | 
     977 |     method(a, b) => (a + b)
     978 | 
     979 |     method2(c, d) {
     980 |         return (c / d)
     981 |     }
     982 | }
    983 |

    984 |

    Spoiler

    985 |

    986 |

    Example:

    987 |

    988 |
    <spoiler=Spoiler Title>
     989 | spoiler content `that` is *also* formatted **and** stuff!
     990 | </spoiler>
    991 |

    992 |

    Result:

    993 |

    994 |

    Spoiler Title

    spoiler content that is also formatted and stuff!

    995 |

    996 |
    997 |

    998 |

    Sadly, this feature is not available in this form on the GitHub spec. But you can use the following HTML to get the same effect:

    999 |

    1000 |

    Example:

    1001 |

    1002 |
    <details>
    1003 | <summary>Spoiler Title</summary>
    1004 | spoiler content `that` is *also* formatted **and** stuff!
    1005 | </details>
    1006 |

    1007 |

    Result:

    1008 |

    1009 |

    1010 |

    Spoiler Title

    1011 |

    spoiler content that is also formatted and stuff!

    1012 |

    1013 |

    1014 |

    Any markdown or HTML element can go inside a spoiler.

    1015 |

    1016 |

    Thats all folks!

    1017 |

    1018 |

    Please remember, while this version of markdown is compatible with GitHub, the "extra features" are not.

    1019 |

    1020 |

    To-Do List:

    1021 |

    1022 |
      1023 |
    • Add lots of :emojis: ?
    • 1024 |
    1025 |

    1026 |

    -------------------------------------------------------------------------------- /index.md: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | # (M)ArkDown Cheatsheet 5 | 6 | This markdown spec has been designed to adhere to the GitHub standard of markdown, except for elements that deal with GitHub specific items, like commits, comments, etc. 7 | 8 | A few features have been added for flexibility and convenience. 9 | 10 | ## Inline code and Code Blocks 11 | 12 | The `\` character is used to escape any character and translate it to the corresponding HTML entity, ie. `&#[code];`. 13 | 14 | So this \*text\* is not formatted since it has the \_backslash\_ prior to the markup elements. 15 | 16 | ``` 17 | So this \*text\* is not formatted since it has the \_backslash\_ prior to the markup elements. 18 | ``` 19 | 20 | It is not necessary to escape characters when using `inline code`. 21 | 22 | ``` 23 | It is not necessary to escape characters when using `inline code`. 24 | ``` 25 | 26 | It is also not necessary to escape characters using code blocks. 27 | 28 | ```` 29 | ``` 30 | This is a code block. 31 | ``` 32 | ```` 33 | 34 | Check out the [Basic writing and formatting synatx](https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax) on GitHub. I used this page as a reference for how to generate the HTML, and most of the content listed on this link should work with this script. 35 | 36 | ## Reference-Style Links 37 | 38 | Reference style links and images can be put anywhere in the document, and the will not appear until used. 39 | 40 | Create a reference-style link: 41 | 42 | ``` 43 | [name]: link_or_image_link "title" 44 | ``` 45 | 46 | ------------------------ 47 | 48 | Note that there cannot be any whitespace before the `[name]`. The `title` is put in the *title attribute* of the HTML code. The `title` is optional. At a minimum you must specify a reference *name*, and the *link*. 49 | 50 | In this example, the reference links are defined at the bottom of this section, but you will not see them unless you look at the markdown document. Defining the example reference links looks like this: 51 | 52 | ``` 53 | [ref tag 1]: pic.jpg "test reference-style image" 54 | 55 | [google]: https://www.google.com "googly eyes" 56 | 57 | [yahoo]: https://www.yahoo.com 58 | ``` 59 | 60 | ------------------------ 61 | 62 | Example code: 63 | 64 | ``` 65 | [yahoo] 66 | 67 | [This is the google link][google] (<- hover here) 68 | 69 | ![optional alt text][ref tag 1] 70 | ``` 71 | 72 | Result: 73 | 74 | [yahoo] 75 | 76 | [This is the google link][google] (<- hover here) 77 | 78 | ![optional alt text][ref tag 1] <- hover here 79 | 80 | ------------------------ 81 | 82 | Note that when defining the url to a web page or image in a reference link, you can use relative links. 83 | 84 | It is a best practice to not place reference link definitions inside other markdown (such as block-quotes, etc). If you do, it may work, but unexpected things are also likely to happen. 85 | 86 | [ref tag 1]: pic.jpg "test reference-style image" 87 | 88 | [google]: https://www.google.com "googly eyes" 89 | 90 | [yahoo]: https://www.yahoo.com 91 | 92 | ## Emphasis (Italics) 93 | 94 | Example: 95 | 96 | ``` 97 | *This text has emphasis.* 98 | _This text also has emphasis._ 99 | ``` 100 | 101 | Result: 102 | 103 | *This text has emphasis.* 104 | _This text also has emphasis._ 105 | 106 | ## Strong (Bold) 107 | 108 | Example: 109 | 110 | ``` 111 | **This text is strong.** 112 | __This text is also strong.__ 113 | ``` 114 | 115 | Result: 116 | 117 | **This text is strong.** 118 | __This text is also strong.__ 119 | 120 | ## Emphasis + Strong (Italic + Bold) 121 | 122 | Example: 123 | 124 | ``` 125 | ***This text has strong + emphasis.*** 126 | ___This text has strong + emphasis.___ 127 | ``` 128 | 129 | Result: 130 | 131 | ***This text has strong + emphasis.*** 132 | ___This text has strong + emphasis.___ 133 | 134 | ## Bold + Italics nesting 135 | 136 | Example: 137 | 138 | ``` 139 | You can *also **nest*** the code **in a *variety*** of different ways. 140 | ``` 141 | 142 | Result: 143 | 144 | You can *also **nest*** the code **in a *variety*** of different ways. 145 | 146 | ------------------------ 147 | 148 | And don't forget that starting a line with `***` or `___` expects to end with a corresponding `***` or `___`. 149 | 150 | When nesting, it generally helps for readability to alternate between using `*` and `_`, rather than using, ie. `*` and `**`, or `_` and `__`. 151 | 152 | ## Spacing 153 | 154 | As with regular markdown, spacing is mostly automatic. If you want to use manual line breaks use the backslash `\`. 155 | 156 | Example: 157 | 158 | ``` 159 | Testing a manual line\ 160 | break. 161 | ``` 162 | 163 | Result: 164 | 165 | Testing a manual line\ 166 | break. 167 | 168 | ------------------------ 169 | 170 | And without the backslash `\` ... 171 | 172 | Example: 173 | 174 | ``` 175 | Testing a manual line 176 | break (no backslash). 177 | ``` 178 | 179 | Result: 180 | 181 | Testing a manual line 182 | break (no backslash). 183 | 184 | ------------------------ 185 | 186 | You can also add additional blank lines. 187 | 188 | Example: 189 | 190 | ``` 191 | Here is a line with 2 blank lines beneath.\ 192 | \ 193 | \ 194 | Next visible line. 195 | ``` 196 | 197 | Result: 198 | 199 | Here is a line with 2 blank lines beneath.\ 200 | \ 201 | \ 202 | Next visible line. 203 | 204 | ## Colored Text 205 | 206 | This is one of the elements that is not compatible with GitHub markdown. 207 | 208 | Example: 209 | 210 | ``` 211 | Here is some colored text. 212 | ``` 213 | 214 | Result: 215 | 216 | Here is some colored text. 217 | 218 | ## Colors 219 | 220 | Example: 221 | 222 | ``` 223 | `#00F` 224 | `#FF0000` 225 | `rgb(0,255,0)` 226 | `hsl(25, 100%, 50%)` 227 | ``` 228 | 229 | Result: 230 | 231 | `#00F` 232 | `#FF0000` 233 | `rgb(0,255,0)` 234 | `hsl(25, 100%, 50%)` 235 | 236 | ## Check lists 237 | 238 | Example: 239 | 240 | ``` 241 | Here is a checklist: 242 | - [x] Checked item 243 | - [ ] Unchecked item 244 | - [x] Checked item 245 | - [ ] Unchecked item 246 | ``` 247 | 248 | Result: 249 | 250 | Here is a checklist: 251 | - [x] Check item 252 | - [ ] Unchecked item 253 | - [x] Check item 254 | - [ ] Unchecked item 255 | 256 | ---------------------- 257 | 258 | Check the included css file to see how you can customize the checkbox. Search for `input[type="checkbox"]`. 259 | 260 | ## Table of Contents and Navigation code 261 | 262 | 263 | 264 | 265 | You can place the `` and `` tags anywhere in your document. 266 | 267 | Example Code: 268 | 269 | ``` 270 | 271 | 272 | ``` 273 | 274 | You can see the toc and nav icon in the top right: `☰` 275 | 276 | This feature is not compatible with GitHub markdown. But GitHub does the same thing automatically with an icon on the top-left of your markdown documents. 277 | 278 | ## Heading code 279 | 280 | Headings, with or without underline. If you want automatic underline for h1 and h2 without adding `[underline]` tag, just change the css (usually setting border-bottom property is best). 281 | 282 | For consistency with the `[underline]` tag, if you want to show brackets (`[]`) then use the `\` to escape them. Escaping brackets will still be compatible with GitHub markdown. 283 | 284 | Note that the `[underline]` tag is not compatible with GitHub markdown. 285 | 286 | Example Code: 287 | 288 | ``` 289 | #### \[Heading 4\] 290 | ##### Heading 5[underline] 291 | ###### Heading <6> 292 | 293 | Alt H1 (one or more '=' below) 294 | = 295 | 296 | Alt H2 (one or more '-' below) 297 | - 298 | ``` 299 | 300 | Result: 301 | 302 | ---[2px solid cyan] 303 | 304 | 305 | > #### \[Heading 4\] 306 | > ##### Heading 5[underline] 307 | > ###### Heading <6> 308 | > 309 | > Alt H1 (one or more '=' below) 310 | > = 311 | > 312 | > Alt H2 (one or more '-' below) 313 | > - 314 | 315 | 316 | ---[2px solid cyan] 317 | 318 | ## Blockquote code 319 | 320 | Example Code: 321 | 322 | ``` 323 | > This is testing a blockquote. 324 | > 325 | > [Google link](https://www.google.com) / [Yahoo link](https://www.yahoo.com) 326 | ``` 327 | 328 | Result: 329 | 330 | > This is testing a blockquote. 331 | > 332 | > [Google link](https://www.google.com) / [Yahoo link](https://www.yahoo.com) 333 | 334 | -------------------------------------------------- 335 | 336 | Note that you can put almost any markdown element into a blockquote, even another blockquote. 337 | 338 | ## Images 339 | 340 | Example: 341 | ``` 342 | [![Label 1](pic.jpg)(width=200)](https://www.google.com) ![Label 2](pic.jpg)(height=200) 343 | 344 | Third pic (using reference-style link):\ 345 | ![Label 3][ref tag 1] 346 | ``` 347 | 348 | Result: 349 | 350 | [![Label 1](pic.jpg)(width=200)](https://www.google.com) ![Label 2](pic.jpg)(height=200) 351 | 352 | Third pic (using reference-style link):\ 353 | ![Label 3][ref tag 1] 354 | 355 | -------------------------------------------------- 356 | 357 | The 1st pic has width=200 set and is also a link. 358 | 359 | The 2nd pic is separated by a space, and on the same line having height=200 set. If a pic is too large/wide to fit on the same line, it will usually be put on the next line down. 360 | 361 | The 3rd pic has no dimensions set and is full size, and is also a reference style link. The reference link was defined above in the [Reference-Style Links](#reference-style-links) section. 362 | 363 | The 2nd set of parenthesis to specify the dimensions is not supported with the GitHub spec. You would need to do this with HTML. 364 | 365 | ## Horizontal Rule \ 366 | 367 | Just like regular markdown, the `
    ` can be added by `---`, `___`, and `***` (according to the GitHub spec). In my version of markdown you can also use `===`. 368 | 369 | Another extra feature, not supported in GitHub, is the ability to define the style of the `
    ` with an extra `[style tag]`. Note that each individual style must NOT have spaces, meaning the `opacity:0.5` must be typed without spaces within the `[style tag]`. Other styles not listed here can also be added and will function normally, as long as the style is separated by a space and contain no spaces. 370 | 371 | -------------------------------------------------- 372 | 373 | Example: 374 | 375 | ``` 376 | --- 377 | 378 | ___ 379 | 380 | *** 381 | 382 | ---[red solid] 383 | 384 | ---[2px red dashed opacity:0.25] 385 | 386 | ===[4px dashed blue] 387 | 388 | ***[4px double pink opacity:0.5] 389 | ``` 390 | 391 | -------------------------------------------------- 392 | 393 | Result: 394 | 395 | 396 | 397 | The first 3 are the default without a `[tag]`. 398 | 399 | --- 400 | 401 | ___ 402 | 403 | *** 404 | 405 | The rest are custom. 406 | 407 | ---[red solid] 408 | 409 | ---[2px red dashed opacity:0.25] 410 | 411 | ===[4px dashed blue] 412 | 413 | ***[4px double pink opacity:0.5] 414 | 415 | 416 | 417 | 418 | Please note, that in order to show a **double** line you must specify a style width of at least 3px or greater to actually see both lines. 419 | 420 | Also, in the GitHub spec, you don't make a `
    ` with `===`, unless you are making an h1 Header (see Header section). 421 | 422 | ## Lists 423 | 424 | ### Basic List Formatting 425 | 426 | Ordered lists use only numbers, but you can set the format to one of the following formats: 427 | 428 | | Symbol | Type | 429 | |:------:|---------------------------| 430 | | `A, a` | alphabetical numbering | 431 | | `I, i` | Roman numeral numbering | 432 | | `1` | normal Arabic numbering | 433 | 434 | By default, an ordered list is numbered with Arabic numbers (the numbers you are used to looking at). 435 | 436 | Unordered lists use `*`, `-`, or `+`. 437 | 438 | - This is an 439 | - unordered list. 440 | 441 | Ordered lists use `1.` or `1)`. 442 | 443 | 1. This is an 444 | 2. ordered list. 445 | 446 | ----------------------- 447 | 448 | Alignment is important no matter what type of list you make. A single list can be indented, but must be indented equally for all items. Indenting a list will not change how it is displayed. 449 | 450 | Example: 451 | 452 | ``` 453 | 1. Item 1 454 | 2. Item 2 455 | 456 | - Item 1 457 | - Item 2 458 | ``` 459 | 460 | Result: 461 | 462 | 1. Item 1 463 | 2. Item 2 464 | 465 | - Item 1 466 | - Item 2 467 | 468 | ----------------------- 469 | 470 | ### Ordered List Formatting Issues 471 | 472 | Note than when making an ordered list, the numbers must be sequential. 473 | 474 | If you don't use the proper numerical sequence in an ordered list, then list parsing is halted at the point where the proper sequence is broken. 475 | 476 | Example: 477 | 478 | ``` 479 | 1. Item 1 480 | 2. Item 2 481 | 4. Item 3 482 | ``` 483 | 484 | Result: 485 | 486 | 1. Item 1 487 | 2. Item 2 488 | 4. Item 3 489 | 490 | ----------------------- 491 | 492 | ### Unordered List Format 493 | 494 | And when making an unordered list, the symbol you use must be the same for the entire list. 495 | 496 | If you don't do this, then the point wher the bullet symbol changes will start a new list. 497 | 498 | Example: 499 | 500 | ``` 501 | - Item 1 502 | - Item 2 503 | + Item 3 504 | + Item 4 505 | ``` 506 | 507 | Result: 508 | 509 | - Item 1 510 | - Item 2 511 | + Item 3 512 | + Item 4 513 | 514 | ----------------------- 515 | 516 | ### Nesting Lists 517 | 518 | You can nest ordered and unordered lists in any combination, and to any depth (theoretically). When doing so you need to ensure that the number/bullet for the nested list item starts where the list item text starts, or goes past that point. 519 | 520 | Example: 521 | 522 | ``` 523 | - Item 1 524 | - Item 2 525 | 526 | 1. Item 1 527 | 1. Item 2 528 | 529 | * Item 1 (you can indent a full 4 spaces 530 | * Item 2 and go past the item text from the previous line) 531 | ``` 532 | 533 | Result: 534 | 535 | - Item 1 536 | - Item 2 537 | 538 | 1. Item 1 539 | 1. Item 2 540 | 541 | * Item 1 542 | * Item 2 543 | 544 | ----------------------- 545 | 546 | ### Custom List Numbering (Ordered) 547 | 548 | For ordered lists, you can define custom list types by specifying `[type=?]` on the first line of the list, where `?` is `1`, `A`, `a`, `I`, or `i`. Make sure to not put spaces around the equal sign (`=`). 549 | 550 | Example: 551 | 552 | ``` 553 | 1. Item 1[type=I] 554 | 2. Item 2 555 | 3. Item 3 556 | - Item 4 557 | - Item 5 558 | - Item 6 559 | 1. Item 7[type=A] 560 | 2. Item 8 561 | 3. Item 9 562 | 4. Item 10 563 | 5. Item 11 564 | ``` 565 | 566 | Result: 567 | 568 | 1. Item 1[type=I] 569 | 2. Item 2 570 | 3. Item 3 571 | - Item 4 572 | - Item 5 573 | - Item 6 574 | 1. Item 7[type=A] 575 | 2. Item 8 576 | 3. Item 9 577 | 4. Item 10 578 | 5. Item 11 579 | 580 | Note that the default numbering format for this script, and GitHub is as follows: 581 | 582 | ``` 583 | 1. Item 1 (type = 1) Level 1 584 | i. Item 2 (type = i) Level 2 585 | a. Item 3 (type = a) Level 3 and beyond ... 586 | ... Type I and A (upper case) are not used by default 587 | ``` 588 | 589 | This is not copatible with GitHub markdown. For consistency, if you want to use `[` and `]` in your list items, escape them with `\`, ie. `\[` and `\]`. 590 | 591 | ----------------------- 592 | 593 | ### Custom List Symbol (Unordered) 594 | 595 | For unordered lists you can define custom bullet symbols by specifying `[type=?]` on the first line of the list, where `?` is `disc`, `circle`, `square`, or `none`. 596 | 597 | Type `none` is useful if you want to use custom symbols (ie. emojis - ✅). 598 | 599 | Example: 600 | 601 | ``` 602 | - item 1 (disc) [type=disc] 603 | - item 2 (circle) [type=circle] 604 | - item 3 (square) [type=square] 605 | - ✅ item 4 (none) [type=none] 606 | ``` 607 | 608 | Result: 609 | 610 | - item 1 (disc) [type=disc] 611 | - item 2 (circle) [type=circle] 612 | - item 3 (square) [type=square] 613 | - ✅ item 4 (none) [type=none] 614 | 615 | Note that the default symbols for unordered lists are as follows: 616 | 617 | ``` 618 | - item 1 (type = disc) Level 1 619 | - item 2 (type = circle) Level 2 620 | - item 3 (type = square) Level 3 and beyond ... 621 | ... 622 | ``` 623 | 624 | This is not copatible with GitHub markdown. For consistency, if you want to use `[` and `]` in your list items, escape them with `\`, ie. `\[` and `\]`. 625 | 626 | ## Tables 627 | 628 | Tables are the same as GitHub markdown except you can set the alignment of the headers and data separately. 629 | 630 | Like markdown you use the colon `:` to determine alignment: `right:` , `:center:` , and `:left` or `left` (no colon). 631 | 632 | If you want to use a literal colon in a header you must escape it with backslash: `\:`. Eescaping the `:` is compatible with GitHub. 633 | 634 | If you don't specify alignment for column headers, then they will use the alignment specified in the 2nd row, and if no alignment is specified, then the default center alignment will be used for column headers, just like GitHub markdown. 635 | 636 | Column headers and data will also take most inline formatting, like *emphasis*, **strong**, links, and others. 637 | 638 | Example: 639 | 640 | ``` 641 | | *right\:*:| ~~left~~ | center\: | 642 | |-------------------------|---------------------:|:-------------------:| 643 | |aaaaaaaaaaaaaaaaaaaa |bbbbbbbbbbbbbbbbbbbbbb|ccccccccccccccccccccc| 644 | |1 |2 |3 | 645 | |manual line
    break | data2 | data3 | 646 | | [link](http://test.com) | **bold** `code` | *emphasis* | 647 | 648 | The table/columns do not have to be perfectly spaced as shown above. 649 | ``` 650 | 651 | Result: 652 | 653 | | *right\:*:| ~~left~~ | :center\:: | 654 | |-------------------------|---------------------:|:-------------------:| 655 | |aaaaaaaaaaaaaaaaaaaa |bbbbbbbbbbbbbbbbbbbbbb|ccccccccccccccccccccc| 656 | |1 |2 |3 | 657 | |manual line
    break | data2 | data3 | 658 | | [link](http://test.com) | **bold** `code` | *emphasis* | 659 | 660 | ## Box 661 | 662 | The `...` tag is meant to be like a "custom code block". If you want to display literal code/markdown then you need to use the escape character `\`. Other than that, any other markdown and tags covered in this implementation will be processed. This tag will give you the border of code tags and also display the font as monospace. 663 | 664 | The `` tag is not compatible with GitHub markdown. 665 | 666 | ``` 667 | This is an *\*inline\** __\_\_box\_\___ tag with formatting. 668 | 669 | 670 | This *is* a _\_code\__ **\*\*box\*\*** block with formatting. 671 | 672 | Note the opening and closing tags must be on separate lines. 673 | 674 | ``` 675 | 676 | Result: 677 | 678 | This is an *\*inline\** __\_\_box\_\___ tag with formatting. 679 | 680 | 681 | This *is* a _\_code\__ **\*\*box\*\*** block with formatting. 682 | 683 | Note the opening and closing tags must be on separate lines. 684 | 685 | 686 | ## Pretty Print 687 | 688 | The `...` tag is meant for inline pretty print. Inline pretty print will not have a border and the text color will not be changed, but the font will be changed to monospace. 689 | 690 | To do code block pretty print, simply add `pp` after the opening of the code block. 691 | 692 | ```` 693 | This is inline(pretty,print). 694 | 695 | ```pp 696 | ; This is pretty print in a code block. 697 | 698 | class test { 699 | prop := value 700 | 701 | method(a, b) => (a + b) 702 | 703 | method2(c, d) { 704 | return (c / d) 705 | } 706 | } 707 | ``` 708 | ```` 709 | 710 | Result: 711 | 712 | This is inline(pretty,print). 713 | 714 | ```pp 715 | ; This is pretty print in a code block. 716 | 717 | class test { 718 | prop := value 719 | 720 | method(a, b) => (a + b) 721 | 722 | method2(c, d) { 723 | return (c / d) 724 | } 725 | } 726 | ``` 727 | 728 | ## Spoiler 729 | 730 | Example: 731 | 732 | ``` 733 | 734 | spoiler content `that` is *also* formatted **and** stuff! 735 | 736 | ``` 737 | 738 | Result: 739 | 740 | 741 | spoiler content `that` is *also* formatted **and** stuff! 742 | 743 | 744 | ----------------------------------------- 745 | 746 | Sadly, this feature is not available in this form on the GitHub spec. But you can use the following HTML to get the same effect: 747 | 748 | Example: 749 | 750 | ``` 751 |
    752 | Spoiler Title 753 | spoiler content `that` is *also* formatted **and** stuff! 754 |
    755 | ``` 756 | 757 | Result: 758 | 759 |
    760 | Spoiler Title 761 | spoiler content `that` is *also* formatted **and** stuff! 762 |
    763 | 764 | Any markdown or HTML element can go inside a spoiler. 765 | 766 | ## Thats all folks! 767 | 768 | Please remember, while this version of markdown is compatible with GitHub, the "extra features" are not. 769 | 770 | ## To-Do List: 771 | 772 | + Add lots of :emojis: ? 773 | 774 | -------------------------------------------------------------------------------- /pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TheArkive/M-ArkDown_ahk2/a55dd288ccf306dfa9e1431d88f321c36aa36666/pic.jpg -------------------------------------------------------------------------------- /style.css: -------------------------------------------------------------------------------- 1 | :root{ 2 | --link: #00ACAF; 3 | --link-hover: cyan; 4 | --link-special: orange; 5 | --link-visited: #006bcf; 6 | --text: #999; 7 | --code-txt: #DDD; 8 | --header: #00ACAF; 9 | --border: #00ACAF; 10 | --blockquote: #0000FF; 11 | --blockquote-text: #DDD; 12 | --row-HL: #000C67; 13 | --bg: #000C17; 14 | --bg1-5: #000C27; 15 | --bg2: #000C37; 16 | --bg3: #000C57; 17 | --so1: yellow; 18 | --so2: orange; 19 | --so3: red; 20 | --so4: magenta; 21 | --emphasis: #EEE; /* was #0077CC */ 22 | } 23 | 24 | html, body { 25 | background-color: var(--bg); 26 | /* font-family: Segoe UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji; */ 27 | font-family: [_font_name_]; 28 | font-size: [_font_size_]px; 29 | font-weight: [_font_weight_]; 30 | } 31 | 32 | body { 33 | color: var(--text); 34 | line-height: [_line_height_]em; 35 | } 36 | 37 | #body-container { 38 | width: 100%; 39 | height: 100%; 40 | } 41 | 42 | #main { 43 | max-width: 1280px; 44 | margin: auto; 45 | height: 90%; 46 | padding: 45px 45px; 47 | overflow-y: scroll; 48 | border-left: 1px solid var(--border); 49 | border-right: 1px solid var(--border); 50 | } 51 | 52 | #toc-container { 53 | background-color: var(--bg); 54 | overflow: hidden; 55 | position: fixed; 56 | display: block; 57 | float: right; 58 | right: 30px; 59 | top: 0px; 60 | width: 30px; 61 | height: 30px; 62 | border: 1px solid var(--border); 63 | border-radius: 3px; 64 | padding: 10px 10px; 65 | transition-duration: 0.25s; 66 | z-index: 10; 67 | } 68 | 69 | @media screen and (min-width: 1383px) { 70 | #toc-container { right: calc(50% - 640px - 25px); } 71 | } 72 | 73 | #toc-icon { 74 | font-size: 24px; 75 | padding-right: 5px; 76 | color: var(--link); 77 | } 78 | 79 | #toc-contents { 80 | overflow: hidden; 81 | display: none; 82 | } 83 | 84 | .toc-item { 85 | padding: 2px 15px; 86 | } 87 | 88 | #toc-container:hover { 89 | overflow-y: auto; 90 | width: [_toc_width_]px; 91 | /* height: initial; */ 92 | height: [_toc_height_]px; 93 | max-height: calc(100vh - 40px); 94 | transition-duration: 0.25s; 95 | } 96 | 97 | #toc-container:hover #toc-contents { 98 | display: block; 99 | } 100 | 101 | #toc-container:hover a { 102 | text-decoration: none; 103 | } 104 | 105 | #toc-container:hover .toc-item:hover { 106 | background-color: var(--row-HL); 107 | color: cyan; 108 | } 109 | 110 | a, a:link { color: var(--link); } 111 | a:hover { color: var(--link-hover); text-decoration: underline; } 112 | a:visited { color: var(--link); } 113 | a:visited:hover { color: var(--link-hover); } 114 | 115 | :target a:visited { color: var(--so4); } 116 | :target a:visited:hover, :target a:visited:hover .link { color: var(--link-hover); } 117 | :target.underline { border-color: var(--so4); } 118 | 119 | img { opacity: 0.5; } 120 | img:hover { opacity: 1; } 121 | 122 | table.normal tr th { background: var(--bg3); color: var(--header); } 123 | table.normal tr td { background: var(--bg2); } 124 | table.normal tr th, table tr td { padding: 5px; } 125 | table.normal tr:hover td { background: var(--row-HL); } 126 | 127 | h1, h2, h3, h4, h5, h6 128 | { font-weight:bold; color:var(--header); margin-top: 24px; margin-bottom: 0; } 129 | 130 | h1 a, h2 a, h3 a, h4 a, h5 a, h6 a, 131 | h1:hover a, h2:hover a, h3:hover a, h4:hover a, h5:hover a, h6:hover a 132 | { text-decoration: none; } 133 | 134 | h1 a .link, h2 a .link, h3 a .link, h4 a .link, h5 a .link, h6 a .link 135 | { position: relative; float: left; margin-left: -20px; display: none; } 136 | 137 | h1:hover, h2:hover, h3:hover, h4:hover, h5:hover, h6:hover 138 | { border-color: var(--link-hover); color: var(--link-hover); } 139 | 140 | h1:hover a .link, h2:hover a .link, h3:hover a .link, h4:hover a .link, h5:hover a .link, h6:hover a .link 141 | { display: inline; } 142 | 143 | .underline { border-bottom: 1px solid #00ACAF; } 144 | h1.underline { padding-bottom: 10px; } 145 | h2.underline { padding-bottom: 8px; } 146 | h3.underline { padding-bottom: 6px; } 147 | h4.underline { padding-bottom: 4px; } 148 | h5.underline { padding-bottom: 2px; } 149 | h1 { font-size:1.75em; padding-bottom: 10px;} 150 | h2 { font-size:1.5em; padding-bottom: 8px;} 151 | h3 { font-size:1.30em; padding-bottom: 6px;} 152 | h4 { font-size:1.15em; padding-bottom: 0px;} 153 | h5 { font-size:1em; padding-bottom: 0px;} 154 | h6 { font-size:0.75em; } 155 | 156 | /* em, strong { color: var(--emphasis); } */ 157 | 158 | strong { font-weight: 800; } 159 | 160 | del { font-weight: 400; } 161 | 162 | hr { 163 | color: transparent; 164 | border-top-style: solid; 165 | border-top-width: 4px; 166 | border-top-color: var(--border); 167 | } 168 | 169 | blockquote { 170 | border-left: 4px solid var(--blockquote); 171 | padding: 0 15px; 172 | color: var(--blockquote-text); 173 | margin-top: 0px; 174 | margin-bottom: [_font_size_]px; 175 | } 176 | 177 | p { margin-bottom: [_font_size_]px; margin-top: 0px; } 178 | /* ul, ol { margin: 0; padding: 0; } */ 179 | 180 | pre { 181 | margin-top: 1.5em; 182 | margin-bottom: 1.5em; 183 | background-color: var(--b1-5); 184 | padding: 2px 4px; 185 | border: 1px solid var(--border); 186 | border-radius: 5px; 187 | font-family: Consolas; 188 | font-size: [_font_size_]px; 189 | } 190 | 191 | code { 192 | color: var(--code-txt); 193 | margin: 0px 3px 0px 0px; 194 | padding: 2px 4px; 195 | background-color: var(--b1-5); 196 | border: 1px solid var(--border); 197 | border-radius: 5px; 198 | font-family: Consolas; 199 | font-size: [_font_size_]px; 200 | font-weight: 100; 201 | } 202 | 203 | .box { 204 | color: var(--code-txt); 205 | margin: 0px 3px 0px 3px; 206 | padding: 2px 4px; 207 | background-color: var(--b1-5); 208 | border: 1px solid var(--border); 209 | border-radius: 5px; 210 | font-family: Consolas; 211 | font-size: [_font_size_]px; 212 | font-weight: 100; 213 | } 214 | 215 | pre code { border:none; padding:0px; } 216 | 217 | ul.checklist { 218 | margin: 1em 0 1em 0; 219 | padding: 0; 220 | list-style-type: none; 221 | } 222 | 223 | /* span.circle { */ 224 | /* font-size: 1em; */ 225 | /* margin: 0; */ 226 | /* width: [_font_size_]px; */ 227 | /* height: [_font_size_]px; */ 228 | /* border: 1px solid; */ 229 | /* border-radius: 50% 50%; */ 230 | /* content:' '; */ 231 | /* } */ 232 | 233 | /* ul { margin: 4px 0; } */ 234 | li { margin: 0px 0; } 235 | 236 | input[type="checkbox"] { 237 | visibility: hidden; 238 | } 239 | input[type="checkbox"] + label:before { 240 | border: 1px solid var(--border); 241 | border-radius: calc([_font_size_]px / 5); 242 | content: "\00a0"; 243 | display: inline-block; 244 | font: [_font_size_]px/1em sans-serif; 245 | height: [_font_size_]px; 246 | position: relative; 247 | top: -1px; 248 | margin-right: calc([_font_size_]px / 3); 249 | width: [_font_size_]px; 250 | } 251 | input[type="checkbox"]:checked + label:before { 252 | background: var(--bg); 253 | color: var(--border); 254 | content: "\2713"; 255 | text-align: center; 256 | } 257 | 258 | .header-menu { 259 | position: fixed; 260 | background-color: var(--bg2); 261 | top: 0px; 262 | max-width: 1280px; 263 | display: inline-block; 264 | } 265 | .header-menu-cell { border: none; } 266 | .header-menu-cell { 267 | border-right: 1px solid var(--bg); 268 | padding: 10px 20px; 269 | } 270 | .header-menu-cell:hover { 271 | background-color: var(--row-HL); 272 | } 273 | .header-menu-cell:hover a, 274 | .header-menu-cell a 275 | { text-decoration: none; } 276 | 277 | .spoiler { 278 | color: var(--so2) 279 | } 280 | 281 | summary { margin-bottom: [_font_size_]px; } -------------------------------------------------------------------------------- /test unicode emoji.txt: -------------------------------------------------------------------------------- 1 | Ch Dec Hex Name 2 | ⌚ 8986 231A 3 | ⌛ 8987 231B 4 | ⏩ 9193 23E9 5 | ⏪ 9194 23EA 6 | ⏫ 9195 23EB 7 | ⏬ 9196 23EC 8 | ⏭ 9197 23ED 9 | ⏮ 9198 23EE 10 | ⏯ 9199 23EF 11 | ⏰ 9200 23F0 12 | ⏱ 9201 23F1 13 | ⏲ 9202 23F2 14 | ⏳ 9203 23F3 15 | ⏸ 9208 23F8 16 | ⏹ 9209 23F9 17 | ⏺ 9210 23FA 18 | Ⓜ 9410 24C2 19 | ☔ 9748 2614 20 | ☕ 9749 2615 21 | ☝ 9757 261D 22 | ♈ 9800 2648 23 | ♉ 9801 2649 24 | ♊ 9802 264A 25 | ♋ 9803 264B 26 | ♌ 9804 264C 27 | ♍ 9805 264D 28 | ♎ 9806 264E 29 | ♏ 9807 264F 30 | ♐ 9808 2650 31 | ♑ 9809 2651 32 | ♒ 9810 2652 33 | ♓ 9811 2653 34 | ♟ 9823 265F 35 | ♿ 9855 267F 36 | ⚓ 9875 2693 37 | ⚡ 9889 26A1 38 | ⚪ 9898 26AA 39 | ⚫ 9899 26AB 40 | ⚽ 9917 26BD 41 | ⚾ 9918 26BE 42 | ⛄ 9924 26C4 43 | ⛅ 9925 26C5 44 | ⛎ 9934 26CE 45 | ⛏ 9935 26CF 46 | ⛑ 9937 26D1 47 | ⛓ 9939 26D3 48 | ⛔ 9940 26D4 49 | ⛩ 9961 26E9 50 | ⛪ 9962 26EA 51 | ⛰ 9968 26F0 52 | ⛱ 9969 26F1 53 | ⛲ 9970 26F2 54 | ⛳ 9971 26F3 55 | ⛴ 9972 26F4 56 | ⛵ 9973 26F5 57 | ⛷ 9975 26F7 58 | ⛸ 9976 26F8 59 | ⛹ 9977 26F9 60 | ⛺ 9978 26FA 61 | ⛽ 9981 26FD 62 | ✂ 9986 2702 63 | ✅ 9989 2705 64 | ✈ 9992 2708 65 | ✉ 9993 2709 66 | ✊ 9994 270A 67 | ✋ 9995 270B 68 | ✌ 9996 270C 69 | ✍ 9997 270D 70 | ✏ 9999 270F 71 | ✒ 10002 2712 72 | ✔ 10004 2714 73 | ✖ 10006 2716 74 | ✝ 10013 271D 75 | ✡ 10017 2721 76 | ✨ 10024 2728 77 | ✳ 10035 2733 78 | ✴ 10036 2734 79 | ❄ 10052 2744 80 | ❇ 10055 2747 81 | ❌ 10060 274C 82 | ❎ 10062 274E 83 | ❓ 10067 2753 84 | ❔ 10068 2754 85 | ❕ 10069 2755 86 | ❗ 10071 2757 87 | ❣ 10083 2763 88 | ❤ 10084 2764 89 | ➕ 10133 2795 90 | ➖ 10134 2796 91 | ➗ 10135 2797 92 | ➡ 10145 27A1 93 | ➰ 10160 27B0 94 | ➿ 10175 27BF 95 | ⤴ 10548 2934 96 | ⤵ 10549 2935 97 | ⬅ 11013 2B05 98 | ⬆ 11014 2B06 99 | ⬇ 11015 2B07 100 | ⬛ 11035 2B1B 101 | ⬜ 11036 2B1C 102 | ⭐ 11088 2B50 103 | ⭕ 11093 2B55 104 | 〰 12336 3030 105 | 〽 12349 303D 106 | ㊗ 12951 3297 107 | ㊙ 12953 3299 108 | 🀄 126980 1F004 109 | 🃏 127183 1F0CF 110 | 🅰 127344 1F170 111 | 🅱 127345 1F171 112 | 🅾 127358 1F17E 113 | 🅿 127359 1F17F 114 | 🆎 127374 1F18E 115 | 🆑 127377 1F191 116 | 🆒 127378 1F192 117 | 🆓 127379 1F193 118 | 🆔 127380 1F194 119 | 🆕 127381 1F195 120 | 🆖 127382 1F196 121 | 🆗 127383 1F197 122 | 🆘 127384 1F198 123 | 🆙 127385 1F199 124 | 🆚 127386 1F19A 125 | 🈁 127489 1F201 126 | 🈂 127490 1F202 127 | 🈚 127514 1F21A 128 | 🈯 127535 1F22F 129 | 🈲 127538 1F232 130 | 🈳 127539 1F233 131 | 🈴 127540 1F234 132 | 🈵 127541 1F235 133 | 🈶 127542 1F236 134 | 🈷 127543 1F237 135 | 🈸 127544 1F238 136 | 🈹 127545 1F239 137 | 🈺 127546 1F23A 138 | 🉐 127568 1F250 139 | 🉑 127569 1F251 140 | 🌀 127744 1F300 141 | 🌁 127745 1F301 142 | 🌂 127746 1F302 143 | 🌃 127747 1F303 144 | 🌄 127748 1F304 145 | 🌅 127749 1F305 146 | 🌆 127750 1F306 147 | 🌇 127751 1F307 148 | 🌈 127752 1F308 149 | 🌉 127753 1F309 150 | 🌊 127754 1F30A 151 | 🌋 127755 1F30B 152 | 🌌 127756 1F30C 153 | 🌍 127757 1F30D 154 | 🌎 127758 1F30E 155 | 🌏 127759 1F30F 156 | 🌐 127760 1F310 157 | 🌑 127761 1F311 158 | 🌒 127762 1F312 159 | 🌓 127763 1F313 160 | 🌔 127764 1F314 161 | 🌕 127765 1F315 162 | 🌖 127766 1F316 163 | 🌗 127767 1F317 164 | 🌘 127768 1F318 165 | 🌙 127769 1F319 166 | 🌚 127770 1F31A 167 | 🌛 127771 1F31B 168 | 🌜 127772 1F31C 169 | 🌝 127773 1F31D 170 | 🌞 127774 1F31E 171 | 🌟 127775 1F31F 172 | 🌠 127776 1F320 173 | 🌡 127777 1F321 174 | 🌤 127780 1F324 175 | 🌥 127781 1F325 176 | 🌦 127782 1F326 177 | 🌧 127783 1F327 178 | 🌨 127784 1F328 179 | 🌩 127785 1F329 180 | 🌪 127786 1F32A 181 | 🌫 127787 1F32B 182 | 🌬 127788 1F32C 183 | 🌭 127789 1F32D 184 | 🌮 127790 1F32E 185 | 🌯 127791 1F32F 186 | 🌰 127792 1F330 187 | 🌱 127793 1F331 188 | 🌲 127794 1F332 189 | 🌳 127795 1F333 190 | 🌴 127796 1F334 191 | 🌵 127797 1F335 192 | 🌶 127798 1F336 193 | 🌷 127799 1F337 194 | 🌸 127800 1F338 195 | 🌹 127801 1F339 196 | 🌺 127802 1F33A 197 | 🌻 127803 1F33B 198 | 🌼 127804 1F33C 199 | 🌽 127805 1F33D 200 | 🌾 127806 1F33E 201 | 🌿 127807 1F33F 202 | 🍀 127808 1F340 203 | 🍁 127809 1F341 204 | 🍂 127810 1F342 205 | 🍃 127811 1F343 206 | 🍄 127812 1F344 207 | 🍅 127813 1F345 208 | 🍆 127814 1F346 209 | 🍇 127815 1F347 210 | 🍈 127816 1F348 211 | 🍉 127817 1F349 212 | 🍊 127818 1F34A 213 | 🍋 127819 1F34B 214 | 🍌 127820 1F34C 215 | 🍍 127821 1F34D 216 | 🍎 127822 1F34E 217 | 🍏 127823 1F34F 218 | 🍐 127824 1F350 219 | 🍑 127825 1F351 220 | 🍒 127826 1F352 221 | 🍓 127827 1F353 222 | 🍔 127828 1F354 223 | 🍕 127829 1F355 224 | 🍖 127830 1F356 225 | 🍗 127831 1F357 226 | 🍘 127832 1F358 227 | 🍙 127833 1F359 228 | 🍚 127834 1F35A 229 | 🍛 127835 1F35B 230 | 🍜 127836 1F35C 231 | 🍝 127837 1F35D 232 | 🍞 127838 1F35E 233 | 🍟 127839 1F35F 234 | 🍠 127840 1F360 235 | 🍡 127841 1F361 236 | 🍢 127842 1F362 237 | 🍣 127843 1F363 238 | 🍤 127844 1F364 239 | 🍥 127845 1F365 240 | 🍦 127846 1F366 241 | 🍧 127847 1F367 242 | 🍨 127848 1F368 243 | 🍩 127849 1F369 244 | 🍪 127850 1F36A 245 | 🍫 127851 1F36B 246 | 🍬 127852 1F36C 247 | 🍭 127853 1F36D 248 | 🍮 127854 1F36E 249 | 🍯 127855 1F36F 250 | 🍰 127856 1F370 251 | 🍱 127857 1F371 252 | 🍲 127858 1F372 253 | 🍳 127859 1F373 254 | 🍴 127860 1F374 255 | 🍵 127861 1F375 256 | 🍶 127862 1F376 257 | 🍷 127863 1F377 258 | 🍸 127864 1F378 259 | 🍹 127865 1F379 260 | 🍺 127866 1F37A 261 | 🍻 127867 1F37B 262 | 🍼 127868 1F37C 263 | 🍽 127869 1F37D 264 | 🍾 127870 1F37E 265 | 🍿 127871 1F37F 266 | 🎀 127872 1F380 267 | 🎁 127873 1F381 268 | 🎂 127874 1F382 269 | 🎃 127875 1F383 270 | 🎄 127876 1F384 271 | 🎅 127877 1F385 272 | 🎆 127878 1F386 273 | 🎇 127879 1F387 274 | 🎈 127880 1F388 275 | 🎉 127881 1F389 276 | 🎊 127882 1F38A 277 | 🎋 127883 1F38B 278 | 🎌 127884 1F38C 279 | 🎍 127885 1F38D 280 | 🎎 127886 1F38E 281 | 🎏 127887 1F38F 282 | 🎐 127888 1F390 283 | 🎑 127889 1F391 284 | 🎒 127890 1F392 285 | 🎓 127891 1F393 286 | 🎖 127894 1F396 287 | 🎗 127895 1F397 288 | 🎙 127897 1F399 289 | 🎚 127898 1F39A 290 | 🎛 127899 1F39B 291 | 🎞 127902 1F39E 292 | 🎟 127903 1F39F 293 | 🎠 127904 1F3A0 294 | 🎡 127905 1F3A1 295 | 🎢 127906 1F3A2 296 | 🎣 127907 1F3A3 297 | 🎤 127908 1F3A4 298 | 🎥 127909 1F3A5 299 | 🎦 127910 1F3A6 300 | 🎧 127911 1F3A7 301 | 🎨 127912 1F3A8 302 | 🎩 127913 1F3A9 303 | 🎪 127914 1F3AA 304 | 🎫 127915 1F3AB 305 | 🎬 127916 1F3AC 306 | 🎭 127917 1F3AD 307 | 🎮 127918 1F3AE 308 | 🎯 127919 1F3AF 309 | 🎰 127920 1F3B0 310 | 🎱 127921 1F3B1 311 | 🎲 127922 1F3B2 312 | 🎳 127923 1F3B3 313 | 🎴 127924 1F3B4 314 | 🎵 127925 1F3B5 315 | 🎶 127926 1F3B6 316 | 🎷 127927 1F3B7 317 | 🎸 127928 1F3B8 318 | 🎹 127929 1F3B9 319 | 🎺 127930 1F3BA 320 | 🎻 127931 1F3BB 321 | 🎼 127932 1F3BC 322 | 🎽 127933 1F3BD 323 | 🎾 127934 1F3BE 324 | 🎿 127935 1F3BF 325 | 🏀 127936 1F3C0 326 | 🏁 127937 1F3C1 327 | 🏂 127938 1F3C2 328 | 🏃 127939 1F3C3 329 | 🏄 127940 1F3C4 330 | 🏅 127941 1F3C5 331 | 🏆 127942 1F3C6 332 | 🏇 127943 1F3C7 333 | 🏈 127944 1F3C8 334 | 🏉 127945 1F3C9 335 | 🏊 127946 1F3CA 336 | 🏋 127947 1F3CB 337 | 🏌 127948 1F3CC 338 | 🏍 127949 1F3CD 339 | 🏎 127950 1F3CE 340 | 🏏 127951 1F3CF 341 | 🏐 127952 1F3D0 342 | 🏑 127953 1F3D1 343 | 🏒 127954 1F3D2 344 | 🏓 127955 1F3D3 345 | 🏔 127956 1F3D4 346 | 🏕 127957 1F3D5 347 | 🏖 127958 1F3D6 348 | 🏗 127959 1F3D7 349 | 🏘 127960 1F3D8 350 | 🏙 127961 1F3D9 351 | 🏚 127962 1F3DA 352 | 🏛 127963 1F3DB 353 | 🏜 127964 1F3DC 354 | 🏝 127965 1F3DD 355 | 🏞 127966 1F3DE 356 | 🏟 127967 1F3DF 357 | 🏠 127968 1F3E0 358 | 🏡 127969 1F3E1 359 | 🏢 127970 1F3E2 360 | 🏣 127971 1F3E3 361 | 🏤 127972 1F3E4 362 | 🏥 127973 1F3E5 363 | 🏦 127974 1F3E6 364 | 🏧 127975 1F3E7 365 | 🏨 127976 1F3E8 366 | 🏩 127977 1F3E9 367 | 🏪 127978 1F3EA 368 | 🏫 127979 1F3EB 369 | 🏬 127980 1F3EC 370 | 🏭 127981 1F3ED 371 | 🏮 127982 1F3EE 372 | 🏯 127983 1F3EF 373 | 🏰 127984 1F3F0 374 | 🏳 127987 1F3F3 375 | 🏴 127988 1F3F4 376 | 🏵 127989 1F3F5 377 | 🏷 127991 1F3F7 378 | 🏸 127992 1F3F8 379 | 🏹 127993 1F3F9 380 | 🏺 127994 1F3FA 381 | 🏻 127995 1F3FB 382 | 🏼 127996 1F3FC 383 | 🏽 127997 1F3FD 384 | 🏾 127998 1F3FE 385 | 🏿 127999 1F3FF 386 | 🐀 128000 1F400 387 | 🐁 128001 1F401 388 | 🐂 128002 1F402 389 | 🐃 128003 1F403 390 | 🐄 128004 1F404 391 | 🐅 128005 1F405 392 | 🐆 128006 1F406 393 | 🐇 128007 1F407 394 | 🐈 128008 1F408 395 | 🐉 128009 1F409 396 | 🐊 128010 1F40A 397 | 🐋 128011 1F40B 398 | 🐌 128012 1F40C 399 | 🐍 128013 1F40D 400 | 🐎 128014 1F40E 401 | 🐏 128015 1F40F 402 | 🐐 128016 1F410 403 | 🐑 128017 1F411 404 | 🐒 128018 1F412 405 | 🐓 128019 1F413 406 | 🐔 128020 1F414 407 | 🐕 128021 1F415 408 | 🐖 128022 1F416 409 | 🐗 128023 1F417 410 | 🐘 128024 1F418 411 | 🐙 128025 1F419 412 | 🐚 128026 1F41A 413 | 🐛 128027 1F41B 414 | 🐜 128028 1F41C 415 | 🐝 128029 1F41D 416 | 🐞 128030 1F41E 417 | 🐟 128031 1F41F 418 | 🐠 128032 1F420 419 | 🐡 128033 1F421 420 | 🐢 128034 1F422 421 | 🐣 128035 1F423 422 | 🐤 128036 1F424 423 | 🐥 128037 1F425 424 | 🐦 128038 1F426 425 | 🐧 128039 1F427 426 | 🐨 128040 1F428 427 | 🐩 128041 1F429 428 | 🐪 128042 1F42A 429 | 🐫 128043 1F42B 430 | 🐬 128044 1F42C 431 | 🐭 128045 1F42D 432 | 🐮 128046 1F42E 433 | 🐯 128047 1F42F 434 | 🐰 128048 1F430 435 | 🐱 128049 1F431 436 | 🐲 128050 1F432 437 | 🐳 128051 1F433 438 | 🐴 128052 1F434 439 | 🐵 128053 1F435 440 | 🐶 128054 1F436 441 | 🐷 128055 1F437 442 | 🐸 128056 1F438 443 | 🐹 128057 1F439 444 | 🐺 128058 1F43A 445 | 🐻 128059 1F43B 446 | 🐼 128060 1F43C 447 | 🐽 128061 1F43D 448 | 🐾 128062 1F43E 449 | 🐿 128063 1F43F 450 | 👀 128064 1F440 451 | 👁 128065 1F441 452 | 👂 128066 1F442 453 | 👃 128067 1F443 454 | 👄 128068 1F444 455 | 👅 128069 1F445 456 | 👆 128070 1F446 457 | 👇 128071 1F447 458 | 👈 128072 1F448 459 | 👉 128073 1F449 460 | 👊 128074 1F44A 461 | 👋 128075 1F44B 462 | 👌 128076 1F44C 463 | 👍 128077 1F44D 464 | 👎 128078 1F44E 465 | 👏 128079 1F44F 466 | 👐 128080 1F450 467 | 👑 128081 1F451 468 | 👒 128082 1F452 469 | 👓 128083 1F453 470 | 👔 128084 1F454 471 | 👕 128085 1F455 472 | 👖 128086 1F456 473 | 👗 128087 1F457 474 | 👘 128088 1F458 475 | 👙 128089 1F459 476 | 👚 128090 1F45A 477 | 👛 128091 1F45B 478 | 👜 128092 1F45C 479 | 👝 128093 1F45D 480 | 👞 128094 1F45E 481 | 👟 128095 1F45F 482 | 👠 128096 1F460 483 | 👡 128097 1F461 484 | 👢 128098 1F462 485 | 👣 128099 1F463 486 | 👤 128100 1F464 487 | 👥 128101 1F465 488 | 👦 128102 1F466 489 | 👧 128103 1F467 490 | 👨 128104 1F468 491 | 👩 128105 1F469 492 | 👪 128106 1F46A 493 | 👫 128107 1F46B 494 | 👬 128108 1F46C 495 | 👭 128109 1F46D 496 | 👮 128110 1F46E 497 | 👯 128111 1F46F 498 | 👰 128112 1F470 499 | 👱 128113 1F471 500 | 👲 128114 1F472 501 | 👳 128115 1F473 502 | 👴 128116 1F474 503 | 👵 128117 1F475 504 | 👶 128118 1F476 505 | 👷 128119 1F477 506 | 👸 128120 1F478 507 | 👹 128121 1F479 508 | 👺 128122 1F47A 509 | 👻 128123 1F47B 510 | 👼 128124 1F47C 511 | 👽 128125 1F47D 512 | 👾 128126 1F47E 513 | 👿 128127 1F47F 514 | 💀 128128 1F480 515 | 💁 128129 1F481 516 | 💂 128130 1F482 517 | 💃 128131 1F483 518 | 💄 128132 1F484 519 | 💅 128133 1F485 520 | 💆 128134 1F486 521 | 💇 128135 1F487 522 | 💈 128136 1F488 523 | 💉 128137 1F489 524 | 💊 128138 1F48A 525 | 💋 128139 1F48B 526 | 💌 128140 1F48C 527 | 💍 128141 1F48D 528 | 💎 128142 1F48E 529 | 💏 128143 1F48F 530 | 💐 128144 1F490 531 | 💑 128145 1F491 532 | 💒 128146 1F492 533 | 💓 128147 1F493 534 | 💔 128148 1F494 535 | 💕 128149 1F495 536 | 💖 128150 1F496 537 | 💗 128151 1F497 538 | 💘 128152 1F498 539 | 💙 128153 1F499 540 | 💚 128154 1F49A 541 | 💛 128155 1F49B 542 | 💜 128156 1F49C 543 | 💝 128157 1F49D 544 | 💞 128158 1F49E 545 | 💟 128159 1F49F 546 | 💠 128160 1F4A0 547 | 💡 128161 1F4A1 548 | 💢 128162 1F4A2 549 | 💣 128163 1F4A3 550 | 💤 128164 1F4A4 551 | 💥 128165 1F4A5 552 | 💦 128166 1F4A6 553 | 💧 128167 1F4A7 554 | 💨 128168 1F4A8 555 | 💩 128169 1F4A9 556 | 💪 128170 1F4AA 557 | 💫 128171 1F4AB 558 | 💬 128172 1F4AC 559 | 💭 128173 1F4AD 560 | 💮 128174 1F4AE 561 | 💯 128175 1F4AF 562 | 💰 128176 1F4B0 563 | 💱 128177 1F4B1 564 | 💲 128178 1F4B2 565 | 💳 128179 1F4B3 566 | 💴 128180 1F4B4 567 | 💵 128181 1F4B5 568 | 💶 128182 1F4B6 569 | 💷 128183 1F4B7 570 | 💸 128184 1F4B8 571 | 💹 128185 1F4B9 572 | 💺 128186 1F4BA 573 | 💻 128187 1F4BB 574 | 💼 128188 1F4BC 575 | 💽 128189 1F4BD 576 | 💾 128190 1F4BE 577 | 💿 128191 1F4BF 578 | 📀 128192 1F4C0 579 | 📁 128193 1F4C1 580 | 📂 128194 1F4C2 581 | 📃 128195 1F4C3 582 | 📄 128196 1F4C4 583 | 📅 128197 1F4C5 584 | 📆 128198 1F4C6 585 | 📇 128199 1F4C7 586 | 📈 128200 1F4C8 587 | 📉 128201 1F4C9 588 | 📊 128202 1F4CA 589 | 📋 128203 1F4CB 590 | 📌 128204 1F4CC 591 | 📍 128205 1F4CD 592 | 📎 128206 1F4CE 593 | 📏 128207 1F4CF 594 | 📐 128208 1F4D0 595 | 📑 128209 1F4D1 596 | 📒 128210 1F4D2 597 | 📓 128211 1F4D3 598 | 📔 128212 1F4D4 599 | 📕 128213 1F4D5 600 | 📖 128214 1F4D6 601 | 📗 128215 1F4D7 602 | 📘 128216 1F4D8 603 | 📙 128217 1F4D9 604 | 📚 128218 1F4DA 605 | 📛 128219 1F4DB 606 | 📜 128220 1F4DC 607 | 📝 128221 1F4DD 608 | 📞 128222 1F4DE 609 | 📟 128223 1F4DF 610 | 📠 128224 1F4E0 611 | 📡 128225 1F4E1 612 | 📢 128226 1F4E2 613 | 📣 128227 1F4E3 614 | 📤 128228 1F4E4 615 | 📥 128229 1F4E5 616 | 📦 128230 1F4E6 617 | 📧 128231 1F4E7 618 | 📨 128232 1F4E8 619 | 📩 128233 1F4E9 620 | 📪 128234 1F4EA 621 | 📫 128235 1F4EB 622 | 📬 128236 1F4EC 623 | 📭 128237 1F4ED 624 | 📮 128238 1F4EE 625 | 📯 128239 1F4EF 626 | 📰 128240 1F4F0 627 | 📱 128241 1F4F1 628 | 📲 128242 1F4F2 629 | 📳 128243 1F4F3 630 | 📴 128244 1F4F4 631 | 📵 128245 1F4F5 632 | 📶 128246 1F4F6 633 | 📷 128247 1F4F7 634 | 📸 128248 1F4F8 635 | 📹 128249 1F4F9 636 | 📺 128250 1F4FA 637 | 📻 128251 1F4FB 638 | 📼 128252 1F4FC 639 | 📽 128253 1F4FD 640 | 📿 128255 1F4FF 641 | 🔀 128256 1F500 642 | 🔁 128257 1F501 643 | 🔂 128258 1F502 644 | 🔃 128259 1F503 645 | 🔄 128260 1F504 646 | 🔅 128261 1F505 647 | 🔆 128262 1F506 648 | 🔇 128263 1F507 649 | 🔈 128264 1F508 650 | 🔉 128265 1F509 651 | 🔊 128266 1F50A 652 | 🔋 128267 1F50B 653 | 🔌 128268 1F50C 654 | 🔍 128269 1F50D 655 | 🔎 128270 1F50E 656 | 🔏 128271 1F50F 657 | 🔐 128272 1F510 658 | 🔑 128273 1F511 659 | 🔒 128274 1F512 660 | 🔓 128275 1F513 661 | 🔔 128276 1F514 662 | 🔕 128277 1F515 663 | 🔖 128278 1F516 664 | 🔗 128279 1F517 665 | 🔘 128280 1F518 666 | 🔙 128281 1F519 667 | 🔚 128282 1F51A 668 | 🔛 128283 1F51B 669 | 🔜 128284 1F51C 670 | 🔝 128285 1F51D 671 | 🔞 128286 1F51E 672 | 🔟 128287 1F51F 673 | 🔠 128288 1F520 674 | 🔡 128289 1F521 675 | 🔢 128290 1F522 676 | 🔣 128291 1F523 677 | 🔤 128292 1F524 678 | 🔥 128293 1F525 679 | 🔦 128294 1F526 680 | 🔧 128295 1F527 681 | 🔨 128296 1F528 682 | 🔩 128297 1F529 683 | 🔪 128298 1F52A 684 | 🔫 128299 1F52B 685 | 🔬 128300 1F52C 686 | 🔭 128301 1F52D 687 | 🔮 128302 1F52E 688 | 🔯 128303 1F52F 689 | 🔰 128304 1F530 690 | 🔱 128305 1F531 691 | 🔲 128306 1F532 692 | 🔳 128307 1F533 693 | 🔴 128308 1F534 694 | 🔵 128309 1F535 695 | 🔶 128310 1F536 696 | 🔷 128311 1F537 697 | 🔸 128312 1F538 698 | 🔹 128313 1F539 699 | 🔺 128314 1F53A 700 | 🔻 128315 1F53B 701 | 🔼 128316 1F53C 702 | 🔽 128317 1F53D 703 | 🕉 128329 1F549 704 | 🕊 128330 1F54A 705 | 🕋 128331 1F54B 706 | 🕌 128332 1F54C 707 | 🕍 128333 1F54D 708 | 🕎 128334 1F54E 709 | 🕐 128336 1F550 710 | 🕑 128337 1F551 711 | 🕒 128338 1F552 712 | 🕓 128339 1F553 713 | 🕔 128340 1F554 714 | 🕕 128341 1F555 715 | 🕖 128342 1F556 716 | 🕗 128343 1F557 717 | 🕘 128344 1F558 718 | 🕙 128345 1F559 719 | 🕚 128346 1F55A 720 | 🕛 128347 1F55B 721 | 🕜 128348 1F55C 722 | 🕝 128349 1F55D 723 | 🕞 128350 1F55E 724 | 🕟 128351 1F55F 725 | 🕠 128352 1F560 726 | 🕡 128353 1F561 727 | 🕢 128354 1F562 728 | 🕣 128355 1F563 729 | 🕤 128356 1F564 730 | 🕥 128357 1F565 731 | 🕦 128358 1F566 732 | 🕧 128359 1F567 733 | 🕯 128367 1F56F 734 | 🕰 128368 1F570 735 | 🕳 128371 1F573 736 | 🕴 128372 1F574 737 | 🕵 128373 1F575 738 | 🕶 128374 1F576 739 | 🕷 128375 1F577 740 | 🕸 128376 1F578 741 | 🕹 128377 1F579 742 | 🕺 128378 1F57A 743 | 🖇 128391 1F587 744 | 🖊 128394 1F58A 745 | 🖋 128395 1F58B 746 | 🖌 128396 1F58C 747 | 🖍 128397 1F58D 748 | 🖐 128400 1F590 749 | 🖕 128405 1F595 750 | 🖖 128406 1F596 751 | 🖤 128420 1F5A4 752 | 🖥 128421 1F5A5 753 | 🖨 128424 1F5A8 754 | 🖱 128433 1F5B1 755 | 🖲 128434 1F5B2 756 | 🖼 128444 1F5BC 757 | 🗂 128450 1F5C2 758 | 🗃 128451 1F5C3 759 | 🗄 128452 1F5C4 760 | 🗑 128465 1F5D1 761 | 🗒 128466 1F5D2 762 | 🗓 128467 1F5D3 763 | 🗜 128476 1F5DC 764 | 🗝 128477 1F5DD 765 | 🗞 128478 1F5DE 766 | 🗡 128481 1F5E1 767 | 🗣 128483 1F5E3 768 | 🗨 128488 1F5E8 769 | 🗯 128495 1F5EF 770 | 🗳 128499 1F5F3 771 | 🗺 128506 1F5FA 772 | 🗻 128507 1F5FB 773 | 🗼 128508 1F5FC 774 | 🗽 128509 1F5FD 775 | 🗾 128510 1F5FE 776 | 🗿 128511 1F5FF 777 | 😀 128512 1F600 778 | 😁 128513 1F601 779 | 😂 128514 1F602 780 | 😃 128515 1F603 781 | 😄 128516 1F604 782 | 😅 128517 1F605 783 | 😆 128518 1F606 784 | 😇 128519 1F607 785 | 😈 128520 1F608 786 | 😉 128521 1F609 787 | 😊 128522 1F60A 788 | 😋 128523 1F60B 789 | 😌 128524 1F60C 790 | 😍 128525 1F60D 791 | 😎 128526 1F60E 792 | 😏 128527 1F60F 793 | 😐 128528 1F610 794 | 😑 128529 1F611 795 | 😒 128530 1F612 796 | 😓 128531 1F613 797 | 😔 128532 1F614 798 | 😕 128533 1F615 799 | 😖 128534 1F616 800 | 😗 128535 1F617 801 | 😘 128536 1F618 802 | 😙 128537 1F619 803 | 😚 128538 1F61A 804 | 😛 128539 1F61B 805 | 😜 128540 1F61C 806 | 😝 128541 1F61D 807 | 😞 128542 1F61E 808 | 😟 128543 1F61F 809 | 😠 128544 1F620 810 | 😡 128545 1F621 811 | 😢 128546 1F622 812 | 😣 128547 1F623 813 | 😤 128548 1F624 814 | 😥 128549 1F625 815 | 😦 128550 1F626 816 | 😧 128551 1F627 817 | 😨 128552 1F628 818 | 😩 128553 1F629 819 | 😪 128554 1F62A 820 | 😫 128555 1F62B 821 | 😬 128556 1F62C 822 | 😭 128557 1F62D 823 | 😮 128558 1F62E 824 | 😯 128559 1F62F 825 | 😰 128560 1F630 826 | 😱 128561 1F631 827 | 😲 128562 1F632 828 | 😳 128563 1F633 829 | 😴 128564 1F634 830 | 😵 128565 1F635 831 | 😶 128566 1F636 832 | 😷 128567 1F637 833 | 😸 128568 1F638 834 | 😹 128569 1F639 835 | 😺 128570 1F63A 836 | 😻 128571 1F63B 837 | 😼 128572 1F63C 838 | 😽 128573 1F63D 839 | 😾 128574 1F63E 840 | 😿 128575 1F63F 841 | 🙀 128576 1F640 842 | 🙁 128577 1F641 843 | 🙂 128578 1F642 844 | 🙃 128579 1F643 845 | 🙄 128580 1F644 846 | 🙅 128581 1F645 847 | 🙆 128582 1F646 848 | 🙇 128583 1F647 849 | 🙈 128584 1F648 850 | 🙉 128585 1F649 851 | 🙊 128586 1F64A 852 | 🙋 128587 1F64B 853 | 🙌 128588 1F64C 854 | 🙍 128589 1F64D 855 | 🙎 128590 1F64E 856 | 🙏 128591 1F64F 857 | 🚀 128640 1F680 858 | 🚁 128641 1F681 859 | 🚂 128642 1F682 860 | 🚃 128643 1F683 861 | 🚄 128644 1F684 862 | 🚅 128645 1F685 863 | 🚆 128646 1F686 864 | 🚇 128647 1F687 865 | 🚈 128648 1F688 866 | 🚉 128649 1F689 867 | 🚊 128650 1F68A 868 | 🚋 128651 1F68B 869 | 🚌 128652 1F68C 870 | 🚍 128653 1F68D 871 | 🚎 128654 1F68E 872 | 🚏 128655 1F68F 873 | 🚐 128656 1F690 874 | 🚑 128657 1F691 875 | 🚒 128658 1F692 876 | 🚓 128659 1F693 877 | 🚔 128660 1F694 878 | 🚕 128661 1F695 879 | 🚖 128662 1F696 880 | 🚗 128663 1F697 881 | 🚘 128664 1F698 882 | 🚙 128665 1F699 883 | 🚚 128666 1F69A 884 | 🚛 128667 1F69B 885 | 🚜 128668 1F69C 886 | 🚝 128669 1F69D 887 | 🚞 128670 1F69E 888 | 🚟 128671 1F69F 889 | 🚠 128672 1F6A0 890 | 🚡 128673 1F6A1 891 | 🚢 128674 1F6A2 892 | 🚣 128675 1F6A3 893 | 🚤 128676 1F6A4 894 | 🚥 128677 1F6A5 895 | 🚦 128678 1F6A6 896 | 🚧 128679 1F6A7 897 | 🚨 128680 1F6A8 898 | 🚩 128681 1F6A9 899 | 🚪 128682 1F6AA 900 | 🚫 128683 1F6AB 901 | 🚬 128684 1F6AC 902 | 🚭 128685 1F6AD 903 | 🚮 128686 1F6AE 904 | 🚯 128687 1F6AF 905 | 🚰 128688 1F6B0 906 | 🚱 128689 1F6B1 907 | 🚲 128690 1F6B2 908 | 🚳 128691 1F6B3 909 | 🚴 128692 1F6B4 910 | 🚵 128693 1F6B5 911 | 🚶 128694 1F6B6 912 | 🚷 128695 1F6B7 913 | 🚸 128696 1F6B8 914 | 🚹 128697 1F6B9 915 | 🚺 128698 1F6BA 916 | 🚻 128699 1F6BB 917 | 🚼 128700 1F6BC 918 | 🚽 128701 1F6BD 919 | 🚾 128702 1F6BE 920 | 🚿 128703 1F6BF 921 | 🛀 128704 1F6C0 922 | 🛁 128705 1F6C1 923 | 🛂 128706 1F6C2 924 | 🛃 128707 1F6C3 925 | 🛄 128708 1F6C4 926 | 🛅 128709 1F6C5 927 | 🛋 128715 1F6CB 928 | 🛌 128716 1F6CC 929 | 🛍 128717 1F6CD 930 | 🛎 128718 1F6CE 931 | 🛏 128719 1F6CF 932 | 🛐 128720 1F6D0 933 | 🛑 128721 1F6D1 934 | 🛒 128722 1F6D2 935 | 🛠 128736 1F6E0 936 | 🛡 128737 1F6E1 937 | 🛢 128738 1F6E2 938 | 🛣 128739 1F6E3 939 | 🛤 128740 1F6E4 940 | 🛥 128741 1F6E5 941 | 🛩 128745 1F6E9 942 | 🛫 128747 1F6EB 943 | 🛬 128748 1F6EC 944 | 🛰 128752 1F6F0 945 | 🛳 128755 1F6F3 946 | 🛴 128756 1F6F4 947 | 🛵 128757 1F6F5 948 | 🛶 128758 1F6F6 949 | 🛷 128759 1F6F7 950 | 🛸 128760 1F6F8 951 | 🛹 128761 1F6F9 952 | 🛺 128762 1F6FA 953 | 🤐 129296 1F910 954 | 🤑 129297 1F911 955 | 🤒 129298 1F912 956 | 🤓 129299 1F913 957 | 🤔 129300 1F914 958 | 🤕 129301 1F915 959 | 🤖 129302 1F916 960 | 🤗 129303 1F917 961 | 🤘 129304 1F918 962 | 🤙 129305 1F919 963 | 🤚 129306 1F91A 964 | 🤛 129307 1F91B 965 | 🤜 129308 1F91C 966 | 🤝 129309 1F91D 967 | 🤞 129310 1F91E 968 | 🤟 129311 1F91F 969 | 🤠 129312 1F920 970 | 🤡 129313 1F921 971 | 🤢 129314 1F922 972 | 🤣 129315 1F923 973 | 🤤 129316 1F924 974 | 🤥 129317 1F925 975 | 🤦 129318 1F926 976 | 🤧 129319 1F927 977 | 🤨 129320 1F928 978 | 🤩 129321 1F929 979 | 🤪 129322 1F92A 980 | 🤫 129323 1F92B 981 | 🤬 129324 1F92C 982 | 🤭 129325 1F92D 983 | 🤮 129326 1F92E 984 | 🤯 129327 1F92F 985 | 🤰 129328 1F930 986 | 🤱 129329 1F931 987 | 🤲 129330 1F932 988 | 🤳 129331 1F933 989 | 🤴 129332 1F934 990 | 🤵 129333 1F935 991 | 🤶 129334 1F936 992 | 🤷 129335 1F937 993 | 🤸 129336 1F938 994 | 🤹 129337 1F939 995 | 🤺 129338 1F93A 996 | 🤼 129340 1F93C 997 | 🤽 129341 1F93D 998 | 🤾 129342 1F93E 999 | 🥀 129344 1F940 1000 | 🥁 129345 1F941 1001 | 🥂 129346 1F942 1002 | 🥃 129347 1F943 1003 | 🥄 129348 1F944 1004 | 🥅 129349 1F945 1005 | 🥇 129351 1F947 1006 | 🥈 129352 1F948 1007 | 🥉 129353 1F949 1008 | 🥊 129354 1F94A 1009 | 🥋 129355 1F94B 1010 | 🥌 129356 1F94C 1011 | 🥍 129357 1F94D 1012 | 🥎 129358 1F94E 1013 | 🥏 129359 1F94F 1014 | 🥐 129360 1F950 1015 | 🥑 129361 1F951 1016 | 🥒 129362 1F952 1017 | 🥓 129363 1F953 1018 | 🥔 129364 1F954 1019 | 🥕 129365 1F955 1020 | 🥖 129366 1F956 1021 | 🥗 129367 1F957 1022 | 🥘 129368 1F958 1023 | 🥙 129369 1F959 1024 | 🥚 129370 1F95A 1025 | 🥛 129371 1F95B 1026 | 🥜 129372 1F95C 1027 | 🥝 129373 1F95D 1028 | 🥞 129374 1F95E 1029 | 🥟 129375 1F95F 1030 | 🥠 129376 1F960 1031 | 🥡 129377 1F961 1032 | 🥢 129378 1F962 1033 | 🥣 129379 1F963 1034 | 🥤 129380 1F964 1035 | 🥥 129381 1F965 1036 | 🥦 129382 1F966 1037 | 🥧 129383 1F967 1038 | 🥨 129384 1F968 1039 | 🥩 129385 1F969 1040 | 🥪 129386 1F96A 1041 | 🥫 129387 1F96B 1042 | 🦀 129408 1F980 1043 | 🦁 129409 1F981 1044 | 🦂 129410 1F982 1045 | 🦃 129411 1F983 1046 | 🦄 129412 1F984 1047 | 🦅 129413 1F985 1048 | 🦆 129414 1F986 1049 | 🦇 129415 1F987 1050 | 🦈 129416 1F988 1051 | 🦉 129417 1F989 1052 | 🦊 129418 1F98A 1053 | 🦋 129419 1F98B 1054 | 🦌 129420 1F98C 1055 | 🦍 129421 1F98D 1056 | 🦎 129422 1F98E 1057 | 🦏 129423 1F98F 1058 | 🦐 129424 1F990 1059 | 🦑 129425 1F991 1060 | 🦒 129426 1F992 1061 | 🦓 129427 1F993 1062 | 🦔 129428 1F994 1063 | 🦕 129429 1F995 1064 | 🦖 129430 1F996 1065 | 🦗 129431 1F997 1066 | 🧀 129472 1F9C0 1067 | 🧐 129488 1F9D0 1068 | 🧑 129489 1F9D1 1069 | 🧒 129490 1F9D2 1070 | 🧓 129491 1F9D3 1071 | 🧔 129492 1F9D4 1072 | 🧕 129493 1F9D5 1073 | 🧖 129494 1F9D6 1074 | 🧗 129495 1F9D7 1075 | 🧘 129496 1F9D8 1076 | 🧙 129497 1F9D9 1077 | 🧚 129498 1F9DA 1078 | 🧛 129499 1F9DB 1079 | 🧜 129500 1F9DC 1080 | 🧝 129501 1F9DD 1081 | 🧞 129502 1F9DE 1082 | 🧟 129503 1F9DF 1083 | 🧠 129504 1F9E0 1084 | 🧡 129505 1F9E1 1085 | 🧢 129506 1F9E2 1086 | 🧣 129507 1F9E3 1087 | 🧤 129508 1F9E4 1088 | 🧥 129509 1F9E5 1089 | 🧦 129510 1F9E6 --------------------------------------------------------------------------------