Интроспекция в макроязыке

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Интроспекция в макроязыке

Post by John Doe »

Skirda wrote:А как добавится новое "слово" в макроязык? Или, скажем, после появления Mantis#466 количество "слово" может быть значительно больше...
Может вам сделать функцию... что-то типа "S=Macro.EnumWord(Idx)"? Idx от 1 до бесконечности, в случае достижения бесконечности функция вернет пустую строку.
Тогда куча строк "%Items=" схлопывается в тривиальный цикл...
Не много ли - целая специальная функция для единственного в своём роде макроса?
А список слов для макроса можно вытягивать из исходников, или даже из hrc-схемы colorer.
Last edited by HaRT on Wed 28 Mar, 2012 11:43, edited 1 time in total.
Reason: Название Темы уточнено и обобщено
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Skirda »

John Doe wrote:А список слов для макроса можно вытягивать из исходников, или даже из hrc-схемы colorer.
Это утверждение или вопрос?
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by John Doe »

Утверждение.

Стоит ли загромождать макроязык такими специфическими функциями, если получить список кейвордов и так не представляет особых сложностей?
(А это вопрос)
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by DAtaMan »

Skirda wrote:Может вам сделать функцию... что-то типа "S=Macro.EnumWord(Idx)"? Idx от 1 до бесконечности, в случае достижения бесконечности функция вернет пустую строку.
Да!
Тоже думал об этом, только "комплектом":

Code: Select all

Macro.Keyword(N[, Type])
Type=
0 - keyword
1 - area
2 - function name
3 - function syntax
...
Ы?
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Skirda »

John Doe wrote:Стоит ли загромождать макроязык такими специфическими функциями, если получить список кейвордов и так не представляет особых сложностей?
Читай внимательно, что я ранее написал (hint: тыч).
DAtaMan wrote:Ы?
Все же 3 параметра:
S=Macro.Keyword(What,Index[,Type])
What:
0 = Far Keywords (те, что в массиве MKeywords)
1 = Area (те, что в массиве MKeywordsArea)
2 = Macro Flags (те, что в массиве MKeywordsFlags)
3 = Macro Operation (которые с '$' начинаются)
4 = Constants (которые вне MKeywords, т.е., считанные из базы и предопределенные аля MsX, RCounter, Far.Cfg.Err,...)
5 = Macro Function (все зарегистрированные; с учетом 466 мантиса здесь же будут и функции, которые предоставят плагины)
Type:
0 = имя
1 = синтаксис
We are the Borg. You will be assimilated.
So Say We All!
2useven10
Posts: 5232
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 315 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by 2useven10 »

может лучше добавить S=Macro.Syntax(What, Index) ?
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by John Doe »

И для комплекта Index=Macro.KeywordSearch(What, NameRegex)

P.S.
Не так конечно, но наподобие.
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Skirda »

2useven10 wrote:может лучше добавить S=Macro.Syntax(What, Index) ?
Может и так, но эта функция будет возвращать "истину" только для функций ибо для прочего... а какой синтаксис у прочего? ;-)
We are the Borg. You will be assimilated.
So Say We All!
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Max Rusov »

Нафига все это? В макроязыке нет гораздо более простых и нужных вещей (функций, массивов...). Вы что планируете макропарсер на макроязыке написать?
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Skirda »

John Doe wrote:И для комплекта Index=Macro.KeywordSearch(What, NameRegex)
ммм... ок, подумаю.


ПыСы. Надо выносить часть обсуждений про новые функции отсюда в отдельную тему, а то хозяин темы опять будет говорить, что "все засрали" :-)
We are the Borg. You will be assimilated.
So Say We All!
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: Набор макросов FAR3 от SimSU (не тривиальные)

Post by Skirda »

Max Rusov wrote:В макроязыке нет гораздо более простых и нужных вещей (функций, массивов...).
Перечисленного тобой... здесь думать надо много (и времени нужно много), а то, что сейчас обсуждаем - десяток строк кода, натыканных на клавиатуре почти шаблонно.
We are the Borg. You will be assimilated.
So Say We All!
User avatar
DAtaMan
Posts: 262
Joined: Wed 24 Jun, 2009 10:01
Location: не отсюда

Re: S=Macro.EnumWord(Idx)

Post by DAtaMan »

Skirda wrote: Все же 3 параметра:
S=Macro.Keyword(What,Index[,Type])
...
А может так?

Code: Select all

Macro.Keyword(Index[, Type])
Type:
0 (по-умолчанию) - Far Keywords (те, что в массиве MKeywords)
1 - Area (те, что в массиве MKeywordsArea)
2 - Macro Flags (те, что в массиве MKeywordsFlags)
3 - Macro Operation (которые с '$' начинаются)

Code: Select all

Macro.Func(Index[, Type])
Type:
0 (по-умолчанию) - имя
1 - синтаксис
2 - GUID плагина, предоставляющего функцию

Code: Select all

Macro.Var(Index[, Type])
Macro.Const(Index[, Type])
Type:
0 (по-умолчанию) - имя переменной/константы
1 - значение
Если Index == 0, то возвращается количество

Последние две пригодились бы для отладки.
Max Rusov wrote:

Code: Select all

%Array = Array.New
%Count = Array.Count( %Array )
Array.Set( %Array, %Index, %Value )
%Value = Array.Get( %Array, %Index )
Array.Free( %Array )
Устроит?
Нет, лучше

Code: Select all

a[1] = 1
a["два"] = 2
:)
2B OR NOT 2B = FF (Иногда code - это просто код. Почти Дйерф Омолш Днумзигис)
To ban or not to ban, that is the question. ©
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: S=Macro.EnumWord(Idx)

Post by Max Rusov »

Macro.Var - Вот это - поддерживаю. Перебор глобальных переменных - нужная вещь. Только я бы расширил:

Code: Select all

Macro.Var(Regexp, Index[, Type])
User avatar
Skirda
Posts: 3475
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 8 times

Re: S=Macro.EnumWord(Idx)

Post by Skirda »

Max Rusov wrote:Только я бы расширил:

Code: Select all

Macro.Var(Regexp, Index[, Type])
разжуй
We are the Borg. You will be assimilated.
So Say We All!
User avatar
John Doe
Бюрократ
Posts: 13860
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 74 times
Been thanked: 428 times
Contact:

Post by John Doe »

Обсуждение массивов отправлено в профильную тему.
Post Reply

Return to “Обсуждение макросов”