Юникод в LuaFAR

Здесь обсуждается всё, что касается макросов.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Почему не работает макрос c os.execute

Post by Shmuel »

Latest post of the previous page:

John Doe wrote: Или это проблематично?
Насколько проблематично, пока не смотрел, т.к. не было надобности в os.execute.
Допустим, она уже юникодная, есть пример применения?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Почему не работает макрос c os.execute

Post by John Doe »

Применять везде, где требуется запуск консольных утилит в консоли фара (win.ShellExecute не подходит, т.к. умеет запускать только в отдельном окне).

Например http://forum.farmanager.com/viewtopic.php?f=60&t=8546
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Почему не работает макрос c os.execute

Post by Shmuel »

Добавлена функция win.system.
fml2
Posts: 534
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 2 times
Been thanked: 8 times

Почему не работает макрос c os.execute

Post by fml2 »

А это действительно функция из WinAPI (как сказано в документации по luafar) или из CRT? По написанию (с маленькой буквы) скорее похоже на CRT.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Почему не работает макрос c os.execute

Post by Shmuel »

fml2 wrote: скорее похоже на CRT.
Поправил.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Юникод в LuaFAR

Post by John Doe »

Существует ли сейчас простой способ отключить юникодные функции, т.е. что бы a:len() стало эквивалентно string.len(a)?

edit:

Code: Select all

    for k,v in pairs(unicode.utf8) do
      unicode.utf8[k] = string [k]
    end
Вот так в лоб работает, но может быть я что-то упускаю?
Last edited by John Doe on Wed 30 Aug, 2017 11:50, edited 1 time in total.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Юникод в LuaFAR

Post by Shmuel »

debug.setmetatable("", {__index=string})
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Юникод в LuaFAR

Post by John Doe »

Размышления вслух:
Это может понадобиться при использовании сторонних библиотек, не рассчитывающих на Selene Unicode.
Но в данный момент нейтрализовать так "подмену" не получится, поскольку luamacro сам в некоторых случаях рассчитывает на utf8-функции.
Разве что если в коде плагина адресовать их не через ":", а напрямую (через unicode.utf8).
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Юникод в LuaFAR

Post by Shmuel »

Трудно усидеть на двух стульях :)
Даже если в плагине сделать то, что вы говорите, а как же макросы? Практически любой из них, использующий строковые функции, рассчитывает именно на обработку строк в UTF-8.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Юникод в LuaFAR

Post by John Doe »

Shmuel wrote: Wed 30 Aug, 2017 14:56а как же макросы?
Я думал о том, чтобы кратковременно менять метатаблицу, на время выполнения какой-либо функции сторонней библиотеки.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Юникод в LuaFAR

Post by Shmuel »

Я в общем-то догадывался.
Вообще-то это должно быть безопасно и сейчас (сторонняя библиотека изнутри своей функции не обращается к LuaMacro), но необходимо принять меры, чтобы даже в случае ошибки, "брошенной" из библиотечной функции, восстанавливать исходную метатаблицу.
Но в целом мне такие игры кажутся опасными.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Юникод в LuaFAR

Post by John Doe »

Shmuel wrote: Wed 30 Aug, 2017 16:26Но в целом мне такие игры кажутся опасными.
Безусловно..
Shmuel wrote: Wed 30 Aug, 2017 16:26но необходимо принять меры
Буду иметь ввиду, спасибо.

Кстати аналогичную проблему представляет и переопределённая функция print...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ошибка в unicode.utf-8.match ?

Post by John Doe »

Code: Select all

1. LuaFAR: add "luautf8" library (https://github.com/starwing/luautf8).
   - The library can be directly accessed via "utf8" global variable.
   - This library becomes the default when calling string functions with colon syntax, e.g. var:match().
   - A few missing functions are copied to utf8 from unicode.utf8: dump, format, rep, utf8valid.
Хотелось бы уяснить все последствия этого изменения детально.
Поправьте если что:
1. utf.find отличается от прежней функции тем, что оперирует символами, а не байтами.
2. utf.cfind (не документирована, но оставлена для совместимости) отличается от прежней функции тем, что “position captures” возвращаются тоже в символах.
3. Другие изменения?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ошибка в unicode.utf-8.match ?

Post by Shmuel »

1.Да, 2.Да
3.Появилась глоб.перем. utf8
4.Больше нет unicode.ascii и т.д. но есть unicode.utf8=utf8
5.Появились новые ф-ции в таблице utf8
6.Наверняка со временем что-то ещё обнаружится
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Ошибка в unicode.utf-8.match ?

Post by John Doe »

* 1. и 2. в отдельных случаях могут привести к проблемам (свои скрипты ещё не проверял)

* Я не знаю деталей реализации, но опасаюсь, что новая find при использовании в цикле для прохода по длинным строкам может быть драматически неэффективна.
Т.е. следует предпочитать ей gmatch, хотя возможны (и на моей практике встречались) случаи, когда gmatch не достаточно.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

Ошибка в unicode.utf-8.match ?

Post by Shmuel »

John Doe wrote: Wed 04 Sep, 2019 12:29 опасаюсь, что новая find при использовании в цикле для прохода по длинным строкам может быть драматически неэффективна
Не исключено. Но не оставлять же обе библиотеки в LuaFAR. По мере накопления информации картина будет яснее.
Неск. лет назад я тестировал некоторые ф-ции этой б-ки на производительность, и результаты были в её пользу по сравнению c Selene Unicode.
Post Reply

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