True Template — использование текстовых шаблонов при написании кода

Здесь можно обсудить ваш любимый плагин.
Volodya
Posts: 268
Joined: Thu 31 Mar, 2005 19:41
Has thanked: 30 times

Post by Volodya »

Latest post of the previous page:

Хотелось бы иметь в To код \u для вставки имени текущего пользователя (аналог @@USER_NAME@@).
User avatar
Tim Sobolev
Posts: 729
Joined: Fri 01 Apr, 2005 14:46
Location: Украина
Has thanked: 1 time
Been thanked: 7 times

Post by Tim Sobolev »

Volodya
В следующей сборке скорее всего будет
jk
Posts: 4
Joined: Tue 04 Dec, 2007 16:51

Post by jk »

Помогите, плиз.

Хочу запользовать этот плагин для индентации и кое-какого форматирования (идентация по 4 пробела при длине таба в 8 пробелов), чистка концов строк (пробелы в конце) и т.д.

Задачка: когда нажимаешь два ентера при включеной автоиндентации получаются две пустые строки из одних пробелов (или табуляций), которые были вставлены автоматически для индентации (это фар так себя сам ведет, независимо от плугина). Хочется, чтобы при нажатии Энтера в строке, состоящей только из пробелов, курсор переходил на следующуюю строчку с сохранением индентации, но предыдуцая сторочка становилась пустой (только перевод строки, без лишних пробелов).

Беру файлик "true-source-c++-base.xml" и вставляю туда строчку:

Code: Select all

<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\r" />
При срабатывании фар падает. Видимо, хвостовая рекурсия переполнила стек. Хотя ее быть не должно, т.к. согласно документации:
\n - Enter
\r - Enter (с учетом Smart Indent)
\r исполняет только правила индентации, к которым Expand по идее не относится.
Если меняю строчку на :

Code: Select all

<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\n" />
Оно нифига не удаляет и оставляет мне выделенный блок.

Помогло вот это:

Code: Select all

<Expand Pattern="[\t ]+" Key="Enter" At="[\t ]+\p" To="\{ShiftHome}\{CtrlDel}\{Enter}" />
Работает как надо.

Но появилась другая проблема. Перестала работать хитрая индентация. Точнее, те ее действия, которые должны происходить по нажатию "Enter". Скажем, Enter после "{" делает обычную индентацию, без дополнительного отступа (я вырубил "автораскрывание" скобок, и вообще все автораскрывание, оставил только индентацию).

Как заставить работать этот макрос с сохранением Smart Indent?
jk
Posts: 4
Joined: Tue 04 Dec, 2007 16:51

Post by jk »

Не работают два привила Expand назначенные на одну кнопку:

Code: Select all

  <Expand Key="Tab" At="[\t]*  \p" To="\b\b\t" />
  <Expand Key="Tab" At="[\t]*\p" To="  " />
Работает только первое.

Не работает Expand по вводу табуляции:

Code: Select all

  <Expand Pattern="\t" Imm="\t" At=".*\p" To="zzz" />
jk
Posts: 4
Joined: Tue 04 Dec, 2007 16:51

Post by jk »

(Тихо сам с собой)
Залез в исходники, сделал поддержку нескольких правил на одной кнопке. Наконец-то получил "Fake half tabs" из Midnignt Commander'а (индентация в 4 пробела с сохранением стандартной табуляции). Плюс автоиндентация и уменьшение индентации по BackSpace.

