You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
34 lines
538 B
34 lines
538 B
# frozen_string_literal: true |
|
|
|
class PlainTextFormatter |
|
include ActionView::Helpers::TextHelper |
|
|
|
NEWLINE_TAGS_RE = %r{(<br />|<br>|</p>)+} |
|
|
|
attr_reader :text, :local |
|
|
|
alias local? local |
|
|
|
def initialize(text, local) |
|
@text = text |
|
@local = local |
|
end |
|
|
|
def to_s |
|
if local? |
|
text |
|
else |
|
html_entities.decode(strip_tags(insert_newlines)).chomp |
|
end |
|
end |
|
|
|
private |
|
|
|
def insert_newlines |
|
text.gsub(NEWLINE_TAGS_RE) { |match| "#{match}\n" } |
|
end |
|
|
|
def html_entities |
|
HTMLEntities.new |
|
end |
|
end
|
|
|