Ошибки из-за ужесточения проверки UTF-8 в строках

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

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

Latest post of the previous page:

buniak_a_h wrote: Thu 30 Apr, 2020 17:09
Shmuel wrote: Thu 30 Apr, 2020 16:51 Давайте конкретнее - кого нет, чей опубликованный макрос сломался.
Ну!!! «А теперь назовите всех поимённо» ©Старый анекдот.
Значит как доходит дело до конкретики, сказать нечего? Ни одного примера?
buniak_a_h wrote: Thu 30 Apr, 2020 17:09
Shmuel wrote: Thu 30 Apr, 2020 16:51По данной теме?
Почему по данной? Это - обобщение.
Потому что обсуждается вполне конкретная тема, и другие вопросы на мантисе здесь офтопик.
citRiks wrote: Thu 30 Apr, 2020 17:17 а можно которые поломаны не только изза УТФ8?
Нет, конечно. Что мне делать нечего?
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

и кстати вопрос, например автора не было на форуме полгода
что теперь делать будем, ждать еще полгода до починки? :)

Ну в целом, я могу согласится что можно дать шанс новой библиотеке
если уж доверились этой Ванге, то сдаваться так быстро не есть доблесть
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

Shmuel,
а можно я зайду в пакеты ЛуаФар4Едитор,
и посмотрю как там дела сейчас будут?
я почему-то уверен что там будет много пищи для размышлений,
сможете помочь?
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

citRiks wrote: Thu 30 Apr, 2020 17:21 и кстати вопрос, например автора не было на форуме полгода
что теперь делать будем, ждать еще полгода до починки?
Хорошо, снижаю порог до полугода. Но не меньше.
citRiks wrote: Thu 30 Apr, 2020 17:24 а можно я зайду в пакеты ЛуаФар4Едитор, и посмотрю как там дела сейчас будут?
я почему-то уверен что там будет много пищи для размышлений, сможете помочь?
Поднимайте вопросы в темах этих пакетов на форуме, а там посмотрим.
citRiks
Posts: 899
Joined: Fri 25 Oct, 2019 18:18
Has thanked: 274 times
Been thanked: 47 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by citRiks »

Shmuel, если успею, меня ЗГ кажется банить собрался, прислал в личку предупреждение.
(смиренно вздыхает)
А кто не поверит в наше миролюбие, / Тот кровью умоется. / И будет такая борьба за мир, / Что камня на камне не останется.
User avatar
zg
zero-gravity
Posts: 5878
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by zg »

buniak_a_h wrote: Thu 30 Apr, 2020 16:49Вы, видимо, пользовались некорректным поведением функций библиотеки.
последний раз по хорошему прошу не называть некорректной работу чего-то только по той причине, что это работает не так, как ожидали вы. функция работала в полном соответствии с документацией, предсказуемо и понятно. где-то даже код проще был. всё некорректное поведение — исключительно в вашей голове.
buniak_a_h wrote: Thu 30 Apr, 2020 16:49это то, что те функции, которые должны выдавать одинаковый результат, выдавали разный. строка:match("*()$") и строка:len()+1 по определению этого паттерна должны быть равны.
функции должны реализовывать функционал, описанный в документации.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

zg, есть возражения, написал в ЛС, чтоб не плодить оффтопик.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

Для сильно желающих пользоваться прежней версией библиотеки - можете установить приложенный архив, и будет вам счастье.
Только не забывайте, что макросы, которые у вас работают, не обязательно будут работать на стандартной инсталляции Фара.
--
luautf8-0.1.1.7z
(31.96 KiB) Downloaded 18 times
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

Shmuel, а нельзя сделать так:
1. Добавить "гибкие" варианты функций примерно так:

Code: Select all

utf8.Flex_len = function(s)
 if ValidUTF8(s) then return rawget('len')(s) else return string.len(s) end
end
А в metatabe записать нечто типа

Code: Select all

