* npm start should be ja * Add special handling for glossary headings * Don't sort glossary * Use English slug to maintain anchor, re-add sort
38 lines
1.5 KiB
JavaScript
38 lines
1.5 KiB
JavaScript
// capture h2, h3, and h4 headings
|
|
const headingRegex = /^###?#? (.*?)$/gm
|
|
|
|
// for any translated page, first get corresponding English markdown
|
|
// then get the headings on both the translated and English pageMap
|
|
// finally, create a map of translation:English for all headings on the page
|
|
module.exports = function getEnglishHeadings (page, context) {
|
|
// Special handling for glossaries, because their headings are
|
|
// generated programatically.
|
|
if (page.relativePath.endsWith('/github-glossary.md')) {
|
|
// Return an object of `{ localized-term: english-slug }`
|
|
const languageGlossary = context.site.data.glossaries.external
|
|
return languageGlossary.reduce((prev, curr) => {
|
|
prev[curr.term] = curr.slug
|
|
return prev
|
|
}, {})
|
|
}
|
|
|
|
const translatedHeadings = page.markdown.match(headingRegex)
|
|
if (!translatedHeadings) return
|
|
|
|
const englishPage = context.pages[`/en/${page.relativePath.replace(/.md$/, '')}`]
|
|
if (!englishPage) return
|
|
|
|
// FIX there may be bugs if English headings are updated before Crowdin syncs up :/
|
|
const englishHeadings = englishPage.markdown.match(headingRegex)
|
|
if (!englishHeadings) return
|
|
|
|
// select heading text only
|
|
const cleanTranslatedHeadings = translatedHeadings.map(h => h.replace(headingRegex, '$1'))
|
|
const cleanEnglishHeadings = englishHeadings.map(h => h.replace(headingRegex, '$1'))
|
|
|
|
// return a map from translation:English
|
|
return Object.assign(...cleanTranslatedHeadings.map((k, i) => ({
|
|
[k]: cleanEnglishHeadings[i]
|
|
})))
|
|
}
|