// (Note: invisible BOM on this line!) /** Markdeep.js Version 1.13 Copyright 2015-2020, Morgan McGuire, https://casual-effects.com All rights reserved. ------------------------------------------------------------- See https://casual-effects.com/markdeep for documentation on how to use this script make your plain text documents render beautifully in web browsers. Markdeep was created by Morgan McGuire. It extends the work of: - John Gruber's original Markdown - Ben Hollis' Maruku Markdown dialect - Michel Fortin's Markdown Extras dialect - Ivan Sagalaev's highlight.js - Contributors to the above open source projects ------------------------------------------------------------- You may use, extend, and redistribute this code under the terms of the BSD license at https://opensource.org/licenses/BSD-2-Clause. Contains highlight.js (https://github.com/isagalaev/highlight.js) by Ivan Sagalaev, which is used for code highlighting. (BSD 3-clause license) There is an invisible Byte-Order-Marker at the start of this file to ensure that it is processed as UTF-8. Do not remove this character or it will break the regular expressions in highlight.js. */ /**See https://casual-effects.com/markdeep for @license and documentation. markdeep.min.js 1.13 (C) 2020 Morgan McGuire highlight.min.js 10.5.0 (C) 2020 Ivan Sagalaev https://highlightjs.org */ (function() { 'use strict'; var MARKDEEP_FOOTER = '
'; { // For minification. This is admittedly scary. var _ = String.prototype; _.rp = _.replace; _.ss = _.substring; if (!_.endsWith) { // For IE11 _.endsWith = function(S, L) { if (L === undefined || L > this.length) { L = this.length; } return this.ss(L - S.length, L) === S; }; } // Regular expression version of String.indexOf _.regexIndexOf = function(regex, startpos) { var i = this.ss(startpos || 0).search(regex); return (i >= 0) ? (i + (startpos || 0)) : i; } } /** Enable for debugging to view character bounds in diagrams */ var DEBUG_SHOW_GRID = false; /** Overlay the non-empty characters of the original source in diagrams */ var DEBUG_SHOW_SOURCE = DEBUG_SHOW_GRID; /** Use to suppress passing through text in diagrams */ var DEBUG_HIDE_PASSTHROUGH = DEBUG_SHOW_SOURCE; /** In pixels of lines in diagrams */ var STROKE_WIDTH = 2; /** A box of these denotes a diagram */ var DIAGRAM_MARKER = '*'; // http://stackoverflow.com/questions/1877475/repeat-character-n-times // ECMAScript 6 has a String.repeat method, but that's not available everywhere var DIAGRAM_START = Array(5 + 1).join(DIAGRAM_MARKER); /** attribs are optional */ function entag(tag, content, attribs) { return '<' + tag + (attribs ? ' ' + attribs : '') + '>' + content + '' + tag + '>'; } function measureFontSize(fontStack) { try { var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); ctx.font = '10pt ' + fontStack; return ctx.measureText("M").width; } catch (e) { // Needed for Firefox include...canvas doesn't work for some reason return 10; } } // IE11 polyfill needed by Highlight.js, from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign#Polyfill if (typeof Object.assign !== 'function') { // Must be writable: true, enumerable: false, configurable: true Object.defineProperty(Object, "assign", { value: function assign(target, varArgs) { // .length of function is 2 if (target === null || target === undefined) { throw new TypeError('Cannot convert undefined or null to object'); } var to = Object(target); for (var index = 1; index < arguments.length; index++) { var nextSource = arguments[index]; if (nextSource !== null && nextSource !== undefined) { for (var nextKey in nextSource) { // Avoid bugs when hasOwnProperty is shadowed if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { to[nextKey] = nextSource[nextKey]; } } } } return to; }, writable: true, configurable: true }); } // Polyfill for IE11 from https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes if (!String.prototype.includes) { String.prototype.includes = function(search, start) { if (search instanceof RegExp) { throw TypeError('first argument must not be a RegExp'); } if (start === undefined) { start = 0; } return this.indexOf(search, start) !== -1; }; } if (!Array.prototype.includes) { Array.prototype.includes = function(search) { return !!~this.indexOf(search); } } // Lucida Console on Windows has capital V's that look like lower case, so don't use it var codeFontStack = "Menlo,Consolas,monospace"; var codeFontSize = Math.round(6.5 * 105.1316178 / measureFontSize(codeFontStack)) + '%';// + 'px'; var BODY_STYLESHEET = entag('style', 'body{max-width:680px;' + 'margin:auto;' + 'padding:20px;' + 'text-align:justify;' + 'line-height:140%;' + '-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-smoothing:antialiased;' + 'color:#222;' + 'font-family:Palatino,Georgia,"Times New Roman",serif}'); /** You can embed your own stylesheet AFTER the '; // Language options: var FRENCH = { keyword: { table: 'tableau', figure: 'figure', listing: 'liste', diagram: 'diagramme', contents: 'Table des matières', sec: 'sec', section: 'section', subsection: 'paragraphe', chapter: 'chapitre', Monday: 'lundi', Tuesday: 'mardi', Wednesday: 'mercredi', Thursday: 'jeudi', Friday: 'vendredi', Saturday: 'samedi', Sunday: 'dimanche', January: 'Janvier', February: 'Février', March: 'Mars', April: 'Avril', May: 'Mai', June: 'Juin', July: 'Juillet', August: 'Août', September: 'Septembre', October: 'Octobre', November: 'Novembre', December: 'Décembre', jan: 'janv.', feb: 'févr.', mar: 'mars', apr: 'avril', may: 'mai', jun: 'juin', jul: 'juil.', aug: 'août', sep: 'sept.', oct: 'oct.', nov: 'nov.', dec: 'déc.', '“': '« ', '&rtquo;': ' »' } }; // Translated by "Warmist" var LITHUANIAN = { keyword: { table: 'lentelė', figure: 'paveikslėlis', listing: 'sąrašas', diagram: 'diagrama', contents: 'Turinys', sec: 'sk', section: 'skyrius', subsection: 'poskyris', chapter: 'skyrius', Monday: 'pirmadienis', Tuesday: 'antradienis', Wednesday: 'trečiadienis', Thursday: 'ketvirtadienis', Friday: 'penktadienis', Saturday: 'šeštadienis', Sunday: 'sekmadienis', January: 'Sausis', February: 'Vasaris', March: 'Kovas', April: 'Balandis', May: 'Gegužė', June: 'Birželis', July: 'Liepa', August: 'Rugpjūtis', September: 'Rugsėjis', October: 'Spalis', November: 'Lapkritis', December: 'Gruodis', jan: 'saus', feb: 'vas', mar: 'kov', apr: 'bal', may: 'geg', jun: 'birž', jul: 'liep', aug: 'rugpj', sep: 'rugs', oct: 'spal', nov: 'lapkr', dec: 'gruod', '“': '„', '&rtquo;': '“' } }; // Translated by Zdravko Velinov var BULGARIAN = { keyword: { table: 'таблица', figure: 'фигура', listing: 'списък', diagram: 'диаграма', contents: 'cъдържание', sec: 'сек', section: 'раздел', subsection: 'подраздел', chapter: 'глава', Monday: 'понеделник', Tuesday: 'вторник', Wednesday: 'сряда', Thursday: 'четвъртък', Friday: 'петък', Saturday: 'събота', Sunday: 'неделя', January: 'януари', February: 'февруари', March: 'март', April: 'април', May: 'май', June: 'юни', July: 'юли', August: 'август', September: 'септември', October: 'октомври', November: 'ноември', December: 'декември', jan: 'ян', feb: 'февр', mar: 'март', apr: 'апр', may: 'май', jun: 'юни', jul: 'юли', aug: 'авг', sep: 'септ', oct: 'окт', nov: 'ноем', dec: 'дек', '“': '„', '”': '”' } }; // Translated by Tiago Antão var PORTUGUESE = { keyword: { table: 'tabela', figure: 'figura', listing: 'lista', diagram: 'diagrama', contents: 'conteúdo', sec: 'sec', section: 'secção', subsection: 'subsecção', chapter: 'capítulo', Monday: 'Segunda-feira', Tuesday: 'Terça-feira', Wednesday: 'Quarta-feira', Thursday: 'Quinta-feira', Friday: 'Sexta-feira', Saturday: 'Sábado', Sunday: 'Domingo', January: 'Janeiro', February: 'Fevereiro', March: 'Março', April: 'Abril', May: 'Maio', June: 'Junho', July: 'Julho', August: 'Agosto', September: 'Setembro', October: 'Outubro', November: 'Novembro', December: 'Dezembro', jan: 'jan', feb: 'fev', mar: 'mar', apr: 'abr', may: 'mai', jun: 'jun', jul: 'jul', aug: 'ago', sep: 'set', oct: 'oct', nov: 'nov', dec: 'dez', '“': '«', '&rtquo;': '»' } }; // Translated by Jan Toušek var CZECH = { keyword: { table: 'Tabulka', figure: 'Obrázek', listing: 'Seznam', diagram: 'Diagram', contents: 'Obsah', sec: 'kap.', // Abbreviation for section section: 'kapitola', subsection:'podkapitola', chapter: 'kapitola', Monday: 'pondělí', Tuesday: 'úterý', Wednesday: 'středa', Thursday: 'čtvrtek', Friday: 'pátek', Saturday: 'sobota', Sunday: 'neděle', January: 'leden', February: 'únor', March: 'březen', April: 'duben', May: 'květen', June: 'červen', July: 'červenec', August: 'srpen', September: 'září', October: 'říjen', November: 'listopad', December: 'prosinec', jan: 'led', feb: 'úno', mar: 'bře', apr: 'dub', may: 'kvě', jun: 'čvn', jul: 'čvc', aug: 'srp', sep: 'zář', oct: 'říj', nov: 'lis', dec: 'pro', '“': '„', '”': '“' } }; var ITALIAN = { keyword: { table: 'tabella', figure: 'figura', listing: 'lista', diagram: 'diagramma', contents: 'indice', sec: 'sez', section: 'sezione', subsection: 'paragrafo', chapter: 'capitolo', Monday: 'lunedì', Tuesday: 'martedì', Wednesday: 'mercoledì', Thursday: 'giovedì', Friday: 'venerdì', Saturday: 'sabato', Sunday: 'domenica', January: 'Gennaio', February: 'Febbraio', March: 'Marzo', April: 'Aprile', May: 'Maggio', June: 'Giugno', July: 'Luglio', August: 'Agosto', September: 'Settembre', October: 'Ottobre', November: 'Novembre', December: 'Dicembre', jan: 'gen', feb: 'feb', mar: 'mar', apr: 'apr', may: 'mag', jun: 'giu', jul: 'lug', aug: 'ago', sep: 'set', oct: 'ott', nov: 'nov', dec: 'dic', '“': '“', '&rtquo;': '”' } }; var RUSSIAN = { keyword: { table: 'таблица', figure: 'рисунок', listing: 'листинг', diagram: 'диаграмма', contents: 'Содержание', sec: 'сек', section: 'раздел', subsection: 'подраздел', chapter: 'глава', Monday: 'понедельник', Tuesday: 'вторник', Wednesday: 'среда', Thursday: 'четверг', Friday: 'пятница', Saturday: 'суббота', Sunday: 'воскресенье', January: 'январьr', February: 'февраль', March: 'март', April: 'апрель', May: 'май', June: 'июнь', July: 'июль', August: 'август', September: 'сентябрь', October: 'октябрь', November: 'ноябрь', December: 'декабрь', jan: 'янв', feb: 'февр', mar: 'март', apr: 'апр', may: 'май', jun: 'июнь', jul: 'июль', aug: 'авг', sep: 'сент', oct: 'окт', nov: 'ноябрь', dec: 'дек', '“': '«', '”': '»' } }; // Translated by Dariusz Kuśnierek var POLISH = { keyword: { table: 'tabela', figure: 'ilustracja', listing: 'wykaz', diagram: 'diagram', contents: 'Spis treści', sec: 'rozdz.', section: 'rozdział', subsection: 'podrozdział', chapter: 'kapituła', Monday: 'Poniedziałek', Tuesday: 'Wtorek', Wednesday: 'Środa', Thursday: 'Czwartek', Friday: 'Piątek', Saturday: 'Sobota', Sunday: 'Niedziela', January: 'Styczeń', February: 'Luty', March: 'Marzec', April: 'Kwiecień', May: 'Maj', June: 'Czerwiec', July: 'Lipiec', August: 'Sierpień', September: 'Wrzesień', October: 'Październik', November: 'Listopad', December: 'Grudzień', jan: 'sty', feb: 'lut', mar: 'mar', apr: 'kwi', may: 'maj', jun: 'cze', jul: 'lip', aug: 'sie', sep: 'wrz', oct: 'paź', nov: 'lis', dec: 'gru', '“': '„', '”': '”' } }; // Translated by Sandor Berczi var HUNGARIAN = { keyword: { table: 'táblázat', figure: 'ábra', listing: 'lista', diagram: 'diagramm', contents: 'Tartalomjegyzék', sec: 'fej', // Abbreviation for section section: 'fejezet', subsection:'alfejezet', chapter: 'fejezet', Monday: 'hétfő', Tuesday: 'kedd', Wednesday: 'szerda', Thursday: 'csütörtök', Friday: 'péntek', Saturday: 'szombat', Sunday: 'vasárnap', January: 'január', February: 'február', March: 'március', April: 'április', May: 'május', June: 'június', July: 'július', August: 'augusztus', September: 'szeptember', October: 'október', November: 'november', December: 'december', jan: 'jan', feb: 'febr', mar: 'márc', apr: 'ápr', may: 'máj', jun: 'jún', jul: 'júl', aug: 'aug', sep: 'szept', oct: 'okt', nov: 'nov', dec: 'dec', '“': '„', '”': '”' } }; // Translated by Takashi Masuyama var JAPANESE = { keyword: { table: '表', figure: '図', listing: '一覧', diagram: '図', contents: '目次', sec: '節', section: '節', subsection: '項', chapter: '章', Monday: '月', Tuesday: '火', Wednesday: '水', Thursday: '木', Friday: '金', Saturday: '土', Sunday: '日', January: '1月', February: '2月', March: '3月', April: '4月', May: '5月', June: '6月', July: '7月', August: '8月', September: '9月', October: '10月', November: '11月', December: '12月', jan: '1月', feb: '2月', mar: '3月', apr: '4月', may: '5月', jun: '6月', jul: '7月', aug: '8月', sep: '9月', oct: '10月', nov: '11月', dec: '12月', '“': '「', '”': '」' } }; // Translated by Sandor Berczi var GERMAN = { keyword: { table: 'Tabelle', figure: 'Abbildung', listing: 'Auflistung', diagram: 'Diagramm', contents: 'Inhaltsverzeichnis', sec: 'Kap', section: 'Kapitel', subsection:'Unterabschnitt', chapter: 'Kapitel', Monday: 'Montag', Tuesday: 'Dienstag', Wednesday: 'Mittwoch', Thursday: 'Donnerstag', Friday: 'Freitag', Saturday: 'Samstag', Sunday: 'Sonntag', January: 'Januar', February: 'Februar', March: 'März', April: 'April', May: 'Mai', June: 'Juni', July: 'Juli', August: 'August', September: 'September', October: 'Oktober', November: 'November', December: 'Dezember', jan: 'Jan', feb: 'Feb', mar: 'Mär', apr: 'Apr', may: 'Mai', jun: 'Jun', jul: 'Jul', aug: 'Aug', sep: 'Sep', oct: 'Okt', nov: 'Nov', dec: 'Dez', '“': '„', '”': '“' } }; // Translated by Marcelo Arroyo var SPANISH = { keyword: { table: 'Tabla', figure: 'Figura', listing: 'Listado', diagram: 'Diagrama', contents: 'Tabla de Contenidos', sec: 'sec', section: 'Sección', subsection: 'Subsección', chapter: 'Capítulo', Monday: 'Lunes', Tuesday: 'Martes', Wednesday: 'Miércoles', Thursday: 'Jueves', Friday: 'Viernes', Saturday: 'Sábado', Sunday: 'Domingo', January: 'Enero', February: 'Febrero', March: 'Marzo', April: 'Abril', May: 'Mayo', June: 'Junio', July: 'Julio', August: 'Agosto', September: 'Septiembre', October: 'Octubre', November: 'Noviembre', December: 'Diciembre', jan: 'ene', feb: 'feb', mar: 'mar', apr: 'abr', may: 'may', jun: 'jun', jul: 'jul', aug: 'ago', sep: 'sept', oct: 'oct', nov: 'nov', dec: 'dic', '“': '« ', '&rtquo;': ' »' } }; // Translated by Nils Nilsson var SWEDISH = { keyword: { table: 'tabell', figure: 'figur', listing: 'lista', diagram: 'diagram', contents: 'Innehållsförteckning', sec: 'sek', section: 'sektion', subsection:'sektion', chapter: 'kapitel', Monday: 'måndag', Tuesday: 'tisdag', Wednesday: 'onsdag', Thursday: 'torsdag', Friday: 'fredag', Saturday: 'lördag', Sunday: 'söndag', January: 'januari', February: 'februari', March: 'mars', April: 'april', May: 'maj', June: 'juni', July: 'juli', August: 'augusti', September: 'september', October: 'oktober', November: 'november', December: 'december', jan: 'jan', feb: 'feb', mar: 'mar', apr: 'apr', may: 'maj', jun: 'jun', jul: 'jul', aug: 'aug', sep: 'sep', oct: 'okt', nov: 'nov', dec: 'dec', '“': '”', '”': '”' } }; // Translated by Marc Izquierdo var CATALAN = { keyword: { table: 'Taula', figure: 'Figura', listing: 'Llistat', diagram: 'Diagrama', contents: 'Taula de Continguts', sec: 'sec', section: 'Secció', subsection: 'Subsecció', chapter: 'Capítol', Monday: 'Dilluns', Tuesday: 'Dimarts', Wednesday: 'Dimecres', Thursday: 'Dijous', Friday: 'Divendres', Saturday: 'Dissabte', Sunday: 'Dimenge', January: 'Gener', February: 'Febrer', March: 'Març', April: 'Abril', May: 'Maig', June: 'Juny', July: 'Juliol', August: 'Agost', September: 'Septembre', October: 'Octubre', November: 'Novembre', December: 'Desembre', jan: 'gen', feb: 'feb', mar: 'mar', apr: 'abr', may: 'mai', jun: 'jun', jul: 'jul', aug: 'ago', sep: 'sept', oct: 'oct', nov: 'nov', dec: 'des', '“': '« ', '&rtquo;': ' »' } }; var DEFAULT_OPTIONS = { mode: 'markdeep', detectMath: true, lang: {keyword:{}}, // English tocStyle: 'auto', hideEmptyWeekends: true, showLabels: false, sortScheduleLists: true, definitionStyle: 'auto', linkAPIDefinitions: false, inlineCodeLang: false, scrollThreshold: 90, captionAbove: {diagram: false, image: false, table: false, listing: false}, smartQuotes: true }; // See http://www.i18nguy.com/unicode/language-identifiers.html for keys var LANG_TABLE = { en: {keyword:{}}, ru: RUSSIAN, fr: FRENCH, pl: POLISH, bg: BULGARIAN, de: GERMAN, hu: HUNGARIAN, sv: SWEDISH, pt: PORTUGUESE, ja: JAPANESE, it: ITALIAN, lt: LITHUANIAN, cz: CZECH, es: SPANISH, 'es-ES': SPANISH, 'es-ca': CATALAN // Contribute your language here! I only accept translations // from native speakers. }; [].slice.call(document.getElementsByTagName('meta')).forEach(function(elt) { var att = elt.getAttribute('lang'); if (att) { var lang = LANG_TABLE[att]; if (lang) { DEFAULT_OPTIONS.lang = lang; } } }); var max = Math.max; var min = Math.min; var abs = Math.abs; var sign = Math.sign || function (x) { return ( +x === x ) ? ((x === 0) ? x : (x > 0) ? 1 : -1) : NaN; }; /** Get an option, or return the corresponding value from DEFAULT_OPTIONS */ function option(key, key2) { if (window.markdeepOptions && (window.markdeepOptions[key] !== undefined)) { var val = window.markdeepOptions[key]; if (key2) { val = val[key2] if (val !== undefined) { return val; } else { return DEFAULT_OPTIONS[key][key2]; } } else { return window.markdeepOptions[key]; } } else if (DEFAULT_OPTIONS[key] !== undefined) { if (key2) { return DEFAULT_OPTIONS[key][key2]; } else { return DEFAULT_OPTIONS[key]; } } else { console.warn('Illegal option: "' + key + '"'); return undefined; } } function maybeShowLabel(url, tag) { if (option('showLabels')) { var text = ' {\u00A0' + url + '\u00A0}'; return tag ? entag(tag, text) : text; } else { return ''; } } // Returns the localized version of word, defaulting to the word itself function keyword(word) { return option('lang').keyword[word] || option('lang').keyword[word.toLowerCase()] || word; } /** Converts <>&" to their HTML escape sequences */ function escapeHTMLEntities(str) { return String(str).rp(/&/g, '&').rp(//g, '>').rp(/"/g, '"'); } /** Restores the original source string's '<' and '>' as entered in the document, before the browser processed it as HTML. There is no way in an HTML document to distinguish an entity that was entered as an entity. */ function unescapeHTMLEntities(str) { // Process & last so that we don't recursively unescape // escaped escape sequences. return str. rp(/</g, '<'). rp(/>/g, '>'). rp(/"/g, '"'). rp(/'/g, "'"). rp(/–/g, '\u2013'). rp(/—/g, '---'). rp(/&/g, '&'); } function removeHTMLTags(str) { return str.rp(/<.*?>/g, ''); } /** Turn the argument into a legal URL anchor */ function mangle(text) { return encodeURI(text.rp(/\s/g, '').toLowerCase()); } /** Creates a style sheet containing elements like: hn::before { content: counter(h1) "." counter(h2) "." ... counter(hn) " "; counter-increment: hn; } */ function sectionNumberingStylesheet() { var s = ''; for (var i = 1; i <= 6; ++i) { s += '.md h' + i + '::before {\ncontent:'; for (var j = 1; j <= i; ++j) { s += 'counter(h' + j + ') "' + ((j < i) ? '.' : ' ') + '"'; } s += ';\ncounter-increment: h' + i + ';margin-right:10px}\n\n'; } return entag('style', s); } /** \param node A node from an HTML DOM \return A String that is a very good reconstruction of what the original source looked like before the browser tried to correct it to legal HTML. */ function nodeToMarkdeepSource(node, leaveEscapes) { var source = node ? node.innerHTML : ''; // Markdown uses