@internetarchive/bookreader 5.0.0-113 → 5.0.0-114

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"plugins/plugin.text_selection.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/util/cache.js","webpack://@internetarchive/bookreader/./src/util/strings.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","//@ts-check\nimport { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\nimport { Cache } from '../util/cache.js';\nimport { toISO6391 } from './tts/utils.js';\nimport { BookReaderTextFragment, renderHighlight, TextSelectionManager } from '../util/TextSelectionManager.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words that can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.textSelectionManager = new TextSelectionManager('.BRtextLayer', this.br, {selectionElement: ['.BRwordElement', '.BRspace', 'mark']}, this.options.maxProtectedWords);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.br.on('pageVisible', (_, {pageContainerEl}) => {\n const textLayer = pageContainerEl.querySelector('.BRtextLayer');\n if (textLayer) {\n this.br.trigger('textLayerVisible', {pageContainerEl, textLayer});\n }\n });\n\n this.loadData();\n this.textSelectionManager.init();\n\n // Init text fragment\n this.targetTextFragment = BookReaderTextFragment.fromUrl(location.search, this.br.book, this.br.firstIndex);\n if (this.targetTextFragment) {\n const targetTextFragment = this.targetTextFragment;\n this.br.on('textLayerVisible', async (_, {pageContainerEl, textLayer}) => {\n const pageIndex = targetTextFragment.pageIndex;\n const hasTargetText = pageIndex === parseFloat(pageContainerEl.getAttribute('data-index'));\n if (hasTargetText) {\n renderHighlight(textLayer, targetTextFragment, 'BRhighlight--target-text');\n }\n });\n }\n }\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.br.mode !== this.br.constModeThumb && pageContainer.page?.isViewable) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n // Seeing some 0 left and 0 top coordinates in OCR, remove it entirely to prevent odd rendering\n // eg https://archive.org/details/illustratedbooko00robe/page/n11/mode/2up\n $(XMLpage).find(\"WORD\").filter((_, ele) => {\n const [left, , , top] = ele.getAttribute('coords').split(\",\").map(parseFloat);\n if (left == 0 && top == 0) {\n console.error(\"Found invalid ocr word coordinates\");\n return true;\n }\n }).remove();\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n // Have to wait to make sure the page container is actually rendered,\n // otherwise width/height are unset after a mode change.\n await Promise.resolve();\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n if (bookLangCode) {\n textLayer.setAttribute(\"lang\", bookLangCode);\n }\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement');\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n textLayer.appendChild(document.createTextNode('\\n'));\n }\n $container.append(textLayer);\n this.textSelectionManager.stopPageFlip($container);\n this.br.trigger('textLayerRendered', {\n pageIndex,\n pageContainer,\n });\n\n // Check if page is visible\n if ($container.hasClass('BRpage-visible')) {\n this.br.trigger('textLayerVisible', {pageContainerEl: $container[0], textLayer});\n }\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n if (ocrParagraph.getAttribute(\"x-role\")) {\n paragEl.classList.add('ocr-role-header-footer');\n paragEl.ariaHidden = \"true\";\n }\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n // Hack to make screen readers (eg NVDA) read spaces correctly;\n // otherwise they ignore elements with just whitespace.\n space.setAttribute('aria-label', '\\u00A0');\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement');\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement');\n const spaceRects = determineRealRects(paragEl, '.BRspace');\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n document.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + window.scrollX,\n origRect.top + window.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n document.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n","// src/data.ts\nvar data_default = [\n [\"Serbian\", \"\\u0441\\u0440\\u043F\\u0441\\u043A\\u0438 \\u0458\\u0435\\u0437\\u0438\\u043A\", \"sr\", \"srp\", \"srp\"],\n [\"Romanian, Moldavian, Moldovan\", \"Rom\\xE2n\\u0103\", \"ro\", \"ron\", \"rum\"],\n [\"Sichuan Yi, Nuosu\", \"\\uA188\\uA320\\uA4BF Nuosuhxop\", \"ii\", \"iii\", \"iii\"],\n [\"Tahitian\", \"Reo Tahiti\", \"ty\", \"tah\", \"tah\"],\n [\"Tagalog\", \"Wikang Tagalog\", \"tl\", \"tgl\", \"tgl\"],\n [\"Yiddish\", \"\\u05D9\\u05D9\\u05B4\\u05D3\\u05D9\\u05E9\", \"yi\", \"yid\", \"yid\"],\n [\"Akan\", \"Akan\", \"ak\", \"aka\", \"aka\"],\n [\"Malay\", \"Bahasa Melayu, \\u0628\\u0647\\u0627\\u0633 \\u0645\\u0644\\u0627\\u064A\\u0648\", \"ms\", \"msa\", \"may\"],\n [\"Arabic\", \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\", \"ar\", \"ara\", \"ara\"],\n [\"Norwegian\", \"Norsk\", \"no\", \"nor\", \"nor\"],\n [\"Ojibwa\", \"\\u140A\\u14C2\\u1511\\u14C8\\u142F\\u14A7\\u140E\\u14D0\", \"oj\", \"oji\", \"oji\"],\n [\"Fulah\", \"Fulfulde, Pulaar, Pular\", \"ff\", \"ful\", \"ful\"],\n [\"Persian\", \"\\u0641\\u0627\\u0631\\u0633\\u06CC\", \"fa\", \"fas\", \"per\"],\n [\"Albanian\", \"Shqip\", \"sq\", \"sqi\", \"alb\"],\n [\"Aymara\", \"aymar aru\", \"ay\", \"aym\", \"aym\"],\n [\"Azerbaijani\", \"az\\u0259rbaycan dili\", \"az\", \"aze\", \"aze\"],\n [\"Chinese\", \"\\u4E2D\\u6587 (Zh\\u014Dngw\\xE9n), \\u6C49\\u8BED, \\u6F22\\u8A9E\", \"zh\", \"zho\", \"chi\"],\n [\"Cree\", \"\\u14C0\\u1426\\u1403\\u152D\\u140D\\u140F\\u1423\", \"cr\", \"cre\", \"cre\"],\n [\"Estonian\", \"eesti, eesti keel\", \"et\", \"est\", \"est\"],\n [\"Guaran\\xED\", \"Ava\\xF1e'\\u1EBD\", \"gn\", \"grn\", \"grn\"],\n [\"Inupiaq\", \"I\\xF1upiaq, I\\xF1upiatun\", \"ik\", \"ipk\", \"ipk\"],\n [\"Inuktitut\", \"\\u1403\\u14C4\\u1483\\u144E\\u1450\\u1466\", \"iu\", \"iku\", \"iku\"],\n [\"Kanuri\", \"Kanuri\", \"kr\", \"kau\", \"kau\"],\n [\"Komi\", \"\\u043A\\u043E\\u043C\\u0438 \\u043A\\u044B\\u0432\", \"kv\", \"kom\", \"kom\"],\n [\"Kongo\", \"Kikongo\", \"kg\", \"kon\", \"kon\"],\n [\"Kurdish\", \"Kurd\\xEE, \\u0623\\u06C7\\u0632\\u0628\\u06D0\\u0643\", \"ku\", \"kur\", \"kur\"],\n [\"Latvian\", \"latvie\\u0161u valoda\", \"lv\", \"lav\", \"lav\"],\n [\"Malagasy\", \"fiteny malagasy\", \"mg\", \"mlg\", \"mlg\"],\n [\"Mongolian\", \"\\u041C\\u043E\\u043D\\u0433\\u043E\\u043B \\u0445\\u044D\\u043B\", \"mn\", \"mon\", \"mon\"],\n [\"Oromo\", \"Afaan Oromoo\", \"om\", \"orm\", \"orm\"],\n [\"Pashto, Pushto\", \"\\u067E\\u069A\\u062A\\u0648\", \"ps\", \"pus\", \"pus\"],\n [\"Quechua\", \"Runa Simi, Kichwa\", \"qu\", \"que\", \"que\"],\n [\"Sardinian\", \"sardu\", \"sc\", \"srd\", \"srd\"],\n [\"Swahili\", \"Kiswahili\", \"sw\", \"swa\", \"swa\"],\n [\"Uzbek\", \"O\\u02BBzbek, \\u040E\\u0437\\u0431\\u0435\\u043A, \", \"uz\", \"uzb\", \"uzb\"],\n [\"Zhuang, Chuang\", \"Sa\\u026F cue\\u014B\\u0185, Saw cuengh\", \"za\", \"zha\", \"zha\"],\n [\"Bislama\", \"Bislama\", \"bi\", \"bis\", \"bis\"],\n [\"Norwegian Bokm\\xE5l\", \"Norsk Bokm\\xE5l\", \"nb\", \"nob\", \"nob\"],\n [\"Norwegian Nynorsk\", \"Norsk Nynorsk\", \"nn\", \"nno\", \"nno\"],\n [\"Indonesian\", \"Bahasa Indonesia\", \"id\", \"ind\", \"ind\"],\n [\"Twi\", \"Twi\", \"tw\", \"twi\", \"twi\"],\n [\"Esperanto\", \"Esperanto\", \"eo\", \"epo\", \"epo\"],\n [\"Interlingua\", \"Interlingua\", \"ia\", \"ina\", \"ina\"],\n [\"Interlingue\", \"Originally called Occidental; then Interlingue after WWII\", \"ie\", \"ile\", \"ile\"],\n [\"Ido\", \"Ido\", \"io\", \"ido\", \"ido\"],\n [\"Volap\\xFCk\", \"Volap\\xFCk\", \"vo\", \"vol\", \"vol\"],\n [\"Bihari languages\", \"\\u092D\\u094B\\u091C\\u092A\\u0941\\u0930\\u0940\", \"bh\", \"bih\", \"bih\"],\n [\"Hebrew (modern)\", \"\\u05E2\\u05D1\\u05E8\\u05D9\\u05EA\", \"he\", \"heb\", \"heb\"],\n [\"Sanskrit\", \"\\u0938\\u0902\\u0938\\u094D\\u0915\\u0943\\u0924\\u092E\\u094D\", \"sa\", \"san\", \"san\"],\n [\"Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian\", \"\\u0469\\u0437\\u044B\\u043A\\u044A \\u0441\\u043B\\u043E\\u0432\\u0463\\u043D\\u044C\\u0441\\u043A\\u044A\", \"cu\", \"chu\", \"chu\"],\n [\"Pali\", \"\\u092A\\u093E\\u0934\\u093F\", \"pi\", \"pli\", \"pli\"],\n [\"Avestan\", \"avesta\", \"ae\", \"ave\", \"ave\"],\n [\"Latin\", \"latine, lingua latina\", \"la\", \"lat\", \"lat\"],\n [\"Armenian\", \"\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576\", \"hy\", \"hye\", \"arm\"],\n [\"Swati\", \"SiSwati\", \"ss\", \"ssw\", \"ssw\"],\n [\"Tibetan\", \"\\u0F56\\u0F7C\\u0F51\\u0F0B\\u0F61\\u0F72\\u0F42\", \"bo\", \"bod\", \"tib\"],\n [\"South Ndebele\", \"isiNdebele\", \"nr\", \"nbl\", \"nbl\"],\n [\"Slovene\", \"Slovenski Jezik, Sloven\\u0161\\u010Dina\", \"sl\", \"slv\", \"slv\"],\n [\"Oriya\", \"\\u0B13\\u0B21\\u0B3C\\u0B3F\\u0B06\", \"or\", \"ori\", \"ori\"],\n [\"North Ndebele\", \"isiNdebele\", \"nd\", \"nde\", \"nde\"],\n [\"Nauru\", \"Dorerin Naoero\", \"na\", \"nau\", \"nau\"],\n [\"Maori\", \"te reo M\\u0101ori\", \"mi\", \"mri\", \"mao\"],\n [\"Marathi\", \"\\u092E\\u0930\\u093E\\u0920\\u0940\", \"mr\", \"mar\", \"mar\"],\n [\"Luba-Katanga\", \"Kiluba\", \"lu\", \"lub\", \"lub\"],\n [\"Rundi\", \"Ikirundi\", \"rn\", \"run\", \"run\"],\n [\"Central Khmer\", \"\\u1781\\u17D2\\u1798\\u17C2\\u179A, \\u1781\\u17C1\\u1798\\u179A\\u1797\\u17B6\\u179F\\u17B6, \\u1797\\u17B6\\u179F\\u17B6\\u1781\\u17D2\\u1798\\u17C2\\u179A\", \"km\", \"khm\", \"khm\"],\n [\"Western Frisian\", \"Frysk\", \"fy\", \"fry\", \"fry\"],\n [\"Bengali\", \"\\u09AC\\u09BE\\u0982\\u09B2\\u09BE\", \"bn\", \"ben\", \"ben\"],\n [\"Avaric\", \"\\u0430\\u0432\\u0430\\u0440 \\u043C\\u0430\\u0446\\u04C0, \\u043C\\u0430\\u0433\\u04C0\\u0430\\u0440\\u0443\\u043B \\u043C\\u0430\\u0446\\u04C0\", \"av\", \"ava\", \"ava\"],\n [\"Abkhazian\", \"\\u0430\\u04A7\\u0441\\u0443\\u0430 \\u0431\\u044B\\u0437\\u0448\\u04D9\\u0430, \\u0430\\u04A7\\u0441\\u0448\\u04D9\\u0430\", \"ab\", \"abk\", \"abk\"],\n [\"Afar\", \"Afaraf\", \"aa\", \"aar\", \"aar\"],\n [\"Afrikaans\", \"Afrikaans\", \"af\", \"afr\", \"afr\"],\n [\"Amharic\", \"\\u12A0\\u121B\\u122D\\u129B\", \"am\", \"amh\", \"amh\"],\n [\"Aragonese\", \"aragon\\xE9s\", \"an\", \"arg\", \"arg\"],\n [\"Assamese\", \"\\u0985\\u09B8\\u09AE\\u09C0\\u09AF\\u09BC\\u09BE\", \"as\", \"asm\", \"asm\"],\n [\"Bambara\", \"bamanankan\", \"bm\", \"bam\", \"bam\"],\n [\"Bashkir\", \"\\u0431\\u0430\\u0448\\u04A1\\u043E\\u0440\\u0442 \\u0442\\u0435\\u043B\\u0435\", \"ba\", \"bak\", \"bak\"],\n [\"Basque\", \"euskara, euskera\", \"eu\", \"eus\", \"baq\"],\n [\"Belarusian\", \"\\u0431\\u0435\\u043B\\u0430\\u0440\\u0443\\u0441\\u043A\\u0430\\u044F \\u043C\\u043E\\u0432\\u0430\", \"be\", \"bel\", \"bel\"],\n [\"Bosnian\", \"bosanski jezik\", \"bs\", \"bos\", \"bos\"],\n [\"Breton\", \"brezhoneg\", \"br\", \"bre\", \"bre\"],\n [\"Bulgarian\", \"\\u0431\\u044A\\u043B\\u0433\\u0430\\u0440\\u0441\\u043A\\u0438 \\u0435\\u0437\\u0438\\u043A\", \"bg\", \"bul\", \"bul\"],\n [\"Burmese\", \"\\u1017\\u1019\\u102C\\u1005\\u102C\", \"my\", \"mya\", \"bur\"],\n [\"Catalan, Valencian\", \"catal\\xE0, valenci\\xE0\", \"ca\", \"cat\", \"cat\"],\n [\"Chamorro\", \"Chamoru\", \"ch\", \"cha\", \"cha\"],\n [\"Chechen\", \"\\u043D\\u043E\\u0445\\u0447\\u0438\\u0439\\u043D \\u043C\\u043E\\u0442\\u0442\", \"ce\", \"che\", \"che\"],\n [\"Chichewa, Chewa, Nyanja\", \"chiChe\\u0175a, chinyanja\", \"ny\", \"nya\", \"nya\"],\n [\"Chuvash\", \"\\u0447\\u04D1\\u0432\\u0430\\u0448 \\u0447\\u04D7\\u043B\\u0445\\u0438\", \"cv\", \"chv\", \"chv\"],\n [\"Cornish\", \"Kernewek\", \"kw\", \"cor\", \"cor\"],\n [\"Corsican\", \"corsu, lingua corsa\", \"co\", \"cos\", \"cos\"],\n [\"Croatian\", \"hrvatski jezik\", \"hr\", \"hrv\", \"hrv\"],\n [\"Czech\", \"\\u010De\\u0161tina, \\u010Desk\\xFD jazyk\", \"cs\", \"ces\", \"cze\"],\n [\"Danish\", \"dansk\", \"da\", \"dan\", \"dan\"],\n [\"Divehi, Dhivehi, Maldivian\", \"\\u078B\\u07A8\\u0788\\u07AC\\u0780\\u07A8\", \"dv\", \"div\", \"div\"],\n [\"Dutch, Flemish\", \"Nederlands, Vlaams\", \"nl\", \"nld\", \"dut\"],\n [\"Dzongkha\", \"\\u0F62\\u0FAB\\u0F7C\\u0F44\\u0F0B\\u0F41\", \"dz\", \"dzo\", \"dzo\"],\n [\"English\", \"English\", \"en\", \"eng\", \"eng\"],\n [\"Ewe\", \"E\\u028Begbe\", \"ee\", \"ewe\", \"ewe\"],\n [\"Faroese\", \"f\\xF8royskt\", \"fo\", \"fao\", \"fao\"],\n [\"Fijian\", \"vosa Vakaviti\", \"fj\", \"fij\", \"fij\"],\n [\"Finnish\", \"suomi, suomen kieli\", \"fi\", \"fin\", \"fin\"],\n [\"French\", \"fran\\xE7ais, langue fran\\xE7aise\", \"fr\", \"fra\", \"fre\"],\n [\"Galician\", \"Galego\", \"gl\", \"glg\", \"glg\"],\n [\"Georgian\", \"\\u10E5\\u10D0\\u10E0\\u10D7\\u10E3\\u10DA\\u10D8\", \"ka\", \"kat\", \"geo\"],\n [\"German\", \"Deutsch\", \"de\", \"deu\", \"ger\"],\n [\"Greek (modern)\", \"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC\", \"el\", \"ell\", \"gre\"],\n [\"Gujarati\", \"\\u0A97\\u0AC1\\u0A9C\\u0AB0\\u0ABE\\u0AA4\\u0AC0\", \"gu\", \"guj\", \"guj\"],\n [\"Haitian, Haitian Creole\", \"Krey\\xF2l ayisyen\", \"ht\", \"hat\", \"hat\"],\n [\"Hausa\", \"(Hausa) \\u0647\\u064E\\u0648\\u064F\\u0633\\u064E\", \"ha\", \"hau\", \"hau\"],\n [\"Herero\", \"Otjiherero\", \"hz\", \"her\", \"her\"],\n [\"Hindi\", \"\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940, \\u0939\\u093F\\u0902\\u0926\\u0940\", \"hi\", \"hin\", \"hin\"],\n [\"Hiri Motu\", \"Hiri Motu\", \"ho\", \"hmo\", \"hmo\"],\n [\"Hungarian\", \"magyar\", \"hu\", \"hun\", \"hun\"],\n [\"Irish\", \"Gaeilge\", \"ga\", \"gle\", \"gle\"],\n [\"Igbo\", \"As\\u1EE5s\\u1EE5 Igbo\", \"ig\", \"ibo\", \"ibo\"],\n [\"Icelandic\", \"\\xCDslenska\", \"is\", \"isl\", \"ice\"],\n [\"Italian\", \"Italiano\", \"it\", \"ita\", \"ita\"],\n [\"Japanese\", \"\\u65E5\\u672C\\u8A9E (\\u306B\\u307B\\u3093\\u3054)\", \"ja\", \"jpn\", \"jpn\"],\n [\"Javanese\", \"\\uA9A7\\uA9B1\\uA997\\uA9AE, Basa Jawa\", \"jv\", \"jav\", \"jav\"],\n [\"Kalaallisut, Greenlandic\", \"kalaallisut, kalaallit oqaasii\", \"kl\", \"kal\", \"kal\"],\n [\"Kannada\", \"\\u0C95\\u0CA8\\u0CCD\\u0CA8\\u0CA1\", \"kn\", \"kan\", \"kan\"],\n [\"Kashmiri\", \"\\u0915\\u0936\\u094D\\u092E\\u0940\\u0930\\u0940, \\u0643\\u0634\\u0645\\u064A\\u0631\\u064A\", \"ks\", \"kas\", \"kas\"],\n [\"Kazakh\", \"\\u049B\\u0430\\u0437\\u0430\\u049B \\u0442\\u0456\\u043B\\u0456\", \"kk\", \"kaz\", \"kaz\"],\n [\"Kikuyu, Gikuyu\", \"G\\u0129k\\u0169y\\u0169\", \"ki\", \"kik\", \"kik\"],\n [\"Kinyarwanda\", \"Ikinyarwanda\", \"rw\", \"kin\", \"kin\"],\n [\"Kirghiz, Kyrgyz\", \"\\u041A\\u044B\\u0440\\u0433\\u044B\\u0437\\u0447\\u0430, \\u041A\\u044B\\u0440\\u0433\\u044B\\u0437 \\u0442\\u0438\\u043B\\u0438\", \"ky\", \"kir\", \"kir\"],\n [\"Korean\", \"\\uD55C\\uAD6D\\uC5B4\", \"ko\", \"kor\", \"kor\"],\n [\"Kuanyama, Kwanyama\", \"Kuanyama\", \"kj\", \"kua\", \"kua\"],\n [\"Luxembourgish, Letzeburgesch\", \"L\\xEBtzebuergesch\", \"lb\", \"ltz\", \"ltz\"],\n [\"Ganda\", \"Luganda\", \"lg\", \"lug\", \"lug\"],\n [\"Limburgan, Limburger, Limburgish\", \"Limburgs\", \"li\", \"lim\", \"lim\"],\n [\"Lingala\", \"Ling\\xE1la\", \"ln\", \"lin\", \"lin\"],\n [\"Lao\", \"\\u0E9E\\u0EB2\\u0EAA\\u0EB2\\u0EA5\\u0EB2\\u0EA7\", \"lo\", \"lao\", \"lao\"],\n [\"Lithuanian\", \"lietuvi\\u0173 kalba\", \"lt\", \"lit\", \"lit\"],\n [\"Manx\", \"Gaelg, Gailck\", \"gv\", \"glv\", \"glv\"],\n [\"Macedonian\", \"\\u043C\\u0430\\u043A\\u0435\\u0434\\u043E\\u043D\\u0441\\u043A\\u0438 \\u0458\\u0430\\u0437\\u0438\\u043A\", \"mk\", \"mkd\", \"mac\"],\n [\"Malayalam\", \"\\u0D2E\\u0D32\\u0D2F\\u0D3E\\u0D33\\u0D02\", \"ml\", \"mal\", \"mal\"],\n [\"Maltese\", \"Malti\", \"mt\", \"mlt\", \"mlt\"],\n [\"Marshallese\", \"Kajin M\\u0327aje\\u013C\", \"mh\", \"mah\", \"mah\"],\n [\"Navajo, Navaho\", \"Din\\xE9 bizaad\", \"nv\", \"nav\", \"nav\"],\n [\"Nepali\", \"\\u0928\\u0947\\u092A\\u093E\\u0932\\u0940\", \"ne\", \"nep\", \"nep\"],\n [\"Ndonga\", \"Owambo\", \"ng\", \"ndo\", \"ndo\"],\n [\"Occitan\", \"occitan, lenga d'\\xF2c\", \"oc\", \"oci\", \"oci\"],\n [\"Ossetian, Ossetic\", \"\\u0438\\u0440\\u043E\\u043D \\xE6\\u0432\\u0437\\u0430\\u0433\", \"os\", \"oss\", \"oss\"],\n [\"Panjabi, Punjabi\", \"\\u0A2A\\u0A70\\u0A1C\\u0A3E\\u0A2C\\u0A40\", \"pa\", \"pan\", \"pan\"],\n [\"Polish\", \"j\\u0119zyk polski, polszczyzna\", \"pl\", \"pol\", \"pol\"],\n [\"Portuguese\", \"Portugu\\xEAs\", \"pt\", \"por\", \"por\"],\n [\"Romansh\", \"Rumantsch Grischun\", \"rm\", \"roh\", \"roh\"],\n [\"Russian\", \"\\u0440\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\", \"ru\", \"rus\", \"rus\"],\n [\"Sindhi\", \"\\u0938\\u093F\\u0928\\u094D\\u0927\\u0940, \\u0633\\u0646\\u068C\\u064A\\u060C \\u0633\\u0646\\u062F\\u06BE\\u06CC\", \"sd\", \"snd\", \"snd\"],\n [\"Northern Sami\", \"Davvis\\xE1megiella\", \"se\", \"sme\", \"sme\"],\n [\"Samoan\", \"gagana fa'a Samoa\", \"sm\", \"smo\", \"smo\"],\n [\"Sango\", \"y\\xE2ng\\xE2 t\\xEE s\\xE4ng\\xF6\", \"sg\", \"sag\", \"sag\"],\n [\"Gaelic, Scottish Gaelic\", \"G\\xE0idhlig\", \"gd\", \"gla\", \"gla\"],\n [\"Shona\", \"chiShona\", \"sn\", \"sna\", \"sna\"],\n [\"Sinhala, Sinhalese\", \"\\u0DC3\\u0DD2\\u0D82\\u0DC4\\u0DBD\", \"si\", \"sin\", \"sin\"],\n [\"Slovak\", \"Sloven\\u010Dina, Slovensk\\xFD Jazyk\", \"sk\", \"slk\", \"slo\"],\n [\"Somali\", \"Soomaaliga, af Soomaali\", \"so\", \"som\", \"som\"],\n [\"Southern Sotho\", \"Sesotho\", \"st\", \"sot\", \"sot\"],\n [\"Spanish, Castilian\", \"Espa\\xF1ol\", \"es\", \"spa\", \"spa\"],\n [\"Sundanese\", \"Basa Sunda\", \"su\", \"sun\", \"sun\"],\n [\"Swedish\", \"Svenska\", \"sv\", \"swe\", \"swe\"],\n [\"Tamil\", \"\\u0BA4\\u0BAE\\u0BBF\\u0BB4\\u0BCD\", \"ta\", \"tam\", \"tam\"],\n [\"Telugu\", \"\\u0C24\\u0C46\\u0C32\\u0C41\\u0C17\\u0C41\", \"te\", \"tel\", \"tel\"],\n [\"Tajik\", \"\\u0442\\u043E\\u04B7\\u0438\\u043A\\u04E3, to\\xE7ik\\u012B, \\u062A\\u0627\\u062C\\u06CC\\u06A9\\u06CC\", \"tg\", \"tgk\", \"tgk\"],\n [\"Thai\", \"\\u0E44\\u0E17\\u0E22\", \"th\", \"tha\", \"tha\"],\n [\"Tigrinya\", \"\\u1275\\u130D\\u122D\\u129B\", \"ti\", \"tir\", \"tir\"],\n [\"Turkmen\", \"T\\xFCrkmen, \\u0422\\u04AF\\u0440\\u043A\\u043C\\u0435\\u043D\", \"tk\", \"tuk\", \"tuk\"],\n [\"Tswana\", \"Setswana\", \"tn\", \"tsn\", \"tsn\"],\n [\"Tongan (Tonga Islands)\", \"Faka Tonga\", \"to\", \"ton\", \"ton\"],\n [\"Turkish\", \"T\\xFCrk\\xE7e\", \"tr\", \"tur\", \"tur\"],\n [\"Tsonga\", \"Xitsonga\", \"ts\", \"tso\", \"tso\"],\n [\"Tatar\", \"\\u0442\\u0430\\u0442\\u0430\\u0440 \\u0442\\u0435\\u043B\\u0435, tatar tele\", \"tt\", \"tat\", \"tat\"],\n [\"Uighur, Uyghur\", \"\\u0626\\u06C7\\u064A\\u063A\\u06C7\\u0631\\u0686\\u06D5, Uyghurche\", \"ug\", \"uig\", \"uig\"],\n [\"Ukrainian\", \"\\u0423\\u043A\\u0440\\u0430\\u0457\\u043D\\u0441\\u044C\\u043A\\u0430\", \"uk\", \"ukr\", \"ukr\"],\n [\"Urdu\", \"\\u0627\\u0631\\u062F\\u0648\", \"ur\", \"urd\", \"urd\"],\n [\"Venda\", \"Tshiven\\u1E13a\", \"ve\", \"ven\", \"ven\"],\n [\"Vietnamese\", \"Ti\\u1EBFng Vi\\u1EC7t\", \"vi\", \"vie\", \"vie\"],\n [\"Walloon\", \"Walon\", \"wa\", \"wln\", \"wln\"],\n [\"Welsh\", \"Cymraeg\", \"cy\", \"cym\", \"wel\"],\n [\"Wolof\", \"Wollof\", \"wo\", \"wol\", \"wol\"],\n [\"Xhosa\", \"isiXhosa\", \"xh\", \"xho\", \"xho\"],\n [\"Yoruba\", \"Yor\\xF9b\\xE1\", \"yo\", \"yor\", \"yor\"],\n [\"Zulu\", \"isiZulu\", \"zu\", \"zul\", \"zul\"]\n];\n\n// src/index.ts\nvar codes = [];\nvar by639_1 = {};\nvar by639_2T = {};\nvar by639_2B = {};\ndata_default.forEach((row) => {\n var code = {\n name: row[0],\n nativeName: row[1],\n iso639_1: row[2],\n iso639_2T: row[3],\n iso639_2B: row[4]\n };\n by639_1[row[2]] = by639_2T[row[3]] = by639_2B[row[4]] = code;\n codes.push(code);\n});\nvar src_default = codes;\nexport {\n by639_1,\n by639_2B,\n by639_2T,\n codes,\n src_default as default\n};\n//# sourceMappingURL=index.mjs.map","// @ts-check\nimport langs from 'iso-language-codes';\n\n/**\n * Use regex to approximate word count in a string\n * @param {string} text\n * @return {number}\n */\nexport function approximateWordCount(text) {\n const m = text.match(/\\S+/g);\n return m ? m.length : 0;\n}\n\n/**\n * Checks whether the current browser is on android\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isAndroid(userAgent = navigator.userAgent) {\n return /android/i.test(userAgent);\n}\n\n/** @type {{[lang: string]: string}} */\n// Handle odd one-off language pairs that might show up over time\nconst specialLangs = {\n \"zh-hans\": \"中文 (Zhōngwén)\",\n};\n\n/**\n * @typedef {string} ISO6391\n * Language code in ISO 639-1 format. e.g. en, fr, zh\n **/\n\n/**\n * @param {string} language in some format\n * @return {ISO6391?}\n */\nexport function toISO6391(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return language;\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj) return codeObj.iso639_1;\n return null;\n}\n\n/**\n *\n * @param {string} language\n * @returns {string | null}\n */\nexport function toNativeName(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return specialLangs[language];\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj?.nativeName) return codeObj.nativeName.split(\", \")[0];\n return null;\n}\n\n/** @typedef {import('iso-language-codes').Code} Code */\n\n/**\n * @param {string} language\n * @param {Array<'iso639_1' | 'iso639_2T' | 'iso639_2B' | 'nativeName' | 'name'>} fields\n * @returns {Code | null}\n */\nfunction findLanguage(language, fields) {\n if (!language) return null;\n language = language.toLowerCase();\n for (const lang of langs) {\n for (const codeType of fields) {\n if (lang[codeType]?.toLowerCase().split(\", \").includes(language)) {\n return lang;\n }\n }\n }\n return null;\n}\n\n/**\n * Checks whether the current browser supports localStorage or\n * if the current context has access to it.\n * @return {boolean}\n */\nexport function hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n // Will throw in sandboxed iframe\n // DOMException: Window.localStorage getter: Forbidden in a sandboxed document without the 'allow-same-origin' flag.\n return false;\n }\n}\n\nexport const DEBUG_READ_ALOUD = location.toString().indexOf('_debugReadAloud=true') != -1;\n\nexport async function checkIfFiresPause() {\n // Pick some random text so that if it accidentally speaks, it's not too annoying\n const u = new SpeechSynthesisUtterance(\"Loading\");\n let calledPause = false;\n u.addEventListener('pause', () => calledPause = true);\n speechSynthesis.speak(u);\n await new Promise(res => setTimeout(res, 10));\n speechSynthesis.pause();\n return calledPause;\n}\n","/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n","/**\n * @typedef {String} StringWithVars\n * A template string with {{foo}} style variables\n * Also supports filters, like {{bookPath|urlencode}} (See APPLY_FILTERS for the\n * supported list of filters)\n **/\n\n/**\n * @param {StringWithVars|String} template\n * @param { {[varName: string]: { toString: () => string} } } vars\n * @param { {[varName: string]: { toString: () => string} } } [overrides]\n * @returns {StringWithVars|string}\n */\nexport function applyVariables(template, vars, overrides = {}, possibleFilters = APPLY_FILTERS) {\n return template?.replace(/\\{\\{([^}]*?)\\}\\}/g, ($0, $1) => {\n if (!$1) return $0;\n /** @type {string} */\n const expression = $1;\n const [varName, ...filterNames] = expression.split('|').map(x => x.trim());\n const defined = varName in overrides || varName in vars;\n\n // If it's not defined, don't expand it at all\n if (!defined) return $0;\n\n const value = varName in overrides ? overrides[varName]\n : varName in vars ? vars[varName] : null;\n const filters = filterNames.map(n => possibleFilters[n]);\n return filters.reduce((acc, cur) => cur(acc), value && value.toString());\n });\n}\n\n/** @type { {[filterName: String]:( string => string)} } */\nexport const APPLY_FILTERS = {\n urlencode: encodeURIComponent,\n};\n"],"names":["BookReaderPlugin","br","_classCallCheck","this","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","_marked2","_regenerator","m","genMap","_marked3","lookAroundWindow","_marked4","zip","_toConsumableArray","r","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","Symbol","iterator","from","_iterableToArray","_unsupportedIterableToArray","TypeError","_nonIterableSpread","_createForOfIteratorHelper","e","t","length","_n","F","s","n","done","f","o","a","u","call","next","return","_slicedToArray","_arrayWithHoles","l","i","push","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","toStringTag","c","prototype","Generator","create","_regeneratorDefine2","p","y","G","v","d","bind","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","_createClass","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_defineProperty","_typeof","toPrimitive","String","_toPrimitive","BookReader","window","TextSelectionPlugin","_BookReaderPlugin","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","Cache","rtl","pageProgression","textSelectionManager","TextSelectionManager","selectionElement","_inherits","_this2","on","_","_ref","pageContainerEl","textLayer","querySelector","trigger","loadData","init","targetTextFragment","BookReaderTextFragment","fromUrl","location","search","book","firstIndex","_ref3","_callee","_ref2","_context","pageIndex","parseFloat","getAttribute","renderHighlight","_x","_x2","_pageContainer$page","mode","constModeThumb","page","isViewable","createTextLayer","djvuPagesPromise","$","ajax","type","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","protected","error","res","xmlMap","parseXML","find","_getPageText","_callee2","index","cachedEntry","xmlDoc","result","XMLpagesArr","_context2","pageTextCache","entries","x","response","add","undefined","_x3","_createTextLayer","_callee3","$container","XMLpage","totalWords","ratioW","ratioH","bookLangCode","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this3","_context3","getPageText","filter","ele","_ele$getAttribute$spl2","split","map","left","top","console","remove","recursivelyAddCoords","maxWordRendered","log","concat","createDIVPageLayer","style","width","height","transform","toISO6391","bookLanguage","setAttribute","toArray","el","renderParagraph","appendChild","determineRealRects","attr","get","right","marginTop","document","createTextNode","err","append","stopPageFlip","hasClass","_x4","createElement","classList","ariaHidden","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","textContent","trim","endsWith","newLeft","firstWord","wordEl","space","hasHyphen","lastWordEl","children","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","_iterator3","querySelectorAll","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map0","previousElementSibling","min","lineHeight","parentEl","selector","initals","position","visibility","body","rects","Map","origRect","getBoundingClientRect","Rect","scrollX","scrollY","removeChild","gen","fn","_iterator9","_step9","_t3","_context5","prev","cur","_iterator0","_step0","_t4","_context6","gen1","gen2","it1","it2","r1","r2","_context7","Error","xmlEl","_step10","_iterator10","_step11","childCoords","_iterator11","child","boundingCoords","bounds","_step1","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator1","_step1$value","max","determineBounds","abs","join","registerPlugin","codes","by639_1","by639_2T","by639_2B","forEach","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","approximateWordCount","text","match","isAndroid","userAgent","navigator","specialLangs","language","toLocaleLowerCase","codeObj","findLanguage","toNativeName","fields","toLowerCase","langs","lang","_lang$codeType","includes","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","indexOf","maxSize","entry","shift","template","overrides","possibleFilters","APPLY_FILTERS","replace","$0","$1","_expression$split$map2","varName","filterNames","reduce","acc","urlencode","encodeURIComponent"],"sourceRoot":""}
1
+ {"version":3,"file":"plugins/plugin.text_selection.js","mappings":"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","sources":["webpack://@internetarchive/bookreader/./src/BookReaderPlugin.js","webpack://@internetarchive/bookreader/./src/plugins/plugin.text_selection.js","webpack://@internetarchive/bookreader/./node_modules/iso-language-codes/dist/index.mjs","webpack://@internetarchive/bookreader/./src/plugins/tts/utils.js","webpack://@internetarchive/bookreader/./src/util/cache.js"],"sourcesContent":["// @ts-check\n/** @typedef {import(\"./BookReader.js\").default} BookReader */\n\n/**\n * @template TOptions\n */\nexport class BookReaderPlugin {\n /**\n * @param {BookReader} br\n */\n constructor(br) {\n /** @type {BookReader} */\n this.br = br;\n /** @type {TOptions} */\n this.options;\n }\n\n /**\n * @abstract\n * @param {TOptions} options\n **/\n setup(options) {\n this.options = Object.assign({}, this.options, options);\n }\n\n /** @abstract */\n init() {}\n\n /**\n * @abstract\n * @protected\n * @param {import (\"./BookReader/PageContainer.js\").PageContainer} pageContainer\n */\n _configurePageContainer(pageContainer) {\n }\n\n /**\n * @abstract\n * @protected\n * @param {JQuery<HTMLElement>} $toolbarElement\n */\n _configureToolbar($toolbarElement) {\n }\n\n /** @abstract @protected */\n _bindNavigationHandlers() {}\n\n /**\n * @param {JQuery<HTMLElement>} $navBar\n */\n extendNavBar($navBar) {}\n}\n","//@ts-check\nimport { createDIVPageLayer } from '../BookReader/PageContainer.js';\nimport { BookReaderPlugin } from '../BookReaderPlugin.js';\nimport { applyVariables } from '../util/strings.js';\nimport { Cache } from '../util/cache.js';\nimport { toISO6391 } from './tts/utils.js';\nimport { BookReaderTextFragment, renderHighlight, TextSelectionManager } from '../util/TextSelectionManager.js';\n/** @typedef {import('../util/strings.js').StringWithVars} StringWithVars */\n/** @typedef {import('../BookReader/PageContainer.js').PageContainer} PageContainer */\n\nconst BookReader = /** @type {typeof import('../BookReader').default} */(window.BookReader);\n\n\nexport class TextSelectionPlugin extends BookReaderPlugin {\n options = {\n enabled: true,\n /** @type {StringWithVars} The URL to fetch the entire DJVU xml. Supports options.vars */\n fullDjvuXmlUrl: null,\n /** @type {StringWithVars} The URL to fetch a single page of the DJVU xml. Supports options.vars. Also has {{pageIndex}} */\n singlePageDjvuXmlUrl: null,\n /** Whether to fetch the XML as a jsonp */\n jsonp: false,\n /** Mox words that can be selected when the text layer is protected */\n maxProtectedWords: 200,\n }\n\n /**@type {PromiseLike<JQuery<HTMLElement>|undefined>} */\n djvuPagesPromise = null;\n\n /** @type {Cache<{index: number, response: any}>} */\n pageTextCache = new Cache();\n\n /**\n * Sometimes there are too many words on a page, and the browser becomes near\n * unusable. For now don't render text layer for pages with too many words.\n */\n maxWordRendered = 2500;\n\n _jumpedToHighlight = false;\n\n /**\n * @param {import('../BookReader.js').default} br\n */\n constructor(br) {\n super(br);\n // In the future this should be in the ocr file\n // since a book being right to left doesn't mean the ocr is right to left. But for\n // now we do make that assumption.\n /** Whether the book is right-to-left */\n this.rtl = this.br.pageProgression === 'rl';\n this.textSelectionManager = new TextSelectionManager('.BRtextLayer', this.br, {selectionElement: ['.BRwordElement', '.BRspace', 'mark']}, this.options.maxProtectedWords);\n }\n\n /** @override */\n init() {\n if (!this.options.enabled) return;\n\n this.br.on('pageVisible', (_, {pageContainerEl}) => {\n const textLayer = pageContainerEl.querySelector('.BRtextLayer');\n if (textLayer) {\n this.br.trigger('textLayerVisible', {pageContainerEl, textLayer});\n }\n });\n\n this.loadData();\n this.textSelectionManager.init();\n\n // Init text fragment\n this.targetTextFragment = BookReaderTextFragment.fromUrl(location.search, this.br.book, this.br.firstIndex);\n if (this.targetTextFragment) {\n const targetTextFragment = this.targetTextFragment;\n this.br.on('textLayerVisible', async (_, {pageContainerEl, textLayer}) => {\n const pageIndex = targetTextFragment.pageIndex;\n const hasTargetText = pageIndex === parseFloat(pageContainerEl.getAttribute('data-index'));\n if (hasTargetText) {\n const markEls = renderHighlight(textLayer, targetTextFragment, 'BRhighlight--target-text');\n // Only jump once; presumably on first page load.\n if (!this._jumpedToHighlight) {\n markEls[0].scrollIntoView({behavior: 'smooth', block: 'center'});\n this._jumpedToHighlight = true;\n }\n }\n });\n }\n }\n\n /**\n * @override\n * @param {PageContainer} pageContainer\n * @returns {PageContainer}\n */\n _configurePageContainer(pageContainer) {\n // Disable if thumb mode; it's too janky\n // .page can be null for \"pre-cover\" region\n if (this.br.mode !== this.br.constModeThumb && pageContainer.page?.isViewable) {\n this.createTextLayer(pageContainer);\n }\n return pageContainer;\n }\n\n loadData() {\n // Only fetch the full djvu xml if the single page url isn't there\n if (this.options.singlePageDjvuXmlUrl) return;\n this.djvuPagesPromise = $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.fullDjvuXmlUrl, this.br.options.vars),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n }).then((res) => {\n try {\n const xmlMap = $.parseXML(res);\n return xmlMap && $(xmlMap).find(\"OBJECT\");\n } catch (e) {\n return undefined;\n }\n });\n }\n\n /**\n * @param {number} index\n * @returns {Promise<HTMLElement|undefined>}\n */\n async getPageText(index) {\n if (this.options.singlePageDjvuXmlUrl) {\n const cachedEntry = this.pageTextCache.entries.find(x => x.index == index);\n if (cachedEntry) {\n return cachedEntry.response;\n }\n const res = await $.ajax({\n type: \"GET\",\n url: applyVariables(this.options.singlePageDjvuXmlUrl, this.br.options.vars, { pageIndex: index }),\n dataType: this.options.jsonp ? \"jsonp\" : \"html\",\n cache: true,\n xhrFields: {\n withCredentials: this.br.protected,\n },\n error: (e) => undefined,\n });\n try {\n const xmlDoc = $.parseXML(res);\n const result = xmlDoc && $(xmlDoc).find(\"OBJECT\")[0];\n this.pageTextCache.add({ index, response: result });\n return result;\n } catch (e) {\n return undefined;\n }\n } else {\n const XMLpagesArr = await this.djvuPagesPromise;\n if (XMLpagesArr) return XMLpagesArr[index];\n }\n }\n\n /**\n * @param {PageContainer} pageContainer\n */\n async createTextLayer(pageContainer) {\n const pageIndex = pageContainer.page.index;\n const $container = pageContainer.$container;\n const $textLayers = $container.find('.BRtextLayer');\n if ($textLayers.length) return;\n const XMLpage = await this.getPageText(pageIndex);\n if (!XMLpage) return;\n // Seeing some 0 left and 0 top coordinates in OCR, remove it entirely to prevent odd rendering\n // eg https://archive.org/details/illustratedbooko00robe/page/n11/mode/2up\n $(XMLpage).find(\"WORD\").filter((_, ele) => {\n const [left, , , top] = ele.getAttribute('coords').split(\",\").map(parseFloat);\n if (left == 0 && top == 0) {\n console.error(\"Found invalid ocr word coordinates\");\n return true;\n }\n }).remove();\n recursivelyAddCoords(XMLpage);\n\n const totalWords = $(XMLpage).find(\"WORD\").length;\n if (totalWords > this.maxWordRendered) {\n console.log(`Page ${pageIndex} has too many words (${totalWords} > ${this.maxWordRendered}). Not rendering text layer.`);\n return;\n }\n\n const textLayer = createDIVPageLayer(pageContainer.page, 'BRtextLayer');\n // Have to wait to make sure the page container is actually rendered,\n // otherwise width/height are unset after a mode change.\n await Promise.resolve();\n const ratioW = parseFloat(pageContainer.$container[0].style.width) / pageContainer.page.width;\n const ratioH = parseFloat(pageContainer.$container[0].style.height) / pageContainer.page.height;\n textLayer.style.transform = `scale(${ratioW}, ${ratioH})`;\n const bookLangCode = toISO6391(this.br.options.bookLanguage);\n if (bookLangCode) {\n textLayer.setAttribute(\"lang\", bookLangCode);\n }\n textLayer.setAttribute(\"dir\", this.rtl ? \"rtl\" : \"ltr\");\n\n const ocrParagraphs = $(XMLpage).find(\"PARAGRAPH[coords]\").toArray();\n const paragEls = ocrParagraphs.map(p => {\n const el = this.renderParagraph(p);\n textLayer.appendChild(el);\n return el;\n });\n\n // Fix up paragraph positions\n const paragraphRects = determineRealRects(textLayer, '.BRparagraphElement');\n let yAdded = 0;\n for (const [ocrParagraph, paragEl] of zip(ocrParagraphs, paragEls)) {\n const ocrParagBounds = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const realRect = paragraphRects.get(paragEl);\n const [ocrLeft, , ocrRight, ocrTop] = ocrParagBounds;\n const newStartMargin = this.rtl ? (realRect.right - ocrRight) : (ocrLeft - realRect.left);\n const newTop = ocrTop - (realRect.top + yAdded);\n\n paragEl.style[this.rtl ? 'marginRight' : 'marginLeft'] = `${newStartMargin}px`;\n paragEl.style.marginTop = `${newTop}px`;\n yAdded += newTop;\n textLayer.appendChild(paragEl);\n textLayer.appendChild(document.createTextNode('\\n'));\n }\n $container.append(textLayer);\n this.textSelectionManager.stopPageFlip($container);\n this.br.trigger('textLayerRendered', {\n pageIndex,\n pageContainer,\n });\n\n // Check if page is visible\n if ($container.hasClass('BRpage-visible')) {\n this.br.trigger('textLayerVisible', {pageContainerEl: $container[0], textLayer});\n }\n }\n\n /**\n * @param {HTMLElement} ocrParagraph\n * @returns {HTMLParagraphElement}\n */\n renderParagraph(ocrParagraph) {\n const paragEl = document.createElement('p');\n paragEl.classList.add('BRparagraphElement');\n if (ocrParagraph.getAttribute(\"x-role\")) {\n paragEl.classList.add('ocr-role-header-footer');\n paragEl.ariaHidden = \"true\";\n }\n const [paragLeft, paragBottom, paragRight, paragTop] = $(ocrParagraph).attr(\"coords\").split(\",\").map(parseFloat);\n const wordHeightArr = [];\n const lines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n if (!lines.length) return paragEl;\n\n\n for (const [prevLine, line, nextLine] of lookAroundWindow(genMap(lines, augmentLine))) {\n const isLastLineOfParagraph = line.ocrElement == lines[lines.length - 1];\n const lineEl = document.createElement('span');\n lineEl.classList.add('BRlineElement');\n\n for (const [wordIndex, currWord] of line.words.entries()) {\n const [, bottom, right, top] = $(currWord).attr(\"coords\").split(',').map(parseFloat);\n const wordHeight = bottom - top;\n wordHeightArr.push(wordHeight);\n\n if (wordIndex == 0 && prevLine?.lastWord.textContent.trim().endsWith('-')) {\n // ideally prefer the next line to determine the left position,\n // since the previous line could be the first line of the paragraph\n // and hence have an incorrectly indented first word.\n // E.g. https://archive.org/details/driitaleofdaring00bachuoft/page/360/mode/2up\n const [newLeft, , , ] = $((nextLine || prevLine).firstWord).attr(\"coords\").split(',').map(parseFloat);\n $(currWord).attr(\"coords\", `${newLeft},${bottom},${right},${top}`);\n }\n\n const wordEl = document.createElement('span');\n wordEl.setAttribute(\"class\", \"BRwordElement\");\n wordEl.textContent = currWord.textContent.trim();\n\n if (wordIndex > 0) {\n const space = document.createElement('span');\n space.classList.add('BRspace');\n space.textContent = ' ';\n // Hack to make screen readers (eg NVDA) read spaces correctly;\n // otherwise they ignore elements with just whitespace.\n space.setAttribute('aria-label', '\\u00A0');\n lineEl.append(space);\n\n // Edge ignores empty elements (like BRspace), so add another\n // space to ensure Edge's ReadAloud works correctly.\n lineEl.appendChild(document.createTextNode(' '));\n }\n\n lineEl.appendChild(wordEl);\n }\n\n const hasHyphen = line.lastWord.textContent.trim().endsWith('-');\n const lastWordEl = lineEl.children[lineEl.children.length - 1];\n if (hasHyphen && !isLastLineOfParagraph) {\n lastWordEl.textContent = lastWordEl.textContent.trim().slice(0, -1);\n lastWordEl.classList.add('BRwordElement--hyphen');\n }\n\n paragEl.appendChild(lineEl);\n if (!isLastLineOfParagraph && !hasHyphen) {\n // Edge does not correctly have spaces between the lines.\n paragEl.appendChild(document.createTextNode(' '));\n }\n }\n\n wordHeightArr.sort((a, b) => a - b);\n const paragWordHeight = wordHeightArr[Math.floor(wordHeightArr.length * 0.85)] + 4;\n paragEl.style.left = `${paragLeft}px`;\n paragEl.style.top = `${paragTop}px`;\n paragEl.style.width = `${paragRight - paragLeft}px`;\n paragEl.style.height = `${paragBottom - paragTop}px`;\n paragEl.style.fontSize = `${paragWordHeight}px`;\n\n // Fix up sizes - stretch/crush words as necessary using letter spacing\n let wordRects = determineRealRects(paragEl, '.BRwordElement');\n const ocrWords = $(ocrParagraph).find(\"WORD\").toArray();\n const wordEls = paragEl.querySelectorAll('.BRwordElement');\n for (const [ocrWord, wordEl] of zip(ocrWords, wordEls)) {\n const realRect = wordRects.get(wordEl);\n const [left, , right ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n let ocrWidth = right - left;\n // Some books (eg theworksofplato01platiala) have a space _inside_ the <WORD>\n // element. That makes it impossible to determine the correct positining\n // of everything, but to avoid the BRspace's being width 0, which makes selection\n // janky on Chrome Android, assume the space is the same width as one of the\n // letters.\n if (ocrWord.textContent.endsWith(' ')) {\n ocrWidth = ocrWidth * (ocrWord.textContent.length - 1) / ocrWord.textContent.length;\n }\n const diff = ocrWidth - realRect.width;\n wordEl.style.letterSpacing = `${diff / (ocrWord.textContent.length - 1)}px`;\n }\n\n // Stretch/crush lines as necessary using line spacing\n // Recompute rects after letter spacing\n wordRects = determineRealRects(paragEl, '.BRwordElement');\n const spaceRects = determineRealRects(paragEl, '.BRspace');\n\n const ocrLines = $(ocrParagraph).find(\"LINE[coords]\").toArray();\n const lineEls = Array.from(paragEl.querySelectorAll('.BRlineElement'));\n\n let ySoFar = paragTop;\n for (const [ocrLine, lineEl] of zip(ocrLines, lineEls)) {\n // shift words using marginLeft to align with the correct x position\n const words = $(ocrLine).find(\"WORD\").toArray();\n // const ocrLineLeft = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[0])));\n let xSoFar = this.rtl ? paragRight : paragLeft;\n for (const [ocrWord, wordEl] of zip(words, lineEl.querySelectorAll('.BRwordElement'))) {\n // start of line, need to compute the offset relative to the OCR words\n const wordRect = wordRects.get(wordEl);\n const [ocrLeft, , ocrRight ] = $(ocrWord).attr(\"coords\").split(',').map(parseFloat);\n const diff = (this.rtl ? -(ocrRight - xSoFar) : ocrLeft - xSoFar);\n\n if (wordEl.previousElementSibling) {\n const space = wordEl.previousElementSibling;\n space.style.letterSpacing = `${diff - spaceRects.get(space).width}px`;\n } else {\n wordEl.style[this.rtl ? 'paddingRight' : 'paddingLeft'] = `${diff}px`;\n }\n if (this.rtl) xSoFar -= diff + wordRect.width;\n else xSoFar += diff + wordRect.width;\n }\n // And also fix y position\n const ocrLineTop = Math.min(...words.map(w => parseFloat($(w).attr(\"coords\").split(',')[3])));\n const diff = ocrLineTop - ySoFar;\n if (lineEl.previousElementSibling) {\n lineEl.previousElementSibling.style.lineHeight = `${diff}px`;\n ySoFar += diff;\n }\n }\n\n // The last line will have a line height subtracting from the paragraph height\n lineEls[lineEls.length - 1].style.lineHeight = `${paragBottom - ySoFar}px`;\n\n // Edge does not include a newline for some reason when copying/pasting the <p> els\n paragEl.appendChild(document.createElement('br'));\n return paragEl;\n }\n}\n\nBookReader?.registerPlugin('textSelection', TextSelectionPlugin);\n\n\n/**\n * @param {HTMLElement} parentEl\n * @param {string} selector\n * @returns {Map<Element, Rect>}\n */\nfunction determineRealRects(parentEl, selector) {\n const initals = {\n position: parentEl.style.position,\n visibility: parentEl.style.visibility,\n top: parentEl.style.top,\n left: parentEl.style.left,\n transform: parentEl.style.transform,\n };\n parentEl.style.position = 'absolute';\n parentEl.style.visibility = 'hidden';\n parentEl.style.top = '0';\n parentEl.style.left = '0';\n parentEl.style.transform = 'none';\n document.body.appendChild(parentEl);\n const rects = new Map(\n Array.from(parentEl.querySelectorAll(selector))\n .map(wordEl => {\n const origRect = wordEl.getBoundingClientRect();\n return [wordEl, new Rect(\n origRect.left + window.scrollX,\n origRect.top + window.scrollY,\n origRect.width,\n origRect.height,\n )];\n }),\n );\n document.body.removeChild(parentEl);\n Object.assign(parentEl.style, initals);\n return rects;\n}\n\n/**\n * @param {HTMLElement} line\n */\nfunction augmentLine(line) {\n const words = $(line).find(\"WORD\").toArray();\n return {\n ocrElement: line,\n words,\n firstWord: words[0],\n lastWord: words[words.length - 1],\n };\n}\n\n/**\n * @template T\n * Get the i-th element of an iterable\n * @param {Iterable<T>} iterable\n * @param {number} index\n */\nexport function genAt(iterable, index) {\n let i = 0;\n for (const x of iterable) {\n if (i == index) return x;\n i++;\n }\n return undefined;\n}\n\n/**\n * @template T\n * Generator version of filter\n * @param {Iterable<T>} iterable\n * @param {function(T): boolean} fn\n */\nexport function* genFilter(iterable, fn) {\n for (const x of iterable) {\n if (fn(x)) yield x;\n }\n}\n\n/**\n * @template TFrom, TTo\n * Generator version of map\n * @param {Iterable<TFrom>} gen\n * @param {function(TFrom): TTo} fn\n * @returns {Iterable<TTo>}\n */\nexport function* genMap(gen, fn) {\n for (const x of gen) yield fn(x);\n}\n\n/**\n * @template T\n * Generator that provides a sliding window of 3 elements,\n * prev, current, and next.\n * @param {Iterable<T>} gen\n * @returns {Iterable<[T | undefined, T, T | undefined]>}\n */\nexport function* lookAroundWindow(gen) {\n let prev = undefined;\n let cur = undefined;\n let next = undefined;\n for (const x of gen) {\n if (typeof cur !== 'undefined') {\n next = x;\n yield [prev, cur, next];\n }\n prev = cur;\n cur = x;\n next = undefined;\n }\n\n if (typeof cur !== 'undefined') {\n yield [prev, cur, next];\n }\n}\n\n/**\n * @template T1, T2\n * Lazy zip implementation to avoid importing lodash\n * Expects iterators to be of the same length\n * @param {Iterable<T1>} gen1\n * @param {Iterable<T2>} gen2\n * @returns {Iterable<[T1, T2]>}\n */\nexport function* zip(gen1, gen2) {\n const it1 = gen1[Symbol.iterator]();\n const it2 = gen2[Symbol.iterator]();\n while (true) {\n const r1 = it1.next();\n const r2 = it2.next();\n if (r1.done && r2.done) {\n return;\n }\n if (r1.done || r2.done) {\n throw new Error('zip: one of the iterators is done');\n }\n yield [r1.value, r2.value];\n }\n}\n\n/**\n * [left, bottom, right, top]\n * @param {Array<[number, number, number, number]>} bounds\n * @returns {[number, number, number, number]}\n */\nfunction determineBounds(bounds) {\n let leftMost = Infinity;\n let bottomMost = -Infinity;\n let rightMost = -Infinity;\n let topMost = Infinity;\n\n for (const [left, bottom, right, top] of bounds) {\n leftMost = Math.min(leftMost, left);\n bottomMost = Math.max(bottomMost, bottom);\n rightMost = Math.max(rightMost, right);\n topMost = Math.min(topMost, top);\n }\n\n return [leftMost, bottomMost, rightMost, topMost];\n}\n\n/**\n * Recursively traverses the XML tree and adds coords\n * which are the bounding box of all child coords\n * @param {Element} xmlEl\n */\nfunction recursivelyAddCoords(xmlEl) {\n if ($(xmlEl).attr('coords') || !xmlEl.children) {\n return;\n }\n\n const children = $(xmlEl).children().toArray();\n if (children.length === 0) {\n return;\n }\n\n for (const child of children) {\n recursivelyAddCoords(child);\n }\n\n const childCoords = [];\n\n for (const child of children) {\n if (!$(child).attr('coords')) continue;\n childCoords.push($(child).attr('coords').split(',').map(parseFloat));\n }\n\n const boundingCoords = determineBounds(childCoords);\n if (Math.abs(boundingCoords[0]) != Infinity) {\n $(xmlEl).attr('coords', boundingCoords.join(','));\n }\n}\n\n/**\n * Basically a polyfill for the native DOMRect class\n */\nclass Rect {\n /**\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n */\n constructor(x, y, width, height) {\n this.x = x;\n this.y = y;\n this.width = width;\n this.height = height;\n }\n\n get right() { return this.x + this.width; }\n get bottom() { return this.y + this.height; }\n get top() { return this.y; }\n get left() { return this.x; }\n}\n","// src/data.ts\nvar data_default = [\n [\"Serbian\", \"\\u0441\\u0440\\u043F\\u0441\\u043A\\u0438 \\u0458\\u0435\\u0437\\u0438\\u043A\", \"sr\", \"srp\", \"srp\"],\n [\"Romanian, Moldavian, Moldovan\", \"Rom\\xE2n\\u0103\", \"ro\", \"ron\", \"rum\"],\n [\"Sichuan Yi, Nuosu\", \"\\uA188\\uA320\\uA4BF Nuosuhxop\", \"ii\", \"iii\", \"iii\"],\n [\"Tahitian\", \"Reo Tahiti\", \"ty\", \"tah\", \"tah\"],\n [\"Tagalog\", \"Wikang Tagalog\", \"tl\", \"tgl\", \"tgl\"],\n [\"Yiddish\", \"\\u05D9\\u05D9\\u05B4\\u05D3\\u05D9\\u05E9\", \"yi\", \"yid\", \"yid\"],\n [\"Akan\", \"Akan\", \"ak\", \"aka\", \"aka\"],\n [\"Malay\", \"Bahasa Melayu, \\u0628\\u0647\\u0627\\u0633 \\u0645\\u0644\\u0627\\u064A\\u0648\", \"ms\", \"msa\", \"may\"],\n [\"Arabic\", \"\\u0627\\u0644\\u0639\\u0631\\u0628\\u064A\\u0629\", \"ar\", \"ara\", \"ara\"],\n [\"Norwegian\", \"Norsk\", \"no\", \"nor\", \"nor\"],\n [\"Ojibwa\", \"\\u140A\\u14C2\\u1511\\u14C8\\u142F\\u14A7\\u140E\\u14D0\", \"oj\", \"oji\", \"oji\"],\n [\"Fulah\", \"Fulfulde, Pulaar, Pular\", \"ff\", \"ful\", \"ful\"],\n [\"Persian\", \"\\u0641\\u0627\\u0631\\u0633\\u06CC\", \"fa\", \"fas\", \"per\"],\n [\"Albanian\", \"Shqip\", \"sq\", \"sqi\", \"alb\"],\n [\"Aymara\", \"aymar aru\", \"ay\", \"aym\", \"aym\"],\n [\"Azerbaijani\", \"az\\u0259rbaycan dili\", \"az\", \"aze\", \"aze\"],\n [\"Chinese\", \"\\u4E2D\\u6587 (Zh\\u014Dngw\\xE9n), \\u6C49\\u8BED, \\u6F22\\u8A9E\", \"zh\", \"zho\", \"chi\"],\n [\"Cree\", \"\\u14C0\\u1426\\u1403\\u152D\\u140D\\u140F\\u1423\", \"cr\", \"cre\", \"cre\"],\n [\"Estonian\", \"eesti, eesti keel\", \"et\", \"est\", \"est\"],\n [\"Guaran\\xED\", \"Ava\\xF1e'\\u1EBD\", \"gn\", \"grn\", \"grn\"],\n [\"Inupiaq\", \"I\\xF1upiaq, I\\xF1upiatun\", \"ik\", \"ipk\", \"ipk\"],\n [\"Inuktitut\", \"\\u1403\\u14C4\\u1483\\u144E\\u1450\\u1466\", \"iu\", \"iku\", \"iku\"],\n [\"Kanuri\", \"Kanuri\", \"kr\", \"kau\", \"kau\"],\n [\"Komi\", \"\\u043A\\u043E\\u043C\\u0438 \\u043A\\u044B\\u0432\", \"kv\", \"kom\", \"kom\"],\n [\"Kongo\", \"Kikongo\", \"kg\", \"kon\", \"kon\"],\n [\"Kurdish\", \"Kurd\\xEE, \\u0623\\u06C7\\u0632\\u0628\\u06D0\\u0643\", \"ku\", \"kur\", \"kur\"],\n [\"Latvian\", \"latvie\\u0161u valoda\", \"lv\", \"lav\", \"lav\"],\n [\"Malagasy\", \"fiteny malagasy\", \"mg\", \"mlg\", \"mlg\"],\n [\"Mongolian\", \"\\u041C\\u043E\\u043D\\u0433\\u043E\\u043B \\u0445\\u044D\\u043B\", \"mn\", \"mon\", \"mon\"],\n [\"Oromo\", \"Afaan Oromoo\", \"om\", \"orm\", \"orm\"],\n [\"Pashto, Pushto\", \"\\u067E\\u069A\\u062A\\u0648\", \"ps\", \"pus\", \"pus\"],\n [\"Quechua\", \"Runa Simi, Kichwa\", \"qu\", \"que\", \"que\"],\n [\"Sardinian\", \"sardu\", \"sc\", \"srd\", \"srd\"],\n [\"Swahili\", \"Kiswahili\", \"sw\", \"swa\", \"swa\"],\n [\"Uzbek\", \"O\\u02BBzbek, \\u040E\\u0437\\u0431\\u0435\\u043A, \", \"uz\", \"uzb\", \"uzb\"],\n [\"Zhuang, Chuang\", \"Sa\\u026F cue\\u014B\\u0185, Saw cuengh\", \"za\", \"zha\", \"zha\"],\n [\"Bislama\", \"Bislama\", \"bi\", \"bis\", \"bis\"],\n [\"Norwegian Bokm\\xE5l\", \"Norsk Bokm\\xE5l\", \"nb\", \"nob\", \"nob\"],\n [\"Norwegian Nynorsk\", \"Norsk Nynorsk\", \"nn\", \"nno\", \"nno\"],\n [\"Indonesian\", \"Bahasa Indonesia\", \"id\", \"ind\", \"ind\"],\n [\"Twi\", \"Twi\", \"tw\", \"twi\", \"twi\"],\n [\"Esperanto\", \"Esperanto\", \"eo\", \"epo\", \"epo\"],\n [\"Interlingua\", \"Interlingua\", \"ia\", \"ina\", \"ina\"],\n [\"Interlingue\", \"Originally called Occidental; then Interlingue after WWII\", \"ie\", \"ile\", \"ile\"],\n [\"Ido\", \"Ido\", \"io\", \"ido\", \"ido\"],\n [\"Volap\\xFCk\", \"Volap\\xFCk\", \"vo\", \"vol\", \"vol\"],\n [\"Bihari languages\", \"\\u092D\\u094B\\u091C\\u092A\\u0941\\u0930\\u0940\", \"bh\", \"bih\", \"bih\"],\n [\"Hebrew (modern)\", \"\\u05E2\\u05D1\\u05E8\\u05D9\\u05EA\", \"he\", \"heb\", \"heb\"],\n [\"Sanskrit\", \"\\u0938\\u0902\\u0938\\u094D\\u0915\\u0943\\u0924\\u092E\\u094D\", \"sa\", \"san\", \"san\"],\n [\"Church Slavic, Church Slavonic, Old Church Slavonic, Old Slavonic, Old Bulgarian\", \"\\u0469\\u0437\\u044B\\u043A\\u044A \\u0441\\u043B\\u043E\\u0432\\u0463\\u043D\\u044C\\u0441\\u043A\\u044A\", \"cu\", \"chu\", \"chu\"],\n [\"Pali\", \"\\u092A\\u093E\\u0934\\u093F\", \"pi\", \"pli\", \"pli\"],\n [\"Avestan\", \"avesta\", \"ae\", \"ave\", \"ave\"],\n [\"Latin\", \"latine, lingua latina\", \"la\", \"lat\", \"lat\"],\n [\"Armenian\", \"\\u0540\\u0561\\u0575\\u0565\\u0580\\u0565\\u0576\", \"hy\", \"hye\", \"arm\"],\n [\"Swati\", \"SiSwati\", \"ss\", \"ssw\", \"ssw\"],\n [\"Tibetan\", \"\\u0F56\\u0F7C\\u0F51\\u0F0B\\u0F61\\u0F72\\u0F42\", \"bo\", \"bod\", \"tib\"],\n [\"South Ndebele\", \"isiNdebele\", \"nr\", \"nbl\", \"nbl\"],\n [\"Slovene\", \"Slovenski Jezik, Sloven\\u0161\\u010Dina\", \"sl\", \"slv\", \"slv\"],\n [\"Oriya\", \"\\u0B13\\u0B21\\u0B3C\\u0B3F\\u0B06\", \"or\", \"ori\", \"ori\"],\n [\"North Ndebele\", \"isiNdebele\", \"nd\", \"nde\", \"nde\"],\n [\"Nauru\", \"Dorerin Naoero\", \"na\", \"nau\", \"nau\"],\n [\"Maori\", \"te reo M\\u0101ori\", \"mi\", \"mri\", \"mao\"],\n [\"Marathi\", \"\\u092E\\u0930\\u093E\\u0920\\u0940\", \"mr\", \"mar\", \"mar\"],\n [\"Luba-Katanga\", \"Kiluba\", \"lu\", \"lub\", \"lub\"],\n [\"Rundi\", \"Ikirundi\", \"rn\", \"run\", \"run\"],\n [\"Central Khmer\", \"\\u1781\\u17D2\\u1798\\u17C2\\u179A, \\u1781\\u17C1\\u1798\\u179A\\u1797\\u17B6\\u179F\\u17B6, \\u1797\\u17B6\\u179F\\u17B6\\u1781\\u17D2\\u1798\\u17C2\\u179A\", \"km\", \"khm\", \"khm\"],\n [\"Western Frisian\", \"Frysk\", \"fy\", \"fry\", \"fry\"],\n [\"Bengali\", \"\\u09AC\\u09BE\\u0982\\u09B2\\u09BE\", \"bn\", \"ben\", \"ben\"],\n [\"Avaric\", \"\\u0430\\u0432\\u0430\\u0440 \\u043C\\u0430\\u0446\\u04C0, \\u043C\\u0430\\u0433\\u04C0\\u0430\\u0440\\u0443\\u043B \\u043C\\u0430\\u0446\\u04C0\", \"av\", \"ava\", \"ava\"],\n [\"Abkhazian\", \"\\u0430\\u04A7\\u0441\\u0443\\u0430 \\u0431\\u044B\\u0437\\u0448\\u04D9\\u0430, \\u0430\\u04A7\\u0441\\u0448\\u04D9\\u0430\", \"ab\", \"abk\", \"abk\"],\n [\"Afar\", \"Afaraf\", \"aa\", \"aar\", \"aar\"],\n [\"Afrikaans\", \"Afrikaans\", \"af\", \"afr\", \"afr\"],\n [\"Amharic\", \"\\u12A0\\u121B\\u122D\\u129B\", \"am\", \"amh\", \"amh\"],\n [\"Aragonese\", \"aragon\\xE9s\", \"an\", \"arg\", \"arg\"],\n [\"Assamese\", \"\\u0985\\u09B8\\u09AE\\u09C0\\u09AF\\u09BC\\u09BE\", \"as\", \"asm\", \"asm\"],\n [\"Bambara\", \"bamanankan\", \"bm\", \"bam\", \"bam\"],\n [\"Bashkir\", \"\\u0431\\u0430\\u0448\\u04A1\\u043E\\u0440\\u0442 \\u0442\\u0435\\u043B\\u0435\", \"ba\", \"bak\", \"bak\"],\n [\"Basque\", \"euskara, euskera\", \"eu\", \"eus\", \"baq\"],\n [\"Belarusian\", \"\\u0431\\u0435\\u043B\\u0430\\u0440\\u0443\\u0441\\u043A\\u0430\\u044F \\u043C\\u043E\\u0432\\u0430\", \"be\", \"bel\", \"bel\"],\n [\"Bosnian\", \"bosanski jezik\", \"bs\", \"bos\", \"bos\"],\n [\"Breton\", \"brezhoneg\", \"br\", \"bre\", \"bre\"],\n [\"Bulgarian\", \"\\u0431\\u044A\\u043B\\u0433\\u0430\\u0440\\u0441\\u043A\\u0438 \\u0435\\u0437\\u0438\\u043A\", \"bg\", \"bul\", \"bul\"],\n [\"Burmese\", \"\\u1017\\u1019\\u102C\\u1005\\u102C\", \"my\", \"mya\", \"bur\"],\n [\"Catalan, Valencian\", \"catal\\xE0, valenci\\xE0\", \"ca\", \"cat\", \"cat\"],\n [\"Chamorro\", \"Chamoru\", \"ch\", \"cha\", \"cha\"],\n [\"Chechen\", \"\\u043D\\u043E\\u0445\\u0447\\u0438\\u0439\\u043D \\u043C\\u043E\\u0442\\u0442\", \"ce\", \"che\", \"che\"],\n [\"Chichewa, Chewa, Nyanja\", \"chiChe\\u0175a, chinyanja\", \"ny\", \"nya\", \"nya\"],\n [\"Chuvash\", \"\\u0447\\u04D1\\u0432\\u0430\\u0448 \\u0447\\u04D7\\u043B\\u0445\\u0438\", \"cv\", \"chv\", \"chv\"],\n [\"Cornish\", \"Kernewek\", \"kw\", \"cor\", \"cor\"],\n [\"Corsican\", \"corsu, lingua corsa\", \"co\", \"cos\", \"cos\"],\n [\"Croatian\", \"hrvatski jezik\", \"hr\", \"hrv\", \"hrv\"],\n [\"Czech\", \"\\u010De\\u0161tina, \\u010Desk\\xFD jazyk\", \"cs\", \"ces\", \"cze\"],\n [\"Danish\", \"dansk\", \"da\", \"dan\", \"dan\"],\n [\"Divehi, Dhivehi, Maldivian\", \"\\u078B\\u07A8\\u0788\\u07AC\\u0780\\u07A8\", \"dv\", \"div\", \"div\"],\n [\"Dutch, Flemish\", \"Nederlands, Vlaams\", \"nl\", \"nld\", \"dut\"],\n [\"Dzongkha\", \"\\u0F62\\u0FAB\\u0F7C\\u0F44\\u0F0B\\u0F41\", \"dz\", \"dzo\", \"dzo\"],\n [\"English\", \"English\", \"en\", \"eng\", \"eng\"],\n [\"Ewe\", \"E\\u028Begbe\", \"ee\", \"ewe\", \"ewe\"],\n [\"Faroese\", \"f\\xF8royskt\", \"fo\", \"fao\", \"fao\"],\n [\"Fijian\", \"vosa Vakaviti\", \"fj\", \"fij\", \"fij\"],\n [\"Finnish\", \"suomi, suomen kieli\", \"fi\", \"fin\", \"fin\"],\n [\"French\", \"fran\\xE7ais, langue fran\\xE7aise\", \"fr\", \"fra\", \"fre\"],\n [\"Galician\", \"Galego\", \"gl\", \"glg\", \"glg\"],\n [\"Georgian\", \"\\u10E5\\u10D0\\u10E0\\u10D7\\u10E3\\u10DA\\u10D8\", \"ka\", \"kat\", \"geo\"],\n [\"German\", \"Deutsch\", \"de\", \"deu\", \"ger\"],\n [\"Greek (modern)\", \"\\u03B5\\u03BB\\u03BB\\u03B7\\u03BD\\u03B9\\u03BA\\u03AC\", \"el\", \"ell\", \"gre\"],\n [\"Gujarati\", \"\\u0A97\\u0AC1\\u0A9C\\u0AB0\\u0ABE\\u0AA4\\u0AC0\", \"gu\", \"guj\", \"guj\"],\n [\"Haitian, Haitian Creole\", \"Krey\\xF2l ayisyen\", \"ht\", \"hat\", \"hat\"],\n [\"Hausa\", \"(Hausa) \\u0647\\u064E\\u0648\\u064F\\u0633\\u064E\", \"ha\", \"hau\", \"hau\"],\n [\"Herero\", \"Otjiherero\", \"hz\", \"her\", \"her\"],\n [\"Hindi\", \"\\u0939\\u093F\\u0928\\u094D\\u0926\\u0940, \\u0939\\u093F\\u0902\\u0926\\u0940\", \"hi\", \"hin\", \"hin\"],\n [\"Hiri Motu\", \"Hiri Motu\", \"ho\", \"hmo\", \"hmo\"],\n [\"Hungarian\", \"magyar\", \"hu\", \"hun\", \"hun\"],\n [\"Irish\", \"Gaeilge\", \"ga\", \"gle\", \"gle\"],\n [\"Igbo\", \"As\\u1EE5s\\u1EE5 Igbo\", \"ig\", \"ibo\", \"ibo\"],\n [\"Icelandic\", \"\\xCDslenska\", \"is\", \"isl\", \"ice\"],\n [\"Italian\", \"Italiano\", \"it\", \"ita\", \"ita\"],\n [\"Japanese\", \"\\u65E5\\u672C\\u8A9E (\\u306B\\u307B\\u3093\\u3054)\", \"ja\", \"jpn\", \"jpn\"],\n [\"Javanese\", \"\\uA9A7\\uA9B1\\uA997\\uA9AE, Basa Jawa\", \"jv\", \"jav\", \"jav\"],\n [\"Kalaallisut, Greenlandic\", \"kalaallisut, kalaallit oqaasii\", \"kl\", \"kal\", \"kal\"],\n [\"Kannada\", \"\\u0C95\\u0CA8\\u0CCD\\u0CA8\\u0CA1\", \"kn\", \"kan\", \"kan\"],\n [\"Kashmiri\", \"\\u0915\\u0936\\u094D\\u092E\\u0940\\u0930\\u0940, \\u0643\\u0634\\u0645\\u064A\\u0631\\u064A\", \"ks\", \"kas\", \"kas\"],\n [\"Kazakh\", \"\\u049B\\u0430\\u0437\\u0430\\u049B \\u0442\\u0456\\u043B\\u0456\", \"kk\", \"kaz\", \"kaz\"],\n [\"Kikuyu, Gikuyu\", \"G\\u0129k\\u0169y\\u0169\", \"ki\", \"kik\", \"kik\"],\n [\"Kinyarwanda\", \"Ikinyarwanda\", \"rw\", \"kin\", \"kin\"],\n [\"Kirghiz, Kyrgyz\", \"\\u041A\\u044B\\u0440\\u0433\\u044B\\u0437\\u0447\\u0430, \\u041A\\u044B\\u0440\\u0433\\u044B\\u0437 \\u0442\\u0438\\u043B\\u0438\", \"ky\", \"kir\", \"kir\"],\n [\"Korean\", \"\\uD55C\\uAD6D\\uC5B4\", \"ko\", \"kor\", \"kor\"],\n [\"Kuanyama, Kwanyama\", \"Kuanyama\", \"kj\", \"kua\", \"kua\"],\n [\"Luxembourgish, Letzeburgesch\", \"L\\xEBtzebuergesch\", \"lb\", \"ltz\", \"ltz\"],\n [\"Ganda\", \"Luganda\", \"lg\", \"lug\", \"lug\"],\n [\"Limburgan, Limburger, Limburgish\", \"Limburgs\", \"li\", \"lim\", \"lim\"],\n [\"Lingala\", \"Ling\\xE1la\", \"ln\", \"lin\", \"lin\"],\n [\"Lao\", \"\\u0E9E\\u0EB2\\u0EAA\\u0EB2\\u0EA5\\u0EB2\\u0EA7\", \"lo\", \"lao\", \"lao\"],\n [\"Lithuanian\", \"lietuvi\\u0173 kalba\", \"lt\", \"lit\", \"lit\"],\n [\"Manx\", \"Gaelg, Gailck\", \"gv\", \"glv\", \"glv\"],\n [\"Macedonian\", \"\\u043C\\u0430\\u043A\\u0435\\u0434\\u043E\\u043D\\u0441\\u043A\\u0438 \\u0458\\u0430\\u0437\\u0438\\u043A\", \"mk\", \"mkd\", \"mac\"],\n [\"Malayalam\", \"\\u0D2E\\u0D32\\u0D2F\\u0D3E\\u0D33\\u0D02\", \"ml\", \"mal\", \"mal\"],\n [\"Maltese\", \"Malti\", \"mt\", \"mlt\", \"mlt\"],\n [\"Marshallese\", \"Kajin M\\u0327aje\\u013C\", \"mh\", \"mah\", \"mah\"],\n [\"Navajo, Navaho\", \"Din\\xE9 bizaad\", \"nv\", \"nav\", \"nav\"],\n [\"Nepali\", \"\\u0928\\u0947\\u092A\\u093E\\u0932\\u0940\", \"ne\", \"nep\", \"nep\"],\n [\"Ndonga\", \"Owambo\", \"ng\", \"ndo\", \"ndo\"],\n [\"Occitan\", \"occitan, lenga d'\\xF2c\", \"oc\", \"oci\", \"oci\"],\n [\"Ossetian, Ossetic\", \"\\u0438\\u0440\\u043E\\u043D \\xE6\\u0432\\u0437\\u0430\\u0433\", \"os\", \"oss\", \"oss\"],\n [\"Panjabi, Punjabi\", \"\\u0A2A\\u0A70\\u0A1C\\u0A3E\\u0A2C\\u0A40\", \"pa\", \"pan\", \"pan\"],\n [\"Polish\", \"j\\u0119zyk polski, polszczyzna\", \"pl\", \"pol\", \"pol\"],\n [\"Portuguese\", \"Portugu\\xEAs\", \"pt\", \"por\", \"por\"],\n [\"Romansh\", \"Rumantsch Grischun\", \"rm\", \"roh\", \"roh\"],\n [\"Russian\", \"\\u0440\\u0443\\u0441\\u0441\\u043A\\u0438\\u0439\", \"ru\", \"rus\", \"rus\"],\n [\"Sindhi\", \"\\u0938\\u093F\\u0928\\u094D\\u0927\\u0940, \\u0633\\u0646\\u068C\\u064A\\u060C \\u0633\\u0646\\u062F\\u06BE\\u06CC\", \"sd\", \"snd\", \"snd\"],\n [\"Northern Sami\", \"Davvis\\xE1megiella\", \"se\", \"sme\", \"sme\"],\n [\"Samoan\", \"gagana fa'a Samoa\", \"sm\", \"smo\", \"smo\"],\n [\"Sango\", \"y\\xE2ng\\xE2 t\\xEE s\\xE4ng\\xF6\", \"sg\", \"sag\", \"sag\"],\n [\"Gaelic, Scottish Gaelic\", \"G\\xE0idhlig\", \"gd\", \"gla\", \"gla\"],\n [\"Shona\", \"chiShona\", \"sn\", \"sna\", \"sna\"],\n [\"Sinhala, Sinhalese\", \"\\u0DC3\\u0DD2\\u0D82\\u0DC4\\u0DBD\", \"si\", \"sin\", \"sin\"],\n [\"Slovak\", \"Sloven\\u010Dina, Slovensk\\xFD Jazyk\", \"sk\", \"slk\", \"slo\"],\n [\"Somali\", \"Soomaaliga, af Soomaali\", \"so\", \"som\", \"som\"],\n [\"Southern Sotho\", \"Sesotho\", \"st\", \"sot\", \"sot\"],\n [\"Spanish, Castilian\", \"Espa\\xF1ol\", \"es\", \"spa\", \"spa\"],\n [\"Sundanese\", \"Basa Sunda\", \"su\", \"sun\", \"sun\"],\n [\"Swedish\", \"Svenska\", \"sv\", \"swe\", \"swe\"],\n [\"Tamil\", \"\\u0BA4\\u0BAE\\u0BBF\\u0BB4\\u0BCD\", \"ta\", \"tam\", \"tam\"],\n [\"Telugu\", \"\\u0C24\\u0C46\\u0C32\\u0C41\\u0C17\\u0C41\", \"te\", \"tel\", \"tel\"],\n [\"Tajik\", \"\\u0442\\u043E\\u04B7\\u0438\\u043A\\u04E3, to\\xE7ik\\u012B, \\u062A\\u0627\\u062C\\u06CC\\u06A9\\u06CC\", \"tg\", \"tgk\", \"tgk\"],\n [\"Thai\", \"\\u0E44\\u0E17\\u0E22\", \"th\", \"tha\", \"tha\"],\n [\"Tigrinya\", \"\\u1275\\u130D\\u122D\\u129B\", \"ti\", \"tir\", \"tir\"],\n [\"Turkmen\", \"T\\xFCrkmen, \\u0422\\u04AF\\u0440\\u043A\\u043C\\u0435\\u043D\", \"tk\", \"tuk\", \"tuk\"],\n [\"Tswana\", \"Setswana\", \"tn\", \"tsn\", \"tsn\"],\n [\"Tongan (Tonga Islands)\", \"Faka Tonga\", \"to\", \"ton\", \"ton\"],\n [\"Turkish\", \"T\\xFCrk\\xE7e\", \"tr\", \"tur\", \"tur\"],\n [\"Tsonga\", \"Xitsonga\", \"ts\", \"tso\", \"tso\"],\n [\"Tatar\", \"\\u0442\\u0430\\u0442\\u0430\\u0440 \\u0442\\u0435\\u043B\\u0435, tatar tele\", \"tt\", \"tat\", \"tat\"],\n [\"Uighur, Uyghur\", \"\\u0626\\u06C7\\u064A\\u063A\\u06C7\\u0631\\u0686\\u06D5, Uyghurche\", \"ug\", \"uig\", \"uig\"],\n [\"Ukrainian\", \"\\u0423\\u043A\\u0440\\u0430\\u0457\\u043D\\u0441\\u044C\\u043A\\u0430\", \"uk\", \"ukr\", \"ukr\"],\n [\"Urdu\", \"\\u0627\\u0631\\u062F\\u0648\", \"ur\", \"urd\", \"urd\"],\n [\"Venda\", \"Tshiven\\u1E13a\", \"ve\", \"ven\", \"ven\"],\n [\"Vietnamese\", \"Ti\\u1EBFng Vi\\u1EC7t\", \"vi\", \"vie\", \"vie\"],\n [\"Walloon\", \"Walon\", \"wa\", \"wln\", \"wln\"],\n [\"Welsh\", \"Cymraeg\", \"cy\", \"cym\", \"wel\"],\n [\"Wolof\", \"Wollof\", \"wo\", \"wol\", \"wol\"],\n [\"Xhosa\", \"isiXhosa\", \"xh\", \"xho\", \"xho\"],\n [\"Yoruba\", \"Yor\\xF9b\\xE1\", \"yo\", \"yor\", \"yor\"],\n [\"Zulu\", \"isiZulu\", \"zu\", \"zul\", \"zul\"]\n];\n\n// src/index.ts\nvar codes = [];\nvar by639_1 = {};\nvar by639_2T = {};\nvar by639_2B = {};\ndata_default.forEach((row) => {\n var code = {\n name: row[0],\n nativeName: row[1],\n iso639_1: row[2],\n iso639_2T: row[3],\n iso639_2B: row[4]\n };\n by639_1[row[2]] = by639_2T[row[3]] = by639_2B[row[4]] = code;\n codes.push(code);\n});\nvar src_default = codes;\nexport {\n by639_1,\n by639_2B,\n by639_2T,\n codes,\n src_default as default\n};\n//# sourceMappingURL=index.mjs.map","// @ts-check\nimport langs from 'iso-language-codes';\n\n/**\n * Checks whether the current browser is on android\n * @param {string} [userAgent]\n * @return {boolean}\n */\nexport function isAndroid(userAgent = navigator.userAgent) {\n return /android/i.test(userAgent);\n}\n\n/** @type {{[lang: string]: string}} */\n// Handle odd one-off language pairs that might show up over time\nconst specialLangs = {\n \"zh-hans\": \"中文 (Zhōngwén)\",\n};\n\n/**\n * @typedef {string} ISO6391\n * Language code in ISO 639-1 format. e.g. en, fr, zh\n **/\n\n/**\n * @param {string} language in some format\n * @return {ISO6391?}\n */\nexport function toISO6391(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return language;\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj) return codeObj.iso639_1;\n return null;\n}\n\n/**\n *\n * @param {string} language\n * @returns {string | null}\n */\nexport function toNativeName(language) {\n if (!language) return null;\n language = language.toLocaleLowerCase();\n if (specialLangs[language]) {\n return specialLangs[language];\n }\n const codeObj = (\n findLanguage(language, ['iso639_1']) ||\n findLanguage(language, ['iso639_2T']) ||\n findLanguage(language, ['iso639_2B', 'name', 'nativeName'])\n );\n if (codeObj?.nativeName) return codeObj.nativeName.split(\", \")[0];\n return null;\n}\n\n/** @typedef {import('iso-language-codes').Code} Code */\n\n/**\n * @param {string} language\n * @param {Array<'iso639_1' | 'iso639_2T' | 'iso639_2B' | 'nativeName' | 'name'>} fields\n * @returns {Code | null}\n */\nfunction findLanguage(language, fields) {\n if (!language) return null;\n language = language.toLowerCase();\n for (const lang of langs) {\n for (const codeType of fields) {\n if (lang[codeType]?.toLowerCase().split(\", \").includes(language)) {\n return lang;\n }\n }\n }\n return null;\n}\n\n/**\n * Checks whether the current browser supports localStorage or\n * if the current context has access to it.\n * @return {boolean}\n */\nexport function hasLocalStorage() {\n try {\n return !!window.localStorage;\n } catch (e) {\n // Will throw in sandboxed iframe\n // DOMException: Window.localStorage getter: Forbidden in a sandboxed document without the 'allow-same-origin' flag.\n return false;\n }\n}\n\nexport const DEBUG_READ_ALOUD = location.toString().indexOf('_debugReadAloud=true') != -1;\n\nexport async function checkIfFiresPause() {\n // Pick some random text so that if it accidentally speaks, it's not too annoying\n const u = new SpeechSynthesisUtterance(\"Loading\");\n let calledPause = false;\n u.addEventListener('pause', () => calledPause = true);\n speechSynthesis.speak(u);\n await new Promise(res => setTimeout(res, 10));\n speechSynthesis.pause();\n return calledPause;\n}\n","/**\n * @template T\n */\nexport class Cache {\n constructor(maxSize = 10) {\n this.maxSize = maxSize;\n /** @type {T[]} */\n this.entries = [];\n }\n\n /**\n * @param {T} entry\n */\n add(entry) {\n if (this.entries.length >= this.maxSize) {\n this.entries.shift();\n }\n this.entries.push(entry);\n }\n}\n"],"names":["BookReaderPlugin","br","_classCallCheck","this","options","key","value","Object","assign","pageContainer","$toolbarElement","$navBar","_marked2","_regenerator","m","genMap","_marked3","lookAroundWindow","_marked4","zip","_toConsumableArray","r","Array","isArray","_arrayLikeToArray","_arrayWithoutHoles","Symbol","iterator","from","_iterableToArray","_unsupportedIterableToArray","TypeError","_nonIterableSpread","_createForOfIteratorHelper","e","t","length","_n","F","s","n","done","f","o","a","u","call","next","return","_slicedToArray","_arrayWithHoles","l","i","push","_iterableToArrayLimit","_nonIterableRest","toString","slice","constructor","name","test","toStringTag","c","prototype","Generator","create","_regeneratorDefine2","p","y","G","v","d","bind","GeneratorFunction","GeneratorFunctionPrototype","getPrototypeOf","setPrototypeOf","__proto__","displayName","w","defineProperty","_invoke","enumerable","configurable","writable","asyncGeneratorStep","Promise","resolve","then","_asyncToGenerator","arguments","apply","_next","_throw","_defineProperties","_toPropertyKey","_createClass","_isNativeReflectConstruct","Boolean","valueOf","Reflect","construct","_getPrototypeOf","_setPrototypeOf","_defineProperty","_typeof","toPrimitive","String","_toPrimitive","BookReader","window","TextSelectionPlugin","_BookReaderPlugin","_this","ReferenceError","_assertThisInitialized","_possibleConstructorReturn","enabled","fullDjvuXmlUrl","singlePageDjvuXmlUrl","jsonp","maxProtectedWords","Cache","rtl","pageProgression","textSelectionManager","TextSelectionManager","selectionElement","_inherits","_this2","on","_","_ref","pageContainerEl","textLayer","querySelector","trigger","loadData","init","targetTextFragment","BookReaderTextFragment","fromUrl","location","search","book","firstIndex","_ref3","_callee","_ref2","markEls","_context","pageIndex","parseFloat","getAttribute","renderHighlight","_jumpedToHighlight","scrollIntoView","behavior","block","_x","_x2","_pageContainer$page","mode","constModeThumb","page","isViewable","createTextLayer","djvuPagesPromise","$","ajax","type","url","applyVariables","vars","dataType","cache","xhrFields","withCredentials","protected","error","res","xmlMap","parseXML","find","_getPageText","_callee2","index","cachedEntry","xmlDoc","result","XMLpagesArr","_context2","pageTextCache","entries","x","response","add","undefined","_x3","_createTextLayer","_callee3","$container","XMLpage","totalWords","ratioW","ratioH","bookLangCode","ocrParagraphs","paragEls","paragraphRects","yAdded","_iterator","_step","_step$value","ocrParagraph","paragEl","ocrParagBounds","realRect","_ocrParagBounds","ocrLeft","ocrRight","ocrTop","newStartMargin","newTop","_this3","_context3","getPageText","filter","ele","_ele$getAttribute$spl2","split","map","left","top","console","remove","recursivelyAddCoords","maxWordRendered","log","concat","createDIVPageLayer","style","width","height","transform","toISO6391","bookLanguage","setAttribute","toArray","el","renderParagraph","appendChild","determineRealRects","attr","get","right","marginTop","document","createTextNode","err","append","stopPageFlip","hasClass","_x4","createElement","classList","ariaHidden","_$$attr$split$map2","paragLeft","paragBottom","paragRight","paragTop","wordHeightArr","lines","_step2","_iterator2","augmentLine","_step2$value","prevLine","line","nextLine","isLastLineOfParagraph","ocrElement","lineEl","_step5","_iterator5","words","_step5$value","wordIndex","currWord","_$$attr$split$map4","bottom","wordHeight","lastWord","textContent","trim","endsWith","newLeft","firstWord","wordEl","space","hasHyphen","lastWordEl","children","sort","b","paragWordHeight","Math","floor","fontSize","_step3","wordRects","_iterator3","querySelectorAll","_step3$value","ocrWord","_$$attr$split$map8","ocrWidth","diff","letterSpacing","_step4","spaceRects","ocrLines","lineEls","ySoFar","_iterator4","_step6","_step4$value","ocrLine","xSoFar","_iterator6","_step6$value","wordRect","_$$attr$split$map0","previousElementSibling","min","lineHeight","parentEl","selector","initals","position","visibility","body","rects","Map","origRect","getBoundingClientRect","Rect","scrollX","scrollY","removeChild","gen","fn","_iterator9","_step9","_t3","_context5","prev","cur","_iterator0","_step0","_t4","_context6","gen1","gen2","it1","it2","r1","r2","_context7","Error","xmlEl","_step10","_iterator10","_step11","childCoords","_iterator11","child","boundingCoords","bounds","_step1","leftMost","Infinity","bottomMost","rightMost","topMost","_iterator1","_step1$value","max","determineBounds","abs","join","registerPlugin","codes","by639_1","by639_2T","by639_2B","forEach","row","code","nativeName","iso639_1","iso639_2T","iso639_2B","src_default","isAndroid","userAgent","navigator","specialLangs","language","toLocaleLowerCase","codeObj","findLanguage","toNativeName","fields","toLowerCase","langs","lang","_lang$codeType","includes","hasLocalStorage","localStorage","DEBUG_READ_ALOUD","indexOf","maxSize","entry","shift"],"sourceRoot":""}