AkelPad для чайников

Russian main discussion
  • Author
  • Message
Offline
Posts: 2248
Joined: Tue Aug 07, 2007 2:03 pm
Location: Vinnitsa, Ukraine

Post by FeyFre »

Меню опции - не открывать файл дважды

Offline
Posts: 10
Joined: Mon Sep 05, 2011 11:22 pm

Post by Balu »

FeyFre
Спасибо! Вот так всегда - перед глазами лежит, так нет...полез в Параметры... А все оказалось намного проще :-)

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

В других редакторах есть такая функция - ставим курсор в любое место строки, нажимаем Ctrl+D, строка с текстом, на которой установлен курсор, копируется под саму себя. Подскажите, как в Акелпаде добиться подобного?

Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Cuprum
Использовать скрипт Инструктора GetOffset.js /всё не хватает времени в свою библиотеку засунуть и переписать скрипты/, переименовать его, например, в CloneRow.js и вместо WScript.Echo(тра-та-та) поставить:

Code: Select all

AkelPad.SetSel(nCaretLineStartPos, nCaretLineEndPos);

var pText = AkelPad.GetSelText();
AkelPad.ReplaceSel(pText + "\r" + pText);
Назначить скрипт в окне скриптов на Ctrl+D.

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

VladSh
Благодарю! Помогло.

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

Post by Infocatcher »

VladSh wrote:... и вместо WScript.Echo(тра-та-та) поставить
Мне кажется, вот так удобнее:

Code: Select all

var hWndEdit = AkelPad.GetEditWnd();
var oSys = AkelPad.SystemFunction();

var ss = AkelPad.GetSelStart();
var se = AkelPad.GetSelEnd();

var line1Start = GetOffset(hWndEdit, 18 /*AEGI_WRAPLINEBEGIN*/, ss);
var line2End   = GetOffset(hWndEdit, 19 /*AEGI_WRAPLINEEND*/,   se);

setRedraw(hWndEdit, false);
AkelPad.SetSel(line1Start, line2End);
var pText = AkelPad.GetSelText();
AkelPad.ReplaceSel(pText + "\r" + pText);
var selAdd = pText.length + 1;
AkelPad.SetSel(ss + selAdd, se + selAdd);
setRedraw(hWndEdit, true);

// GetOffset.js - http://akelpad.sourceforge.net/forum/viewtopic.php?p=11382#p11382
function GetOffset(hWndEdit, nType /*AEGI_*/, nOffset)
{
  var lpIndex;

  if (lpIndex=AkelPad.MemAlloc(_X64?24:12 /*sizeof(AECHARINDEX)*/))
  {
    if (nOffset != -1)
      AkelPad.SendMessage(hWndEdit, 3137 /*AEM_RICHOFFSETTOINDEX*/, nOffset, lpIndex);
    AkelPad.SendMessage(hWndEdit, 3130 /*AEM_GETINDEX*/, nType, lpIndex);
    nOffset=AkelPad.SendMessage(hWndEdit, 3136 /*AEM_INDEXTORICHOFFSET*/, 0, lpIndex);
    AkelPad.MemFree(lpIndex);
  }
  return nOffset;
}
function setRedraw(hWnd, bRedraw) {
	AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
	bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}

(выделение переносится в изначальном виде на добавленные строки)

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Infocatcher
Да, во время нажатия Ctrl+D не мелькает выделение строки. Спасибо!

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

Если клинуть ПКМ на вкладке то в контексте наблюдаю пункт "Копировать путь". Судя по ContextMenu-плагину за данную функцию отвечает EvalCmd.js
Мне нужно добавить пункт "Копировать имя", подразумевая, что в буфер будет копироваться только название файла в формате "имя файла.расширение". Подскажите, как такого добиться?

Offline
Posts: 767
Joined: Mon Sep 28, 2009 10:03 am
Location: Minsk, Belarus

Post by se7h »


Offline
Posts: 3234
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Cuprum
Пожалуй, стоит начать отсюда.
P.S. Скрипт, который Вы хотите.. как вариант - FileNameCopyToCB.js.

Offline
Posts: 2
Joined: Mon Oct 10, 2011 6:00 pm

Post by arestarh »

Здравствуйте!

Если есть возможность, помогите по такому вопросу...
Задача стояла передо мной такая - преобразовать текст субтитров (формат .srt (файл содержит кроме текста также временные метки для его отображения)) из варианта "ВСЕ ПРОПИСНЫЕ" в нормальный, удобоваримый вид. Я воспользовался внутренней командой akelpad'a под номером 4177 "Преобразовать в "Как в предложениях."", но получил только частично удовлетворяющий результат. Хотя в итоге смог получить более приемлимый результат, используя в паре с akelpad'ом редактор субтитров DSRT (сам процес описал под спойлером):

