С точки зрения Visual Studio текст в текстовом документе имеет два различных "представления": виртуальное и физическое. Физическое представление — это обычней файл кода, находящийся на диске. Виртуальное представление — это то, что Visual Studio представляет на экране: это интерпретированное представление текста кодового файла, которое учитывает различные функциональные возможности (такие как структурирование кода, виртуальные интервалы и перенос слов).
На рис. 11.7 показана эта связь. При отображении текстового документа Visual Studio читает исходный файл в текстовый буфер, а затем текстовый редактор отображает для вас его представление (в зависимости от опций, которые вы настроили в редакторе).
Рис. 11.7. Представление текстовых документов в интегрированной среде
Манипуляции производятся либо с буферизованным текстом, либо с "представлением" текста, которое вы видите в редакторе. Существуют четыре различных объекта расширяемости,
при помощи которых можно работать с текстом; два из них работают с текстовым буфером,
и два — с представлением редактора.
Для текстового буфера:
□ объекты Text Point (текстовая точка) используются для нахождения в текстовом документе определенных точек. Опрашивая свойства TextPoint, вы можете определить номер строки этой точки, количество символов ее смещения относительно начала строки, количество символов ее смещения от начала документа и номер ее столбца в окне текстового редактора. Вы можете также получить ссылку на объект CodeModel, представляющий код в текущем положении текстовой точки;
□ объект EditPoint (точка редактирования) наследует от объекта TextPoint; это основной объект, используемый для манипулирования текстом в текстовом буфере. Вы можете добавлять, удалять или переносить текст при помощи точек редактирования, и сами эти точки также можно перемещать внутри текстового буфера.
И для представления редактора:
□ объект VirtualPoint (виртуальная точка) эквивалентен объекту TextPoint, за исключением того, что он может использоваться для запроса тех мест текста, которые находятся в "виртуальном" пространстве текстового представления (виртуальное пространство — это незаполненное пространство после последнего символа в строке документа). Экземпляр VirtualPoint возвращается через объект TextSelection;
□ объект TextSelection (выделение текста) эквивалентен интерфейсу EditPoint и работает с текстом в представлении текстового редактора (а не с текстовым буфером). Когда вы используете этот объект, то активно влияете на текст, который отображается в текстовом редакторе.
Методы и свойства этого объекта фактически являются программными аппроксимациями различных способов ручной работы с текстом: вы можете перемещаться по страницам отображения вверх/вниз; вырезать, копировать и вставлять текст; выбирать блок текста; разворачивать или сворачивать области текста.
Поскольку объект VirtualPoint почти идентичен объекту TextPoint, а объект TextSelection почти идентичен объекту EditPoint, то мы не будем подробно описывать все эти четыре объекта. Вместо этого мы сосредоточимся на операциях с текстовым буфером при помощи EditPoint и TextPoint. После этого вы сможете легко применить эти концепции и к текстовому представлению.
Поскольку объекты EditPoint предоставляют большую часть функциональности и играют центральную роль при редактировании текста, то мы приводим список их членов в табл. 11.13.
Теперь рассмотрим различные сценарии манипуляций с текстом.