utf8.setmetatable.__index = 
 function (self, key)
 return rawget (self, 'Flex_'..key or key
end,
Возможно, я некорректно выразился, но если Вы поняли идею - можно её реализовать?
P/S. Если возможно, но Вам недосуг, не могли бы Вы хотя бы написать, как оно должно выглядеть, на примере одной функции (для простоты - той же len было бы удобно)
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by Shmuel »

buniak_a_h wrote: Thu 30 Apr, 2020 20:20 Возможно, я некорректно выразился, но если Вы поняли идею - можно её реализовать?
Реализовать это можно, так же как и многое другое. Другое дело, нужно ли?
Насчёт того, как должно выглядеть - ну поиграйтесь сами, сейчас вечер, я устал.
А с завтрашнего дня намечается уже работа, за которую платят, и естественно моё участие в форуме резко снизится.
На данный момент изменения в LuaFAR/LuaMacro по обсуждаемой теме не планируются.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

Shmuel, спасибо за надежду. Есть хоть смысл пробовать. :-)
Отдыхайте, зарабатывайте - Вы нам ещё нужны ;-)
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

"Пер-анальный" (прокто-логический) ход, гарантирующий не-влеты и по возможности корректную работу со строками получился примерно такой (внимание citRiks;-) )
добавить в _macroinit.lua следующий небольшой блок (пример приведён для функций len и match)
  1. if not utf8.Utf8_len then
  2.  utf8.Utf8_len = utf8.len
  3.  utf8.len = function(s)
  4.   return (utf8.utf8valid(s) and utf8.Utf8_len or string.len)(s)
  5.  end
  6.  utf8.Utf8_match = utf8.match
  7.  utf8.match = function(s,...)
  8.   return (utf8.utf8valid(s) and utf8.Utf8_match or string.match)(s,...)
  9.  end
  10.  -- ну и так далее для всех нужных функций,
  11. end
Суть в том, что обычная функция подменяется на автоматически переключающаяся между библиотеками utf8 и string в зависимости от первого параметра (строки). И ничего не переделывать :-)
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

Более компактный вид скрипта:
  1. if not utf8.Utf8_len then
  2.  local Patt = [[return
  3.  function(s,...)
  4.   return (utf8.utf8valid(s) and utf8.Utf8_%s or string.%s)(s,...)
  5.  end]]
  6.  for _,v in ipairs({'len','match','find','gmatch','gsub','lower','upper'}) do
  7.   utf8['Utf8_'..v] = utf8[v]
  8.   utf8[v] = loadstring(string.format(Patt, v, v), v)()
  9.  end
  10. end
User avatar
HaRT
Moderator
Posts: 9600
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 114 times
Been thanked: 233 times

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by HaRT »

buniak_a_h wrote: Fri 01 May, 2020 00:50 Более компактный вид скрипта
А разве нельзя обойтись без задания кода строковым литералом? Вроде ж достаточно литералом задавать имя метода (как у вас и сделано) и обращаться к методу через [].

03:29 MSK Т.е. получается
Last edited by HaRT on Fri 01 May, 2020 01:29, edited 1 time in total.
Фар есть инструмент, а не нянька. © 2009 DrKnS
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

HaRT, замечательно. Просто исторически так получилось. Начинал делать в нотации utf8.имя-функции (не через []), потом сделал цикл, а чтоб поменьше менять, сделал строку и передавал имя через параметр format. Про то, что доступ к полям таблицы возможен через скобки, просто забыл. Ваш вариант короче и эффективнее (хотя делается это один раз, так что не принципиально ;-) ).
И, кстати, чтоб не перепроверять каждый раз в цикле if not utf8[savedName] один раз проверяю любую из таких функций. Мелочь, но, насколько я понимаю, при перезагрузке макросов это делается каждый раз.
В общем, может, такой подход и не строго соответствует документации, зато в наибольшей степени приближается к ожиданиям макрописцев.
buniak_a_h
Posts: 2129
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 131 times
Been thanked: 211 times
Contact:

Ошибки из-за ужесточения проверки UTF-8 в строках

Post by buniak_a_h »

John Doe wrote: Sat 09 May, 2020 11:23 Некорректную строку можно 'исправить'.
Это было бы здорово.
для примера строка test="123абв"..win.Uuid()
Понятно, что она некорректна. НО!
Старый Far возвращал test:len()=22 (6 "корректных" символов + 16 в GUID-е), что логично.
Новый функции таблицы utf8 валятся; таблицы string выдают 25 (считают, естественно, символы кириллицы за два байта).
Функция unicode.utf8.byte у старого FAR-а ожидаемо выдаёт двухбайтовые коды для кириллицы, остальное как string.byte; у нового валится по некорректной строке. Т.е. получить то же, что делал старый Far, не получается. Если Вы знаете, как "исправить" некорректную строку, не могли бы Вы выложить скрипт?
Post Reply

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