Ru-Board.club
← Вернуться в раздел «Программы»

» Mark - небольшой удобный редактор

Автор: vito333
Дата сообщения: 10.06.2005 12:43
перезалил зип
Автор: GoldSwan
Дата сообщения: 10.06.2005 12:55

Цитата:
перезалил зип

Спасибо, забрал.
Вечером опишу, что получилось...
Автор: gera_serg
Дата сообщения: 10.06.2005 14:36
> А я пока занят regex-ами.

И это правильно. С ними и подцветку реализовать удобнее

Ждемс...
Автор: vito333
Дата сообщения: 10.06.2005 15:01
gera_serg
задача нетривиальная, если учитывать, что полноценный regex, например из boost, будет весить черт знает сколько, что не подходит Марку, к тому же в ричедите regex не реализуешь в лоб, надо дёргать содержимое, применять на нём regex, а затем в ричедите уже помечать соответствие (что-то в таком духе) ...
Автор: gera_serg
Дата сообщения: 10.06.2005 18:56
А Regular Expressions которые есть в The Microsoft Windows Script Host (WSH) ?

Вот еще
http://www.codeproject.com/cpp/notepadre.asp
Notepad RE (Regular Expressions)
By Ben Hanson
Search and Replace text in Notepad RE using Regular Expressions or normal mode. The editor supports drag and drop, file change notification, and displays the line and column numbers. Unicode support is available too.

На счет веса
я скачал его
Грубо
250 кб + марк 50 кб = 300 кб

Думаю, того стоит
Автор: olsufr
Дата сообщения: 10.06.2005 22:07

Цитата:
Вот еще
http://www.codeproject.com/cpp/notepadre.asp
Notepad RE (Regular Expressions)
Классная штука. Как раз то, что хотелось бы увидеть в Mark-e. Регулярные выражения работают не только как шаблон для поиска строки, но и как шаблон строки-заменителя. Причем можно использовать символы новой строки.


Цитата:
На счет веса
я скачал его
Грубо
250 кб + марк 50 кб = 300 кб

Думаю, того стоит
Такого же мнения


Автор: vito333
Дата сообщения: 11.06.2005 00:33

Цитата:
А Regular Expressions которые есть в The Microsoft Windows Script Host (WSH) ?

вот с ним и ковыряюсь сейчас, спасибо тебе за ссылку

Цитата:
300 кб

только из-за regex увеличить код в 3-5 раз - не наш метод.
Если не выйдет с этим, есть резервные варианты, на самый крайний случай сделаю regex плагином.
Автор: evle
Дата сообщения: 11.06.2005 08:49
vito333
Недавно обратил внимание на Mark. Весьма порадовался. Для полного счастья не хватает только двух вещей: regex и подсветка. (Есть еще мелочи, вроде номеров строк, но это не столь существенно).
Поскольку уместить нормальные регексы в приемлимый размер вряд ли удастся, а от обрезанных толку мало, ИМХО лучше прикрутить их отдельной dll. Они ведь не всем нужны.
Автор: vito333
Дата сообщения: 11.06.2005 11:49

Цитата:
Поскольку уместить нормальные регексы в приемлимый размер вряд ли удастся

работаю над этим

Добавлено:
[!] Улучшен вид меню.

Добавлено:
[x] при нажатии кнопкой мыши на выделенном тексте не обновлялся тулбар
Автор: GoldSwan
Дата сообщения: 12.06.2005 10:26

Цитата:
Gпопробуй Debug версию позапускать, может станет ясно, с чем конфликтует.
http://vito.rbcmail.ru/MarkDebug.zip
Добавлено:
и вообще разберись и опиши ошибку подробнее, может вылечу ...

Все отлично, с версией от 09/06 все заработало нормально, спасибо за все!
Автор: ShIvADeSt
Дата сообщения: 12.06.2005 13:10
Небольшой баг с тулбаром. Если буфер обмена асолютно пустой. Все кнопки по работе с буфером отключены. Выделяю кусок текста, нажимаю на тулбаре кнопку копирования И кнопка вставки на тулбаре не активна, в меню она активна. Если сделать люое действие, то на тулбаре вставка тоже становится активной.
Автор: Dudus
Дата сообщения: 12.06.2005 17:54
vito333
А у меня опять продолжает вылезать ошибка "Mark.exe" вызвало ошибку и будет закрыто. Необходимо перезапустить программу. Создан журнал ошибок." Ну ладно, открываем этот "журнал ошибок" -- как выяснилось опытным путем, это файл drwtsn32.log. А там написано следующее:

