Полезная информация

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№101-06-2011 09:22:20

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 1.1

Copy Plain Text и регулярные выражения

Copy Plain Text

Вот эта модификация расширения:

xsidebar.mozdev.org/modifiedmisc.html#copyplaintext
copy_plain_text-0.3.3.1-mod.xpi

Работает со всеми текущими версиями браузеров. И в паре с Auto Copy.
Но.
Если присмотреться, то обнаруживается, что функции, реализованные через регулярные выражения

Trim space around text
Removes any space before and after the text selected

Replace extra spaces
Replaces any occurrence of multiple spaces with a single space

Remove extra empty lines
Converts two or more empty lines into a single line

работают как-то не фонтан.

- функция Remove extra empty lines - удалять лишние пустые строки - удаляет все пустые строки вообще, что делает скопированный текст трудночитаемым, а потому у меня она всегда выключена.
Реализована эта функция через регулярку:

Выделить код

Код:

// Extra Lines
 if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.newline") && oPrefs.getBoolPref("copyplaintext.formatting.extra.newline"))
   str = str.replace(/[\n\r]+/g, "\n");

Так вот на эту тему просьба к тем, кто рубит в регулярках, предложить что-нибудь эдакое, чтобы оно не трогало одиночные пустые строки, а несколько строк подряд превращало в одну пустую. :)

В текстовом редакторе, где регулярки не на JavaScript, а на Perl, вот такое грубиянство почти делает что надо - ну это методом тыка.))
На одну пустую строку оно заменяет две - шесть подряд пустых строк, а большее кол-во заменяет на 2 пустые.
Может быть, хотя бы, это же перевести в форму, в которой оно бы заработало и в браузере - внутри вот этого str.replace( );

найти
^\n\n\n\n\n\n|^\n\n\n\n\n|^\n\n\n\n|^\n\n\n|^\n\n
заменить на
\n


Ещё расширение не удаляет одиночный пробел в конце строки и оставляет пробел вначале строки...

Отсутствует

 

№201-06-2011 10:01:49

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir пишет

чтобы оно не трогало одиночные пустые строки, а несколько строк подряд превращало в одну пустую. :)

По идее, во внутреннем представлении только \n, без \r, так что

Выделить код

Код:

replace(/\n{3,}/g, "\n\n")
vladmir пишет

Ещё расширение не удаляет одиночный пробел в конце строки и оставляет пробел вначале строки...

Там же есть

Выделить код

Код:

// Trim
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim"))
                str = str.replace(/^\s*|\s*$/g, "");

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№301-06-2011 10:57:24

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher

\n, без \r

Читал, что на разных системах оно отличается.)

replace(/\n{3,}/g, "\n\n")

Спасиб, попробую как закрою окно браузера.

Там же есть

Ну дык оставляет же.
Может быть - после сжимания нескольких пробелов вначале строки в один. Когда пробелы посреди строки - это норм.

Отсутствует

 

№401-06-2011 11:23:45

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 5.0

Re: Copy Plain Text и регулярные выражения

vladmir пишет

Читал, что на разных системах оно отличается.)

Парсер регэкспов, по идее, должен сам отлавливать эту платформенную специфику, и в зависимости от сопоставлять с \n в регэкспах либо \r\n-эскейпы в тексте (windows), либо \r (nix-like), либо \n (mac).

Отсутствует

 

№501-06-2011 11:40:02

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

Все же вылезает \r\n. По крайней мере, в document.commandDispatcher.focusedWindow.getSelection().toString().
Тогда так:

Выделить код

Код:

replace(/(\r\n?|\n\r?)\1{2,}/, "$1$1")

Добавлено 01-06-2011 11:45:28

vladmir пишет

Ну дык оставляет же.

Возможно, это при наличии   и иже с ним.

Выделить код

Код:

replace(/^[\s\xa0\u2002\u2003\u2009]+|[\s\xa0\u2002\u2003\u2009]+$/g, "")

Отредактировано Infocatcher (01-06-2011 11:45:28)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№601-06-2011 12:15:11

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 1.1

Re: Copy Plain Text и регулярные выражения

Infocatcher


replace(/(\r\n?|\n\r?)\1{2,}/, "$1$1")

1 раз попробовал - 5 пустых строк съёжило в одну - OK     


но 3 пустых строки оставило нетронутыми, пробую дальше



   3




4










6   







7   


2

Отредактировано vladmir (01-06-2011 13:10:11)

Отсутствует

 

№701-06-2011 12:24:05

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir
Еще можно попробовать предварительно пробелы с конца каждой строки срезать:

Выделить код

Код:

replace(/[\s\xa0\u2002\u2003\u2009]+$/mg, "")

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№801-06-2011 13:20:53

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
Нет, что-то не фурычит твой убиратель строк.
про 5 строк уже не уверен как там вышло.)))
В своём посте 6 наделал переходов, несколько раз вкл-выкл эту функцию в настройках - с ней только в одном месте пуст стр убирается - между твоим ником и цитатой.-)

1


2



3




4










6   







7   


2

1


2

Отредактировано vladmir (01-06-2011 13:32:26)

Отсутствует

 

№901-06-2011 13:49:00

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

А, ну да, я флаг "g" потерял, без него только одна замена делается.
Из консоли ошибок работает:

Выделить код

Код:

top.opener.document.commandDispatcher.focusedWindow.getSelection().toString()
    .replace(/^[\s\xa0\u2002\u2003\u2009]+|[\s\xa0\u2002\u2003\u2009]+$/g, "")
    .replace(/[ \t\xa0\u2002\u2003\u2009]+$/mg, "")
    .replace(/(\r\n?|\n\r?)\1{2,}/g, "$1$1");

Отредактировано Infocatcher (01-06-2011 13:50:03)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1001-06-2011 14:06:47

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
Уже фурычит. :D
И в еррор консоли без ошибок.
Это я удалятель пустых строк пока смотрел. Щас другие секаторы впендюрю.

Добавлено 01-06-2011 14:28:00
Infocatcher
Неа, эффект тот же самый. Много пробелов сжимаются в один, в нач и в конце строк не убирается один пробел.
Вот так в расширение вставил:

Выделить код

Код:

// Trim
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim"))
                str = str.replace(/^[\s\xa0\u2002\u2003\u2009]+|[\s\xa0\u2002\u2003\u2009]+$/g, "");

            // Extra Space
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.space") && oPrefs.getBoolPref("copyplaintext.formatting.extra.space"))
                str = str.replace(/[ \t\xa0\u2002\u2003\u2009]+$/mg, "");
            
            // Extra Lines
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.newline") && oPrefs.getBoolPref("copyplaintext.formatting.extra.newline"))
                str = str.replace(/(\r\n?|\n\r?)\1{2,}/g, "$1$1");

Может оно как-то по-разному срабатывает в зависимости от чего-то ещё...

Отредактировано vladmir (01-06-2011 14:28:00)

Отсутствует

 

№1101-06-2011 14:40:32

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

В Файрфоксе 4.0.1 точно так же. Пустые линии как надо удаляются, а одиночные пробелы в нач и конце строк остаются.

Отсутствует

 

№1201-06-2011 14:43:19

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir
А с настройками что?

Выделить код

Код:

// Trim
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim"))
                str = str
                    .replace(/^[\s\xa0\u2002\u2003\u2009]+|[\s\xa0\u2002\u2003\u2009]+$/g, "")
                    .replace(/[ \t\xa0\u2002\u2003\u2009]+$/mg, "");

            // Extra Lines
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.newline") && oPrefs.getBoolPref("copyplaintext.formatting.extra.newline"))
                str = str.replace(/(\r\n?|\n\r?)(?:[ \t\xa0\u2002\u2003\u2009]*\1){2,}/g, "$1$1");

            // Extra Space
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.space") && oPrefs.getBoolPref("copyplaintext.formatting.extra.space"))
                str = str.replace(/[ \t\xa0\u2002\u2003\u2009]+/g, " ");

Должно удалять пустые строки даже если trim отключен.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1301-06-2011 16:32:49

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 1.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
Так, я ещё и перепутал.) Сейчас более тщательно попереустанавливал.
Вот тот вариант, что в моём 10 посте, - не режет множественные пробелы совсем.
А последний вариант из 12 поста - одиночные пробелы в нач и конце строк остаются, хотя в одном месте на этой странице вначале без пробела съёжилось.

А с настройками что?

В смысле?
В окне настроек расширения загалкнуты все эти 3 пункта.
Там ещё только 4-й - про сделать копировать через расширение - дефолтным для браузера.

С множественными пустыми строками ужо всё в порядке, спасибо. ))

Отсутствует

 

№1401-06-2011 16:52:30

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir пишет

В окне настроек расширения загалкнуты все эти 3 пункта.

Ну, не знаю. А copyplaintext.formatting.* в about:config при этом правильные выставляются?
И можно попробовать убрать все if(oPrefs ... ) для проверки.

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


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1501-06-2011 17:03:18

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
Не ну ты расширение-то поставил? )
Вот выделяешь мышом всю эту страницу и в меню Редактировать браузера жамкаешь по "Copy as plain text".
Или, если установлено Auto Copy, то в настройках Auto Copy отметить Copy plain text - тогда само в буфер будет копироваться пропущенным через Copy Plain Text.