Открываем в DSRT нужный .srt файл с субтитрами и выбираем пункт меню "Скрипт" -> "Передать текст фраз в MS Word" или жмем сочетание клавиш Alt + W. Далее, в открывшемся окне Word выделяем весь текст ("Выделить все" или жмем сочетание клавиш Ctrl + A) и копируем его, а затем вставляем в AkelPad. В окне AkelPad в поле редактирования текста жмем правой кнопкой мыши и выбираем пункт меню "Преобразовать" -> "Как в предложениях." и преобразованный текст копируем назад в то же самое окно Word, заменяя при этом весь находящийся там текст, и затем жмем в DSRT в появившемся диалоговом сообщении "По окончании проверки орфографии нажмите кнопку Ok" OK. После чего, можно "Сохранить" или "Сохранить как..." полученный результат.


Вопрос в том, почему если делать конвертацию akelpad'ом "Преобразовать" -> "Как в предложениях." непосредственно в файле .srt, то результат преобразования содержит ошибки в тех местах, где при точно таком же преобразовании переданного в Word DSRT'ом текста, их нет ?

В архив по ссылке ниже вложил файлы для иллюстрации сказанного:
http://www.mediafire.com/?oa0iarekrjyvw0a
Содержимое архива:
Subtitles_Upper.case.srt - файл субтитров с текстом полностью в верхнем регисте.
TextOnly_from_Subtitles_Upper.case.txt - текст, извлеченный с помощью DSRT, из Subtitles_Upper.case.srt.
Subtitles_Sentence.case(after conversion directly in akelpad).srt - файл субтитров с текстом после конвертации непосредственно в akelpad'е через "Преобразовать" -> "Как в предложениях.".
TextOnly_Sentence.case(after conversion TextOnly directly in akelpad).txt - текст как результат конвертации содержимого TextOnly_from_Subtitles_Upper.case.txt непосредственно в akelpad'е.
Например, типичную ошибку преобразования можно наблюдать в Subtitles_Sentence.case(after conversion directly in akelpad).srt с 42 по 44 фразу (строки 175 - 186), которой нету в TextOnly_Sentence.case(after conversion TextOnly directly in akelpad).txt (строки 91 - 98).

Сорри, если как-то путано объяснил ситуацию.

Offline
Posts: 382
Joined: Wed Sep 28, 2011 3:05 pm

Post by Cuprum »

se7h, VladSh
Спасибо! В ветке с коллекцией скриптов их столько, что поиск нужного весьма затруднен :(

Offline
Posts: 874
Joined: Sat Jan 16, 2010 2:03 pm

Post by opk44 »

arestarh wrote:почему если делать конвертацию akelpad'ом "Преобразовать" -> "Как в предложениях." непосредственно в файле .srt, то результат преобразования содержит ошибки в тех местах, где при точно таком же преобразовании переданного в Word DSRT'ом текста, их нет ?
Штука в том, как именно определяется начало предложения. Для Word-а жесткий перевод строки равносилен новому абзацу (а раз так, то следующее слово равносильно началу нового предложения). Вы делаете "поспешный вывод", что и в плайн-тексте также. Но для плайн-текста жесткий перевод строки "еще не аргумент". Поэтому происходит примерно вот что (описывается с намеренными искажениями "для пущей наглядности"). Берем фрагмент 171-176:

Code: Select all

171:    ТЫ ВООБЩЕ ПРОПУСКАТЬ НЕ ДОЛЖЕН...
172:    
173:    42
174:    00:06:10,412 --> 00:06:13,123
175:    ШКОЛА - ЭТО ВАЖНО...
176:    ВАЖНЕЕ ВСЕГО.
здесь слово "школа" считается не началом предложения (поскольку, мол, "начинается сновой строки"), а всего лишь продолжением оного, поскольку ему (слову) предшествует некий текст, не заканчивающийся ни точкой ни каким-то иным знаком препинания, которым обычно заканчиваются все предложения (".!?"). В тексте "00:06:13,123 ШКОЛА - ЭТО ВАЖНО" слово "школа" приводится к нижнему регистру. Так понятно?
Когда же вы пропускаете текст через некую утилиту, то она убирая номера и временнЫе интервалы, как бы смыкает 171 и 175.
Получается "НЕ ДОЛЖЕН... ШКОЛА". Теперь "ШКОЛА" превратится в "Школа", потому что из-за предшествующего ей многоточия ("полноправный конец предложения") оно (слово "ШКОЛА") расценивается как настоящее начало предложения. Так понятней?

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

Post by Instructor »

arestarh
Изменение регистра "Как в предложениях." с помощью скрипта SearchReplace.js:

Что:

Code: Select all

(^.|[\.?!])([\x00-\x40\x5B-\x60\x7B-\x7F]*)(.)([^\.?!]*)
Чем:

Code: Select all

$1 + $2 + $3.toUpperCase() + $4.toLowerCase();
V: Заменять на функцию.

Offline
Posts: 2
Joined: Mon Oct 10, 2011 6:00 pm

Post by arestarh »

opk44
Instructor
Хлопцы, большое спасибо за пояснения и альтернативный вариант преобразования ТОЛЬКО с помощью akelpad'a!!!
Post Reply