Исключение в приложении:
Прил.: (pid=576)
Время: 12.06.2005 @ 18:28:08.587
Номер: c0000005 (нарушение прав доступа)....

и так далее, большой такой файл.

Запускаю приложение Марк от имени администратора -- и надо же, никаких ошибок. Что бы это могло всё значить? Может, это ложный путь? Я как бы слабо знаком с программированием, тем более не знаю кода программы, может ли влиять то, какой пользователь запускает программу, или не может это влиять никак? Вот вам задача))
Я запускал из разных источников, из тотала коммандера и из проводника, просто нажатием мыши и от имени другого пользователя -- это когда шифт + правая кнопка мыши, но все одинаково. Если от имени админа, то ошибок не было (по крайней мере, не было ПОКА ни разу), а если от имени меня самого (а я работаю обычно как "опытный пользователь" в терминах виндовс 2000), то ошибка стала появляться через раз -- после того как я скачал версию программы от 11 июня. Раньше тоже было, как я и писал, но как -то реже. Я подозреваю, что сейчас тоже может опять стать реже, но вот от чего это зависит... Вот подробное изложение того, что же у меня происходит. Могу выслать этот длинный файл журнала, если это чем-то поможет. Там чего только не понаписано, сам черт ногу сломит. Причем если открывать не просто как программу, а для редактирования файла по F4, то тоже не хочет.
Автор: vito333
Дата сообщения: 13.06.2005 00:34
Dudus
скачай и позапускай debug-версию - ссылка чуть выше, возможно информации об ошибке будет больше.

Я пишу Марк под правами админа на своём компе, так что возможно какие-то нюансы, связанные с правами, упускаю и не вижу. Разные права - это разный доступ к диску и к реестру.

Основной вопрос - когда возникает ошибка, при каких операциях.


Добавлено:
я попробую чуть позже под другими правами погонять, вдруг и правда вылезет чего ...
Автор: Dudus
Дата сообщения: 13.06.2005 22:29
Несколько раз подряд запускал MarkDebug.exe и никакой ошибки не было. После этого запустил Mark.exe и появилась ошибка. Опять запускаю Дебуг - нет ошибки. Она появляется следующим образом. Сначала открывается программа, потом возникает сообщение об ошибке, винт скрипит - записывает этот журнал ошибок, программа закрывается и на этом всё, остается только сообщение. Иногда, впрочем, как я уже говорил, ошибка не появляется, но в последнее время выскакивает почти всегда. А иногда и окно программы появиться не успевает, сразу сообщение. То есть ошибка возникает прямо при запуске, независимо от того, откуда я запускаю: из Тотала Коммандера или проводника, ентером или мышью (без загрузки файлов для редактирования), из тотала коммандера клавишей Ф4 или при помощи "open with Mark" (с загрузкой файлов). Ну вот, даже и не знаю, чего еще сказать. Помогает только то, когда я запускаю прогу от имени администратора.

Кстати, а какая разница между Дебугом и простым, кроме размера программы и заголовка [dbg]? У меня MarkDebug.exe запускается даже чуть-чуть быстрее, чем простой Марк (когда последний еще запускался). Так что по большому счету мне все равно, которым пользоваться, если номера версий не отличаются
Автор: vito333
Дата сообщения: 14.06.2005 00:45

Цитата:
а какая разница между Дебугом и простым

нуу, много отличий

Добавлено:
качни сейчас, переписал плохой потоковый кусок кода при загрузке - он как раз был опасен и давно напрашивался - может из-за него у тебя глючит - я его очень сильно подозреваю.


[x] баг при создании тулбара. Мог вызывать сбой при загрузке Mark-a,
а также иногда первоначально на тулбаре не отображались правильныеdisabled-иконки.

Добавлено:
на RegExp в диалоге поиска пока внимания не обращать

Добавлено:
а под не-админом я попробовал - как обычно у меня, всё ок
Автор: vito333
Дата сообщения: 14.06.2005 16:33
извиняюсь за тишину - просто чтобы сделать RegExp так, как я хочу, приходится изучать COM.
Автор: gera_serg
Дата сообщения: 14.06.2005 17:28
vito333

И еще б потом проверить скорость поиска встроенной в WSH библиотеки в сравнении с отдельно докладываемой 175кб dll от Boost или Pcre (Perl-compatible regular-expression library) ?

Автор: vito333
Дата сообщения: 15.06.2005 12:23
ну, всё же наверное будет медленнее , чем в редакторах на собственном текстовом движке ( на Шиншилле, BrainChild-е и пр.), ведь будут дополнительные операции пред-подготовки текста - выделение буфера, копирование всего текста туда, поиск регэкспа в нём, затем уже подсветка найденного в ричедите. Да ещё расход памяти на больших файлах. В общем всё плохо , но с другой стороны, после мучений я таки интегрировал компонент, он уже ищет потихоньку , я освоил интеграцию COM- компонентов, причём в минималистическом стиле, конечно , так что функционал в будущем можно будет наращивать и COM-штучками всякими (не знаю какими, но наверное что-нибудь типа проверки орфографии, ещё чего-нибудь из офиса, например). Я бы даже сказал, что стиль COM мне очень понравился.
В общем скоро проверишь , тем более что я, честно говоря, RegExp делаю, а в синтаксис и не вникал, надо будет хорошо тестить.
Автор: gera_serg
Дата сообщения: 15.06.2005 13:59
Ты не смотрел сырцы Notepad RE, он не на Ричедите сделан?

При открытии 3 мег файла, занимает в памяти 8 мег (вдвое меньше Марка), при запуске поиске с RegExp память не возрастает...
Автор: vito333
Дата сообщения: 15.06.2005 14:09
нет, там обычный Edit - в нём регэкспы делать - милое дело.


Добавлено:
вообще надо было Марк на Edit делать

Добавлено:
хотя у него тоже минусы есть

Добавлено:
надо будет сделать как-нибудь простейший редактор типа NotepadRE, с регэкспами и крошечного размера, килобайт так 5-10 .
Автор: gera_serg
Дата сообщения: 15.06.2005 15:36
>вообще надо было Марк на Edit делать
И потерять все возможные подцветки?

В EmEditor, например, удобная фича - все найденные слова разом подцвечиваются фоном
Автор: Dudus
Дата сообщения: 15.06.2005 18:09
В общем, последняя версия программы ошибок пока не выдала ни разу. А предыдущая версия (версии) так и продолжает (ют) периодически сбоить, причем закономерность не могу выявить. Иногда запускается, даже несколько раз подряд.

Цитата:

Цитата: а какая разница между Дебугом и простым


нуу, много отличий
Автор: vito333
Дата сообщения: 16.06.2005 00:48
Dudus
значит это была ошибка тулбара - она как раз такая и была - могла появляться, могла и нет.
Автор: arsvrn
Дата сообщения: 16.06.2005 09:50
vito333

Цитата:
простейший редактор типа NotepadRE, с регэкспами и крошечного размера, килобайт так 5-10

Точно, надо. Причем именно на Edit. Кстати, подсветка далеко не всем и нужна. Мне бы от такого редактора хотелось работу под Win98, регэкспы и перекодировку.
Кстати, напоминаю про обещанную перекодировку в обе стороны ("из Dos" и "в Dos" и т.д.) в Marke
Автор: vito333
Дата сообщения: 16.06.2005 11:11
не до перекодировки - регэкспы замучили, не хотят как надо работать
Автор: arsvrn
Дата сообщения: 16.06.2005 12:20
vito333

Цитата:
регэкспы замучили

Ну, регэкспы тоже очень нужная вещь
Автор: vito333
Дата сообщения: 16.06.2005 14:01
после длительных плясок с бубном:
[+] начато тестирование RegExp.

Добавлено:
есть какая-то проблема с большими файлами. Ещё интересует как синтаксис - срабатывает?
Автор: gera_serg
Дата сообщения: 16.06.2005 14:53
Первое вхождение находит, далее - ломается

Например сочетание двух согласных и одной гласной
[мнлрбвгджзпфктшщсхцч]{2}[аеёиоуыэюя]

Я на VBS использую такую функцию для глобальной замены в текстовом буфере

Function ReplTxt(sString, patrn, replStr)
Dim regEx ' Create variables.
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Make case insensitive.
regEx.Global = True ' По всему содержанию строки (весь буфер обмена)
ReplTxt = regEx.Replace(sString, replStr)
Set regEx = Nothing
End Function

