mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-23 06:51:44 +00:00
Handle apostrophes and hyphens within words.
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@8415 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
572a275edc
commit
0ae0da7dad
2 changed files with 91 additions and 1 deletions
|
@ -1,3 +1,10 @@
|
|||
2000-12-23 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Source/NSAttributedString.m: ([-doubleClickAtIndex:]),
|
||||
([-lineBreakBeforeIndex:withinRange:]),
|
||||
([-nextWordFromIndex:forward:]) cope with apostrophes and hyphens
|
||||
within words.
|
||||
|
||||
Fri Dec 22 21:40:58 2000 Nicola Pero <n.pero@mi.flashnet.it>
|
||||
|
||||
* Headers/gnustep/gui/NSTextView.h: Added ivar to store the
|
||||
|
|
|
@ -74,6 +74,7 @@ static void cache_init_real ()
|
|||
[m formUnionWithCharacterSet: cset];
|
||||
cset = [NSCharacterSet illegalCharacterSet];
|
||||
[m formUnionWithCharacterSet: cset];
|
||||
[m removeCharactersInString: @"-"];
|
||||
wordBreakCSet = [m copy];
|
||||
RELEASE (m);
|
||||
|
||||
|
@ -229,6 +230,16 @@ static inline void cache_init ()
|
|||
startRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch | NSLiteralSearch
|
||||
range: scanRange];
|
||||
while (startRange.length > 0 && startRange.location > 0
|
||||
&& [str characterAtIndex: startRange.location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: startRange.location-1]])
|
||||
{
|
||||
location = startRange.location - 1;
|
||||
scanRange = NSMakeRange (0, location);
|
||||
startRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch|NSLiteralSearch range: scanRange];
|
||||
}
|
||||
if (startRange.length == 0)
|
||||
{
|
||||
return NSNotFound;
|
||||
|
@ -259,10 +270,39 @@ static inline void cache_init ()
|
|||
startRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch|NSLiteralSearch
|
||||
range: scanRange];
|
||||
|
||||
while (startRange.length > 0
|
||||
&& startRange.location > 0 && startRange.location < length - 1
|
||||
&& [str characterAtIndex: startRange.location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: startRange.location - 1]]
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: startRange.location + 1]])
|
||||
{
|
||||
location = startRange.location - 1;
|
||||
scanRange = NSMakeRange (0, location);
|
||||
startRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch|NSLiteralSearch range: scanRange];
|
||||
}
|
||||
|
||||
scanRange = NSMakeRange (location, length - location);
|
||||
endRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSLiteralSearch
|
||||
range: scanRange];
|
||||
while (endRange.length > 0
|
||||
&& endRange.location > 0 && endRange.location < length - 1
|
||||
&& [str characterAtIndex: endRange.location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: endRange.location - 1]]
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: endRange.location + 1]])
|
||||
{
|
||||
location = endRange.location + 1;
|
||||
scanRange = NSMakeRange (location, length - location);
|
||||
startRange = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSLiteralSearch range: scanRange];
|
||||
}
|
||||
|
||||
if (startRange.length == 0)
|
||||
{
|
||||
location = 0;
|
||||
|
@ -304,6 +344,27 @@ static inline void cache_init ()
|
|||
range = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSLiteralSearch
|
||||
range: range];
|
||||
/*
|
||||
* If we found an apostrophe in the middle of a word,
|
||||
* we have to skip forward.
|
||||
*/
|
||||
if (location > 0)
|
||||
{
|
||||
while (range.length > 0
|
||||
&& range.location > 0 && range.location < length - 1
|
||||
&& [str characterAtIndex: range.location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: range.location - 1]]
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: range.location + 1]])
|
||||
{
|
||||
location = range.location + 1;
|
||||
range = NSMakeRange (location, length - location);
|
||||
range = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSLiteralSearch range: range];
|
||||
}
|
||||
}
|
||||
|
||||
if (range.length == 0)
|
||||
{
|
||||
return length;
|
||||
|
@ -325,10 +386,20 @@ static inline void cache_init ()
|
|||
BOOL inWord;
|
||||
|
||||
inWord = [wordCSet characterIsMember: [str characterAtIndex: location]];
|
||||
if (inWord == NO && location > 0
|
||||
&& location > 0 && location < length - 1
|
||||
&& [str characterAtIndex: location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: location - 1]]
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: location + 1]])
|
||||
{
|
||||
inWord = YES;
|
||||
}
|
||||
|
||||
range = NSMakeRange (0, location);
|
||||
|
||||
if (!inWord)
|
||||
if (inWord == NO)
|
||||
{
|
||||
range = [str rangeOfCharacterFromSet: wordCSet
|
||||
options: NSBackwardsSearch | NSLiteralSearch
|
||||
|
@ -343,6 +414,18 @@ static inline void cache_init ()
|
|||
range = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch | NSLiteralSearch
|
||||
range: range];
|
||||
while (range.length > 0
|
||||
&& range.location > 0 && range.location < length - 1
|
||||
&& [str characterAtIndex: range.location] == '\''
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: range.location - 1]]
|
||||
&& [wordCSet characterIsMember:
|
||||
[str characterAtIndex: range.location + 1]])
|
||||
{
|
||||
range = NSMakeRange (0, range.location - 1);
|
||||
range = [str rangeOfCharacterFromSet: wordBreakCSet
|
||||
options: NSBackwardsSearch|NSLiteralSearch range: range];
|
||||
}
|
||||
if (range.length == 0)
|
||||
{
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue