\ n до <br>и несколько вопросов \ n до <p> - PullRequest
0 голосов
/ 22 апреля 2011
  1. Я использую bbruby gem для замены текста в bbcode на html.
  2. Он заменяет \r\n \n на <br>, а mutiple \r\n \n s на <p>.

 # https://github.com/cpjolicoeur/bb-ruby/blob/master/lib/bb-ruby.rb

 def simple_format(text)
  start_tag = '<p>'
  text = text.to_s.dup
  text.gsub!(/\r\n?/, "\n")                     # \r\n and \r => \n
  text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}")   # 2+ newline  => paragraph
  text.gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />')  # 1 newline   => br
  text.insert 0, start_tag
  text << "</p>"
end

Выглядит отлично!

Но когда текст содержит <table>, становится ужасно!Я хочу избежать замены \n, когда \n находится в теге таблицы, и я пытаюсь заменить \n в таблице до того, как bbruby заменит его, но это не работает.

Ответы [ 3 ]

1 голос
/ 22 апреля 2011
text.gsub!(/\r\n?/, "\n")

Должно быть

text.gsub!(/\r?\n/, "\n")

В своем регулярном выражении вы можете заглянуть в упреждающий просмотр и посмотреть, есть ли у вас тег таблицы (в зависимости от версии ruby, которую вы 'Это может быть недоступно для вас).Вместо этого вы можете просто запустить свой метод, разделив строку на теги таблицы, что даст вам нечетное количество строк.Запускайте регулярные выражения выше только для четных индексированных строк.Затем объедините строки вместе с табличными тегами.Это позволит вам правильно завершать и запускать теги абзаца и игнорировать разрывы строк в таблицах.

def simple_format( text )
  strings = text.split(/<\/?table>/)
  strings.each_with_index do |i, string|
    if i % 2 == 0 # even index == outside of table tags
      string.gsub!(/\r?\n/, "\n")    # \r\n and \r => \n
      # ...
      strings[i] = "<p>" + string + "</p>"
    else # odd index == inside of table tags
      strings[i] = "<table>" + string + "</table>"
    end
  end
  strings.join
end

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

0 голосов
/ 23 сентября 2011

bbcode и HTML не смешиваются.На самом деле bbcode был разработан специально для того, чтобы НЕ допускать HTML-теги.Поскольку это дизайн bbcode, я не вижу способов его взломать.Если вы хотите продолжить использовать bbcode, вы должны учитывать, что он не будет работать с вводом HTML.

Насколько я знаю, bbcode не имеет синтаксиса для HTML-таблиц.Если вам абсолютно необходимы таблицы, подумайте о переключении на другой анализатор или разрешите полноценный редактор HTML, например tinymce.

0 голосов
/ 22 апреля 2011

ну как-то так?

  def simple_format( text )
      return text if ( text =~ /(<table.*>)/ ) # return text unchanged

      start_tag = '<p>'
      text = text.to_s.dup 
      text.gsub!(/\r\n?/, "\n")    # \r\n and \r => \n
      text.gsub!(/\n\n+/, "</p>\n\n#{start_tag}")  # 2+ newline  => paragraph 
      text.gsub!(/([^\n]\n)(?=[^\n])/, '\1<br />')  # 1 newline   => br 
      text.insert 0, start_tag  
      text << "</p>" 
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...