Page 76 of 96

Posted: Mon Aug 12, 2013 9:16 pm
by KDJ
Please help me.
I'm not sure if I am correctly calculated the size of the structure PAINTSTRUCT on x64.

Code: Select all

typedef struct tagPAINTSTRUCT {
                        //offset    size   padding
  HDC  hdc;             //     0       8         0
  BOOL fErase;          //     8       4         0
  RECT rcPaint;         //    12     4*4         0
  BOOL fRestore;        //    28       4         0
  BOOL fIncUpdate;      //    32       4         0
  BYTE rgbReserved[32]; //    36    32*1         4
} PAINTSTRUCT, *PPAINTSTRUCT;
size = 36 + 32*1 + 4 = 72

Posted: Tue Aug 13, 2013 12:01 am
by FeyFre
KDJ, yes, offsets and size are correct.

Posted: Tue Aug 13, 2013 7:23 am
by DV
Вопрос больше алгоритмический: как с некоторой долей вероятности определить, является ли последовательность символов словом или текстом? Моей первоначальной мыслью было отталкиваться от встречаемости различных символов, но как же её применить, к примеру, в случае последовательности симовлов "power"? Каждый символ встречается ровно 1 раз, т.е. каждый символ имеет "вес" 1/5 в пределах последовательности "power" - и что дальше? :?

Posted: Tue Aug 13, 2013 11:42 am
by FeyFre
Я так понимаю, текст/слова из неизвестного алфавита, и соответственно неизвестно, что из символов является ограничителем/разделителем слов.
Я бы делал так:
Сразу предупреждаю, решение подходит для конкретных языков, а не абстрактного понятия текста.
Раз "с долей вероятности" то первый инструмент который напрашивается для работы это статистика. Начнем с текста:
1. Считаем частоту вхождения буковок. Показатель этот не архиважный, но может помочь. Например с определением языка текста( а значит и основного набора букв). По этой статистике мы также можем вычленить а какие же из символов могут быть разделители(их вероятнее всего меньше всех).
2. Считаем статистику пар символов, триплетов символов(4 и больше уже нету смысла, да и накладно). Сортируем. Ну а дальше эвристика. По полученной картине должны оценить "да" или "нет". На ум приходит два способа:
1. На основании базы знаний. Частота появления определенных пар, триплетов(тех что появляются чаще в аппробируемом тексте) должна коррелировать со значениями для них в базе. Если у нас есть результат из п.1 по разделителям, то статистику пар/триплетов с их участием можно не считать. Если нет, то отбрасываем только редкие.
2. Эвристически. В человеческом языке буквы используются неравномерно. Соответственно если это текст, то распределение статистики будет иметь какую-нибудь узнаваемую форму. Задача сводится к поиске более подходящей формы. Фактически этот способ близнец первого(с базой знаний), с той разницей что там мы должны таскать за собой базу, а тут мы эту базу помним аналитически, например в виде формул(с тремя интегралами обязательно :lol: ).
Преимущества/недостатки способов - отдельно обдумать надо.

По поводу слова.. Статистика явно тут пасует, ибо мало данных. Разве что выделят пары/триплеты и сверять с базой. Опять таки, если есть только одно слово, то толку нам это не даст.

Вот такие вот соображения.

Posted: Tue Aug 13, 2013 1:56 pm
by DV
Да уж... Пожалуй, в этом случае трудно придумать что-то лучше решения "в лоб" для проверки сочетаний, которых _не_ являются словами точно.
Например:
[a-zA-Z]+[0-9]+[a-zA-Z]+
[0-9]+[a-zA-Z]+[0-9]+

Posted: Tue Aug 13, 2013 5:59 pm
by KDJ
FeyFre
Thank you very much for checking the size of PAINTSTRUCT structure.
Fixed: size of PAINTSTRUCT x64 in AkelPadMethodsView.js and Translator.js.

Posted: Wed Aug 14, 2013 5:24 am
by Infocatcher
KDJ wrote:Fixed: size of PAINTSTRUCT x64 in AkelPadMethodsView.js and Translator.js.
The same bug in SearchReplace.js?

Code: Select all

      if (ps=AkelPad.MemAlloc(64 /*sizeof(PAINTSTRUCT)*/))

Posted: Wed Aug 14, 2013 8:41 am
by Instructor
Infocatcher
Исправлено.

Posted: Wed Aug 14, 2013 2:53 pm
by Infocatcher

Posted: Wed Aug 14, 2013 9:29 pm
by KDJ

Posted: Thu Aug 15, 2013 8:36 am
by Instructor

Posted: Thu Aug 15, 2013 2:07 pm
by KDJ
Instructor
Thank You very much.

Script test version: AkelPadManualSettings.js

Noticed errors:
1. If you change the following options, effect is visible only after restarting AkelPad:
- MouseOptions with 16 /*MO_NONEWLINEMOUSESELECT*/, 32 /*MO_NOWHEELFONTCHANGE*/, 64 /*MO_MARGINSELUNWRAPLINE*/, 128 /*MO_MBUTTONDOWNNOSCROLL*/,
- PaintOptions,
- ShowModify,
- StatusPosType,
- WordBreak.
2. Does not work:
- TabOptionsMDI with 524288 /*TAB_ADD_AFTERCURRENT*/, 1048576 /*TAB_NOADD_LBUTTONDBLCLK*/, 2097152 /*TAB_NOADD_MBUTTONDOWN*/, 4194304 /*TAB_NODEL_LBUTTONDBLCLK*/, 8388608 /*TAB_NODEL_MBUTTONDOWN*/.

Posted: Thu Aug 15, 2013 3:54 pm
by Instructor
KDJ
Test version

Added notes:
AkelDLL.h wrote:#define MIS_WORDBREAKCUSTOM 117 //(DWORD)lParam - "WordBreak" flags. Changes are applied for a new edit windows.
#define MIS_PAINTOPTIONS 121 //(DWORD)lParam - "PaintOptions" flags, see PAINT_* defines. Changes are applied for a new edit windows.
#define MIS_RICHEDITCLASS 125 //(BOOL)lParam - "RichEditClass" type. Changes are applied for a new edit windows.
AkelPadManualSettings.js - very useful script. Some notes:
- Typo:
UrlCommand wrote:Example: Exec(`"%ProgramFiles%\Mozilla Firefox\firefox.exe" "%u"`)
- Requiest to add "Apply" button.

Posted: Thu Aug 15, 2013 9:44 pm
by KDJ
Instructor
Now everything works perfectly.

AkelPadManualSettings.js
Added "Apply" button.
Bugs fixed.

Posted: Fri Aug 16, 2013 11:22 am
by KDJ
AkelPadManualSettings.js
Added Russian language.