' поменять в числах десятичную запятую на точку и ... местами относительно ее
' MsgBox ReplTxt("123,456 789,012","([0-9]+)\,([0-9]+)","$2.$1")
' вот результат - "456.123 012.789"



Автор: vito333
Дата сообщения: 16.06.2005 15:27
gera_serg
работает с любым размером буфера?
Автор: gera_serg
Дата сообщения: 16.06.2005 15:35
Не задумывался о размере.
Я исползую для обработки содержимого клипборда для "чистки" загнанного туда html созданного MSWord (у него лишних тегов - дофига)

Добавлено:
Обрати внимания у MS существуют три метода работы с RegExp

Test Method
See Also
Execute Method | Replace Method

Applies To: RegExp Object
Requirements
Version 5
Executes a regular expression search against a specified string and returns a Boolean value that indicates if a pattern match was found.

object.Test(string)
Arguments
object
Required. Always the name of a RegExp object.
string
Required. The text string upon which the regular expression is executed.
Remarks
The actual pattern for the regular expression search is set using the Pattern property of the RegExp object. The RegExp.Global property has no effect on the Test method.

The Test method returns True if a pattern match is found; False if no match is found.

The following code illustrates the use of the Test method.

Function RegExpTest(patrn, strng)
Dim regEx, retVal ' Create variable.
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = False ' Set case sensitivity.
retVal = regEx.Test(strng) ' Execute the search test.
If retVal Then
RegExpTest = "One or more matches were found."
Else
RegExpTest = "No match was found."
End If
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))


Добавлено:
Executes a regular expression search against a specified string.

object.Execute(string)
Arguments
object
Required. Always the name of a RegExp object.
string
Required. The text string upon which the regular expression is executed.
Remarks
The actual pattern for the regular expression search is set using the Pattern property of the RegExp object.

The Execute method returns a Matches collection containing a Match object for each match found in string. Execute returns an empty Matches collection if no match is found.

The following code illustrates the use of the Execute method.

Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches ' Create variable.
Set regEx = New RegExp ' Create a regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Set case insensitivity.
regEx.Global = True ' Set global applicability.
Set Matches = regEx.Execute(strng) ' Execute search.
For Each Match in Matches ' Iterate Matches collection.
RetStr = RetStr & "Match found at position "
RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
RetStr = RetStr & Match.Value & "'." & vbCRLF
Next
RegExpTest = RetStr
End Function
MsgBox(RegExpTest("is.", "IS1 is2 IS3 is4"))


Добавлено:
Replace Method
See Also
Execute Method | Test Method

Applies To: RegExp Object
Requirements
Version 5
Replaces text found in a regular expression search.

object.Replace(string1, string2)
Arguments
object
Required. Always the name of a RegExp object.
string1
Required. String1 is the text string in which the text replacement is to occur.
string2
Required. String2 is the replacement text string.
Remarks
The actual pattern for the text being replaced is set using the Pattern property of the RegExp object.

The Replace method returns a copy of string1 with the text of RegExp.Pattern replaced with string2. If no match is found, a copy of string1 is returned unchanged.

The following code illustrates use of the Replace method.

Function ReplaceTest(patrn, replStr)
Dim regEx, str1 ' Create variables.
str1 = "The quick brown fox jumped over the lazy dog."
Set regEx = New RegExp ' Create regular expression.
regEx.Pattern = patrn ' Set pattern.
regEx.IgnoreCase = True ' Make case insensitive.
ReplaceTest = regEx.Replace(str1, replStr) ' Make replacement.
End Function

MsgBox(ReplaceTest("fox", "cat")) ' Replace 'fox' with 'cat'.
In addition, the Replace method can replace subexpressions in the pattern. The following call to the function shown in the previous example swaps each pair of words in the original string:

MsgBox(ReplaceTest("(\S+)(\s+)(\S+)", "$3$2$1")) ' Swap pairs of words.


Добавлено:
В другом скрипте для обработки (поиска и замены) текстовых файлов я заметил что гораздо быстрее обрабатывается полный файл в буфере, чем если брать файл построчно обрабатывать и записывать построчно на диск...

Страницы: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

Предыдущая тема: Какой нужен формат?


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.