<chapter id="advanced-editing-tools">
<chapterinfo>
<authorgroup>
<author
>&Anders.Lund; &Anders.Lund.mail;</author>
<author
>&Dominik.Haumann; &Dominik.Haumann.mail;</author>
<othercredit role="translator"
><firstname
>Юрій</firstname
><surname
>Чорноіван</surname
><affiliation
><address
><email
>yurchor@ukr.net</email
></address
></affiliation
><contrib
>Переклад українською</contrib
></othercredit
> 
</authorgroup>
</chapterinfo>
<title
>Додаткові інструменти редагування</title>

<sect1 id="advanced-editing-tools-comment">

<title
>Додавання/Вилучення позначок коментаря</title>

<para
>За допомогою пунктів «Закоментувати» і «Розкоментувати» меню <guimenu
>Інструменти</guimenu
> ви зможете додавати або вилучати позначки коментарів до виділеного фрагмента або поточного рядка (у разі, якщо нічого не виділено), якщо коментарі підтримуються форматом файла, який ви редагуєте.</para>

<para
>Правила коментування визначаються у файлі визначень синтаксису, отже, якщо не використано ніяких правил підсвічування синтаксису, коментування/вилучення коментарів буде неможливим. </para>

<para
>У деяких форматах файлів можливе коментування лише окремих рядків, у деяких форматах передбачено коментування одразу декількох рядків парою позначок коментаря, а у деяких форматах можливі обидва варіанти. Якщо коментування парою позначок не передбачено форматом файла, коментування останнього рядка за неповного його виділення у багаторядковому фрагменті тексту буде неможливим.</para>

<para
>Якщо форматом файла передбачено позначки для коментування окремого рядка, використанню цих позначок слід надавати перевагу, оскільки за такого варіанта ви уникнете проблем з вкладеними коментарями.</para>

<para
>Якщо ви вилучаєте позначки коментарів, вам не слід виділяти фрагментів тексту, які не було закоментовано. Під час вилучення коментування парою позначок з виділеного фрагмента тексту всі пробільні рядки поза позначками коментарів у виділеному фрагменті буде проігноровано.</para>

<para
><indexterm
><primary
>закоментувати</primary
></indexterm
> Щоб додати позначки коментарів, скористайтеся пунктом меню <menuchoice
><guimenu
>Інструменти</guimenu
> <guimenuitem
>Закоментувати</guimenuitem
></menuchoice
> або відповідною комбінацією клавіш, типовою комбінацією є <keycombo action="simul"
>&Ctrl;<keycap
>D</keycap
></keycombo
>.</para>

<para
><indexterm
><primary
>розкоментувати</primary
></indexterm
> Щоб вилучити позначки коментарів, скористайтеся пунктом меню <menuchoice
><guimenu
>Інструменти</guimenu
> <guimenuitem
>Розкоментувати</guimenuitem
></menuchoice
> або відповідною комбінацією клавіш, типовою комбінацією є <keycombo action="simul"
>&Ctrl;&Shift;<keycap
>D</keycap
></keycombo
>.</para>

</sect1>

<sect1 id="advanced-editing-tools-commandline">
<title
>Командний рядок компонента редактора</title>

<para
>У компонент редактора Kate вбудовано інструмент для роботи з командним рядком, за допомогою якого ви зможете виконувати різноманітні дії за мінімального графічного інтерфейсу. Командний рядок — це текстова панель у нижній частині вікна редактора, щоб увімкнути показ цієї панелі скористайтеся пунктом меню <menuchoice
><guimenu
>Перегляд</guimenu
> <guimenuitem
>Перемкнутися в командний рядок</guimenuitem
></menuchoice
> або скористайтеся клавіатурним скороченням (типовим клавіатурним скороченням є <keycombo action="simul"
><keycap
>F7</keycap
></keycombo
>). У редакторі передбачено набір команд, документацію з яких наведено нижче, та додаткові команди, за допомогою яких можна керувати додатками до програми.</para>

<para
>Щоб виконати команду, введіть цю команду до командного рядка і натисніть клавішу &Enter;. За командним рядком ви зможете визначити, чи було виконано команду, у ньому ж можна переглянути повідомлення, яке могло бути виведено у відповідь на команду. Якщо ви вводили команду за після натискання клавіші <keycap
>F7</keycap
>, за декілька секунд панель командного рядка буде приховано. Щоб витерти виведене командою повідомлення і ввести нову команду, натисніть клавішу <keycap
>F7</keycap
> ще раз.</para>

<para
>У командний рядок вбудовано довідкову систему. Щоб розпочати роботу з довідкою, введіть команду <command
>help</command
>. Щоб переглянути список можливих команд, введіть команду <command
>help list</command
>. Щоб переглянути довідку з окремої команди, виконайте команду <command
>help <replaceable
>назва_команди</replaceable
></command
>.</para>

<para
>Під час роботи з командним рядком ви можете скористатися вбудованим журналом команд, таким чином ви можете зменшити час доступу до команд, які вже раніше було введено. Для навігації журналом команд скористайтеся клавішами <keycap
>Стрілка вгору</keycap
> і <keycap
>Стрілка вниз</keycap
>. Під час показу команд з журналу буде виділено параметри команди, — це спростить вам перезапис параметрів команди.</para>

<sect2 id="advanced-editing-tools-commandline-commands">
<title
>Стандартні команди командного рядка</title>

<sect3 id="advanced-editing-tools-commandline-commands-configure">
<title
>Команди налаштування редактора</title>

<para
>Ці команди стосуються компонента редактора, за їх допомогою можна налаштовувати лише параметри показу поточного документа. Цими командами зручно користатися, якщо вам потрібно використати параметри, наприклад, параметри відступів, відмінні від типових параметрів. </para>

<variablelist>
<title
>Типи аргументів</title>

<varlistentry>
<term
>BOOLEAN</term>
<listitem
><para
>Цей тип використовується для команд, які вмикають або вимикаю певні налаштування. Можливими значеннями таких параметрів є <userinput
>on</userinput
>, <userinput
>off</userinput
>, <userinput
>true</userinput
>, <userinput
>false</userinput
>, <userinput
>1</userinput
> і <userinput
>0</userinput
></para
></listitem>
</varlistentry>

