GetCPBuffer - функция определения кодовой страницы

Разработка Far.
User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 13:00

Mantis#2751.

Необходима FSF-функция определения кодовой страницы буфера:

Code: Select all

typedef unsigned __int64 UCDFLAGS;

struct FARUCD
{
    size_t structSize;
    const void* data;
    size_t size;
    UCDFLAGS Flags;
    UINT codepage;
    size_t offset;
    void* reserved;
}

BOOL DetectCodepage(FARUCD*);
FARUCD:
structSize - размер структуры
data - что тестим
size - размер тестирования
Flags - разнообразные флаги
codepage - сюда Far пишет кодовую страницу
offset - сюда Far пишет смещение данных относительно data (пропуск сигнатур)
reserved - неопознанноё прочее (зарезервировано)

DetectCodepage() вернёт TRUE в случае "успешного" опознания данных (переменная FARUCD::codepage будет содержать "найденное/вычисленное" значение кодовой страницы данных) или FALSE, в случае непонятного содержимого.


Вижу потребность по крайне мере в FarCmds и TempPanel, чтобы не тянуть весь UCD.
Last edited by Skirda on Thu 01 Jan, 1970 01:00, edited 0 times in total.
Reason: Структура&function by DrKnS + offset
We are the Borg. You will be assimilated.
So Say We All!

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by zg » Mon 28 Jul, 2014 14:42

а потом добавлять GetCPBufferEx с languagefilter?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 15:14

zg wrote:а потом добавлять GetCPBufferEx с languagefilter?
Покажи свой вариант декларации функции "с languagefilter".
We are the Borg. You will be assimilated.
So Say We All!

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by zg » Mon 28 Jul, 2014 15:23

Skirda wrote:Покажи свой вариант декларации функции "с languagefilter".
мне эта функция не нужна, своего варианта нет.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 15:35

zg wrote:
Skirda wrote:Покажи свой вариант декларации функции "с languagefilter".
мне эта функция не нужна, своего варианта нет.
А в чем тогда смысл предыдущего высказывания? Флейм?
We are the Borg. You will be assimilated.
So Say We All!

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by zg » Mon 28 Jul, 2014 15:49

Skirda wrote:А в чем тогда смысл предыдущего высказывания? Флейм?
смысл в том, для того, что бы увидеть, что предлагаемый интерфейс уже сейчас не покрывает всех возможностей и при этом не имеет никакого задела на будущее, не нужно хотеть использовать этот интерфейс.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 16:16

zg wrote:
Skirda wrote:А в чем тогда смысл предыдущего высказывания? Флейм?
смысл в том, для того, что бы увидеть, что предлагаемый интерфейс уже сейчас не покрывает всех возможностей и при этом не имеет никакого задела на будущее, не нужно хотеть использовать этот интерфейс.
Мы в этом подфоруме вообще то пытаемся вроде как АПИ "изменять". То, что предложенное мной - это лишь идея. Я в курсе, что вариант не совершенен (был бы иного мнения - оно бы уже было в реализации).
Если у тебя нет конкретных предложений по улучшению этого интерфейса, то смысл высказываться? Критикуешь - предлагай. Твой вариант "мне эта функция не нужна" не подпадает под смысл ("технический") подфорума "Development".
Предлагаю дальше не флеймить, если нет конкретных предложений.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by DrKnS » Mon 28 Jul, 2014 17:10

Skirda wrote:off - смещение в байтах начала текста (для пропуска сигнатур типа 0xFEFF, 0xFFFE, 0xBFBBEF)
Смещение не нужно (проверка сигнатуры - часть процесса автоопределения, зачем её пропускать??)
Возвращает кодовую страницу (значение, применимое для первого параметра MultiByteToWideChar())
Как сигнализировать о неудаче? Возвращать должно true/false

Имя функции не символизирует.

Как-то так:

Code: Select all

struct params
{
    size_t structSize;
    int* codepage  // <- сюда пишем
    const void* data;
    size_t size;
    DWORD Flags;
    void* reserved
    ... %whatever%
}

BOOL TryToDecectCodepage(params*);

User avatar
HaRT
Moderator
Posts: 8118
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 68 times
Been thanked: 107 times

Re: GetCPBuffer - функция определения кодовой страницы

Post by HaRT » Mon 28 Jul, 2014 17:16

DrKnS wrote:Как-то так:

Code: Select all

struct params
{
    size_t structSize;
    int* codepage  // <- сюда пишем
    const void* data;
    size_t size;
    DWORD Flags;
    void* reserved
    ... %whatever%
}

BOOL TryToDecectCodepage(params*);
Это в FAR API так принято, что “сюда пишем”, “сюда не пишем”, “тут я рыбу заворачивал”?
Лично я привык считать, что по хорошему надо одну константную структуру на вход и одну неконстантную на выход…
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by DrKnS » Mon 28 Jul, 2014 17:22

Да, повсеместно.

User avatar
zg
zero-gravity
Posts: 5313
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 48 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by zg » Mon 28 Jul, 2014 17:24

Skirda wrote:Если у тебя нет конкретных предложений
у меня было конкретное указание на непокрытие даже текущих возможностей ucd.

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 17:57

DrKnS wrote:
Skirda wrote:off - смещение в байтах начала текста (для пропуска сигнатур типа 0xFEFF, 0xFFFE, 0xBFBBEF)
Смещение не нужно (проверка сигнатуры - часть процесса автоопределения, зачем её пропускать??)
Эмм... MultiByteToWideChar понимает сигнатуры в начале буфера?
DrKnS wrote:
Возвращает кодовую страницу (значение, применимое для первого параметра MultiByteToWideChar())
Как сигнализировать о неудаче? Возвращать должно true/false
...

Code: Select all

struct params
{
    size_t structSize;
    int* codepage  // <- сюда пишем
    const void* data;
    size_t size;
    DWORD Flags;
    void* reserved
    ... %whatever%
}

BOOL TryToDecectCodepage(params*);
[/quote]
Вариант.
Перепишу первый топик.
zg wrote:у меня было конкретное указание на непокрытие даже текущих возможностей ucd.
Не попал. Снова.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by DrKnS » Mon 28 Jul, 2014 18:03

Skirda wrote:Эмм... MultiByteToWideChar понимает сигнатуры в начале буфера?
При чём здесь MultiByteToWideChar?

User avatar
Skirda
Posts: 3474
Joined: Wed 16 Mar, 2005 11:01
Been thanked: 1 time

Re: GetCPBuffer - функция определения кодовой страницы

Post by Skirda » Mon 28 Jul, 2014 18:09

DrKnS wrote:
Skirda wrote:Эмм... MultiByteToWideChar понимает сигнатуры в начале буфера?
При чём здесь MultiByteToWideChar?
первый параметр... чтобы преобразовать data к видечар.
We are the Borg. You will be assimilated.
So Say We All!

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by DrKnS » Mon 28 Jul, 2014 18:14

Так мы хотим преобразовать к юникоду или таки определить кодовую страницу?

User avatar
DrKnS
Posts: 4648
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 125 times
Contact:

Re: GetCPBuffer - функция определения кодовой страницы

Post by DrKnS » Mon 28 Jul, 2014 18:19

Размер сигнатуры - он как бы постоянный и прибит гвоздями к кодовой странице: 2 байта на UTF16 LE/BE, 3 на UTF8.
В ближайшее N десятков лет это вряд ли изменится, поэтому не вижу проблем сделать в плагине if (utf8) ptr += 3;

Post Reply

Return to “Development”