@@ -528,7 +528,7 @@ const subscriptMap = new Map([
528528 [ 'CO2' , 'CO<sub>2</sub>' ] ,
529529 [ 'CF4' , 'CF<sub>4</sub>' ] ,
530530 [ 'CH4' , 'CH<sub>4</sub>' ] ,
531- [ 'H2O ' , 'H<sub>2</sub>O ' ] ,
531+ [ 'H2 ' , 'H<sub>2</sub>' ] ,
532532 [ 'N2O' , 'N<sub>2</sub>O' ] ,
533533 [ 'NF3' , 'NF<sub>3</sub>' ] ,
534534 [ 'O2' , 'O<sub>2</sub>' ] ,
@@ -607,19 +607,24 @@ export function convertMarkdownToHtml(context: Context, md: string): string {
607607 * CO2
608608 * CF4
609609 * CH4
610+ * H2
610611 * H2O
611612 * N2O
612613 * NF3
613614 * O2
614615 * O3
615616 * SF6
616617 *
618+ * Note that we only convert in the case where the chemical name is either at the
619+ * beginning of a line or not preceded by a letter or digit, so that we convert
620+ * things like "H2" or "non-H2" but not "CH3CH2CH3".
621+ *
617622 * @param s The input string.
618623 * @return A new string containing subscripted chemical names.
619624 */
620625export function subscriptify ( s : string ) : string {
621- return s . replace ( / ( C O 2 | C F 4 | C H 4 | H 2 O | N 2 O | N F 3 | O 2 | O 3 | S F 6 ) / g, ( _m , m1 ) => {
622- return subscriptMap . get ( m1 )
626+ return s . replace ( / ( ^ | [ ^ a - z A - Z 0 - 9 ] ) ( C O 2 | C F 4 | C H 4 | H 2 | N 2 O | N F 3 | O 2 | O 3 | S F 6 ) / g, ( _m , m1 , m2 ) => {
627+ return ` ${ m1 || '' } ${ subscriptMap . get ( m2 ) } `
623628 } )
624629}
625630
0 commit comments