Страницы: 1
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 selectedReplace extra spaces
Replaces any occurrence of multiple spaces with a single spaceRemove 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
Ещё расширение не удаляет одиночный пробел в конце строки и оставляет пробел вначале строки...
Отсутствует
чтобы оно не трогало одиночные пустые строки, а несколько строк подряд превращало в одну пустую.
По идее, во внутреннем представлении только \n, без \r, так что
Ещё расширение не удаляет одиночный пробел в конце строки и оставляет пробел вначале строки...
Там же есть
// Trim if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim")) str = str.replace(/^\s*|\s*$/g, "");
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
\n, без \r
Читал, что на разных системах оно отличается.)
replace(/\n{3,}/g, "\n\n")
Спасиб, попробую как закрою окно браузера.
Там же есть
Ну дык оставляет же.
Может быть - после сжимания нескольких пробелов вначале строки в один. Когда пробелы посреди строки - это норм.
Отсутствует
Читал, что на разных системах оно отличается.)
Парсер регэкспов, по идее, должен сам отлавливать эту платформенную специфику, и в зависимости от сопоставлять с \n в регэкспах либо \r\n-эскейпы в тексте (windows), либо \r (nix-like), либо \n (mac).
Отсутствует
Все же вылезает \r\n. По крайней мере, в document.commandDispatcher.focusedWindow.getSelection().toString().
Тогда так:
Добавлено 01-06-2011 11:45:28
Ну дык оставляет же.
Возможно, это при наличии и иже с ним.
Отредактировано Infocatcher (01-06-2011 11:45:28)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
replace(/(\r\n?|\n\r?)\1{2,}/, "$1$1")
1 раз попробовал - 5 пустых строк съёжило в одну - OK
но 3 пустых строки оставило нетронутыми, пробую дальше
3
4
5
6
7
2
Отредактировано vladmir (01-06-2011 13:10:11)
Отсутствует
vladmir
Еще можно попробовать предварительно пробелы с конца каждой строки срезать:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Нет, что-то не фурычит твой убиратель строк.
про 5 строк уже не уверен как там вышло.)))
В своём посте 6 наделал переходов, несколько раз вкл-выкл эту функцию в настройках - с ней только в одном месте пуст стр убирается - между твоим ником и цитатой.-)
1
2
3
4
5
6
7
2
1
2
Отредактировано vladmir (01-06-2011 13:32:26)
Отсутствует
А, ну да, я флаг "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)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Уже фурычит.
И в еррор консоли без ошибок.
Это я удалятель пустых строк пока смотрел. Щас другие секаторы впендюрю.
Добавлено 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)
Отсутствует
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 отключен.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Так, я ещё и перепутал.) Сейчас более тщательно попереустанавливал.
Вот тот вариант, что в моём 10 посте, - не режет множественные пробелы совсем.
А последний вариант из 12 поста - одиночные пробелы в нач и конце строк остаются, хотя в одном месте на этой странице вначале без пробела съёжилось.
А с настройками что?
В смысле?
В окне настроек расширения загалкнуты все эти 3 пункта.
Там ещё только 4-й - про сделать копировать через расширение - дефолтным для браузера.
С множественными пустыми строками ужо всё в порядке, спасибо. ))
Отсутствует
В окне настроек расширения загалкнуты все эти 3 пункта.
Ну, не знаю. А copyplaintext.formatting.* в about:config при этом правильные выставляются?
И можно попробовать убрать все if(oPrefs ... ) для проверки.
Или я не так понимаю, что требуется получить.
Или это пробелы какие-то особенные, тогда нужен живой пример.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Не ну ты расширение-то поставил? )
Вот выделяешь мышом всю эту страницу и в меню Редактировать браузера жамкаешь по "Copy as plain text".
Или, если установлено Auto Copy, то в настройках Auto Copy отметить Copy plain text - тогда само в буфер будет копироваться пропущенным через Copy Plain Text.
about:config посмотрю, if(oPrefs - эт я попугиваюсь влезать - а то убъёт ещё.))
Отсутствует
Не ну ты расширение-то поставил? )
А зачем? Из консоли ошибок код вполне работает.
Вообще, там манифеста нет, без него ничего не будет. А установленных старых версий, которые его автоматически создавали, у меня сейчас нет. Позже посмотрю.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Где манифеста нет?
Вот это
copy_plain_text-0.3.3.1-mod.xpi
ставится куда угодно, в Фокс 4 только максверию подправить. Есть там манифест.
Отсутствует
Есть там манифест.
Точно, это я не ту версию утянул.
В общем, поставил, работает. Разве что (как и в оригинальном алгоритме) не отрезаются пробелы слева от всех строк – только множественные схлопываются до одного.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
не отрезаются пробелы слева от всех строк
Да, присмотрелся, в конце строк вроде бы все ликвидируются.
(В about:config всё норм)
Про слева ещё подумай - из спортивного интересу.
Отсутствует
Про слева ещё подумай - из спортивного интересу.
Ну, это просто.
Справа:
Слева:
И там, и там:
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
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.*
Отсутствует
Страницы: 1