Spaces:
Sleeping
Sleeping
| // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. | |
| // See LICENSE.txt for license information. | |
| import {InlineStrategy} from '../pluginStrategy' | |
| import findRangesWithRegex from '../utils/findRangesWithRegex' | |
| // Bold can be delimited by: **, __, ***, and ___ | |
| const createBoldStyleStrategy = (): InlineStrategy => { | |
| const asteriskDelimitedRegex = | |
| '(\\*\\*\\*)(.+?)(\\*\\*\\*)|(\\*\\*)(.+?)(\\*\\*)(?!\\*)' | |
| const underscoreDelimitedRegex = '(___)(.+?)(___)|(__)(.+?)(__)(?!_)' | |
| const boldRegex = new RegExp( | |
| `${asteriskDelimitedRegex}|${underscoreDelimitedRegex}`, | |
| 'g', | |
| ) | |
| const boldDelimiterRegex = /^(\*\*\*|\*\*|___|__)|(\*\*\*|\*\*|___|__)$/g | |
| return { | |
| style: 'BOLD', | |
| delimiterStyle: 'BOLD-DELIMITER', | |
| findStyleRanges: (block) => { | |
| // Return an array of arrays containing start and end indices for ranges of | |
| // text that should be bolded | |
| // e.g. [[0,6], [10,20]] | |
| const text = block.getText() | |
| const boldRanges = findRangesWithRegex(text, boldRegex) | |
| return boldRanges | |
| }, | |
| findDelimiterRanges: (block, styleRanges) => { | |
| // Find ranges for delimiters at the beginning/end of styled text ranges | |
| // Returns an array of arrays containing start and end indices for delimiters | |
| const text = block.getText() | |
| let boldDelimiterRanges: number[][] = [] | |
| styleRanges.forEach((styleRange) => { | |
| const delimiterRange = findRangesWithRegex( | |
| text.substring(styleRange[0], styleRange[1] + 1), | |
| boldDelimiterRegex, | |
| ).map((indices) => indices.map((x) => x + styleRange[0])) | |
| boldDelimiterRanges = boldDelimiterRanges.concat(delimiterRange) | |
| }) | |
| return boldDelimiterRanges | |
| }, | |
| delimiterStyles: { | |
| opacity: 0.4, | |
| }, | |
| } | |
| } | |
| export default createBoldStyleStrategy | |