Scripts discussion (2)

Discuss and announce AkelPad plugins
Locked
  • Author
  • Message
KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post 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

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

KDJ, yes, offsets and size are correct.

DV
Online
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

Offline
Posts: 2247
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

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

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

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

DV
Online
Posts: 1250
Joined: Thu Nov 16, 2006 11:53 am
Location: Kyiv, Ukraine

Post by DV »

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

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post 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.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post 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)*/))

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher
Исправлено.


KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »


Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »


KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post 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*/.

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post 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.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

Instructor
Now everything works perfectly.

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

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

AkelPadManualSettings.js
Added Russian language.
Locked