>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Обсуждение расширений http://forum.mozilla-russia.org/viewforum.php?id=28 >Copy Plain Text и регулярные выражения http://forum.mozilla-russia.org/viewtopic.php?id=50027 |
vladmir > 01-06-2011 09:22:20 |
Copy Plain Text Вот эта модификация расширения: xsidebar.mozdev.org/modifiedmisc.html#copyplaintext Работает со всеми текущими версиями браузеров. И в паре с Auto Copy.
работают как-то не фонтан. - функция 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, вот такое грубиянство почти делает что надо - ну это методом тыка.)) найти Ещё расширение не удаляет одиночный пробел в конце строки и оставляет пробел вначале строки... |
Infocatcher > 01-06-2011 10:01:49 |
vladmir пишет
По идее, во внутреннем представлении только \n, без \r, так что vladmir пишет
Там же есть Выделить код Код:// Trim if(oPrefs.prefHasUserValue("copyplaintext.formatting.trim") && oPrefs.getBoolPref("copyplaintext.formatting.trim")) str = str.replace(/^\s*|\s*$/g, ""); |
vladmir > 01-06-2011 10:57:24 |
Infocatcher
Читал, что на разных системах оно отличается.)
Спасиб, попробую как закрою окно браузера.
Ну дык оставляет же. |
hydrolizer > 01-06-2011 11:23:45 |
vladmir пишет
Парсер регэкспов, по идее, должен сам отлавливать эту платформенную специфику, и в зависимости от сопоставлять с \n в регэкспах либо \r\n-эскейпы в тексте (windows), либо \r (nix-like), либо \n (mac). |
Infocatcher > 01-06-2011 11:40:02 |
Все же вылезает \r\n. По крайней мере, в document.commandDispatcher.focusedWindow.getSelection().toString(). 01-06-2011 11:45:28 vladmir пишет
Возможно, это при наличии и иже с ним. |
vladmir > 01-06-2011 12:15:11 |
Infocatcher
1 раз попробовал - 5 пустых строк съёжило в одну - OK но 3 пустых строки оставило нетронутыми, пробую дальше 3 4 5 6 7 2 |
Infocatcher > 01-06-2011 12:24:05 |
vladmir |
vladmir > 01-06-2011 13:20:53 |
Infocatcher 1 2 3 4 5 6 7 2 1 2 |
Infocatcher > 01-06-2011 13:49:00 |
А, ну да, я флаг "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"); |
vladmir > 01-06-2011 14:06:47 |
Infocatcher 01-06-2011 14:28:00 Выделить код Код:// 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:40:32 |
В Файрфоксе 4.0.1 точно так же. Пустые линии как надо удаляются, а одиночные пробелы в нач и конце строк остаются. |
Infocatcher > 01-06-2011 14:43:19 |
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 отключен. |
vladmir > 01-06-2011 16:32:49 |
Infocatcher
В смысле? С множественными пустыми строками ужо всё в порядке, спасибо. )) |
Infocatcher > 01-06-2011 16:52:30 |
vladmir пишет
Ну, не знаю. А copyplaintext.formatting.* в about:config при этом правильные выставляются? Или я не так понимаю, что требуется получить. |
vladmir > 01-06-2011 17:03:18 |
Infocatcher about:config посмотрю, if(oPrefs - эт я попугиваюсь влезать - а то убъёт ещё.)) |
Infocatcher > 01-06-2011 17:16:18 |
vladmir пишет
А зачем? Из консоли ошибок код вполне работает. |
vladmir > 01-06-2011 17:19:42 |
Infocatcher |
Infocatcher > 01-06-2011 18:50:24 |
Точно, это я не ту версию утянул. В общем, поставил, работает. Разве что (как и в оригинальном алгоритме) не отрезаются пробелы слева от всех строк – только множественные схлопываются до одного. |
vladmir > 01-06-2011 19:23:02 |
Infocatcher
Да, присмотрелся, в конце строк вроде бы все ликвидируются. (В about:config всё норм) Про слева ещё подумай - из спортивного интересу. |
Infocatcher > 01-06-2011 19:36:16 |
vladmir пишет
Ну, это просто. Слева: И там, и там: |
vladmir > 02-06-2011 11:44:13 |
Infocatcher Для тех, кому тоже захочется того же.) В ней, в файле Выделить код Код:// 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, " "); Все дела. |