<varlistentry>
<term
>INTEGER</term>
<listitem
><para
>Ціле число</para
></listitem>
</varlistentry>

<varlistentry>
<term
>STRING</term>
<listitem
><para
>Рядок</para
></listitem>
</varlistentry>

</variablelist>

<variablelist>

<varlistentry>
<term
><cmdsynopsis
><command
>set-tab-width</command
><arg
>INTEGER ширина</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює ширину табуляції у значення <userinput
>ширина</userinput
></para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-width</command
><arg
>INTEGER ширина</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює відступ у значення кількості пробілів, визначене параметром <userinput
>ширина</userinput
>. Використовується, лише якщо увімкнено відступи з пробілів.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-word-wrap-column</command
><arg
>INTEGER довжина</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює для параметра максимальної довжини рядка для примусового перенесення значення <userinput
>довжина</userinput
>. Цей параметр використовується, якщо увімкнено автоматичне розбиття тексту на рядки.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-icon-border</command
><arg
>BOOLEAN вмикання</arg
> </cmdsynopsis
></term>
<listitem
><para
>Встановлює видимість бічної смужки піктограм.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-folding-markers</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює значення видимості позначок панелі згортання.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-line-numbers</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює значення видимості панелі номерів рядків.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-replace-tabs</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо має значення «true», введені вами знаки табуляції буде замінено пробілами. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-remove-trailing-space</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо цей параметр буде увімкнено, після переведення курсора на інших рядок пробіли наприкінці поточного рядка вилучатимуться.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-show-tabs</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо буде увімкнено цей параметр, символи табуляції і пробіли наприкінці рядка буде показано у вигляді маленьких крапок.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-spaces</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо буде увімкнено цей параметр, редактор робитиме відступ на <option
>indent-width</option
> пробілів, замість символу табуляції, під час переходу на наступний рівень відступу.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-mixed-indent</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо буде увімкнено цей параметр, kate використовуватиме суміш з символів табуляції і пробілів для додавання відступів. Ширина кожного з рівнів відступу визначатиметься значенням параметра <option
>indent-width</option
>, загальний же відступ буде оптимізовано так, щоб у ньому використовувалася максимальна кількість символів табуляції.</para>
<para
>Після виконання цієї команди буде увімкнено створення відступів пробілами, якщо ширину відступу не було вказано, буде встановлено значення ширини відступу у половину значення параметра документа <option
>tab-width</option
> на час виконання команди.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-word-wrap</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює значення для динамічного перенесення слів у <userinput
>вмикання</userinput
> (true або false)</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-replace-tabs-save</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо увімкнути цей параметр, під час збереження документа символи табуляції буде замінено на пробіли.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-remove-trailing-space-save</command
><arg
>BOOLEAN вмикання</arg
></cmdsynopsis
></term>
<listitem
><para
>Якщо увімкнути цей параметр, під час збереження документа пробіли наприкінці рядків документа будуть вилучатися.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-indent-mode</command
><arg
>назва</arg
></cmdsynopsis
></term>
<listitem
><para
>Встановлює режим автоматичного встановлення відступів у значення <userinput
>назва</userinput
>. Якщо програмі не вдасться розпізнати параметр <userinput
>назва</userinput
>, буде встановлено режим 'none'. Коректними значеннями режиму є 'cstyle', 'csands', 'xml', 'python', 'varindent' і 'none'.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>set-highlight</command
><arg
>підсвічування</arg
></cmdsynopsis
></term>
<listitem
><para
>Визначає систему підсвічування синтаксису для поточного документа. Параметром команди має бути коректна назва підсвічування у тому вигляді, у якому ця система фігурує у меню <menuchoice
><guimenu
>Інструменти</guimenu
> <guisubmenu
>Підсвічування</guisubmenu
></menuchoice
>. У цій команді передбачено автоматичне доповнення параметра за списком.</para
></listitem>
</varlistentry>

</variablelist>

</sect3>

<sect3 id="advanced-editing-tools-commandline-commands-edit">
<title
>Команди редагування</title>

<para
>Наступні команди змінюють вміст поточного документа.</para>

<variablelist>
<varlistentry>
<term
><cmdsynopsis
><command
>indent</command
></cmdsynopsis
></term>
<listitem
><para
>Додає відступ у виділені рядки або поточний рядок.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>unindent</command
></cmdsynopsis
></term>
<listitem
><para
>Вилучає початковий відступ з виділених рядків або поточного рядка.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>cleanindent</command
></cmdsynopsis
></term>
<listitem
><para
>Вилучає відступи для виділених рядків або поточного рядка відповідно до параметрів відступів поточного документа. </para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>comment</command
></cmdsynopsis
></term>
<listitem
><para
>Додає позначки коментаря, які роблять виділений фрагмент тексту, виділені рядки або поточний рядок коментарями, відповідно до формату тексту, який визначено у параметрах підсвічування синтаксису поточного документа.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>uncomment</command
></cmdsynopsis
></term>
<listitem
><para
>Вилучає позначки коментаря, які роблять виділений фрагмент тексту, виділені рядки або поточний рядок коментарями, відповідно до формату тексту, який визначено у параметрах підсвічування синтаксису поточного документа.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>kill-line</command
></cmdsynopsis
></term>
<listitem
><para
>Вилучає поточний рядок.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>replace</command
><arg
>шаблон</arg
><arg
>замінник</arg
></cmdsynopsis
></term>
<listitem
><para
>Замінює текст, що відповідає <userinput
>шаблону</userinput
>, на текст, вказаний у <userinput
>заміннику</userinput
>. Якщо вам потрібно включити пробіл у <userinput
>шаблон</userinput
>, вам слід взяти як <userinput
>шаблон</userinput
>, так і <userinput
>замінник</userinput
> у одинарні або подвійні лапки. Якщо у команді не буде лапок, перше зі слів-параметрів вважатиметься <userinput
>шаблоном</userinput
>, а решта — <userinput
>замінником</userinput
>. Якщо параметр <userinput
>замінник</userinput
> буде порожнім, всі рядки, які відповідають <userinput
>шаблону</userinput
> буде вилучено з тексту.</para>
<para
>Ви можете вказати прапорці налаштування пошуку за допомогою додавання двокрапки, за якою слід вказати одну або декілька літер, кожна з яких відповідатиме за налаштування. Команда викладатиме так: <userinput
>replace:параметри шаблон замінник</userinput
>. Можливі параметри: <variablelist>

