diff --git a/AppKit/CPTextView/_CPRTFParser.j b/AppKit/CPTextView/_CPRTFParser.j index 69bd0e224..f04654a05 100644 --- a/AppKit/CPTextView/_CPRTFParser.j +++ b/AppKit/CPTextView/_CPRTFParser.j @@ -334,6 +334,7 @@ var kRgsymRtf = { CPArray _fontArray; CPString _freename; BOOL _parsingFontTable; + BOOL _keywordIsControlWord; // Table parsing state BOOL _inTableActive; @@ -353,6 +354,7 @@ var kRgsymRtf = { _states = []; _currentParseIndex = 0; _hexreturn = NO; + _keywordIsControlWord = NO; _result = [CPAttributedString new]; _colorArray = []; _fontArray = ['Arial']; // FIXME: should be name of system font @@ -889,7 +891,12 @@ var kRgsymRtf = { ch = rtf.charAt(_currentParseIndex); if (!/[a-zA-Z]/.test(ch)) + { + _keywordIsControlWord = NO; return [self _translateKeyword:ch parameter:nil fParameter:fParam]; + } + + _keywordIsControlWord = YES; while (new RegExp("[a-zA-Z]").test(ch)) { @@ -978,6 +985,7 @@ var kRgsymRtf = { break; case "{": + lastchar = 0; if (_waitingForNextRow) [self _flushTableIfAny]; @@ -986,6 +994,7 @@ var kRgsymRtf = { break; case "}": + lastchar = 0; if (_waitingForNextRow) [self _flushTableIfAny]; @@ -1009,7 +1018,7 @@ var kRgsymRtf = { _freename = ''; ch = [self _parseKeyword:rtf length:len]; - if (!_hexreturn && ch.length == 0) + if (!_hexreturn && _keywordIsControlWord) lastchar = 1; else lastchar = 0; @@ -1040,6 +1049,7 @@ var kRgsymRtf = { case 0x0a: case '\n': case '\r': + lastchar = 0; break; default: