PLT-2077 Support CJK hashtags (#4555)
* Add Korean character ranges to exist CJK pattern * Add constant for CJK hashtags Becuase most of keywords in CJK are two characters * Add CJK ranges to hashtag pattern to handle it. * Fixes hashtag pattern to apply numbers at last * Remove a wrong test case `test_` shouldn't be a hashtag * Fix hashtag regex to support standard unicodes * Remove wrong escapes from regex
Этот коммит содержится в:
коммит произвёл
Joram Wilander
родитель
981ea33b8e
Коммит
2abcc25173
@@ -304,7 +304,7 @@ func Etag(parts ...interface{}) string {
|
|||||||
return etag
|
return etag
|
||||||
}
|
}
|
||||||
|
|
||||||
var validHashtag = regexp.MustCompile(`^(#[A-Za-zäöüÄÖÜß]+[A-Za-z0-9äöüÄÖÜß_\-]*[A-Za-z0-9äöüÄÖÜß])$`)
|
var validHashtag = regexp.MustCompile(`^(#\pL[\pL\d\-_.]*[\pL\d])$`)
|
||||||
var puncStart = regexp.MustCompile(`^[^\pL\d\s#]+`)
|
var puncStart = regexp.MustCompile(`^[^\pL\d\s#]+`)
|
||||||
var hashtagStart = regexp.MustCompile(`^#{2,}`)
|
var hashtagStart = regexp.MustCompile(`^#{2,}`)
|
||||||
var puncEnd = regexp.MustCompile(`[^\pL\d\s]+$`)
|
var puncEnd = regexp.MustCompile(`[^\pL\d\s]+$`)
|
||||||
|
|||||||
@@ -73,12 +73,6 @@ describe('TextFormatting.Hashtags', function() {
|
|||||||
"<p><a class='mention-link' href='#' data-hashtag='#test'>#test</a>.</p>"
|
"<p><a class='mention-link' href='#' data-hashtag='#test'>#test</a>.</p>"
|
||||||
);
|
);
|
||||||
|
|
||||||
// Known issue, trailing underscore is captured by the clientside regex but not the serverside one
|
|
||||||
assert.equal(
|
|
||||||
TextFormatting.formatText('#test_').trim(),
|
|
||||||
"<p><a class='mention-link' href='#' data-hashtag='#test_'>#test_</a></p>"
|
|
||||||
);
|
|
||||||
|
|
||||||
assert.equal(
|
assert.equal(
|
||||||
TextFormatting.formatText('This is a sentence #test containing a hashtag').trim(),
|
TextFormatting.formatText('This is a sentence #test containing a hashtag').trim(),
|
||||||
"<p>This is a sentence <a class='mention-link' href='#' data-hashtag='#test'>#test</a> containing a hashtag</p>"
|
"<p>This is a sentence <a class='mention-link' href='#' data-hashtag='#test'>#test</a> containing a hashtag</p>"
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import XRegExp from 'xregexp';
|
|||||||
|
|
||||||
// pattern to detect the existance of a Chinese, Japanese, or Korean character in a string
|
// pattern to detect the existance of a Chinese, Japanese, or Korean character in a string
|
||||||
// http://stackoverflow.com/questions/15033196/using-javascript-to-check-whether-a-string-contains-japanese-characters-includi
|
// http://stackoverflow.com/questions/15033196/using-javascript-to-check-whether-a-string-contains-japanese-characters-includi
|
||||||
const cjkPattern = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf]/;
|
const cjkPattern = /[\u3000-\u303f\u3040-\u309f\u30a0-\u30ff\uff00-\uff9f\u4e00-\u9faf\u3400-\u4dbf\uac00-\ud7a3]/;
|
||||||
|
|
||||||
// Performs formatting of user posts including highlighting mentions and search terms and converting urls, hashtags,
|
// Performs formatting of user posts including highlighting mentions and search terms and converting urls, hashtags,
|
||||||
// @mentions and ~channels to links by taking a user's message and returning a string of formatted html. Also takes
|
// @mentions and ~channels to links by taking a user's message and returning a string of formatted html. Also takes
|
||||||
@@ -342,7 +342,7 @@ function autolinkHashtags(text, tokens) {
|
|||||||
return prefix + alias;
|
return prefix + alias;
|
||||||
}
|
}
|
||||||
|
|
||||||
return output.replace(/(^|\W)(#[a-zA-ZäöüÄÖÜß][a-zA-Z0-9äöüÄÖÜß.\-_]*)\b/g, replaceHashtagWithToken);
|
return output.replace(XRegExp.cache('(^|\\W)(#\\pL[\\pL\\d\\-_.]*[\\pL\\d])', 'g'), replaceHashtagWithToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
const puncStart = XRegExp.cache('^[^\\pL\\d\\s#]+');
|
const puncStart = XRegExp.cache('^[^\\pL\\d\\s#]+');
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user