<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Пошук назад.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Шукати від позиції курсора.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>e</userinput
></term>
<listitem
><para
>Шукати лише у виділеному фрагменті.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Пошук за формальним виразом. Якщо встановлено цей прапорець, ви зможете використовувати параметр <userinput
>\N</userinput
>, де N — номер підрядка у рядку «замінник».</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Виконати пошук з врахуванням регістру.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>p</userinput
></term>
<listitem
><para
>Запитувати дозвіл на заміну наступного елемента.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>w</userinput
></term>
<listitem
><para
>Шукати лише цілі слова.</para
></listitem>
</varlistentry>

</variablelist>

</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>date</command
><arg
>формат</arg
></cmdsynopsis
></term>
<listitem
><para
>Вставляє дату/час у форматі, визначеному параметром <userinput
>формат</userinput
>, або у форматі <quote
>yyyy-MM-dd hh:mm:ss</quote
>, якщо рядок формату не буде вказано. Під час обробки рядка <userinput
>формат</userinput
> буде використано такі перетворення: <informaltable
> <tgroup cols="2"
> <tbody>
<row
><entry
><literal
>d</literal
></entry
><entry
>Номер дня без початкового нуля (1-31).</entry
></row>
<row
><entry
><literal
>dd</literal
></entry
><entry
>Номер дня з початковим нулем (01-31).</entry
></row>
<row
><entry
><literal
>ddd</literal
></entry
><entry
>Скорочена локалізована назва дня тижня (наприклад, «пн» або «нд»).</entry
></row>
<row
><entry
><literal
>dddd</literal
></entry
><entry
>Довга локалізована назва дня (наприклад, «понеділок» або «неділя»).</entry
></row>
<row
><entry
><literal
>M</literal
></entry
><entry
>Номер місяця без початкового нуля (1-12).</entry
></row>
<row
><entry
><literal
>MM</literal
></entry
><entry
>Номер місяця з початковим нулем (01-12).</entry
></row>
<row
><entry
><literal
>MMM</literal
></entry
><entry
>Скорочена локалізована назва місяця (наприклад, «січ» або «гру»).</entry
></row>
<row
><entry
><literal
>yy</literal
></entry
><entry
>Рік як двоцифрове значення (00-99).</entry
></row>
<row
><entry
><literal
>yyyy</literal
></entry
><entry
>Рік як чотирицифрове значення (1752-8000).</entry
></row>
<row
><entry
><literal
>h</literal
></entry
><entry
>Години без початкового нуля (0..23 або 1..12 з показом до опівдня/після опівдня).</entry
></row>
<row
><entry
><literal
>hh</literal
></entry
><entry
>Години з початковим нулем (00..23 або 01..12 з показом до опівдня/після опівдня).</entry
></row>
<row
><entry
><literal
>m</literal
></entry
><entry
>Хвилини без початкового нуля (0..59).</entry
></row>
<row
><entry
><literal
>mm</literal
></entry
><entry
>Хвилини з початковим нулем (00..59).</entry
></row>
<row
><entry
><literal
>s</literal
></entry
><entry
>Секунди без початкового нуля (0..59).</entry
></row>
<row
><entry
><literal
>ss</literal
></entry
><entry
>Секунди з початковим нулем (00..59).</entry
></row>
<row
><entry
><literal
>z</literal
></entry
><entry
>Мілісекунди без початкових нулів (0..999).</entry
></row>
<row
><entry
><literal
>zzz</literal
></entry
><entry
>Мілісекунди з початковими нулями (000..999).</entry
></row>
<row
><entry
><literal
>AP</literal
></entry
><entry
>Використовувати показ у форматі AM/PM (до опівдня/після опівдня). AP буде замінено на рядок «AM» або рядок «PM».</entry
></row>
<row
><entry
><literal
>ap</literal
></entry
><entry
>Використовувати показ у форматі am/pm (до опівдня/після опівдня). ap буде замінено на рядок «am» або рядок «pm».</entry
></row>

</tbody>
</tgroup>
</informaltable>

</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>char</command
><arg
>ідентифікатор</arg
></cmdsynopsis
></term>
<listitem>
<para
>За допомогою цієї команди можна вводити символи за їх числовими ідентифікаторами у десятковій, вісімковій або шістнадцятковій формі. Щоб скористатися нею, відкрийте діалогове вікно редагування команди і введіть команду <userinput
>char: [число]</userinput
> у поле для введення, а потім натисніть кнопку <guibutton
>Гаразд</guibutton
>.</para>

<example>
<title
>Приклади команди <command
>char</command
></title>

<para
>Ввід: <userinput
>char:234</userinput
></para>
<para
>Вивід: <computeroutput
>&#234;</computeroutput
></para>
<para
>Ввід: <userinput
>char:0x1234</userinput
></para>
<para
>Вивід: <computeroutput
>&#x1234;</computeroutput
></para>
</example>

</listitem>
</varlistentry>

<varlistentry>
<term>
<indexterm
><primary
>заміна, sed-стиль</primary>
<secondary
>пошук, sed-стиль</secondary
></indexterm>
<command
>s///[ig]</command
> <command
>%s///[ig]</command
></term>

<listitem>
<para
>За допомогою цієї команди можна виконати дію з пошуку або заміни у стилі sed у поточному рядку або у всьому файлі (<command
>%s///</command
>).</para>

<para
>Якщо коротко, у тексті буде виконано пошук за <emphasis
>шаблоном пошуку</emphasis
>, формальним виразом між першою і другою навскісними рисками, якщо буде знайдено відповідний фрагмент тексту, його буде замінено на вираз між середньою і останньою навскісними рисками у рядку. За допомогою круглих дужок можна створювати <emphasis
>зворотні посилання</emphasis
>: команда запам’ятає частину виразу, яка відповідає рядку між дужками і використає рядки, які будуть у пам’яті для шаблону заміни, — посилання на ці рядки можна вказати як <userinput
>\1</userinput
> для першого набору у дужках, <userinput
>\2</userinput
> для другого тощо.</para>

