Юникод в LuaFAR

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

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

Post by Shmuel » Wed 28 Jan, 2015 18:22

Latest post of the previous page:

Добавлена функция win.system.

fml2
Posts: 518
Joined: Mon 09 Jul, 2012 22:10
Has thanked: 1 time
Been thanked: 7 times

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

Post by fml2 » Wed 28 Jan, 2015 22:47

А это действительно функция из WinAPI (как сказано в документации по luafar) или из CRT? По написанию (с маленькой буквы) скорее похоже на CRT.

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

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

Post by Shmuel » Wed 28 Jan, 2015 23:26

fml2 wrote: скорее похоже на CRT.
Поправил.

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

Юникод в LuaFAR

Post by John Doe » Wed 30 Aug, 2017 11:39

Существует ли сейчас простой способ отключить юникодные функции, т.е. что бы 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: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Юникод в LuaFAR

Post by Shmuel » Wed 30 Aug, 2017 11:54

debug.setmetatable("", {__index=string})

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

Юникод в LuaFAR

Post by John Doe » Wed 30 Aug, 2017 14:10

Размышления вслух:
Это может понадобиться при использовании сторонних библиотек, не рассчитывающих на Selene Unicode.
Но в данный момент нейтрализовать так "подмену" не получится, поскольку luamacro сам в некоторых случаях рассчитывает на utf8-функции.
Разве что если в коде плагина адресовать их не через ":", а напрямую (через unicode.utf8).

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Юникод в LuaFAR

Post by Shmuel » Wed 30 Aug, 2017 14:56

Трудно усидеть на двух стульях :)
Даже если в плагине сделать то, что вы говорите, а как же макросы? Практически любой из них, использующий строковые функции, рассчитывает именно на обработку строк в UTF-8.

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

Юникод в LuaFAR

Post by John Doe » Wed 30 Aug, 2017 16:15

Shmuel wrote:
Wed 30 Aug, 2017 14:56
а как же макросы?
Я думал о том, чтобы кратковременно менять метатаблицу, на время выполнения какой-либо функции сторонней библиотеки.

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

Юникод в LuaFAR

Post by Shmuel » Wed 30 Aug, 2017 16:26

Я в общем-то догадывался.
Вообще-то это должно быть безопасно и сейчас (сторонняя библиотека изнутри своей функции не обращается к LuaMacro), но необходимо принять меры, чтобы даже в случае ошибки, "брошенной" из библиотечной функции, восстанавливать исходную метатаблицу.
Но в целом мне такие игры кажутся опасными.

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

Юникод в LuaFAR

Post by John Doe » Wed 30 Aug, 2017 21:13

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

Кстати аналогичную проблему представляет и переопределённая функция print...

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

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

Post by John Doe » Wed 04 Sep, 2019 12:12

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: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

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

Post by Shmuel » Wed 04 Sep, 2019 12:17

1.Да, 2.Да
3.Появилась глоб.перем. utf8
4.Больше нет unicode.ascii и т.д. но есть unicode.utf8=utf8
5.Появились новые ф-ции в таблице utf8
6.Наверняка со временем что-то ещё обнаружится

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

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

Post by John Doe » Wed 04 Sep, 2019 12:29

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

* Я не знаю деталей реализации, но опасаюсь, что новая find при использовании в цикле для прохода по длинным строкам может быть драматически неэффективна.
Т.е. следует предпочитать ей gmatch, хотя возможны (и на моей практике встречались) случаи, когда gmatch не достаточно.

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

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

Post by Shmuel » Wed 04 Sep, 2019 12:37

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

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

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

Post by John Doe » Wed 04 Sep, 2019 12:40

Ещё следут помнить, что utf-8 версия sub значительно медленнее стандартной.
И вот беглый просмотр содержимого папки Macros показывает, что это распространённый паттерн - использование sub по значениям полученным из find.

Раньше я сочетал utf8.find и string.sub, теперь это видимо поломалось.
Last edited by John Doe on Wed 04 Sep, 2019 12:42, edited 1 time in total.

User avatar
John Doe
Бюрократ
Posts: 12364
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 171 times

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

Post by John Doe » Wed 04 Sep, 2019 12:49

Shmuel wrote:
Wed 04 Sep, 2019 12:37
Но не оставлять же обе библиотеки в LuaFAR.
Да, это был бы перебор.
Надо разобраться, возможна новая библиотека предоставляет какие-то свои средства для эффективной обработки описанных кейсов.

Shmuel
Posts: 5860
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 22 times
Been thanked: 215 times

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

Post by Shmuel » Wed 04 Sep, 2019 12:49

John Doe wrote:
Wed 04 Sep, 2019 12:40
Раньше я сочетал utf-8.find и string.sub, теперь это видимо поломалось.
Сожалею о причинённых неудобствах, но всё же у меня ощущение, что достоинства перевешивают.
Возможно, вы приспособите gmatch/gsub для той задачи, о которой вы говорите. Предлагаю не спешить, а если действительно будет видно, что чего-то не хватает, будем принимать меры.

Post Reply

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