NSTextview не будет отображать всплывающее меню для замены корейского текста - PullRequest
0 голосов
/ 06 мая 2018

(Отказ от ответственности - я не понимаю корейский, поэтому у меня есть несколько тестовых примеров, которые не имеют смысла, но демонстрируют проблему.)

У меня есть сильно настроенный NSTextView / NSTextStorage для обеспечения подсветки синтаксисаи другие виды поведения в моем приложении.Пользователь из Кореи указал на некоторые трудности с использованием функции замены текста в macOS.

  1. Всплывающее меню для принятия / отклонения замены текста не отображается.

  2. Текстовые замены многосимвольных строк не работают - кажется, что только последний символ может инициировать замену.

Чтобы проверить, я настроил следующий текстзамены на моем (американском английском) компьютере mac:

  1. (создан с помощью набора go) заменен на GO (креатив, я знаю ...)
  2. (to) заменяется на TO
  3. ㅂㅈ (qw) заменяется на qw
  4. 햅ㅈ (goqw) на go qw
  5. Я включил источник входного сигнала 2-Set Korean (функция «Caps Lock to switch» - это спасение жизни) (Если это имеет значение, у меня есть Размер шрифта 18, Формат ввода Hangul (Hanja) и Удалить с помощьюGulja.
  6. Я использую 10.12.6 на этой машине.

Среды тестирования:

  1. Я загрузил исходный код Appleдля TextEdit, скомпилировал и использовал это (чтобы я мог подтвердить, что TextEdit скомпилирован с использованием того же SDK, что и мое приложение)

  2. Я создал «игрушечное» приложение, которое состоит из одного окна.В ViewController viewDidLoad я использую это для замены содержимого базовым NSTextView (без каких-либо настроек):

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSView * contentView = [self view];
        NSRect cFrame = [contentView bounds];
    
        NSView * oldView = [[self.view subviews] firstObject];
        [oldView removeFromSuperview];
    
        // Create basic NSTextView with mostly default settings
        NSTextView * newView = [[NSTextView alloc] initWithFrame:cFrame];
        [newView setTranslatesAutoresizingMaskIntoConstraints:NO];
        [self.view setAutoresizingMask:NSViewHeightSizable | NSViewWidthSizable];
        [newView setVerticallyResizable:YES];
        [newView setHorizontallyResizable:NO];
    
        // Scrollview for convenience
        NSScrollView * scroller = [[NSScrollView alloc] initWithFrame:cFrame];
        [scroller setAutoresizingMask:NSViewWidthSizable | NSViewWidthSizable];
        [scroller setHasVerticalRuler:YES];
        [scroller setUsesPredominantAxisScrolling:YES];
        [scroller setHorizontalScrollElasticity:NSScrollElasticityNone];
    
        [scroller setDocumentView:newView];
    
        [self.view addSubview:scroller];
    
        // Do any additional setup after loading the view.
        textView = newView;
        [textView setRulerVisible:YES];
    }
    

Результаты:

  1. При использовании TextEdit все замены отображают всплывающее меню, позволяющее мне принять / отклонить замену по мере ввода текста (корейский язык, а также мои собственные замены текста на английском языке).

  2. При использовании игрушечного приложения замены одного символа изменяются автоматически, но всплывающее меню не отображается.

  3. Замена двух символов не запускается в игрушечном приложении.

  4. Быстрый набор текста в игрушечном приложении (с пробелом после) позволяет выполнять все корейские замены, но всплывающее окно по-прежнему отсутствует.

  5. Текст на английском языкезамены, в том числе многобуквенные слова, показывают всплывающее меню (например, mmd -> MultiMarkdown).

  6. Изменение шрифта для NSTextView не меняет поведение (например, Times совпадает с AppleMyungjo).

ReviИспользуя код TextEdit, я не смог найти ничего подходящего, чтобы указать, что я делаю неправильно.Тот факт, что всплывающие окна появляются с английскими заменами, но не с корейскими, кажется странным, особенно с неизмененным NSTextView.Использование программного NSTextView должно исключить, что я сделал что-то не так с настройкой интерфейса Xcode.TextEdit использует программные NSTextViews, и я не вижу в их настройках ничего очевидного, что бы существенно отличалось от моего, но, очевидно, что-то происходит.

Есть какие-нибудь решения?

Спасибо!

...