<para
>Щоб знайти символ <literal
>(</literal
> або символ <literal
>)</literal
>, вам слід <emphasis
>екранувати</emphasis
> ці символи за допомогою зворотної навскісної риски: <userinput
>\(\)</userinput
></para>

<para
>Якщо ви додасте ключ <userinput
>i</userinput
> в кінець виразу, під час пошуку буде враховано регістр символів. Якщо в кінець виразу додати <userinput
>g</userinput
>, буде замінено всі рядки, які відповідають шаблону, у іншому випадку буде замінено лише перший з цих рядків.</para>

<example>

<title
>Заміна тексту у поточному рядку</title>

<para
>Припустімо, компілятор, яким ви збирали вашу програму, повідомив вам про те, що клас <classname
>myClass</classname
>, який згадується у рядку 3902 коду вашої програми не визначено.</para>

<para
>Ви подумаєте: «Оце тобі, то це ж має бути мій клас <classname
>MyClass</classname
>». Ви переходите до рядка 3902 і, замість спроб знайти потрібне слово у тексті, відкриваєте діалогове вікно редагування команди, вводите у нього <userinput
>s/myclass/MyClass/i</userinput
>, натискаєте кнопку <guibutton
>Гаразд</guibutton
>, зберігаєте файл і компілюєте його ще раз, — все, помилки немає.</para>

</example>

<example>
<title
>Заміна тексту у всьому файлі</title>

<para
>Припустімо тепер, що у вас є файл, у якому ви згадуєте <quote
>пані Іванченко</quote
> декілька разів, і тут вам стає відомо, що ця особа нещодавно вийшла заміж за <quote
>пана Петренка</quote
>. Ну і, звісно ж, вам потрібно тепер замінити всі рядки з <quote
>пані Іванченко</quote
> на <quote
>пані Петренко</quote
>.</para>

<para
>Відкрийте вікно командного рядка і введіть туди команду <userinput
>%s/пані Іванченко/пані Петренко/</userinput
>, а потім натисніть клавішу &Enter;, — решту зробить програма.</para>

</example>

<example>
<title
>Складніший приклад</title>

<para
>У цьому прикладі ми познайомилися з використанням <emphasis
>зворотніх посилань</emphasis
>, а також <emphasis
>класу символів</emphasis
> (якщо вам не знайомі ці терміни, будь ласка, зверніться до відповідної документації, посилання на яку ви зможете знайти далі за текстом).</para>

<para
>Припустімо, що у вас є такий рядок: <programlisting
>void MyClass::DoStringOps( String      &amp;foo, String &amp;bar String *p, int  &amp;a, int &amp;b )</programlisting>
</para>
<para
>Тепер вам здається, що цей код виглядає кострубато: ви вирішили скористатися ключовим словом <constant
>const</constant
> для всіх параметрів <quote
>address of</quote
>, у яких назві аргументу передує оператор &amp;. Ви також бажаєте вилучити зайві пробіли так, щоб між будь-якими двома словами був лише один символ пробілу.</para>

<para
>Відкрийте діалогове вікно редагування команди і введіть таку команду: <userinput
>s/\s+(\w+)\s+(&amp;)/ const \1 \2/g</userinput
>. Натисніть кнопку <guibutton
>Гаразд</guibutton
>. Літера <userinput
>g</userinput
> наприкінці виразу наказує програмі перебудовувати формальний вираз для кожного зі знайдених елементів, щоб зберегти  <emphasis
>зворотні посилання</emphasis
>.</para>

<para
>Вивід: <computeroutput
>void MyClass::DoStringOps( const String &amp;foo, const String &amp;bar String *p, const int &amp;a, const int &amp;b )</computeroutput
></para>

<para
>Справу зроблено! Що ж сталося? Гаразд, було виконано пошук інтервалу з пробілів (<literal
>\s+</literal
>), за яким слідує один або декілька символів абетки (<literal
>\w+</literal
>), за якими слідують ще пробіли (<literal
>\s+</literal
>), за якими слідує символ амперсанда. У процесі пошуку було збережено ланцюжок символів абетки і амперсанд для подальшого використання під час операції з заміни. Після цього було виконано заміну знайденого відповідника нашого рядка на рядок з пробілом, за яким слідує слово <quote
>const</quote
>, за яким слідує пробіл, за яким слідує наш ланцюжок символів абетки (<literal
>\1</literal
>), за яким слідує один пробіл, за яким слідує збережений нами символ амперсанда (<literal
>\2</literal
>)</para>

<para
>Крім того, у деяких випадках ланцюжок символів абетки міг мати значення <quote
>String</quote
>, у деяких <quote
>int</quote
>, цього було досягнуто використанням класу <literal
>\w</literal
> і лічильника <literal
>+</literal
>.</para>

</example>

</listitem>

</varlistentry>

</variablelist>

</sect3>

<sect3 id="advanced-editing-tools-commandline-commands-navigation">
<title
>Команди навігації</title>

<variablelist>

<varlistentry>
<term
><cmdsynopsis
><command
>goto</command
><arg
>INT рядок</arg
></cmdsynopsis
></term>
<listitem
><para
>За допомогою цієї команди можна перейти до вказаного рядка.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>find</command
><arg
>шаблон</arg
></cmdsynopsis
></term>
<listitem
><para
>За допомогою цієї команди можна перейти до першого відповідника рядка <userinput
>шаблон</userinput
> у тексті, згідно до налаштувань. Перейти до наступних відповідників можна за допомогою пункту меню <menuchoice
><guimenu
>Правка</guimenu
><guimenuitem
>Знайти далі</guimenuitem
></menuchoice
> (типовим клавіатурним скороченням є <keycap
>F3</keycap
>).</para>
<para
>Команду пошуку можна налаштувати додаванням двокрапки, за якою можна вказати один або декілька параметрів, у формі <userinput
>find:параметри шаблон</userinput
>. Серед можливих параметрів: <variablelist>

