import PropTypes from 'prop-types'; import React, { Component } from 'react'; import Link from 'Components/Link/Link'; class InlineMarkdown extends Component { // // Render render() { const { className, data, blockClassName } = this.props; // For now only replace links or code blocks (not both) const markdownBlocks = []; if (data) { const linkRegex = RegExp(/\[(.+?)\]\((.+?)\)/g); let endIndex = 0; let match = null; while ((match = linkRegex.exec(data)) !== null) { if (match.index > endIndex) { markdownBlocks.push(data.substr(endIndex, match.index - endIndex)); } markdownBlocks.push({match[1]}); endIndex = match.index + match[0].length; } if (endIndex !== data.length && markdownBlocks.length > 0) { markdownBlocks.push(data.substr(endIndex, data.length - endIndex)); } const codeRegex = RegExp(/(?=`)`(?!`)[^`]*(?=`)`(?!`)/g); endIndex = 0; match = null; let matchedCode = false; while ((match = codeRegex.exec(data)) !== null) { matchedCode = true; if (match.index > endIndex) { markdownBlocks.push(data.substr(endIndex, match.index - endIndex)); } markdownBlocks.push({match[0].substring(1, match[0].length - 1)}); endIndex = match.index + match[0].length; } if (endIndex !== data.length && markdownBlocks.length > 0 && matchedCode) { markdownBlocks.push(data.substr(endIndex, data.length - endIndex)); } if (markdownBlocks.length === 0) { markdownBlocks.push(data); } } return {markdownBlocks}; } } InlineMarkdown.propTypes = { className: PropTypes.string, data: PropTypes.string, blockClassName: PropTypes.string }; export default InlineMarkdown;