orka13

orka13
Рейтинг
102
Регистрация
28.03.2011
TopperHarley:
return Regex.Replace(template, @"\r\n(\.|\!|\?)" , "$1");

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

TopperHarley:
Замена переноса+точка на просто точку
return Regex.Replace(template, @"\r\n\." , ".");

уже советовали, но:

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

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

TopperHarley:
На чем остановились то?

на том же. Напомню, что надо заставить пандору из текста типа:

<h1>Слово и пробел в конце строки 
точки нет в конце, она в следующей строке
.</h1>

делать:

<h1>Слово и пробел в конце строки точки нет в конце, она в следующей строке.</h1>

а не

<h1>Слово и пробел в конце строки точки нет в конце, она в следующей строке .</h1>

using System;
using System.Text;
using System.Text.RegularExpressions;
namespace PandoraBox
{
public class OchistkaPerenosov : IPluginMacro
{
public string Execute(string template, PluginMacroArgs args)
{
if(template.Contains("html xmlns"))
return Regex.Replace(template, @"([^>])\r\n", "$1");
//регулярка выше находит разрыв как раз в тех местах где нет закрывающего HTML тега «>»,
//то есть во всех «косяках с разрывами строк», которые я наделал макросам.
//Она должна заменить «найденный символ + разрыв» на «найденный символ».
//Но почему-то разрыв остается.
//Можно просто удалить абсолютно все разрывы строк в коде HTML «(template, @"\r\n", "")»,
//но это не тру :). Хотя пойдет как крайний вариант.
//Пробовал еще «template = template.Replace(Environment.NewLine, "");»,
//но он также во всем шаблоне удаляет разрывы, а не только в нужных строках.
//пробовал и (template, @"([^>])\r\n", "$1", RegexOptions.Multiline), тот же результат.

return template;
}
public ushort Level { get { return 10; } }
public String Name { get { return "OchistkaPerenosov"; } }
}
}
Dos3:
orka13, так если перед разрывом строки идёт не знак типа .!? , то косяка(лишнего пробела) то и не будет, а точка не такого большого размера чтоб её переносить на новую строку, или я чего то не понял)

Я точку для примера привел, случаи разные бывают, не только с точкой (браузер всегда там пробел ставит вместо разрыва). Как бы это так мягко попросить Вас удалится с диалога :), а то мы тут только флудим. Жду подсказки от ТС.

Dos3:
тогда не проще ли удалить разрыв строки перед точками ?

Да посмотрите внимательней на мою регулярку – она же удаляет разрыв как раз в тех местах где нет закрывающего HTML тега «>», тол есть во всех «косяках с разрывами строк», которые я наделал макросами.

Dos3:
хотя проще ставить макросы так чтоб не пришлось ничего удалять, ерундой имхо занимаетесь :)

[|variant1|variant2|[|varian3-1|variant3-2|variant3-3|variant3-4]|]

Вот вам пример несложного макроса с вариантами первого и второго уровня вложенности. В от только у меня обычно посложнее, на целую страницу собираются. И намного удобнее в будущем правки вносить, когда хотя бы родительские варианты расположены с новой строки.

Dos3:
чёт ты не то вроде сделал, убрать пробелы в начале (template, @"^ +", "");

---------- Добавлено 29.04.2014 в 21:04 ----------


для обьединения в одну(нафига это нужно?) просто убрать \r\n или \n

ничего он не соединяет

Вы наверное не совсем вникнули в суть. Если Пандора на выходе сделает код страницы таким:

<h1>Слово: 

еще много слов, но точки нет в конце, она в следующей строке
.</h1>

То пользователь в браузере увидит его таким (пробел лишний перед точкой в конце, так как перед ней был разрыв строк):

Слово: еще много слов, но точки нет в конце, она в следующей строке .

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

[|
Вариант 1
|
Вариант2
|]

