Подтверждаю. А я то думаю, почему опубликованного кода на форуме не видно! У меня ж фон – белый. В тегах не догадался посмотреть.
Posted: Wed Oct 28, 2015 6:04 pm
by Instructor
Skif_off, yozhic
CodePoster.js 2.5 не совместим с разрабатываемой версией AkelPad'а. После релиза 4.9.7 будет выложена новая версия.
Posted: Wed Oct 28, 2015 7:37 pm
by KDJ
Kley wrote:Создавая диалог с кнопкой и текстовым полем (oSys.Call("user32::CreateWindowEx"...)
dwStyle=WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|BS_OWNERDRAW
dwStyle=WS_CHILD|WS_VISIBLE|WS_TABSTOP|WS_BORDER|ES_AUTOHSCROLL
Вокруг "контролов" выводится плоская и черная рамка, что мне, собственно, и нужно.
Используя функцию AkelPad.CreateDialog не могу добиться того же.
Подскажите троеШнику, пожалуйста, как это сделать? Спасибо.
KDJ
Thank you very much for your help and responsiveness!
Posted: Fri Oct 30, 2015 10:10 am
by FeyFre
Why not set proper ExStyle in creating routine?
Posted: Fri Oct 30, 2015 10:35 am
by KDJ
FeyFre
Can you give any example?
Posted: Sat Oct 31, 2015 7:01 pm
by KDJ
FindReplaceEx.js TextMarker.js
Added:
- Ctrl+F1 - view AkelHelp-*.htm in default browser (if "Regular expressions" is checked),
- Shift+F1 - view AkelHelp-*.htm in HtmlView.js (if "Regular expressions" is checked).
Posted: Sun Nov 15, 2015 3:06 pm
by SFC
Добрый день.
Напишите плз плагин. Думаю нужен не только мне будет.
Когда читаешь англ текст встречаются незнакомые слова. Хотелось бы не читая текста сразу определить какие слова незнакомые чтобы заранее их выучить и уже спокойно читать текст.
В принципе все это и сейчас можно делать в несколько действий но не быстро и не просто:
Есть файл dictionary.txt в UTF-8 в котором в столбик все известные слова и их формы. И есть какой-то проверяемый файл текста.
1. В тексте все пробелы и знаки препинания меняются на символ конца строки. До получения всех слов текста в столбце.
!!! также весь текст приводится к нижнему регистру, чтобы были маленькие буквы. Выкидываются все цифры.
Без пробелов.
2. Из этого столбца удаляются все строки которые есть в файле dictionary.
Почему именно строки, а не слова - чтобы из слова booking не удалилось book.
3. из файла текста удаляются все пустые строки и он сортируется.
Все.
Получился список слов которых нет в файле dictionary.
Постепенно пополняя файл dictionary пользователь сможет определять только незнакомые слова.
Желательно чтобы ссылка на файл dictionary было как параметр вызова скрипта. Или имя бы совпадало с именем скрипта чтобы сделать неск копий скрипта на случаи разных языков.
Аналогичные функции есть на сайтах словарей - типа на проверку во входимость в список Oxford 3000 и т.д.
Спасибо.
Posted: Sun Nov 15, 2015 6:08 pm
by Skif_off
SFC
Если вам нужен обязательно плагин, то зачем писать о нём в теме уже существующего плагина? А если нужен скрипт, то и для него есть своя тема.
Стало любопытно,
// Отсюда http://akelpad.sourceforge.net/forum/viewtopic.php?p=29871#p29871 и ниже,
// скрипт http://akelpad.sourceforge.net/forum/viewtopic.php?p=29873#p29873
// 2015-11-16
var pText = AkelPad.GetTextRange(0, -1).toLowerCase();
var aWordList = GetWords(pText);
var aDict;
pText = "";
for (i = 0; i < aWordList.length; ++i)
{
if (aWordList[i].length > 1)
pText += aWordList[i] + "\r";
}
// Читаем \AkelFiles\Tools\dictionary.txt (в UTF-8 без BOM) и режем в массив
aDict = AkelPad.ReadFile(AkelPad.GetAkelDir(1) + "\\Tools\\dictionary.txt", 0x10 /*OD_ADT_NOMESSAGES*/, 65001 /*UTF-8*/, false).split(/[\r\n]+/);
// Ищем в тексте документа слова из массива, если есть - удаляем
for (var i = 0; i < aDict.length; i++)
{
if (pText.indexOf(aDict[i]) >= 0)
{
oPattern = new RegExp("^" + aDict[i] + "\r+", "gm");
pText = pText.replace(oPattern, "");
}
}
// Вставляем отсутствующие слова в документ, заменяя существующий текст
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(pText);
// Kley, http://akelpad.sourceforge.net/forum/viewtopic.php?p=29879#p29879
function GetWords(pText)
{
var aAllWords;
var nAllWords;
var aWords = [];
var sWord;
var i = 0;
aAllWords = pText.match(/[^\s`"\\\|\[\]\(\)\{\}<>,\.;:\+\-=~!#\$%^&\*/\?«»]+/g);
nAllWords = aAllWords ? aAllWords.length : 0;
if (nAllWords)
{
aAllWords.sort();
while (i < nAllWords)
{
sWord = aAllWords[i];
++i;
while ((i < nAllWords) && (sWord == aAllWords[i]))
{
++i;
}
// Пропускаем итерацию, если в строке содержится что-нибудь кроме "a-z'"
if (sWord.search(/[^a-z']+/g) >= 0) continue;
aWords.push(sWord);
}
}
return aWords;
}
. Только английский, файл dictionary.txt в UTF-8 без BOM положить в \AkelFiles\Tools\dictionary.txt.
Skif_off
Да, с темой чтото не разобрался. Спасибо.
Скрипт работает частично. Но если самое ПЕРВОЕ слово текста есть в словаре, то оно не удаляется и еще чтото ни так.
Вот попробуйте словарь:
book
booked
take
took
Текст:
booked took door take book have booked booking fr554 gfd 34
dssdfsdfsd hgfh
fgh
Результат:
не должно быть слов: book booked - а они есть
Posted: Sun Nov 15, 2015 8:04 pm
by Skif_off
SFC wrote:Но если самое ПЕРВОЕ слово текста есть в словаре, то оно не удаляется
Моя ошибка, забыл, что .indexOf() возвращает позицию, начиная с нуля, тогда условие
// Основан на коде KDJ (FileInfo.js)
var pText = AkelPad.GetTextRange(0, -1).toLowerCase();
var aWordList = GetWords(pText);
pText = "";
for (i = 0; i < aWordList.length; ++i)
{
if (aWordList[i].length > 1)
pText += aWordList[i] + "\n";
}
AkelPad.SetSel(0, -1);
AkelPad.ReplaceSel(pText.substr(0, pText.length - 1));
function GetWords(pText)
{
var aAllWords;
var nAllWords;
var aWords=[];
var sWord;
var i = 0;
aAllWords = pText.match(/[^\s'`"\\\|\[\]\(\)\{\}<>,\.;:\+\-=~!@#\$%^&\*/\?\d]+/g); //оригинал (без \d в конце)
nAllWords = aAllWords ? aAllWords.length : 0;
if (nAllWords)
{
aAllWords.sort();
while (i < nAllWords)
{
sWord = aAllWords[i];
++i;
while ((i < nAllWords) && (sWord == aAllWords[i]))
{
++i;
}
aWords.push(sWord);
}
}
return aWords;
}
Posted: Sun Nov 15, 2015 9:49 pm
by Skif_off
Kley
Спасибо, любопытная функция, только использовать все разделители из AkelPad не очень правильно (по крайней мере - в данном случае): попадёт много мусора, типа e-mail, в то же время срежутся сокращения с " ' " (don't превратиться в don).
В общем, для метода .match() изменил список, а перед добавлением в массив проверяю
if (sWord.search(/[^a-z]+/g) >= 0) continue; // Пропускаем итерацию, если в строке содержится что-нибудь кроме a-z
Скрипт обновил в том же сообщении.
P.S. По хорошему ещё, наверное, выпиливать аббревиатуры и сокращения (dr. и прочее).
Posted: Mon Nov 16, 2015 6:21 am
by SFC
Skif_off
Спасибо. Сейчас работает лучше.
> Теперь "fr554" остаётся "fr554", но не сообразил пока, как убрать.
Это исчезает вообще сейчас. По идее или fr554 должно остаться или fr. Тут я сам не соображу.
> P.S. По хорошему ещё, наверное, выпиливать аббревиатуры и сокращения (dr. и прочее).
Не думаю. Пусть будет общее правило: удалять знаки препинания и сравнивать. Абревиатуры будут в словаре - и оно будет работать так как сейчас есть.
Замечание:
От hgfh остается hgf
т.е. съедается последний символ. И так у любого последнего слова.
Я добавил третью строку:
nod's far
nod's - исчезает, а должен остаться. И от hgfh остается hgf все равно
Posted: Mon Nov 16, 2015 2:06 pm
by SFC
Вот так вроде нормально делает первый шаг - приводит в столбец:
Что:
(\ |\.|\,|\"|\:|\;|\d|\\|\/|\+|\!|\#|\$|\%|\&|\*|\(|\)|\=|\[|\]|\{|\}|\?|\<|\>|\!|\~|\@)
Чем:
\n