<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Пошук назад.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Шукати від позиції курсора.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>e</userinput
></term>
<listitem
><para
>Шукати лише у виділеному фрагменті.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Пошук за формальним виразом. Якщо встановлено цей прапорець, ви зможете використовувати параметр <userinput
>\N</userinput
>, де N — номер підрядка у рядку «замінник».</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Виконати пошук з врахуванням регістру.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>w</userinput
></term>
<listitem
><para
>Шукати лише цілі слова.</para
></listitem>
</varlistentry>

</variablelist>

</para>

</listitem>

</varlistentry>

<varlistentry>
<term
><cmdsynopsis
><command
>ifind</command
><arg
>шаблон</arg
></cmdsynopsis
></term>
<listitem
><para
>За допомогою цієї команди можна виконати <quote
>інтерактивний</quote
> пошук. Ви можете налаштувати пошук додаванням одного або декількох параметрів після символу двокрапки, ось так: <userinput
>ifind:параметри шаблон</userinput
>. Серед можливих параметрів: <variablelist>
<varlistentry>
<term
><userinput
>b</userinput
></term>
<listitem
><para
>Пошук назад.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>r</userinput
></term>
<listitem
><para
>Виконати пошук за вказаним формальним виразом.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>s</userinput
></term>
<listitem
><para
>Виконати пошук з врахуванням регістру.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><userinput
>c</userinput
></term>
<listitem
><para
>Шукати від позиції курсора.</para
></listitem>
</varlistentry>

</variablelist>
</para
></listitem>
</varlistentry>

</variablelist>

</sect3>

</sect2>

</sect1>

<sect1 id="advanced-editing-tools-code-folding">
<title
>Використання обгортки коду</title>

<para
>За допомогою згортання коду ви можете приховувати частини документа у вікні редактора: так легше працювати з великими документами. У &kate; діапазони рядків, придатні для згортання, визначаються правилами підсвічування синтаксису, тому згортання можливе не для всіх форматів файлів, — типово, згортання працює у коді програм, розмітки XML та подібних форматів. Під час редагування коду визначення підсвічування також можна вручну визначати діапазони згортання, зазвичай, такі діапазони визначаються за допомогою ключових слів <userinput
>BEGIN</userinput
> і <userinput
>END</userinput
>.</para>

<para
>Щоб скористатися можливостями згортання, слід задіяти позначки згортання за допомогою пункту меню <menuchoice
><guimenu
>Перегляд</guimenu
> <guimenuitem
>Показувати маркери згортання</guimenuitem
></menuchoice
>, якщо цих позначок ще не показано у вікні редактора. На панелі позначок згортання з лівого боку екрана буде показано у графічному вигляді діапазони рядків, які можна згорнути. Символи-трикутники позначатимуть можливі дії з вказаним діапазоном: трикутник, вершина якого вказує вниз, означатиме розгорнутий діапазон рядків, — натискання позначки трикутника призведе до згортання діапазону, — тепер програма показуватиме трикутник з вершиною, спрямованою праворуч.</para>

<para
>Передбачено чотири пункти меню, за допомогою яких можна керувати станом областей згортання коду, їх перелік можна знайти у <link linkend="view-code-folding"
>розділі, присвяченому меню</link
>. </para>

<para
>Якщо ви не бажаєте користуватися можливістю згортання коду, ви можете зняти позначку з пункту <guilabel
>Показувати маркери згортання (якщо наявні)</guilabel
> на сторінці <link linkend="appearance"
>Вигляд</link
> налаштування редактора.</para>

</sect1>

<sect1 id="advanced-editing-tools-scripting">

<title
>Написання скриптів для компонента редактора на Javascript</title>

<sect2 id="advanced-editing-tools-scripting-introduction">

<title
>Вступ</title>

<para
>Починаючи з версії 2.5, компонент редактора &kate; підтримує роботу скриптів ECMA, які також відомі під назвою JavaScript.</para>

<para
>Використовувати скрипти можна лише за допомогою <link linkend="advanced-editing-tools-commandline"
>вбудованого командного рядка</link
>. Потрібно також, щоб файл скрипту разом з необов’язковим файлом .desktop, у якому визначено відповідні властивості, знаходився у теці, де &kate; може його знайти. Відповідна тека має назву <filename
>katepart/scripts</filename
> і знаходиться у теці даних &kde;. Визначити адресу тек даних можна за допомогою команди <command
>kde4-config <option
>--path</option
> <parameter
>data</parameter
></command
> Зазвичай, існує принаймні дві такі теки: тека системних даних і тека особистих даних. Звичайно ж, скрипти теки системних даних доступні для всіх користувачів системи, а скрипти з особистої теки доступні лише вашому користувачеві.</para>

<note
><para
>Ця можливість ще не пройшла належної перевірки, її по всьому буде змінено під час майбутньої розробки програми.</para>
<para
>Нам прекрасно відомо, що багато з вас буде розчаровано, оскільки ви не зможете додати ваші скрипти до меню, або призначити для них клавіатурні скорочення. Вибачте, колись у майбутньому цю можливість буде реалізовано.</para>
<para
>У поточній версії ще не передбачено способів передачі значень параметрів вашим скриптам. Зачекайте, це, можливо, буде реалізовано у світлому майбутньому ;)</para>
</note>

</sect2>

<sect2 id="advanced-editing-tools-scripting-reference">

<title
>Програмний інтерфейс Kate для JavaScript</title>

<para
>У цьому розділі ви знайдете повний набір функцій і властивостей, які можна використовувати у об’єктах <type
>document</type
> і <type
>view</type
>. Крім того, ви, звичайно ж, можете користуватися стандартними об’єктами на зразок <type
>Math</type
>, <type
>String</type
> <type
>Regex</type
> тощо.</para>

<para
>Під час запуску скрипту об’єктом <classname
>document</classname
> буде поточний документ, а об’єктом <classname
>view</classname
> буде поточний перегляд.</para>

<note
><para
>Типи аргументів, звичайно ж, поки що не використовуються у JavaScript, їх наведено лише для того, щоб ви бачили, які значення очікує отримати функція.</para
></note>

