1 line
67 KiB
Plaintext
1 line
67 KiB
Plaintext
{"version":3,"file":"generator.mjs","sources":["../../src/regex.js","../../src/parse-citation.js","../../src/utils.js","../../src/html-transform-node.js","../../src/gen-citation.js","../../src/gen-biblio.js","../../src/gen-footnote.js","../../src/generator.js"],"sourcesContent":["// Regex adapted from https://github.com/Zettlr/Zettlr/blob/develop/source/common/util/extract-citations.ts\n\n/**\n * Citation detection: The first alternative matches \"full\" citations surrounded\n * by square brackets, whereas the second one matches in-text citations,\n * optionally with suffixes.\n *\n * * Group 1 matches regular \"full\" citations\n * * Group 2 matches in-text citations (not surrounded by brackets)\n * * Group 3 matches optional square-brackets suffixes to group 2 matches\n *\n * For more information, see https://pandoc.org/MANUAL.html#extension-citations\n *\n * @var {RegExp}\n */\nexport const citationRE =\n /(?:\\[([^[\\]]*@[^[\\]]+)\\])|(?<=\\s|^|(-))(?:@([\\p{L}\\d_][^\\s]*[\\p{L}\\d_]|\\{.+\\})(?:\\s+\\[(.*?)\\])?)/u\n\n/**\n * I hate everything at this. This can match every single possible variation on\n * whatever the f*** you can possibly do within square brackets according to the\n * documentation. I opted for named groups for these because otherwise I have no\n * idea what I have been doing here.\n *\n * * Group prefix: Contains the prefix, ends with a dash if we should suppress the author\n * * Group citekey: Contains the actual citekey, can be surrounded in curly brackets\n * * Group explicitLocator: Contains an explicit locator statement. If given, we MUST ignore any form of locator in the suffix\n * * Group explicitLocatorInSuffix: Same as above, but not concatenated to the citekey\n * * Group suffix: Contains the suffix, but may start with a locator (if explicitLocator and explicitLocatorInSuffix are not given)\n *\n * @var {RegExp}\n */\nexport const fullCitationRE =\n /(?<prefix>.+)?(?:@(?<citekey>[\\p{L}\\d_][^\\s{]*[\\p{L}\\d_]|\\{.+\\}))(?:\\{(?<explicitLocator>.*)\\})?(?:,\\s+(?:\\{(?<explicitLocatorInSuffix>.*)\\})?(?<suffix>.*))?/u\n\n/**\n * This regular expression matches locator ranges, like the following:\n *\n * * 23-45, and further (here it matches up to, not including the comma)\n * * 45\n * * 15423\n * * 14235-12532\n * * 12-34, 23, 56\n * * 12, 23-14, 23\n * * 12, 54, 12-23\n * * 1, 1-4\n * * 3\n * * NEW NEW NEW: Now also matches Roman numerals as sometimes used in forewords!\n *\n * @var {RegExp}\n */\nexport const locatorRE = /^(?:[\\d, -]*\\d|[ivxlcdm, -]*[ivxlcdm])/i\n","/**\n * @typedef {import('./types').CiteItem} CiteItem\n * @typedef {import('./types').CiteItemSuffix} CiteItemSuffix\n */\n\nimport { fullCitationRE, locatorRE } from './regex.js'\n\n/**\n * The locatorLabels have been sourced from the Citr library. Basically it's just\n * a map with valid CSL locator labels and an array of possible natural labels\n * which a user might want to write (instead of the standardized labels).\n *\n * @var {{ [key: string]: string[] }}}\n */\nconst locatorLabels = {\n book: ['Buch', 'Bücher', 'B.', 'book', 'books', 'bk.', 'bks.', 'livre', 'livres', 'liv.'],\n chapter: ['Kapitel', 'Kap.', 'chapter', 'chapters', 'chap.', 'chaps', 'chapitre', 'chapitres'],\n column: ['Spalte', 'Spalten', 'Sp.', 'column', 'columns', 'col.', 'cols', 'colonne', 'colonnes'],\n figure: ['Abbildung', 'Abbildungen', 'Abb.', 'figure', 'figures', 'fig.', 'figs'],\n folio: ['Blatt', 'Blätter', 'Fol.', 'folio', 'folios', 'fol.', 'fols', 'fᵒ', 'fᵒˢ'],\n issue: [\n 'Nummer',\n 'Nummern',\n 'Nr.',\n 'number',\n 'numbers',\n 'no.',\n 'nos.',\n 'numéro',\n 'numéros',\n 'nᵒ',\n 'nᵒˢ',\n ],\n line: ['Zeile', 'Zeilen', 'Z', 'line', 'lines', 'l.', 'll.', 'ligne', 'lignes'],\n note: ['Note', 'Noten', 'N.', 'note', 'notes', 'n.', 'nn.'],\n opus: ['Opus', 'Opera', 'op.', 'opus', 'opera', 'opp.'],\n page: ['Seite', 'Seiten', 'S.', 'page', 'pages', 'p.', 'pp.'],\n paragraph: [\n 'Absatz',\n 'Absätze',\n 'Abs.',\n '¶',\n '¶¶',\n 'paragraph',\n 'paragraphs',\n 'para.',\n 'paras',\n 'paragraphe',\n 'paragraphes',\n 'paragr.',\n ],\n part: ['Teil', 'Teile', 'part', 'parts', 'pt.', 'pts', 'partie', 'parties', 'part.'],\n section: [\n 'Abschnitt',\n 'Abschnitte',\n 'Abschn.',\n '§',\n '§§',\n 'section',\n 'sections',\n 'sec.',\n 'secs',\n 'sect.',\n ],\n 'sub verbo': ['sub verbo', 'sub verbis', 's. v.', 's. vv.', 's.v.', 's.vv.'],\n verse: ['Vers', 'Verse', 'V.', 'verse', 'verses', 'v.', 'vv.', 'verset', 'versets'],\n volume: ['Band', 'Bände', 'Bd.', 'Bde.', 'volume', 'volumes', 'vol.', 'vols.'],\n}\n\n/**\n * Parses a given citation string and return entries and isComposite flag required for cite-proc.\n * Adapted from https://github.com/Zettlr/Zettlr/blob/develop/source/common/util/extract-citations.ts\n *\n * @param {RegExpMatchArray} regexMatch Cite string in the form of '[@item]' or '@item'\n * @return {[CiteItem[], boolean]} [entries, isComposite]\n */\nexport const parseCitation = (regexMatch) => {\n /** @type {CiteItem[]} */\n let entries = []\n let isComposite = false\n const fullCitation = regexMatch[1]\n const inTextSuppressAuthor = regexMatch[2]\n const inTextCitation = regexMatch[3]\n const optionalSuffix = regexMatch[4]\n\n if (fullCitation !== undefined) {\n // Handle citations in the form of [@item1; @item2]\n for (const citationPart of fullCitation.split(';')) {\n const match = fullCitationRE.exec(citationPart.trim())\n if (match === null) {\n continue // Faulty citation\n }\n // Prefix is the portion before @ e.g. [see @item1] or an empty string\n // We explicitly cast groups since we have groups in our RegExp and as\n // such the groups object will be set.\n /** @type {CiteItem} */\n const thisCitation = {\n id: match.groups.citekey.replace(/{(.+)}/, '$1'),\n prefix: undefined,\n locator: undefined,\n label: 'page',\n 'suppress-author': false,\n suffix: undefined,\n }\n\n // First, deal with the prefix. The speciality here is that it can\n // indicate if we should suppress the author.\n const rawPrefix = match.groups.prefix\n if (rawPrefix !== undefined) {\n thisCitation['suppress-author'] = rawPrefix.trim().endsWith('-')\n if (thisCitation['suppress-author']) {\n thisCitation.prefix = rawPrefix.substring(0, rawPrefix.trim().length - 1).trim()\n } else {\n thisCitation.prefix = rawPrefix.trim()\n }\n }\n\n // Second, deal with the suffix. This one can be much more tricky than\n // the prefix. We have three alternatives where the locator may be\n // present: If we have an explicitLocator or an explicitLocatorInSuffix,\n // we should extract the locator from there and leave the actual suffix\n // untouched. Only if those two alternatives are not present, then we\n // have a look at the rawSuffix and extract a (potential) locator.\n const explicitLocator = match.groups.explicitLocator\n const explicitLocatorInSuffix = match.groups.explicitLocatorInSuffix\n const rawSuffix = match.groups.suffix\n\n let suffixToParse\n let containsLocator = true\n if (explicitLocator === undefined && explicitLocatorInSuffix === undefined) {\n // Potential locator in rawSuffix. Only in this case should we overwrite\n // the suffix (hence the same if-condition below)\n suffixToParse = rawSuffix\n containsLocator = false\n } else if (explicitLocatorInSuffix !== undefined || explicitLocator !== undefined) {\n suffixToParse = explicitLocator !== undefined ? explicitLocator : explicitLocatorInSuffix\n thisCitation.suffix = rawSuffix?.trim()\n }\n\n const { label, locator, suffix } = parseSuffix(suffixToParse, containsLocator)\n thisCitation.locator = locator\n\n if (label !== undefined) {\n thisCitation.label = label\n }\n\n if (explicitLocator === undefined && explicitLocatorInSuffix === undefined) {\n thisCitation.suffix = suffix\n } else if (suffix !== undefined && thisCitation.locator !== undefined) {\n // If we're here, we should not change the suffix, but parseSuffix may\n // have put something into the suffix return. If we're here, that will\n // definitely be a part of the locator.\n thisCitation.locator += suffix\n }\n\n entries.push(thisCitation)\n }\n } else {\n // We have an in-text citation, so we can take a shortcut\n isComposite = true\n entries.push({\n prefix: undefined,\n id: inTextCitation.replace(/{(.+)}/, '$1'),\n 'suppress-author': inTextSuppressAuthor !== undefined,\n ...parseSuffix(optionalSuffix, false), // Populate more depending on the suffix\n })\n }\n return [entries, isComposite]\n}\n\n/**\n * This takes a suffix and extracts optional label and locator from this. Pass\n * true for the containsLocator property to indicate to this function that what\n * it got was not a regular suffix with an optional locator, but an explicit\n * locator so it knows it just needs to look for an optional label.\n *\n * @param {string} suffix The suffix to parse\n * @param {boolean} containsLocator If true, forces parseSuffix to return a locator\n *\n * @return {CiteItemSuffix} An object containing three optional properties locator, label, or suffix.\n */\nfunction parseSuffix(suffix, containsLocator) {\n /** @type {CiteItemSuffix} */\n const retValue = {\n locator: undefined,\n label: 'page',\n suffix: undefined,\n }\n\n if (suffix === undefined) {\n return retValue\n }\n\n // Make sure the suffix does not start or end with spaces\n suffix = suffix.trim()\n\n // If there is a label, the suffix must start with it\n for (const label in locatorLabels) {\n for (const natural of locatorLabels[label]) {\n if (suffix.toLowerCase().startsWith(natural.toLowerCase())) {\n retValue.label = label\n if (containsLocator) {\n // The suffix actually is the full locator, we just had to extract\n // the label from it. There is no remaining suffix.\n retValue.locator = suffix.substr(natural.length).trim()\n } else {\n // The caller indicated that this is a regular suffix, so we must also\n // extract the locator from what is left after label extraction.\n retValue.suffix = suffix.substr(natural.length).trim()\n const match = locatorRE.exec(retValue.suffix)\n if (match !== null) {\n retValue.locator = match[0] // Extract the full match\n retValue.suffix = retValue.suffix.substr(match[0].length).trim()\n }\n }\n\n return retValue // Early exit\n }\n }\n }\n\n // If we're here, there was no explicit label given, but the caller has indicated\n // that this suffix MUST contain a locator. This means that the whole suffix is\n // the locator.\n if (containsLocator) {\n retValue.locator = suffix\n } else {\n // The caller has not indicated that the whole suffix is the locator, so it\n // can be at the beginning. We only accept simple page/number ranges here.\n // For everything, the user should please be more specific.\n const match = locatorRE.exec(suffix)\n if (match !== null) {\n retValue.locator = match[0] // Full match is the locator\n retValue.suffix = suffix.substr(match[0].length).trim() // The rest is the suffix.\n }\n }\n\n return retValue\n}\n","import fetch from 'cross-fetch'\n\nexport const isNode = typeof window === 'undefined'\n\nexport const readFile = async (path) => {\n if (isValidHttpUrl(path)) {\n return fetch(path)\n .then((response) => response.text())\n .then((data) => data)\n } else {\n if (isNode) {\n return import('fs').then((fs) => fs.readFileSync(path, 'utf8'))\n } else {\n throw new Error(`Cannot read non valid URL in node env.`)\n }\n }\n}\n\n/**\n * Check if valid URL\n * https://stackoverflow.com/questions/5717093/check-if-a-javascript-string-is-a-url\n *\n * @param {string} str\n * @return {boolean}\n */\nexport const isValidHttpUrl = (str) => {\n let url\n\n try {\n url = new URL(str)\n } catch (_) {\n return false\n }\n\n return url.protocol === 'http:' || url.protocol === 'https:'\n}\n\n/**\n * Get bibliography by merging options and vfile data\n *\n * @param {import('./generator.js').Options} options\n * @param {import('vfile').VFile} file\n */\nexport const getBibliography = async (options, file) => {\n /** @type {string[]} */\n let bibliography = []\n if (options.bibliography) {\n bibliography =\n typeof options.bibliography === 'string' ? [options.bibliography] : options.bibliography\n // @ts-ignore\n } else if (file?.data?.frontmatter?.bibliography) {\n // @ts-ignore\n bibliography =\n typeof file.data.frontmatter.bibliography === 'string'\n ? [file.data.frontmatter.bibliography]\n : file.data.frontmatter.bibliography\n // If local path, get absolute path\n for (let i = 0; i < bibliography.length; i++) {\n if (!isValidHttpUrl(bibliography[i])) {\n if (isNode) {\n bibliography[i] = await import('path').then((path) =>\n path.join(options.path || file.cwd, bibliography[i])\n )\n } else {\n throw new Error(`Cannot read non valid bibliography URL in node env.`)\n }\n }\n }\n }\n\n return bibliography\n}\n\n/**\n * Load CSL - supports predefined name from config.templates.data or http, file path (nodejs)\n *\n * @param {*} Cite cite object from citation-js\n * @param {string} format CSL name e.g. apa or file path to CSL file\n * @param {string} root optional root path\n */\nexport const loadCSL = async (Cite, format, root = '') => {\n const config = Cite.plugins.config.get('@csl')\n if (!Object.keys(config.templates.data).includes(format)) {\n const cslName = `customCSL-${Math.random().toString(36).slice(2, 7)}`\n let cslPath = ''\n if (isValidHttpUrl(format)) cslPath = format\n else {\n if (isNode) cslPath = await import('path').then((path) => path.join(root, format))\n }\n try {\n config.templates.add(cslName, await readFile(cslPath))\n } catch (err) {\n throw new Error(`Input CSL option, ${format}, is invalid or is an unknown file.`)\n }\n return cslName\n } else {\n return format\n }\n}\n\n/**\n * Load locale - supports predefined name from config.locales.data or http, file path (nodejs)\n *\n * @param {*} Cite cite object from citation-js\n * @param {string} format locale name\n * @param {string} root optional root path\n */\nexport const loadLocale = async (Cite, format, root = '') => {\n const config = Cite.plugins.config.get('@csl')\n if (!Object.keys(config.locales.data).includes(format)) {\n let localePath = ''\n if (isValidHttpUrl(format)) localePath = format\n else {\n if (isNode) localePath = await import('path').then((path) => path.join(root, format))\n }\n try {\n const file = await readFile(localePath)\n const xmlLangRe = /xml:lang=\"(.+)\"/\n const localeName = file.match(xmlLangRe)[1]\n config.locales.add(localeName, file)\n return localeName\n } catch (err) {\n throw new Error(`Input locale option, ${format}, is invalid or is an unknown file.`)\n }\n } else {\n return format\n }\n}\n\n/**\n * Get citation format\n *\n * @param {*} citeproc citeproc\n * @returns string\n */\nexport const getCitationFormat = (citeproc) => {\n const info = citeproc.cslXml.dataObj.children[0]\n const node = info.children.find((x) => x['attrs'] && x['attrs']['citation-format'])\n // citation-format takes 5 possible values\n // https://docs.citationstyles.org/en/stable/specification.html#toc-entry-14\n /** @type {'author-date' | 'author' | 'numeric' | 'note' | 'label'} */\n const citationFormat = node['attrs']['citation-format']\n return citationFormat\n}\n\n/**\n * Get registry objects that matches a list of relevantIds\n * If sorted is false, retrieve registry item in the order of the given relevantIds\n *\n * @param {*} citeproc citeproc\n * @param {string[]} relevantIds\n * @param {boolean} sorted\n * @return {*} registry objects that matches Ids, in the correct order\n */\nexport const getSortedRelevantRegistryItems = (citeproc, relevantIds, sorted) => {\n const res = []\n if (sorted) {\n // If sorted follow registry order\n for (const item of citeproc.registry.reflist) {\n if (relevantIds.includes(item.id)) res.push(item)\n }\n } else {\n // Otherwise follow the relevantIds\n for (const id of relevantIds) {\n res.push(citeproc.registry.reflist.find((x) => x.id === id))\n }\n }\n return res\n}\n\n/**\n * Split a string into two parts based on a given index position\n *\n * @param {string} str\n * @param {number} index\n * @return {string[]}\n */\nexport const split = (str, index) => {\n return [str.slice(0, index), str.slice(index)]\n}\n\n/**\n * Check if two registry objects belong to the same author\n * Currently only checks on family name\n *\n * @param {*} item registry object\n * @param {*} item2 registry object\n * @return {boolean}\n */\nexport const isSameAuthor = (item, item2) => {\n const authorList = item.ref.author\n const authorList2 = item2.ref.author\n if (authorList.length !== authorList2.length) return false\n for (let i = 0; i < authorList.length; i++) {\n if (authorList[i].family !== authorList2[i].family) return false\n }\n return true\n}\n","import { parseFragment } from 'parse5'\nimport { fromParse5 } from 'hast-util-from-parse5'\n\n/**\n * Convert HTML to HAST node\n *\n * @param {string} html\n */\nexport const htmlToHast = (html) => {\n const p5ast = parseFragment(html)\n // @ts-ignore\n return fromParse5(p5ast).children[0]\n}\n","/**\n * @typedef {import('./types').CiteItem} CiteItem\n * @typedef {import('./types').Mode} Mode\n * @typedef {import('./types').Options} Options\n */\n\nimport { getSortedRelevantRegistryItems, split, isSameAuthor } from './utils.js'\nimport { htmlToHast } from './html-transform-node.js'\n\n/**\n * Generate citation using citeproc\n * This accounts for prev citations and additional properties\n *\n * @param {*} citeproc\n * @param {Mode} mode\n * @param {CiteItem[]} entries\n * @param {string} citationIdRoot\n * @param {number} citationId\n * @param {any[]} citationPre\n * @param {Options} options\n * @param {boolean} isComposite\n * @param {import('./types').CitationFormat} citationFormat\n * @return {[string, string]}\n */\nexport const genCitation = (\n citeproc,\n mode,\n entries,\n citationIdRoot,\n citationId,\n citationPre,\n options,\n isComposite,\n citationFormat\n) => {\n const { inlineClass, linkCitations } = options\n const key = `${citationIdRoot}-${citationId}`\n const c = citeproc.processCitationCluster(\n {\n citationID: key,\n citationItems: entries,\n properties:\n mode === 'in-text'\n ? { noteIndex: 0, mode: isComposite ? 'composite' : '' }\n : { noteIndex: citationId, mode: isComposite ? 'composite' : '' },\n },\n citationPre.length > 0 ? citationPre : [],\n []\n )\n // c = [ { bibchange: true, citation_errors: [] }, [ [ 0, '(1)', 'CITATION-1' ] ]]\n\n const citationText = c[1].find((x) => x[2] === key)[1]\n const ids = `citation--${entries.map((x) => x.id.toLowerCase()).join('--')}--${citationId}`\n if (mode === 'note') {\n // Use cite-fn-{id} to denote footnote from citation, will clean it up later to follow gfm \"user-content\" format\n return [\n citationText,\n htmlToHast(\n `<span class=\"${(inlineClass ?? []).join(\n ' '\n )}\" id=${ids}><sup><a href=\"#cite-fn-${citationId}\" id=\"cite-fnref-${citationId}\" data-footnote-ref aria-describedby=\"footnote-label\">${citationId}</a></sup></span>`\n ),\n ]\n } else if (linkCitations && citationFormat === 'numeric') {\n // e.g. [1, 2]\n let i = 0\n const refIds = entries.map((e) => e.id)\n const output = citationText.replace(/\\d+/g, function (d) {\n const url = `<a href=\"#bib-${refIds[i].toLowerCase()}\">${d}</a>`\n i++\n return url\n })\n\n return [\n citationText,\n htmlToHast(`<span class=\"${(inlineClass ?? []).join(' ')}\" id=${ids}>${output}</span>`),\n ]\n } else if (linkCitations && citationFormat === 'author-date') {\n // E.g. (see Nash, 1950, pp. 12–13, 1951); (Nash, 1950; Xie, 2016)\n if (entries.length === 1) {\n // Do not link bracket\n const output = isComposite\n ? `<a href=\"#bib-${entries[0].id.toLowerCase()}\">${citationText}</a>`\n : `${citationText.slice(\n 0,\n 1\n )}<a href=\"#bib-${entries[0].id.toLowerCase()}\">${citationText.slice(\n 1,\n -1\n )}</a>${citationText.slice(-1)}`\n return [\n citationText,\n htmlToHast(`<span class=\"${(inlineClass ?? []).join(' ')}\" id=${ids}>${output}</span>`),\n ]\n } else {\n // Retrieve the items in the correct order and attach link each of them\n const refIds = entries.map((e) => e.id)\n const results = getSortedRelevantRegistryItems(citeproc, refIds, citeproc.opt.sort_citations)\n const output = []\n let str = citationText\n\n for (const [i, item] of results.entries()) {\n // Need to compare author. If same just match on date.\n const id = item.id\n let citeMatch = item.ambig\n // If author is the same as the previous, some styles like apa collapse the author\n if (i > 0 && isSameAuthor(results[i - 1], item) && str.indexOf(citeMatch) === -1) {\n // Just match on year\n citeMatch = item.ref.issued.year.toString()\n }\n const startPos = str.indexOf(citeMatch)\n const [start, rest] = split(str, startPos)\n output.push(start) // Irrelevant parts\n const url = `<a href=\"#bib-${id.toLowerCase()}\">${rest.substring(0, citeMatch.length)}</a>`\n output.push(url)\n str = rest.substr(citeMatch.length)\n }\n output.push(str)\n return [\n citationText,\n htmlToHast(\n `<span class=\"${(inlineClass ?? []).join(' ')}\" id=${ids}>${output.join('')}</span>`\n ),\n ]\n }\n } else {\n return [\n citationText,\n htmlToHast(`<span class=\"${(inlineClass ?? []).join(' ')}\" id=${ids}>${citationText}</span>`),\n ]\n }\n}\n","import { htmlToHast } from './html-transform-node.js'\n\n/**\n * Generate bibliography in html and convert it to hast\n *\n * @param {*} citeproc\n */\nexport const genBiblioNode = (citeproc) => {\n const [params, bibBody] = citeproc.makeBibliography()\n const bibliography =\n '<div id=\"refs\" class=\"references csl-bib-body\">\\n' + bibBody.join('') + '</div>'\n const biblioNode = htmlToHast(bibliography)\n\n // Add citekey id to each bibliography entry.\n biblioNode.children\n .filter((node) => node.properties?.className?.includes('csl-entry'))\n .forEach((node, i) => {\n const citekey = params.entry_ids[i][0].toLowerCase()\n node.properties = node.properties || {}\n node.properties.id = 'bib-' + citekey\n })\n return biblioNode\n}\n","/**\n * @typedef {import('hast').Element} Element\n * @typedef {import('hast').ElementContent} ElementContent\n */\n\nimport { htmlToHast } from './html-transform-node.js'\n\n/**\n * Create new footnote section node based on footnoteArray mappings\n *\n * @param {{int: string}} citationDict\n * @param {{type: 'citation' | 'existing', oldId: string}[]} footnoteArray\n * @param {Element | undefined} footnoteSection\n * @return {Element}\n */\nexport const genFootnoteSection = (citationDict, footnoteArray, footnoteSection) => {\n /** @type {Element} */\n const list = {\n type: 'element',\n tagName: 'ol',\n properties: {},\n children: [{ type: 'text', value: '\\n' }],\n }\n let oldFootnoteList\n if (footnoteSection) {\n /** @type {Element} */ // @ts-ignore - for some reason, the type does not narrow even after filtering\n oldFootnoteList = footnoteSection.children.filter(n => (n.type == \"element\")).find((n) => (n.tagName === 'ol'))\n }\n for (const [idx, item] of footnoteArray.entries()) {\n const { type, oldId } = item\n if (type === 'citation') {\n list.children.push({\n type: 'element',\n tagName: 'li',\n properties: { id: `user-content-fn-${idx + 1}` },\n children: [\n {\n type: 'element',\n tagName: 'p',\n properties: {},\n children: [\n htmlToHast(`<span>${citationDict[oldId]}</span>`),\n {\n type: 'element',\n tagName: 'a',\n properties: {\n href: `#user-content-fnref-${idx + 1}`,\n dataFootnoteBackref: true,\n className: ['data-footnote-backref'],\n ariaLabel: 'Back to content',\n },\n children: [{ type: 'text', value: '↩' }],\n },\n ],\n },\n { type: 'text', value: '\\n' },\n ],\n })\n } else if (type === 'existing') {\n // @ts-ignore\n const liNode = oldFootnoteList.children.find(\n (n) => n.tagName === 'li' && n.properties.id === `user-content-fn-${oldId}`\n )\n liNode.properties.id = `user-content-fn-${idx + 1}`\n const aNode = liNode.children[1].children.find((n) => n.tagName === 'a')\n aNode.properties.href = `#user-content-fnref-${idx + 1}`\n list.children.push(liNode)\n }\n }\n\n /** @type {Element} */\n const newfootnoteSection = {\n type: 'element',\n tagName: 'section',\n properties: { dataFootnotes: true, className: ['footnotes'] },\n children: [\n {\n type: 'element',\n tagName: 'h2',\n properties: { className: ['sr-only'], id: 'footnote-label' },\n children: [{ type: 'text', value: 'Footnotes' }],\n },\n { type: 'text', value: '\\n' },\n list,\n ],\n }\n return newfootnoteSection\n}\n","/**\n * @typedef {import('hast').Node} Node\n * @typedef {import('hast').Parent} Parent\n * @typedef {import('hast').Root} Root\n * @typedef {import('hast').Element} Element\n * @typedef {import('unist-util-visit').Visitor<Node>} Visitor\n * @typedef {import('./types').CiteItem} CiteItem\n * @typedef {import('./types').Mode} Mode\n * @typedef {import('./types').Options} Options\n */\n\nimport { visit } from 'unist-util-visit'\nimport fetch from 'cross-fetch'\nimport { parseCitation } from './parse-citation.js'\nimport { genCitation } from './gen-citation.js'\nimport { genBiblioNode } from './gen-biblio.js'\nimport { genFootnoteSection } from './gen-footnote.js'\nimport { citationRE } from './regex.js'\nimport {\n isNode,\n isValidHttpUrl,\n readFile,\n getBibliography,\n loadCSL,\n loadLocale,\n getCitationFormat,\n} from './utils.js'\n\nconst defaultCiteFormat = 'apa'\nconst permittedTags = ['div', 'p', 'span', 'li', 'td', 'th']\nconst idRoot = 'CITATION'\n\n/**\n * Rehype plugin that formats citations in markdown documents and insert bibliography in html format\n *\n * [-@wadler1990] --> (1990)\n * [@hughes1989, sec 3.4] --> (Hughes 1989, sec 3.4)\n * [see @wadler1990; and @hughes1989, pp. 4] --> (see Wadler 1990 and Hughes 1989, pp. 4)\n *\n * @param {*} Cite cite object from citation-js configured with the required CSLs\n * @return {import('unified').Plugin<[Options?], Root>}\n */\nconst rehypeCitationGenerator = (Cite) => {\n return (options = {}) => {\n return async (tree, file) => {\n /** @type {string[]} */\n let bibtexFile = []\n /** @type {string} */ // @ts-ignore\n const inputCiteformat = options.csl || file?.data?.frontmatter?.csl || defaultCiteFormat\n const inputLang = options.lang || 'en-US'\n const config = Cite.plugins.config.get('@csl')\n const citeFormat = await loadCSL(Cite, inputCiteformat, options.path)\n const lang = await loadLocale(Cite, inputLang, options.path)\n\n let bibliography = await getBibliography(options, file)\n if (bibliography.length === 0) {\n return\n }\n\n for (let i = 0; i < bibliography.length; i++) {\n if (isValidHttpUrl(bibliography[i])) {\n const response = await fetch(bibliography[i])\n bibtexFile.push(await response.text())\n } else {\n if (isNode) {\n bibtexFile.push(await readFile(bibliography[i]))\n } else {\n throw new Error(`Cannot read non valid bibliography URL in node env.`)\n }\n }\n }\n const citations = new Cite(bibtexFile)\n const citationIds = citations.data.map((x) => x.id)\n const citationPre = []\n const citationDict = {}\n let citationId = 1\n const citeproc = config.engine(citations.data, citeFormat, lang, 'html')\n /** @type {Mode} */\n const mode = citeproc.opt.xclass\n const citationFormat = getCitationFormat(citeproc)\n\n visit(tree, 'text', (node, idx, parent) => {\n const match = node.value.match(citationRE)\n if (!match || ('tagName' in parent && !permittedTags.includes(parent.tagName))) return\n let citeStartIdx = match.index\n let citeEndIdx = match.index + match[0].length\n // If we have an in-text citation and we should suppress the author, the\n // match.index does NOT include the positive lookbehind, so we have to manually\n // shift \"from\" to one before.\n if (match[2] !== undefined) {\n citeStartIdx--\n }\n const newChildren = []\n // if preceding string\n if (citeStartIdx !== 0) {\n // create a new child node\n newChildren.push({\n type: 'text',\n value: node.value.slice(0, citeStartIdx),\n })\n }\n\n const [entries, isComposite] = parseCitation(match)\n\n // If id is not in citation file (e.g. route alias or js package), abort process\n for (const citeItem of entries) {\n if (!citationIds.includes(citeItem.id)) return\n }\n const [citedText, citedTextNode] = genCitation(\n citeproc,\n mode,\n entries,\n idRoot,\n citationId,\n citationPre,\n options,\n isComposite,\n citationFormat\n )\n citationDict[citationId] = citedText\n\n // Prepare citationPre and citationId for the next cite instance\n citationPre.push([`${idRoot}-${citationId}`, 0])\n citationId = citationId + 1\n\n newChildren.push(citedTextNode)\n\n // if trailing string\n if (citeEndIdx < node.value.length) {\n newChildren.push({\n type: 'text',\n value: node.value.slice(citeEndIdx),\n })\n }\n\n // insert into the parent\n // @ts-ignore\n parent.children = [\n ...parent.children.slice(0, idx),\n ...newChildren,\n ...parent.children.slice(idx + 1),\n ]\n })\n\n if (options.noCite) {\n citeproc.updateItems(options.noCite.map((x) => x.replace('@', '')))\n }\n\n if (\n citeproc.registry.mylist.length >= 1 &&\n (!options.suppressBibliography || options.inlineBibClass?.length > 0)\n ) {\n const biblioNode = genBiblioNode(citeproc)\n let bilioInserted = false\n\n const biblioMap = {}\n biblioNode.children\n .filter((node) => node.properties?.className?.includes('csl-entry'))\n .forEach((node) => {\n const citekey = node.properties.id.split('-').slice(1).join('-')\n biblioMap[citekey] = { ...node }\n biblioMap[citekey].properties = { id: 'inlinebib-' + citekey }\n })\n\n // Insert it at ^ref, if not found insert it as the last element of the tree\n visit(tree, 'element', (node, idx, parent) => {\n // Add inline bibliography\n if (\n options.inlineBibClass?.length > 0 &&\n node.properties?.id?.toString().startsWith('citation-')\n ) {\n // id is citation--nash1951--nash1950--1\n const [, ...citekeys] = node.properties.id.toString().split('--')\n const citationID = citekeys.pop()\n\n /** @type {Element} */\n const inlineBibNode = {\n type: 'element',\n tagName: 'div',\n properties: {\n className: options.inlineBibClass,\n id: `inlineBib--${citekeys.join('--')}--${citationID}`,\n },\n children: citekeys.map((citekey) => {\n const aBibNode = biblioMap[citekey]\n aBibNode.properties = {\n class: 'inline-entry',\n id: `inline--${citekey}--${citationID}`,\n }\n return aBibNode\n }),\n }\n parent.children.push(inlineBibNode)\n }\n\n // Add bibliography\n if (\n !options.suppressBibliography &&\n (node.tagName === 'p' || node.tagName === 'div') &&\n node.children.length >= 1 &&\n node.children[0].type === 'text' &&\n node.children[0].value === '[^ref]'\n ) {\n parent.children[idx] = biblioNode\n bilioInserted = true\n }\n })\n\n if (!options.suppressBibliography && !bilioInserted) {\n tree.children.push(biblioNode)\n }\n }\n\n let footnoteSection\n visit(tree, 'element', (node, index, parent) => {\n if (node.tagName === 'section' && node.properties.dataFootnotes) {\n footnoteSection = node\n parent.children.splice(index, 1)\n }\n })\n\n // Need to adjust footnote numbering based on existing ones already assigned\n // And insert them into the footnote section (if exists)\n // Footnote comes after bibliography\n if (mode === 'note' && Object.keys(citationDict).length > 0) {\n /** @type {{type: 'citation' | 'existing', oldId: string}[]} */\n let fnArray = []\n let index = 1\n visit(tree, 'element', (node) => {\n if (node.tagName === 'sup' && node.children[0].type === 'element') {\n let nextNode = node.children[0]\n if (nextNode.tagName === 'a') {\n /** @type {{href: string, id: string}} */ // @ts-ignore\n const { href, id } = nextNode.properties\n if (href.includes('fn') && id.includes('fnref')) {\n const oldId = href.split('-').pop()\n fnArray.push({\n type: href.includes('cite') ? 'citation' : 'existing',\n oldId,\n })\n // Update ref number\n nextNode.properties.href = `#user-content-fn-${index}`\n nextNode.properties.id = `user-content-fnref-${index}`\n // @ts-ignore\n nextNode.children[0].value = index.toString()\n index += 1\n }\n }\n }\n })\n // @ts-ignore\n const newFootnoteSection = genFootnoteSection(citationDict, fnArray, footnoteSection)\n tree.children.push(newFootnoteSection)\n } else {\n if (footnoteSection) tree.children.push(footnoteSection)\n }\n }\n }\n}\n\nexport default rehypeCitationGenerator\n"],"names":["citationRE","fullCitationRE","_wrapRegExp","prefix","citekey","explicitLocator","explicitLocatorInSuffix","suffix","locatorRE","locatorLabels","book","chapter","column","figure","folio","issue","line","note","opus","page","paragraph","part","section","verse","volume","parseCitation","regexMatch","entries","isComposite","fullCitation","inTextSuppressAuthor","inTextCitation","optionalSuffix","undefined","citationPart","split","match","exec","trim","thisCitation","id","groups","replace","locator","label","rawPrefix","endsWith","substring","length","rawSuffix","suffixToParse","containsLocator","parseSuffix","push","_extends","retValue","natural","toLowerCase","startsWith","substr","readFile","path","isValidHttpUrl","fetch","then","response","text","data","fs","readFileSync","str","url","URL","_","protocol","getBibliography","options","file","_file$data","bibliography","frontmatter","i","join","cwd","loadCSL","Cite","format","root","config","plugins","get","Object","keys","templates","includes","cslName","Math","random","toString","slice","cslPath","add","err","Error","loadLocale","locales","localePath","xmlLangRe","localeName","getCitationFormat","citeproc","info","cslXml","dataObj","children","node","find","x","citationFormat","getSortedRelevantRegistryItems","relevantIds","sorted","res","item","registry","reflist","index","isSameAuthor","item2","authorList","ref","author","authorList2","family","htmlToHast","html","p5ast","parseFragment","fromParse5","genCitation","mode","citationIdRoot","citationId","citationPre","inlineClass","linkCitations","key","c","processCitationCluster","citationID","citationItems","properties","noteIndex","citationText","ids","map","refIds","e","output","d","results","opt","sort_citations","citeMatch","ambig","indexOf","issued","year","startPos","start","rest","genBiblioNode","params","bibBody","makeBibliography","biblioNode","filter","_node$properties","className","forEach","entry_ids","genFootnoteSection","citationDict","footnoteArray","footnoteSection","list","type","tagName","value","oldFootnoteList","n","idx","oldId","href","dataFootnoteBackref","ariaLabel","liNode","aNode","newfootnoteSection","dataFootnotes","defaultCiteFormat","permittedTags","idRoot","rehypeCitationGenerator","tree","_options$inlineBibCla","bibtexFile","inputCiteformat","csl","inputLang","lang","citeFormat","citations","citationIds","engine","xclass","visit","parent","citeStartIdx","citeEndIdx","newChildren","citeItem","citedText","citedTextNode","noCite","updateItems","mylist","suppressBibliography","inlineBibClass","bilioInserted","biblioMap","_options$inlineBibCla2","_node$properties2","citekeys","pop","inlineBibNode","aBibNode","class","splice","fnArray","nextNode","newFootnoteSection"],"mappings":"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"} |