Created
July 18, 2021 08:54
-
-
Save ljanecek/3163ecbdc7d16db27f6c8554dc365d9e to your computer and use it in GitHub Desktop.
Typography
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const Typography = (str) => { | |
const quotes = { | |
singleQuotes: ["\u{201A}", "\u{2018}"], | |
doubleQuotes: ["\u{201E}", "\u{201C}"], | |
}; | |
const pattern = 'A-Za-z\\x\{C0\}-\\x\{2FF\}\\x\{370\}-\\x\{1EFF\}'; | |
var patterns = [{ | |
request: /(?<![.\\x\{2026\}])\.{3,4}(?![.\\x\{2026\}])/mu, | |
replace: "\u{2026}" | |
}, // ellipsis ... | |
{ | |
request: /(?<=[\d ]|^)-(?=[\d ]|$)/, | |
replace: "\u{2013}" | |
}, // en dash 123-123 | |
{ | |
request: /(?<=[^!*+,/:;<:@\\\\_|-])--(?=[^!*+,/:;<:@\\\\_|-])/, | |
replace: "\u{2013}" | |
}, // en dash alphanum--alphanum | |
{ | |
request: /,-/, | |
replace: ",\u{2013}" | |
}, // en dash ,- | |
{ | |
request: /(?<!\d)(\d{1,2}\.) (\d{1,2}\.) (\d\d)/, | |
replace: "\$1\u{A0}\$2\u{A0}\$3" | |
}, // date 23. 1. 1978 | |
{ | |
request: /(?<!\d)(\d{1,2}\.) (\d{1,2}\.)/, | |
replace: "\$1\u{A0}\$2" | |
}, // date 23. 1. | |
{ | |
request: / --- /, | |
replace: "\u{A0}\u{2014} " | |
}, // em dash --- | |
{ | |
request: / ([\\x\{2013\}\\x\{2014\}])/u, | |
replace: "\u{A0}\$1" | |
}, // behind dash (dash stays at line end) | |
{ | |
request: / <-{1,2}> /, | |
replace: " \u{2194} " | |
}, // left right arrow <--> | |
{ | |
request: /-{1,}> /, | |
replace: "\u{2192} " | |
}, // right arrow --> | |
{ | |
request: / <-{1,}/, | |
replace: " \u{2190} " | |
}, // left arrow <-- | |
{ | |
request: /={1,}> /, | |
replace: "\u{21D2} " | |
}, // right arrow =: | |
{ | |
request: /\+-/, | |
replace: "\u{B1}" | |
}, // +- | |
{ | |
request: /(\d+) x (?=\d)/, | |
replace: "\$1\u{A0}\u{D7}\u{A0}" | |
}, // dimension sign 123 x 123... | |
{ | |
request: /(\d+)x(?=\d)/, | |
replace: "\$1\u{D7}" | |
}, // dimension sign 123x123... | |
{ | |
request: /(?<=\d)x(?= |,|.|$)/m, | |
replace: "\u{D7}" | |
}, // dimension sign 123x | |
{ | |
request: /(\S ?)\(TM\)/i, | |
replace: "\$1\u{2122}" | |
}, // trademark (TM) | |
{ | |
request: /(\S ?)\(R\)/i, | |
replace: "\$1\u{AE}" | |
}, // registered (R) | |
{ | |
request: /\(C\)( ?\S)/i, | |
replace: "\u{A9}\$1" | |
}, // copyright (C) | |
{ | |
request: /\(EUR\)/, | |
replace: "\u{20AC}" | |
}, // Euro (EUR) | |
{ | |
request: /(\d) (?=\d{3})/, | |
replace: "\$1\u{A0}" | |
}, // (phone) number 1 123 123 123... | |
// CONTENT_MARKUP mark: \x17-\x1F, CONTENT_REPLACED mark: \x16, CONTENT_TEXTUAL mark: \x17 | |
{ | |
request: /(?<=[^\s\x17])\s+([\x17-\x1F]+)(?=\s)/u, | |
replace: '$1' | |
}, // remove intermarkup space phase 1 | |
{ | |
request: /(?<=\s)([\x17-\x1F]+)\s+/u, | |
replace: '$1' | |
}, // remove intermarkup space phase 2 | |
{ | |
request: /(?<=.{50})\s+(?=[\x17-\x1F]*\S{1,6}[\x17-\x1F]*$)/us, | |
replace: "\u{A0}" | |
}, // space before last short word | |
// nbsp space between number (optionally followed by dot) and word, symbol, punctation, currency symbol | |
{ | |
request: /(?<=^| |\.|,|-|\+|\x16|\(|\d\\x\{A0\})([\x17-\x1F]*\d+\.?[\x17-\x1F]*)\s+(?=[\x17-\x1F]*[%A-Za-z\\x\{C0\}/-\\x\{2FF\}\\x\{370\}/-\\x\{1EFF\}\\x\{b0\}/-\\x\{be\}\\x\{2020\}/-\\x\{214f\}])/mu, | |
replace: "\$1\u{A0}" | |
}, | |
// space between preposition and word | |
{ | |
request: /(?<=^|[^0-9A-Za-z\\x\{C0\}/-\\x\{2FF\}\\x\{370\}/-\\x\{1EFF\}])([\x17-\x1F]*[ksvzouiKSVZOUIA][\x17-\x1F]*)\s+(?=[\x17-\x1F]*[0-9A-Za-z\\x\{C0\}/-\\x\{2FF\}\\x\{370\}/-\\x\{1EFF\}])/mus, | |
replace: "\$1\u{A0}" | |
}, | |
]; | |
for (var i in patterns) { | |
str = str.replace(patterns[i].request, patterns[i].replace) | |
} | |
return str; | |
}; | |
export default Typography; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment