|
|
|
@ -5,22 +5,30 @@ import PropTypes from 'prop-types'; |
|
|
|
|
import { FormattedMessage } from 'react-intl'; |
|
|
|
|
import { me } from '../../../initial_state'; |
|
|
|
|
|
|
|
|
|
const HASHTAG_SEPARATORS = "_\\u00b7\\u200c"; |
|
|
|
|
const ALPHA = '\\p{L}\\p{M}'; |
|
|
|
|
const WORD = '\\p{L}\\p{M}\\p{N}\\p{Pc}'; |
|
|
|
|
const APPROX_HASHTAG_RE = new RegExp( |
|
|
|
|
'(?:^|[^\\/\\)\\w])#((' + |
|
|
|
|
'[' + WORD + '_]' + |
|
|
|
|
'[' + WORD + HASHTAG_SEPARATORS + ']*' + |
|
|
|
|
'[' + ALPHA + HASHTAG_SEPARATORS + ']' + |
|
|
|
|
'[' + WORD + HASHTAG_SEPARATORS +']*' + |
|
|
|
|
'[' + WORD + '_]' + |
|
|
|
|
')|(' + |
|
|
|
|
'[' + WORD + '_]*' + |
|
|
|
|
'[' + ALPHA + ']' + |
|
|
|
|
'[' + WORD + '_]*' + |
|
|
|
|
'))', 'iu' |
|
|
|
|
); |
|
|
|
|
const buildHashtagRE = () => { |
|
|
|
|
try { |
|
|
|
|
const HASHTAG_SEPARATORS = '_\\u00b7\\u200c'; |
|
|
|
|
const ALPHA = '\\p{L}\\p{M}'; |
|
|
|
|
const WORD = '\\p{L}\\p{M}\\p{N}\\p{Pc}'; |
|
|
|
|
return new RegExp( |
|
|
|
|
'(?:^|[^\\/\\)\\w])#((' + |
|
|
|
|
'[' + WORD + '_]' + |
|
|
|
|
'[' + WORD + HASHTAG_SEPARATORS + ']*' + |
|
|
|
|
'[' + ALPHA + HASHTAG_SEPARATORS + ']' + |
|
|
|
|
'[' + WORD + HASHTAG_SEPARATORS +']*' + |
|
|
|
|
'[' + WORD + '_]' + |
|
|
|
|
')|(' + |
|
|
|
|
'[' + WORD + '_]*' + |
|
|
|
|
'[' + ALPHA + ']' + |
|
|
|
|
'[' + WORD + '_]*' + |
|
|
|
|
'))', 'iu', |
|
|
|
|
); |
|
|
|
|
} catch { |
|
|
|
|
return /(?:^|[^\/\)\w])#(\w*[a-zA-Z·]\w*)/i; |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
const APPROX_HASHTAG_RE = buildHashtagRE(); |
|
|
|
|
|
|
|
|
|
const mapStateToProps = state => ({ |
|
|
|
|
needsLockWarning: state.getIn(['compose', 'privacy']) === 'private' && !state.getIn(['accounts', me, 'locked']), |
|
|
|
|