И хотя текст на выходе тоже будет с переносами строк, мне было пофиг. Ведь браузер и так соединяет в финале все в одну троку, но он добавляет пробелы в местах переноса, а это иногда лишнее. Так что решил на основе недавних подсказок ТС сделать юзермакрос удаления пропусков, при условии, что в конце строки нет закрывающего тега «>», ну и плагин обрабатывает только HTML файл (проверка на содержание «html xmlns»).

using System;
using System.Text;
using System.Text.RegularExpressions;
namespace PandoraBox
{
public class OchistkaPerenosov : IPluginMacro
{
public string Execute(string template, PluginMacroArgs args)
{
if(template.Contains("html xmlns"))
return Regex.Replace(template, @"([^>])\r\n", "$1");
return template;
}
public ushort Level { get { return 10; } }
public String Name { get { return "OchistkaPerenosov"; } }
}
}

Проблема: регулярка не срабатывает полноценно, то есть находит разрывы, но не соединяет строки. В блокноте Notepad++ работает, а в коде, наверное, другой синтаксис нужен для объединения строк. Подправьте плиз.

daymos:
конечно, в юзермакросах

Если я все верно понял, то хватит просто создать сколько угодно юзермокросов типа PROB1, PROB2…. с одинаковым содержанием, и использовать их в будущем. Но где это содержание взять? Я сам не наштопаю. Надеюсь, TopperHarley поделится кодом, когда вернется.

Насчет глюков вложенности PROB\SPROB в самого себя (пост выше):

Не работает:

{PROB-80%}скачать {PROB-50%}бесплатно{/PROB} без регистрации{/PROB}

Работает:

{PROB-80%}скачать {SPROB-50%}бесплатно{/SPROB} без регистрации{/PROB}

Не работает:

{SPROB-80%}скачать {SPROB-50%}бесплатно{/SPROB} без регистрации{/SPROB}

Как я понимаю, логика программы последовательно обрабатывает закрывающие\открывающие теги этих макросов. И при нахождении открывающей скобки считает завершением тела макроса ближайшую закрывающую скобку, даже если она принадлежит другому (внутреннему) макросу.

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

{SPROB1-*%}{/SPROB1}
{SPROB2-*%}{/SPROB2}
{SPROB3-*%}{/SPROB3}
……
{SPROB10-*%}{/SPROB10}

И

{PROB1-*%}{/PROB1}
{PROB2-*%}{/PROB2}
{PROB3-*%}{/PROB3}
……
{PROB10-*%}{/PROB10}

Тогда заработает вот так:

{PROB1-80%}скачать {PROB2-50%}бесплатно{/PROB2} без регистрации{/PROB1}

Идея реализируемая?

fartof:
TopperHarley не подскажешь, чтобы ссылки имели вид door.ru/категория/страница/
(с категориями, внутренние стр. без .html расширения, просто слеш /)

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

А в .htaccess указать только:

RewriteEngine on
RewriteRule ^([A-Za-z0-9\-\_]+)/$ /$1.html [L]

В итоге и ссылки перелинковки и структура дора имеют вид «door.ru/valera/»

П.С.: Еще корявость в использовании замены REPLACEMENT – если у вас очень сложный шаблон, то замена может не произойти. У меня только на чистом дефолтном шаблоне сработала замена.

П.П.С.

Если не получается с {REPLACEMENT-(.html)-(/)} ( у меня, например, на главной он срабатывает, а на внутренних страницах нет, причины не понял), то можно обойти методом через попу:

Юзермакрос, который принудительно сделает замену (я не профи C#, на основе предыдущего по регулярке сделал):

using System;
using System.Text;
using System.Text.RegularExpressions;
namespace PandoraBox
{
public class CommenterPlugin : IPluginMacro
{
public string Execute(string template, PluginMacroArgs args)
{
return Regex.Replace(template, @"\.html", "/");
}
public ushort Level { get { return 10; } }
public String Name { get { return "CommenterPlugin"; } }
}
}

Но вот только он и .htaccess покоцает, а нам это не надо (можно руками его восстановить, но при массовости это лишнии трудозатраты). Пусть бы ТС подсказал как макрос подправить.

Всего: 532