<variablelist id="advanced-editing-tools-scripting-global">
<title
>Загальні функції</title>
<varlistentry>
<term
><function
>debug( <parameter
><replaceable
>рядок</replaceable
></parameter
>) [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> — рядок для виводу</para>
</listitem>
</itemizedlist>
<para
>Виводить рядок до <acronym
>STDERR</acronym
> за допомогою <function
>kDebug()</function
>. Призначену для виводу область буде використано для виводу даних, до яких буде додано префікс <computeroutput
>Kate (KJS Scripts):</computeroutput
> </para>
</listitem>
</varlistentry>
</variablelist>

<variablelist id="advanced-editing-tools-scripting-document">
<title
>Інтерфейс прикладних програм <classname
>document</classname
></title>

<varlistentry>
<term
><function
>document.attribute( <parameter
><replaceable
>рядок</replaceable
> </parameter
>, <parameter
><replaceable
>позиція</replaceable
></parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>uint рядок</parameter
> — рядок позиції, для якої слід визначити атрибут.</para
></listitem>
<listitem
><para
><parameter
>uint стовпчик</parameter
> — стовпчик позиції, для якої слід визначити атрибут.</para
></listitem>
</itemizedlist>
<para
>Повертає числовий ідентифікатор атрибута для позиції у документі [<parameter
>рядок</parameter
>,<parameter
>стовпчик</parameter
>]. Атрибут відповідає вигляду або стилю тексту, а також використовується для обчислення підсвічування синтаксису певної частини тексту у змішаних форматах на зразок HTML або PHP.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.canBreakAt( <parameter
>Char c</parameter
>, <parameter
>uint атрибут</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>c</parameter
> — символ, який слід перевірити</para
></listitem>
<listitem
><para
><parameter
>атрибут</parameter
> — атрибут на місці <parameter
>c</parameter
>.</para
></listitem>
</itemizedlist>
<para
>Повертає значення, яке відповідає можливості розбиття рядка на символі «c» з атрибутом «атрибут». Результат визначається за запитом до атрибута-власника підсвічування щодо того, на яких символах можливе розбиття рядка на частини.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.canComment( <parameter
>uint атрибут_початку</parameter
>, <parameter
>uint атрибут_кінця</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>атрибут_початку</parameter
> — атрибут на початку діапазону рядків, який слід перетворити на коментар.</para
></listitem>
<listitem
><para
><parameter
>атрибут_кінця</parameter
> — атрибут наприкінці діапазону рядків, який слід перетворити на коментар.</para
></listitem>
</itemizedlist>
<para
>Повертає значення, яке відповідає належності атрибута_початку і атрибута_кінця до однієї системи підсвічування синтаксису. Якщо ці атрибути належать до однієї системи, підсвічування можливе. </para>
<example>
<title
>Використання canComment</title>
<programlisting
>if ( document.canComment( document.attribute(1,0), document.attribute(5,0) ) ) {
    // 1,0 і 5,0 належать до одної системи підсвічування синтаксису
}
</programlisting>
</example>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.clear(); [функція]</function
></term>
<listitem
><para
>Спорожнює вміст документа.</para
></listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.commentStart( <parameter
>uint атрибут</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>атрибут</parameter
> — атрибут тексту, для якого слід отримати рядок commentStart.</para
></listitem>
</itemizedlist>
<para
>Повертає рядок, який потрібен для позначення початку багаторядкового коментаря для тексту з вказаним атрибутом, або порожній рядок, якщо багаторядкові коментарі не підтримуються форматом тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.commentMarker( <parameter
>uint атрибут</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>атрибут</parameter
> — атрибут тексту, для якого слід отримати рядок commentMarker.</para
></listitem>
</itemizedlist>
<para
>Повертає рядок, який використовується для позначення решти рядка як коментаря для тексту з вказаним атрибутом, або порожній рядок, якщо однорядкові коментарі не підтримуються форматом тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.commentEnd( <parameter
>uint атрибут</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>атрибут</parameter
> — атрибут тексту, для якого слід отримати рядок commentEnd.</para
></listitem>
</itemizedlist>
<para
>Повертає рядок, який потрібен для позначення кінця багаторядкового коментаря для тексту з вказаним атрибутом, або порожній рядок, якщо багаторядкові коментарі не підтримуються форматом тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.editBegin(); [функція]</function
></term>
<listitem>
<para
>Розпочати групу команд редагування. Всі дії, виконані до виклику editEnd(), буде згруповано у дію, яку можна буде скасувати одним викликом дії «Вернути».</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.editEnd(); [функція]</function
></term>
<listitem>
<para
>Завершити групу редагування.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.highlightMode; [властивість: лише для читання]</function
></term>
<listitem>
<para
>Назва системи підсвічування синтаксису документа, на зразок JavaScript або C++. Якщо у документі не встановлено жодного режиму підсвічування, повернутим значенням буде «None». Зауважте, що вам слід використовувати назви англійською у випадках, коли ці назви відрізняються від перекладених назв.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.indentMode; [властивість: лише для читання]</function
></term>
<listitem>
<para
>Назва режиму встановлення відступів у документі, на зразок <literal
>normal</literal
> або <literal
>cstyle</literal
>. Не забувайте, якщо не встановлено жодного режиму, буде повернуто значення <literal
>none</literal
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.indentWidth; [властивість: лише для читання]</function
></term>
<listitem>
<para
>Довжина відступу, встановлена у документі. Використовується, якщо увімкнуто форматування відступів пробілами.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.insertLine( <parameter
>uint рядок</parameter
>, <parameter
>string текст</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> — номер рядка у документі</para>
</listitem>
<listitem
><para
><parameter
>текст</parameter
> — текст, який слід вставити</para
></listitem>
</itemizedlist>
<para
>Вставляє до документа текст <parameter
>текст</parameter
>, починаючи з рядка <parameter
>рядок</parameter
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.insertText( <parameter
>uint рядок</parameter
>, <parameter
>uint стовпчик</parameter
>, <parameter
>string текст</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> — номер рядка</para
></listitem>
<listitem
><para
><parameter
>стовпчик</parameter
> — номер стовпчика</para
></listitem>
<listitem
><para
><parameter
>текст</parameter
> — текст, який слід вставити</para
></listitem>
</itemizedlist>
<para
>Вставляє текст <parameter
>текст</parameter
> у рядок <parameter
>рядок</parameter
>, починаючи зі стовпчика <parameter
>стовпчик</parameter
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>document.length(); [функція]</term>
<listitem>
<para
>Повертає розмір документа у байтах.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.lines(); [функція]</function
></term>
<listitem>
<para
>Повертає кількість рядків у документі.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>document.mixedIndent; [властивість: лише для читання]</term>
<listitem>
<para
>Булівське значення, яке відповідає значенню стану вмикання параметра мішаних відступів у документі. Якщо значенням буде «увімкнено», відступи форматуватимуться за допомогою суміші символів табуляції і пробілів так, як це робиться у редакторі Emacs.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
>document.removeLine( <parameter
>uint рядок</parameter
> ); [функція]</term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> — номер рядка</para
></listitem>
</itemizedlist>
<para
>Вилучає з документа рядок з номером <parameter
>рядок</parameter
></para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.removeText( <parameter
>uint початковийРядок</parameter
>, <parameter
>uint початковийСтовпчик</parameter
>, <parameter
>uint кінцевийРядок</parameter
>, <parameter
>uint кінцевийСтовпчик</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>початковийРядок</parameter
> визначає номер початкового рядка</para
></listitem>
<listitem
><para
><parameter
>початковийСтовпчик</parameter
> визначає номер початкового стовпчика</para
></listitem>
<listitem
><para
><parameter
>кінцевийРядок</parameter
> визначає номер кінцевого рядка</para
></listitem>
<listitem
><para
><parameter
>кінцевийСтовпчик</parameter
> визначає номер кінцевого стовпчика</para
></listitem>
</itemizedlist>
<para
>Вилучає фрагмент тексту від позиції <parameter
>початковийРядок</parameter
>, <parameter
>початковийСтовпчик</parameter
> до позиції <parameter
>кінцевийРядок</parameter
>, <parameter
>кінцевийСтовпчик</parameter
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.setText( <parameter
>string текст</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>текст</parameter
> — текст документа</para
></listitem>
</itemizedlist>
<para
>Замінює весь вміст документа на <parameter
>текст</parameter
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.spaceIndent; [властивість: лише читання]</function
></term>
<listitem>
<para
>Булівське значення, за яким можна визначити чи було увімкнуто форматування відступів пробілами у документі. Якщо таке форматування було увімкнено, відступи у документі створюватимуться додаванням до відступу попереднього рівня indentWidth пробілів, у іншому випадку для кожного наступного рівня додаватиметься символ табуляції.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.textFull(); [функція]</function
></term>
<listitem>
<para
>Повертає повний текст документа. Якщо текст складатиметься з декількох рядків символом переведення рядка буде <constant
>\n</constant
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.textLine( uint рядок ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> — номер рядка</para
></listitem>
</itemizedlist>
<para
>Повертає текст рядка з номером <parameter
>рядок</parameter
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>document.textRange( <parameter
>uint початковийРядок</parameter
>, <parameter
>uint початковийСтовпчик</parameter
>, <parameter
>uint кінцевийРядок</parameter
>, <parameter
>uint кінцевийСтовпчик</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>початковийРядок</parameter
> визначає номер початкового рядка</para
></listitem>
<listitem
><para
><parameter
>початковийСтовпчик</parameter
> визначає номер початкового стовпчика</para
></listitem>
<listitem
><para
><parameter
>кінцевийРядок</parameter
> визначає номер кінцевого рядка</para>
</listitem>
<listitem
><para
><parameter
>кінцевийСтовпчик</parameter
> визначає номер кінцевого стовпчика</para
></listitem>
</itemizedlist>
<para
>Повертає вказаний фрагмент тексту. Якщо текст складатиметься з декількох рядків символом переведення рядка буде <constant
>\n</constant
>.</para>
</listitem>
</varlistentry>

</variablelist
><!--/ document API -->

<variablelist id="advanced-editing-tools-scripting-view">
<title
>Програмний інтерфейс <classname
>view</classname
></title>

<varlistentry>
<term
><function
>view.clearSelection(); [функція]</function
></term>
<listitem>
<para
>Скасовує всі виділення тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.cursorColumn(); [функція]</function
></term>
<listitem>
<para
>Повертає номер стовпчика, де зараз знаходиться курсор (символ табуляції під час підрахунку розбивається на пробіли).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.cursorColumnReal(); [функція]</function
></term>
<listitem>
<para
>Повертає дійсний номер стовпчика, де зараз знаходиться курсор (символ табуляції під час підрахунку вважається одиничним символом).</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.cursorLine(); [функція]</function
></term>
<listitem>
<para
>Повертає номер рядка, у якому знаходиться курсор.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.hasSelection(); [функція]</function
></term>
<listitem>
<para
>Повертає <constant
>true</constant
>, якщо у області перегляду міститься виділений текст, у іншому випадку повертає <constant
>false</constant
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.removeSelectedText(); [функція]</function
></term>
<listitem>
<para
>Вилучає виділений текст, якщо у області перегляду було виділено фрагмент тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selectAll(); [функція]</function
></term>
<listitem>
<para
>Виділяє весь текст документа.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selection(); [функція]</function
></term>
<listitem>
<para
>Повертає виділений у документі текст. Якщо текст складатиметься з декількох рядків символом переведення рядка буде <constant
>\n</constant
>.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selectionEndColumn; [властивість: лише читання]</function
></term>
<listitem>
<para
>Повертає номер завершального стовпчика у виділеному фрагменті.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selectionEndLine; [властивість: лише читання]</function
></term>
<listitem>
<para
>Повертає номер завершального рядка у виділеному фрагменті.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selectionStartColumn; [властивість: лише читання]</function
></term>
<listitem>
<para
>Повертає номер початкового стовпчика у виділеному фрагменті.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.selectionStartLine; [властивість: лише читання]</function
></term>
<listitem>
<para
>Повертає номер початкового рядка виділеного фрагмента тексту.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.setCursorPosition( <parameter
>uint рядок</parameter
>, <parameter
>uint стовпчик</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> вказує рядок для курсора.</para
></listitem>
<listitem
><para
><parameter
>стовпчик</parameter
> вказує стовпчик для курсора.</para
></listitem>
</itemizedlist>
<para
>Переводить курсор введення тексту у позицію [<parameter
>рядок</parameter
>, <parameter
>стовпчик</parameter
>]. Переведення здійснюватиметься у візуальному сенсі: символ табуляції вважатиметься сукупністю <replaceable
>tabwidth</replaceable
> символів, залежно від позиції у рядку. Нову позицію курсора буде показано у області перегляду. Відлік рядків і стовпчиків починається з нуля.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.setCursorPositionReal( <parameter
>uint рядок</parameter
>, <parameter
>uint стовпчик</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>рядок</parameter
> вказує рядок для курсора.</para
></listitem>
<listitem
><para
><parameter
>стовпчик</parameter
> вказує стовпчик для курсора.</para
></listitem>
</itemizedlist>
<para
>Переводить курсор введення тексту у позицію [<parameter
>рядок</parameter
>, <parameter
>стовпчик</parameter
>]. Значення позиції визначатимуться за кількістю символів у рядку: символ табуляції вважатиметься одним символом. Нову позицію курсора буде показано у області перегляду. Відлік рядків і стовпчиків починається з нуля.</para>
</listitem>
</varlistentry>

<varlistentry>
<term
><function
>view.setSelection( <parameter
>uint початковийРядок</parameter
>, <parameter
>uint початковийСтовпчик</parameter
>, <parameter
>uint кінцевийРядок</parameter
>, <parameter
>uint кінцевийСтовпчик</parameter
> ); [функція]</function
></term>
<listitem>
<itemizedlist>
<title
>Параметри</title>
<listitem
><para
><parameter
>початковийРядок</parameter
> визначає номер початкового рядка</para
></listitem>
<listitem
><para
><parameter
>початковийСтовпчик</parameter
> визначає номер початкового стовпчика</para
></listitem>
<listitem
><para
><parameter
>кінцевийРядок</parameter
> визначає номер кінцевого рядка</para
></listitem>
<listitem
><para
><parameter
>кінцевийСтовпчик</parameter
> визначає номер кінцевого стовпчика</para
></listitem>
</itemizedlist>
<para
>Виділяє фрагмент тексту від рядка <parameter
>початковийРядок</parameter
> і стовпчика <parameter
>початковийСтовпчик</parameter
> до рядка <parameter
>кінцевийРядок</parameter
> і стовпчика <parameter
>кінцевийСтовпчик</parameter
>.</para>
</listitem>
</varlistentry>

</variablelist>

<example id="advanced-editing-tools-scripting-example">

<title
>Приклад скрипту</title>
<para
>Для прикладу, ми створимо невеличкий скрипт, який переводитиме літери у виділеному фрагменті тексту у верхній регістр. Очевидно, спочатку нам слід перевірити, чи виділено якийсь фрагмент тексту. Якщо це так, нам слід отримати текст, змінити регістр символів у ньому, а потім замінити старий текст на новий. Реалізувати ці дії можна десь так:</para>

<programlisting
>if ( view.hasSelection() )
{
  // uppercase selection
  column = view.selectionStartColumn;
  line = view.selectionStartLine;

  selection = view.selection().toUpperCase();

  document.editBegin();
  view.removeSelectedText();
  document.insertText( line, column, selection );
  document.editEnd();
}
</programlisting>

<para
>Щоб зібрати цю дію до групи так, щоб дію можна було скасувати одним викликом дії <guimenuitem
>Вернути</guimenuitem
>, ми розташуємо рядки <programlisting
>view.removeSelectedText()</programlisting
> і <programlisting
>document.insertText()</programlisting
> між рядками <programlisting
>document.editBegin()</programlisting
> і <programlisting
>document.editEnd()</programlisting
>.</para>

</example>

<example id="advanced-editing-tools-desktop-example">
<title
>Приклад файла <filename
>.desktop</filename
></title>

<para
>Ось приклад файла .desktop, який супроводжуватиме наведений вище скрипт.</para>

<programlisting
># Приклад файла .desktop
[Desktop Entry]
Encoding=UTF-8
Name=Kate Part JavaScript Uppercase
Comment=Script to uppercase the selection
X-Kate-Command=uppercase-selection
X-Kate-Help=&lt;p&gt;Usage: &lt;code&gt;uppercase-selection&lt;/code&gt;&lt;/p&gt;
</programlisting>

<para
>Як бачите, ви можете визначати кодування (Encoding), встановлювати назву (Name), коментар (Comment) і текст довідки за допомогою X-Kate-Help, а також назву команди через X-Kate-Command. Записи Name, Comment і X-Kate-Help буде автоматично перекладено іншими мовами командами з перекладу KDE, якщо відповідні файли буде розміщено у сховищі SVN KDE.</para>

</example>

<sect3>
<title
>Збираємо все докупи</title>

<para
>&kate; шукатиме у теках скриптів (див. <link linkend="advanced-editing-tools-scripting-introduction"
>вище</link
>) файли <filename
>*.js</filename
>. Для кожного знайденого файла програма шукатиме відповідний файл <filename
>.desktop</filename
>, наприклад, для uppercase.js виконуватиметься пошук uppercase.desktop. </para>
<para
>Якщо файл <filename
>.desktop</filename
> не буде знайдено, скрипт буде зареєстровано у командному рядку katepart за назвою файла без суфікса .js, отже у нашому прикладі цією назвою буде <literal
>uppercase</literal
>. Якщо назви команди достатньо і вам не потрібні додаткові можливості, які забезпечуються наявністю файла <filename
>.desktop</filename
>, вам взагалі не потрібен файл <filename
>.desktop</filename
>. </para>
<para
>Якщо існує файл <filename
>.desktop</filename
>, katepart прочитає назву, за якою скрипт було зареєстровано з запису файла .desktop X-Kate-Command, наприклад, X-Kate-Command=uppercase-selection.</para>

</sect3>

</sect2>

</sect1>

</chapter>
