TextKit: Как функция заполнителя редактора реализована в Xcode?

Я глубоко погрузился в TextKit и задался вопросом, как заполнители редактора реализованы в редакторе кода Xcode:

Заполнитель в Xcode

Вы также можете попробовать это сами и ввести что-то вроде: <#Hello#>, которое автоматически превратится в заполнитель.

Видео-заполнитель

Редактор Xcode построен с помощью TextKit. После некоторых исследований я придумал две возможные стратегии:

  1. Использование NSTextAttachment: как только обнаруживается строка, соответствующая шаблону-заполнителю <#...#>, эта строка удаляется и заменяется NSTextAttachment, которая обрабатывает отрисовку фона и текста в форме значка.
  2. Using NSLayoutManager: not sure if this would work, but it could go like this:
    • The start and end markers (glyphs) <# + #> are hidden (layoutManager(... shouldGenerateGlyphs, forGlyphRange...))
    • Менеджер компоновки обрабатывает отрисовку фона значка в drawBackground(forGlyphRange glyphsToShow: NSRange, at origin: NSPoint)

Я хотел бы реализовать что-то подобное и был бы признателен за любые предложения относительно того, как действовать дальше.


person Mark    schedule 21.11.2018    source источник
comment
Вы нашли хорошее решение для этой функции? Я реализую что-то подобное прямо сейчас   -  person ian    schedule 23.02.2019
comment
Если вы разобрались с этим, пожалуйста, уточните. :)   -  person Clifton Labrum    schedule 12.08.2019