Не понятно только где откопали такую кривую библиотечку regexp'ов. Неужели в Colorer'e? Он, вроде не страдал особыми странностями.
1. Дебаг версия падает по переполнению стека при попытке сравнить строку "// <4093 пробела> " с регэкспом /\/\/.*/. Т.к. строка расширяется до 4096 символов автоматически, не приходится надеяться на то, что у пользователя такого не произойдет если в его файлах строки будут короче. Для релиз версии стека еще хватает.
Собственно, глюк заключается в том, что размер стека не должен зависеть от длины строки (стек допуксается использовать только для возвратов на применение правила, а не на входной символ). А тут операция ".*" реализована хвостовой рекурсией а не итерацией. Т.е. стек жрется по уровню на каждый входной символ, а не на два уровня (на выражение "((.)*)" и на подвыражение "(.)"), как положено.
2. При попытке решить проблему 1.) изменил
#define MAX_STR_LEN 4096
на
#define MAX_STR_LEN 1024
После чего плугин начал падать из-за повреждение стека (запись за границу массива. Воистину magic number...
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: True Template

Post by maxdrfl »

TrueTemplate 2.09

не работает:

Code: Select all

<Navigation Mask="\\include\{(.+)\}" Pos="1" Path="." Suffixes=".tex" Rect="0%,0%,100%,100%" Viewer="0"/>
работает:

Code: Select all

<Navigation Mask="\\include\{(.+)\}" Pos="1" Path="." Rect="0%,0%,100%,100%" Viewer="0"/>
dolzenko
Posts: 452
Joined: Wed 19 Apr, 2006 14:42
Location: Ростов-на-Дону

Re: True Template

Post by dolzenko »

А возможно ли
1. штатными средствами плагина натравить например на текущее выделение замену по регэкспам
2. передать \ч параметры в вызове внешней команды через \o
amigo421
Posts: 11
Joined: Tue 25 Mar, 2008 16:16

вопрос новичка по truetemplate

Post by amigo421 »

Добрый день

пара вопросов:
1. в выпадающем списке походящих под введенную последовательность вариантов (в моем случае - список функций) есть возможность прирутить (или это уже есть и просто неумею пользоваться) быстрый выбор по первым набранным буквам (в некоторых случаях список велик и прокручивать разыскивая "на глаз" долго)?
2. может кто то пробовал написать обработку для *.h файлов для генерации xml с правилами?

Заранее спасибо
d.k.Brazz
Posts: 176
Joined: Wed 07 Sep, 2005 17:02
Location: дети берутся?

Re: True Template

Post by d.k.Brazz »

такой вот баг (заметил случайно):
берем голый фар (Far171.b2449.x86.rar)
устанавливаем TrueTemplate_2_09.7z
создаем файл test.sql
и с самого начала строки вводим знак '-' (минус) 4194 раза
при вводе 4195-го минуса - плагин падает

Code: Select all

╔════════════ Ошибка вызова плагина ════════════╗
║           Исключительная ситуация:            ║
║   "Нарушение доступа (запись в 0x2D3FB8DD)"   ║
║    Адрес исключения - 0x1001EA0F, модуль:     ║
║ C:\Far-Test\Plugins\TrueTemplate\true-tpl.dll ║
╟───────────────────────────────────────────────╢
║            Плагин будет выгружен!             ║
║                  Продолжить                   ║
╚═══════════════════════════════════════════════╝
При дальнейшем вводе минусов падает Colorer (если он установлен)
User avatar
WARP ItSelf
Самый умный
Posts: 1011
Joined: Tue 15 Mar, 2005 23:19
Contact:

Re: True Template

Post by WARP ItSelf »

d.k.Brazz

Image
Никто не знал, а я...
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: True Template

Post by zg »

WARP ItSelf wrote:d.k.Brazz

Image
да с тру темлейт — боян вообще-то, там где-то статические буфера под строки, раньше меньше были, сейчас видимо увеличили.
d.k.Brazz
Posts: 176
Joined: Wed 07 Sep, 2005 17:02
Location: дети берутся?

Re: True Template

Post by d.k.Brazz »

zg wrote:
WARP ItSelf wrote:d.k.Brazz

Image
да с тру темлейт — боян вообще-то, там где-то статические буфера под строки, раньше меньше были, сейчас видимо увеличили.
Та как-то и не напрягает вовсе
наткнулся когда пытался локализовать аналогичный баг в колорере из-за которого падает фар
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: True Template

Post by zg »

d.k.Brazz wrote:Та как-то и не напрягает вовсе
ну меня не то чтобы напрягает, но неприятно.
d.k.Brazz
Posts: 176
Joined: Wed 07 Sep, 2005 17:02
Location: дети берутся?

Re: True Template

Post by d.k.Brazz »

по любезному совету CrOm'а из соседней ветки проверил с точками - фар молча захлопывается после ввода 4099й точки в строке в файле с расширением txt
причем аналогично ведет себя и с минусами в sql если вводить минусы не копипастом поблочно а после 4098го ввести еще один минус - точно так же тихо падает фар
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

Re: True Template

Post by zg »

d.k.Brazz wrote:по любезному совету CrOm'а из соседней ветки проверил с точками - фар молча захлопывается после ввода 4099й точки в строке в файле с расширением txt
причем аналогично ведет себя и с минусами в sql если вводить минусы не копипастом поблочно а после 4098го ввести еще один минус - точно так же тихо падает фар
ну я ж сказал, буфер:

Code: Select all

#define MAX_STR_LEN 4096
char s[MAX_STR_LEN];
lstrcpyn(s, gs.StringText, gs.StringLength+1);
User avatar
Andrey Budko
Posts: 1203
Joined: Fri 01 Apr, 2005 14:03
Contact:

Re: True Template

Post by Andrey Budko »

zg wrote:

Code: Select all

char s[MAX_STR_LEN];
lstrcpyn(s, gs.StringText, gs.StringLength+1)
автор этих строк забыл как работает lstrcpyn?
Post Reply

Return to “Обсуждение плагинов”