about:config посмотрю, if(oPrefs - эт я попугиваюсь влезать - а то убъёт ещё.))

Отсутствует

 

№1601-06-2011 17:16:18

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir пишет

Не ну ты расширение-то поставил? )

А зачем? :D Из консоли ошибок код вполне работает.
Вообще, там манифеста нет, без него ничего не будет. А установленных старых версий, которые его автоматически создавали, у меня сейчас нет. Позже посмотрю.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1701-06-2011 17:19:42

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
Где манифеста нет?
Вот это
copy_plain_text-0.3.3.1-mod.xpi
ставится куда угодно, в Фокс 4 только максверию подправить. Есть там манифест.

Отсутствует

 

№1801-06-2011 18:50:24

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

Есть там манифест.

Точно, это я не ту версию утянул. :sick:

В общем, поставил, работает. Разве что (как и в оригинальном алгоритме) не отрезаются пробелы слева от всех строк – только множественные схлопываются до одного.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1901-06-2011 19:23:02

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 2.1

Re: Copy Plain Text и регулярные выражения

Infocatcher

не отрезаются пробелы слева от всех строк

Да, присмотрелся, в конце строк вроде бы все ликвидируются.

(В about:config всё норм)

Про слева ещё подумай - из спортивного интересу. :rolleyes:

Отсутствует

 

№2001-06-2011 19:36:16

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 4.0

Re: Copy Plain Text и регулярные выражения

vladmir пишет

Про слева ещё подумай - из спортивного интересу. :rolleyes:

Ну, это просто.
Справа:

Выделить код

Код:

replace(/[ \t\xa0\u2002\u2003\u2009]+$/mg, "")

Слева:

Выделить код

Код:

replace(/^[ \t\xa0\u2002\u2003\u2009]+/mg, "")

И там, и там:

Выделить код

Код:

replace(/^[ \t\xa0\u2002\u2003\u2009]+|[ \t\xa0\u2002\u2003\u2009]+$/mg, "")

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№2102-06-2011 11:44:13

vladmir
SeaMonkey - вот это браузер
 
Группа: Extensions
Откуда: НН
Зарегистрирован: 16-10-2004
Сообщений: 4630
UA: Seamonkey 1.1

Re: Copy Plain Text и регулярные выражения

Infocatcher
На данный момент меня полностью устраивает как работает. Всё удаляет что нужно. Спасибо.
Я не вдумывался как по трём настройкам распределено и как лучше, потому что мне подходит, чтобы все три работали всегда.

Для тех, кому тоже захочется того же.)
Берём модифицированную Филиппом Чи версию Copy Plain Text
xsidebar.mozdev.org/modifiedmisc.html#copyplaintext
copy_plain_text-0.3.3.1-mod.xpi

В ней, в файле
copyplaintext.js
найти:

Выделить код

Код:

// Trim
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim"))
                str = str.replace(/^\s*|\s*$/g, "");
            
            // Extra Lines
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.newline") && oPrefs.getBoolPref("copyplaintext.formatting.extra.newline"))
                str = str.replace(/[\n\r]+/g, "\n");
            
            // Extra Space
            if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.space") && oPrefs.getBoolPref("copyplaintext.formatting.extra.space"))
                str = str.replace(/[ \t]+/g, " ");

заменить на:

Выделить код

Код:

// Trim 
 if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim"))
  str = str.replace(/^[ \t\xa0\u2002\u2003\u2009]+|[ \t\xa0\u2002\u2003\u2009]+$/mg, "");

// Extra Lines 
 if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.newline") && oPrefs.getBoolPref("copyplaintext.formatting.extra.newline"))
  str = str.replace(/(\r\n?|\n\r?)(?:[ \t\xa0\u2002\u2003\u2009]*\1){2,}/g, "$1$1");

// Extra Space 
 if(oPrefs.prefHasUserValue("copyplaintext.formatting.extra.space") && oPrefs.getBoolPref("copyplaintext.formatting.extra.space"))
  str = str.replace(/[ \t\xa0\u2002\u2003\u2009]+/g, " ");

Все дела. :)
И заодно в
install.rdf
можно поднять максверсию для Firefox с 3.7.* до 7.0
Для SeaMonkey сейчас норм - 2.1.* но позже тоже можно просто увеличивать номер версии.
Для Thunderbird там прописано 3.1.*

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]