Format plugin

Discuss and announce AkelPad plugins
  • Author
  • Message
Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Исправлено: FixWrap теперь корректно обрабатывает строки являющиеся частями перенесенной строки.

Fixed: FixWrap now properly handles lines that are the parts of the wrapped line.


Format plugin v2.1

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Предлагаю

1. В функциях "Format::LineSortStrAsc" и "Format::LineSortStrDesc" добавить некий параметр, с помощью которого сортировка бы учитывала возрастание чисел (11>2).

Тоесть: d2 d1 d11 b2 b11 b1 -> b1 b2 b11 d1 d2 d11.



2. В функциях "Format::LineSortIntAsc" и "Format::LineSortIntDesc" добавить некий параметр, с помощью которого сортировалось бы не просто по "комбинации символов, начинающихся с цифр", а только по цифрам. Т.е. что бы могла сохраниться "первоначальная сортировка.

Тоесть: a1c a2c b1b b2b c1a c2a -> a1c b1b c1a a2c b2b c2a
а не c1a b1b a1c c2a b2b a2c



P.S. В файле "Format-Rus.txt" строка 102 "" - лишняя.

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Специфический реквест, едва ли он кому-то еще понадобится. Тогда уж надо идти дальше и дать возможность указывать compare callback, который будет принимать две строки и возвращать результат сравнения. Но это уже будет на скриптах, соответственно, медленно.

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

Post by Instructor »

[Yustas.NeO] wrote:Тоесть: a1c a2c b1b b2b c1a c2a -> a1c b1b c1a a2c b2b c2a
а не c1a b1b a1c c2a b2b a2c
Доработано.
P.S. В файле "Format-Rus.txt" строка 102 "" - лишняя.
Убрано.

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

Post by Instructor »

Исправлено: LineSortIntAsc, LineSortIntDesc меняли очередность строк после сортировки.

Fixed: LineSortIntAsc, LineSortIntDesc change the order of lines after sorting.


Format plugin v2.2

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Метод Format::LineReverse добавляет лишнюю строку
Выделите несколько строк , попробуйте сделать несколько раз

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

Post by opk44 »

Andrey_A_A
Не совсем так. У меня описанное Вами воспроизводится только в том случае, если в выделение попадает последняя строка (которая не завершается парой 0D0A, т.е. "переводом каретки"). Сколько бы Вы не повторяли, больше одного перевода строки не появится. Кстати недавно по тому же поводу этот вопрос поднимался, вроде "ничем не кончилось".

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

Post by Instructor »

Andrey_A_A
Видимо включен "SmartSel::NoSelEOL".

После:
AkelPad 4.6.4 (01.08.2011)
--------------------------
Добавлено: ручной параметр для "MouseOptions" со значением 16 - не выделять новую строку при тройном клике, а также при клике в зону левого отступа.
в "SmartSel::NoSelEOL" нет необходимости.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

из справки
Определяет настройки мыши. Задается суммой членов:
1 - GUI.
2 - GUI.
4 - GUI.
8 - GUI.
16 - Не выделять новую строку при клике в зону левого отступа, а также при тройном клике.
По умолчанию: 1+2+4=7.
и что прописывать в AkelPad.ini
1+2+4+16=23 ?

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

Post by FeyFre »

Andrey_A_A

Code: Select all

MouseOptions=23

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

FeyFre, спасибо

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Работаю с большими списками слов, выяснил следующее:
функция
Call("Format::LineRemoveDuplicates")
Call("Format::LineGetUnique")
Call("Format::LineGetDuplicates")
работает очень медленно
проверял на списках 120.000 строк и выше
взять к примеру этот код на vbs - работает моментально

Code: Select all

' Функция удаления из массива одинаковых значений
Function DelDublicateArr(Arrr)
  Dim oDict, Item, Key
  Set oDict = CreateObject("Scripting.Dictionary")
  oDict.RemoveAll
  oDict.CompareMode = 0
  For Each Item In Arrr
   If Len(Item) > 0 Then
    If Not oDict.Exists(Item) Then oDict.Add Item, Item
   End If
  Next
  Key = oDict.Keys
  Set oDict = Nothing
  DelDublicateArr = Key
End Function


может есть смысл поменять код для функций

заодно посмотреть
Call("Format::LineSortStrAsc")
Call("Format::LineSortStrDesc")
Call("Format::LineSortIntAsc")
Call("Format::LineSortIntDesc")

этот код тоже работает быстро

Code: Select all

' Функция сортировки элементов текстового массива по возрастанию
Function SelectingArrUp(ArrS)
  Call SortingUp(ArrS, 0, Ubound(ArrS) - 1)
  SelectingArrUp = ArrS
End Function

' процедура быстрой сортировки по возрастанию
Sub SortingUp(sArr, ll, rr)
  Dim ii, jj, xx, yy
  ii = ll : jj = rr
  xx = sArr((ll + rr) \ 2)
  Do
    While sArr(ii) < xx
      ii = ii + 1
    Wend
    While xx < sArr(jj)
      jj = jj - 1
    Wend
    If ii <= jj Then
      If sArr(ii) <> sArr(jj) Then
        yy = sArr(ii) : sArr(ii) = sArr(jj) : sArr(jj) = yy
      End If
      ii = ii + 1 : jj = jj - 1
    End If
  Loop Until ii > jj
  If ll < jj Then SortingUp sArr, ll, jj
  If ii < rr Then SortingUp sArr, ii, rr
End Sub

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

Post by Instructor »

Andrey_A_A
Массив еще сформировать надо :) Полный код скриптов приведите.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Там всё просто, я не умею пока работать с памятью - просто выделяю и сортирую и вставляю обратно

Code: Select all

With AkelPad
  tTxt = .GetSelText()
  If Len(tTxt) = 0 Then
    Call .SetSel(0, -1) : tTxt = .GetSelText()
  End If
  If Len(tTxt) = 0 Then Wscript.Quit
  Txt = Split(tTxt, Chr(13))
End With

Text = Join(SelectingArrUp(Txt), vbNewLine)
Call AkelPad.ReplaceSel(Text)

' Функция сортировки элементов текстового массива по возрастанию
Function SelectingArrUp(ArrS)
  Call SortingUp(ArrS, 0, Ubound(ArrS) - 1)
  SelectingArrUp = ArrS
End Function

' процедура быстрой сортировки по возрастанию
Sub SortingUp(sArr, ll, rr)
  Dim ii, jj, xx, yy
  ii = ll : jj = rr
  xx = sArr((ll + rr) \ 2)
  Do
    While sArr(ii) < xx
      ii = ii + 1
    Wend
    While xx < sArr(jj)
      jj = jj - 1
    Wend
    If ii <= jj Then
      If sArr(ii) <> sArr(jj) Then
        yy = sArr(ii) : sArr(ii) = sArr(jj) : sArr(jj) = yy
      End If
      ii = ii + 1 : jj = jj - 1
    End If
  Loop Until ii > jj
  If ll < jj Then SortingUp sArr, ll, jj
  If ii < rr Then SortingUp sArr, ii, rr
End Sub


второй такой же
вместо
Text = Join(SelectingArrUp(Txt), vbNewLine)
вставить
Text = Join(SelectingArrUp(Txt), vbNewLine)
и функцию приведенную выше

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

Post by Instructor »

Andrey_A_A
Да, удаление дубликатов заметно быстрее - будем оптимизировать :)
Post Reply