reverse_markdown-3.0.0/ 0000755 0000041 0000041 00000000000 14727742461 015135 5 ustar www-data www-data reverse_markdown-3.0.0/bin/ 0000755 0000041 0000041 00000000000 14727742461 015705 5 ustar www-data www-data reverse_markdown-3.0.0/bin/reverse_markdown 0000755 0000041 0000041 00000001130 14727742461 021203 0 ustar www-data www-data #!/usr/bin/env ruby
# Usage: reverse_markdown [FILE]...
# Usage: cat FILE | reverse_markdown
require 'reverse_markdown'
require 'optparse'
options = {}
OptionParser.new do |opts|
opts.banner = "Usage: reverse_markdown [options] "
opts.on('-u', '--unknown_tags [pass_through, drop, bypass, raise]', 'Unknown tag handling (default: pass_through)') { |v| ReverseMarkdown.config.unknown_tags = v }
opts.on('-g', '--github_flavored bool', 'use github flavored markdown (default: false)') { |v| ReverseMarkdown.config.github_flavored = v }
end.parse!
puts ReverseMarkdown.convert(ARGF.read)
reverse_markdown-3.0.0/.gitignore 0000644 0000041 0000041 00000000140 14727742461 017120 0 ustar www-data www-data *.gem
.bundle
.rvmrc
.ruby-version
.ruby-gemset
.codeclimate
Gemfile.lock
pkg/*
coverage/*
TODO
reverse_markdown-3.0.0/.tool-versions 0000644 0000041 0000041 00000000013 14727742461 017753 0 ustar www-data www-data ruby 3.3.5
reverse_markdown-3.0.0/.github/ 0000755 0000041 0000041 00000000000 14727742461 016475 5 ustar www-data www-data reverse_markdown-3.0.0/.github/workflows/ 0000755 0000041 0000041 00000000000 14727742461 020532 5 ustar www-data www-data reverse_markdown-3.0.0/.github/workflows/ci.yml 0000644 0000041 0000041 00000002173 14727742461 021653 0 ustar www-data www-data name: CI
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
ruby-version: [ '2.7', '3.0', '3.1', '3.2', '3.3', 'jruby-9.4' ]
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Set up Ruby
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ matrix.ruby-version }}
bundler-cache: true
- name: Install dependencies
run: bundle install
- name: Run tests
run: bundle exec rspec
- name: Run Code Climate Test Reporter
run: |
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
chmod +x ./cc-test-reporter
./cc-test-reporter before-build
- name: Run tests
run: bundle exec rspec
- name: Upload Code Climate Coverage Report
if: matrix.ruby-version == '3.3'
env:
CC_TEST_REPORTER_ID: ${{ secrets.CC_TEST_REPORTER_ID }}
run: |
./cc-test-reporter after-build --exit-code $?
reverse_markdown-3.0.0/lib/ 0000755 0000041 0000041 00000000000 14727742461 015703 5 ustar www-data www-data reverse_markdown-3.0.0/lib/reverse_markdown.rb 0000644 0000041 0000041 00000004005 14727742461 021604 0 ustar www-data www-data require 'nokogiri'
require 'reverse_markdown/version'
require 'reverse_markdown/errors'
require 'reverse_markdown/cleaner'
require 'reverse_markdown/config'
require 'reverse_markdown/converters'
require 'reverse_markdown/converters/base'
require 'reverse_markdown/converters/a'
require 'reverse_markdown/converters/blockquote'
require 'reverse_markdown/converters/br'
require 'reverse_markdown/converters/bypass'
require 'reverse_markdown/converters/code'
require 'reverse_markdown/converters/del'
require 'reverse_markdown/converters/div'
require 'reverse_markdown/converters/drop'
require 'reverse_markdown/converters/details'
require 'reverse_markdown/converters/em'
require 'reverse_markdown/converters/figcaption'
require 'reverse_markdown/converters/figure'
require 'reverse_markdown/converters/h'
require 'reverse_markdown/converters/hr'
require 'reverse_markdown/converters/ignore'
require 'reverse_markdown/converters/img'
require 'reverse_markdown/converters/li'
require 'reverse_markdown/converters/ol'
require 'reverse_markdown/converters/p'
require 'reverse_markdown/converters/pass_through'
require 'reverse_markdown/converters/pre'
require 'reverse_markdown/converters/strong'
require 'reverse_markdown/converters/table'
require 'reverse_markdown/converters/td'
require 'reverse_markdown/converters/text'
require 'reverse_markdown/converters/tr'
require 'reverse_markdown/converters/iframe'
module ReverseMarkdown
def self.convert(input, options = {})
config.with(options) do
input = cleaner.force_encoding(input.to_s)
root = case input
when String then Nokogiri::HTML(input).root
when Nokogiri::XML::Document then input.root
when Nokogiri::XML::Node then input
end
root or return ''
result = ReverseMarkdown::Converters.lookup(root.name).convert(root)
cleaner.tidy(result)
end
end
def self.config
@config ||= Config.new
yield @config if block_given?
@config
end
def self.cleaner
@cleaner ||= Cleaner.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/ 0000755 0000041 0000041 00000000000 14727742461 021260 5 ustar www-data www-data reverse_markdown-3.0.0/lib/reverse_markdown/cleaner.rb 0000644 0000041 0000041 00000005373 14727742461 023226 0 ustar www-data www-data module ReverseMarkdown
class Cleaner
def tidy(string)
result = remove_inner_whitespaces(string)
result = remove_newlines(result)
result = remove_leading_newlines(result)
result = clean_tag_borders(result)
clean_punctuation_characters(result)
end
def remove_newlines(string)
string.gsub(/\n{3,}/, "\n\n")
end
def remove_leading_newlines(string)
string.gsub(/\A\n+/, '')
end
def remove_inner_whitespaces(string)
string.each_line.inject("") do |memo, line|
memo + preserve_border_whitespaces(line) do
line.strip.gsub(/[ \t]{2,}/, ' ')
end
end
end
# Find non-asterisk content that is enclosed by two or
# more asterisks. Ensure that only one whitespace occurs
# in the border area.
# Same for underscores and brackets.
def clean_tag_borders(string)
result = string.gsub(/\s?\*{2,}.*?\*{2,}\s?/) do |match|
preserve_border_whitespaces(match, default_border: ReverseMarkdown.config.tag_border) do
match.strip.sub('** ', '**').sub(' **', '**')
end
end
result = result.gsub(/\s?\_{2,}.*?\_{2,}\s?/) do |match|
preserve_border_whitespaces(match, default_border: ReverseMarkdown.config.tag_border) do
match.strip.sub('__ ', '__').sub(' __', '__')
end
end
result = result.gsub(/\s?~{2,}.*?~{2,}\s?/) do |match|
preserve_border_whitespaces(match, default_border: ReverseMarkdown.config.tag_border) do
match.strip.sub('~~ ', '~~').sub(' ~~', '~~')
end
end
result.gsub(/\s?\[.*?\]\s?/) do |match|
preserve_border_whitespaces(match) do
match.strip.sub('[ ', '[').sub(' ]', ']')
end
end
end
def clean_punctuation_characters(string)
string.gsub(/(\*\*|~~|__)\s([\.!\?'"])/, "\\1".strip + "\\2")
end
def force_encoding(string)
ReverseMarkdown.config.force_encoding or return string
string.encode('UTF-8', 'binary', invalid: :replace, undef: :replace, replace: '')
end
private
def preserve_border_whitespaces(string, options = {}, &block)
return string if string =~ /\A\s*\Z/
default_border = options.fetch(:default_border, '')
# If the string contains part of a link so the characters [,],(,)
# then don't add any extra spaces
default_border = '' if string =~ /[\[\(\]\)]/
string_start = present_or_default(string[/\A\s*/], default_border)
string_end = present_or_default(string[/\s*\Z/], default_border)
result = yield
string_start + result + string_end
end
def present_or_default(string, default)
if string.nil? || string.empty?
default
else
string
end
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/config.rb 0000644 0000041 0000041 00000001551 14727742461 023054 0 ustar www-data www-data module ReverseMarkdown
class Config
attr_writer :unknown_tags, :github_flavored, :tag_border, :force_encoding
def initialize
@unknown_tags = :pass_through
@github_flavored = false
@force_encoding = false
@em_delimiter = '_'.freeze
@strong_delimiter = '**'.freeze
@inline_options = {}
@tag_border = ' '.freeze
end
def with(options = {})
@inline_options = options
result = yield
@inline_options = {}
result
end
def unknown_tags
@inline_options[:unknown_tags] || @unknown_tags
end
def github_flavored
@inline_options[:github_flavored] || @github_flavored
end
def tag_border
@inline_options[:tag_border] || @tag_border
end
def force_encoding
@inline_options[:force_encoding] || @force_encoding
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/ 0000755 0000041 0000041 00000000000 14727742461 023452 5 ustar www-data www-data reverse_markdown-3.0.0/lib/reverse_markdown/converters/hr.rb 0000644 0000041 0000041 00000000255 14727742461 024412 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Hr < Base
def convert(node, state = {})
"\n* * *\n"
end
end
register :hr, Hr.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/ol.rb 0000644 0000041 0000041 00000000462 14727742461 024413 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Ol < Base
def convert(node, state = {})
ol_count = state.fetch(:ol_count, 0) + 1
+"\n" << treat_children(node, state.merge(ol_count: ol_count)) << "\n"
end
end
register :ol, Ol.new
register :ul, Ol.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/div.rb 0000644 0000041 0000041 00000000364 14727742461 024564 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Div < Base
def convert(node, state = {})
+"\n" << treat_children(node, state) << "\n"
end
end
register :div, Div.new
register :article, Div.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/text.rb 0000644 0000041 0000041 00000002633 14727742461 024767 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Text < Base
def convert(node, options = {})
if node.text.strip.empty?
treat_empty(node)
else
treat_text(node)
end
end
private
def treat_empty(node)
parent = node.parent.name.to_sym
if [:ol, :ul].include?(parent) # Otherwise the identation is broken
''
elsif node.text == ' ' # Regular whitespace text node
' '
else
''
end
end
def treat_text(node)
text = node.text
text = preserve_nbsp(text)
text = remove_border_newlines(text)
text = remove_inner_newlines(text)
text = escape_keychars(text)
text = preserve_keychars_within_backticks(text)
text = preserve_tags(text)
text
end
def preserve_nbsp(text)
text.gsub(/\u00A0/, " ")
end
def preserve_tags(text)
text.gsub(/[<>]/, '>' => '\>', '<' => '\<')
end
def remove_border_newlines(text)
text.gsub(/\A\n+/, '').gsub(/\n+\z/, '')
end
def remove_inner_newlines(text)
text.tr("\r\n\t", ' ').squeeze(' ')
end
def preserve_keychars_within_backticks(text)
text.gsub(/`.*?`/) do |match|
match.gsub('\_', '_').gsub('\*', '*')
end
end
end
register :text, Text.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/del.rb 0000644 0000041 0000041 00000001072 14727742461 024543 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Del < Base
def convert(node, state = {})
content = treat_children(node, state.merge(already_crossed_out: true))
if disabled? || content.strip.empty? || state[:already_crossed_out]
content
else
"~~#{content}~~"
end
end
def enabled?
ReverseMarkdown.config.github_flavored
end
def disabled?
!enabled?
end
end
register :strike, Del.new
register :s, Del.new
register :del, Del.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/drop.rb 0000644 0000041 0000041 00000000214 14727742461 024740 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Drop < Base
def convert(node, state = {})
''
end
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/code.rb 0000644 0000041 0000041 00000000270 14727742461 024710 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Code < Base
def convert(node, state = {})
"`#{node.text}`"
end
end
register :code, Code.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/p.rb 0000644 0000041 0000041 00000000325 14727742461 024236 0 ustar www-data www-data module ReverseMarkdown
module Converters
class P < Base
def convert(node, state = {})
+"\n\n" << treat_children(node, state).strip << "\n\n"
end
end
register :p, P.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/base.rb 0000644 0000041 0000041 00000001245 14727742461 024713 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Base
def treat_children(node, state)
node.children.inject(+'') do |memo, child|
memo << treat(child, state)
end
end
def treat(node, state)
ReverseMarkdown::Converters.lookup(node.name).convert(node, state)
end
def escape_keychars(string)
string.gsub(/(? '\*', '_' => '\_')
end
def extract_title(node)
title = escape_keychars(node['title'].to_s)
title.empty? ? '' : %[ "#{title}"]
end
def extract_src(node)
node['src'].to_s.empty? ? '' : node['src'].to_s
end
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/td.rb 0000644 0000041 0000041 00000000370 14727742461 024406 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Td < Base
def convert(node, state = {})
content = treat_children(node, state)
" #{content} |"
end
end
register :td, Td.new
register :th, Td.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/a.rb 0000644 0000041 0000041 00000001103 14727742461 024212 0 ustar www-data www-data module ReverseMarkdown
module Converters
class A < Base
def convert(node, state = {})
name = treat_children(node, state)
href = node['href']
title = extract_title(node)
if href.to_s.empty? || name.empty?
name
else
link = "[#{name}](#{href}#{title})"
link.prepend(' ') if prepend_space?(node)
link
end
end
private
def prepend_space?(node)
node.at_xpath("preceding::text()[1]").to_s.end_with?('!')
end
end
register :a, A.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/bypass.rb 0000644 0000041 0000041 00000000635 14727742461 025304 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Bypass < Base
def convert(node, state = {})
treat_children(node, state)
end
end
register :document, Bypass.new
register :html, Bypass.new
register :body, Bypass.new
register :span, Bypass.new
register :thead, Bypass.new
register :tbody, Bypass.new
register :tfoot, Bypass.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/img.rb 0000644 0000041 0000041 00000000435 14727742461 024555 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Img < Base
def convert(node, state = {})
alt = node['alt']
src = node['src']
title = extract_title(node)
" "
end
end
register :img, Img.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/pass_through.rb 0000644 0000041 0000041 00000000232 14727742461 026502 0 ustar www-data www-data module ReverseMarkdown
module Converters
class PassThrough < Base
def convert(node, state = {})
node.to_s
end
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/iframe.rb 0000644 0000041 0000041 00000000277 14727742461 025250 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Iframe < Base
def convert(node, state = {})
extract_src(node)
end
end
register :iframe, Iframe.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/strong.rb 0000644 0000041 0000041 00000000672 14727742461 025320 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Strong < Base
def convert(node, state = {})
content = treat_children(node, state.merge(already_strong: true))
if content.strip.empty? || state[:already_strong]
content
else
"#{content[/^\s*/]}**#{content.strip}**#{content[/\s*$/]}"
end
end
end
register :strong, Strong.new
register :b, Strong.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/table.rb 0000644 0000041 0000041 00000000331 14727742461 025063 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Table < Base
def convert(node, state = {})
+"\n\n" << treat_children(node, state) << "\n"
end
end
register :table, Table.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/li.rb 0000644 0000041 0000041 00000001703 14727742461 024404 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Li < Base
def convert(node, state = {})
contains_child_paragraph = node.first_element_child ? node.first_element_child.name == 'p' : false
content_node = contains_child_paragraph ? node.first_element_child : node
content = treat_children(content_node, state)
indentation = indentation_from(state)
prefix = prefix_for(node)
"#{indentation}#{prefix}#{content.chomp}\n" +
(contains_child_paragraph ? "\n" : '')
end
def prefix_for(node)
if node.parent.name == 'ol'
index = node.parent.xpath('li').index(node)
"#{index.to_i + 1}. "
else
'- '
end
end
def indentation_from(state)
length = state.fetch(:ol_count, 0)
' ' * [length - 1, 0].max
end
end
register :li, Li.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/ignore.rb 0000644 0000041 0000041 00000000377 14727742461 025271 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Ignore < Base
def convert(node, state = {})
'' # noop
end
end
register :colgroup, Ignore.new
register :col, Ignore.new
register :head, Ignore.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/h.rb 0000644 0000041 0000041 00000000577 14727742461 024237 0 ustar www-data www-data module ReverseMarkdown
module Converters
class H < Base
def convert(node, state = {})
prefix = '#' * node.name[/\d/].to_i
["\n", prefix, ' ', treat_children(node, state), "\n"].join
end
end
register :h1, H.new
register :h2, H.new
register :h3, H.new
register :h4, H.new
register :h5, H.new
register :h6, H.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/figcaption.rb 0000644 0000041 0000041 00000000453 14727742461 026124 0 ustar www-data www-data module ReverseMarkdown
module Converters
class FigCaption < Base
def convert(node, state = {})
if node.text.strip.empty?
""
else
+"\n" << "_#{node.text.strip}_" << "\n"
end
end
end
register :figcaption, FigCaption.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/br.rb 0000644 0000041 0000041 00000000250 14727742461 024377 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Br < Base
def convert(node, state = {})
" \n"
end
end
register :br, Br.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/details.rb 0000644 0000041 0000041 00000001113 14727742461 025420 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Details < Base
def convert(node, state = {})
content = treat_children(node, state.merge(already_processed: true))
if disabled? || content.strip.empty? || state[:already_processed]
content
else
"##{content}"
end
end
def enabled?
ReverseMarkdown.config.github_flavored
end
def disabled?
!enabled?
end
end
register :details, Details.new
register :summary, Details.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/tr.rb 0000644 0000041 0000041 00000001037 14727742461 024425 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Tr < Base
def convert(node, state = {})
content = treat_children(node, state).rstrip
result = "|#{content}\n"
table_header_row?(node) ? result + underline_for(node) : result
end
def table_header_row?(node)
node.element_children.all? {|child| child.name.to_sym == :th}
end
def underline_for(node)
"| " + (['---'] * node.element_children.size).join(' | ') + " |\n"
end
end
register :tr, Tr.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/blockquote.rb 0000644 0000041 0000041 00000000545 14727742461 026153 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Blockquote < Base
def convert(node, state = {})
content = treat_children(node, state).strip
content = ReverseMarkdown.cleaner.remove_newlines(content)
+"\n\n> " << content.lines.to_a.join('> ') << "\n\n"
end
end
register :blockquote, Blockquote.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/em.rb 0000644 0000041 0000041 00000000644 14727742461 024404 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Em < Base
def convert(node, state = {})
content = treat_children(node, state.merge(already_italic: true))
if content.strip.empty? || state[:already_italic]
content
else
"#{content[/^\s*/]}_#{content.strip}_#{content[/\s*$/]}"
end
end
end
register :em, Em.new
register :i, Em.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/figure.rb 0000644 0000041 0000041 00000000362 14727742461 025261 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Figure < Base
def convert(node, state = {})
content = treat_children(node, state)
"\n#{content.strip}\n"
end
end
register :figure, Figure.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters/pre.rb 0000644 0000041 0000041 00000002064 14727742461 024567 0 ustar www-data www-data module ReverseMarkdown
module Converters
class Pre < Base
def convert(node, state = {})
content = treat_children(node, state)
if ReverseMarkdown.config.github_flavored
+"\n```#{language(node)}\n" << content.strip << "\n```\n"
else
+"\n\n " << content.lines.to_a.join(" ") << "\n\n"
end
end
private
# Override #treat as proposed in https://github.com/xijo/reverse_markdown/pull/69
def treat(node, state)
case node.name
when 'code', 'text'
node.text.strip
when 'br'
"\n"
else
super
end
end
def language(node)
lang = language_from_highlight_class(node)
lang || language_from_confluence_class(node)
end
def language_from_highlight_class(node)
node.parent['class'].to_s[/highlight-([a-zA-Z0-9]+)/, 1]
end
def language_from_confluence_class(node)
node['class'].to_s[/brush:\s?(:?.*);/, 1]
end
end
register :pre, Pre.new
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/version.rb 0000644 0000041 0000041 00000000057 14727742461 023274 0 ustar www-data www-data module ReverseMarkdown
VERSION = '3.0.0'
end
reverse_markdown-3.0.0/lib/reverse_markdown/converters.rb 0000644 0000041 0000041 00000001650 14727742461 024001 0 ustar www-data www-data module ReverseMarkdown
module Converters
def self.register(tag_name, converter)
@@converters ||= {}
@@converters[tag_name.to_sym] = converter
end
def self.unregister(tag_name)
@@converters.delete(tag_name.to_sym)
end
def self.lookup(tag_name)
@@converters[tag_name.to_sym] or default_converter(tag_name)
end
private
def self.default_converter(tag_name)
case ReverseMarkdown.config.unknown_tags.to_sym
when :pass_through
ReverseMarkdown::Converters::PassThrough.new
when :drop
ReverseMarkdown::Converters::Drop.new
when :bypass
ReverseMarkdown::Converters::Bypass.new
when :raise
raise UnknownTagError, "unknown tag: #{tag_name}"
else
raise InvalidConfigurationError, "unknown value #{ReverseMarkdown.config.unknown_tags.inspect} for ReverseMarkdown.config.unknown_tags"
end
end
end
end
reverse_markdown-3.0.0/lib/reverse_markdown/errors.rb 0000644 0000041 0000041 00000000227 14727742461 023122 0 ustar www-data www-data module ReverseMarkdown
class Error < StandardError
end
class UnknownTagError < Error
end
class InvalidConfigurationError < Error
end
end
reverse_markdown-3.0.0/spec/ 0000755 0000041 0000041 00000000000 14727742461 016067 5 ustar www-data www-data reverse_markdown-3.0.0/spec/spec_helper.rb 0000644 0000041 0000041 00000001120 14727742461 020677 0 ustar www-data www-data require 'simplecov'
require 'debug' unless RUBY_ENGINE == 'jruby'
SimpleCov.profiles.define 'gem' do
add_filter '/spec/'
add_filter '/autotest/'
add_group 'Libraries', '/lib/'
end
SimpleCov.start 'gem'
require 'reverse_markdown'
RSpec.configure do |config|
config.after(:each) do
ReverseMarkdown.instance_variable_set(:@config, nil)
end
config.around(jruby: :exclude) do |example|
if RUBY_ENGINE == 'jruby'
example.metadata[:skip] = true
else
example.call
end
end
end
def node_for(html)
Nokogiri::HTML.parse(html).root.children.last.child
end
reverse_markdown-3.0.0/spec/assets/ 0000755 0000041 0000041 00000000000 14727742461 017371 5 ustar www-data www-data reverse_markdown-3.0.0/spec/assets/basic.html 0000644 0000041 0000041 00000002720 14727742461 021341 0 ustar www-data www-data
plain text
h1
h2
h3
h4
h5
h6
em tag content
before and after empty em tags
before and after em tags containing whitespace
before
and after em tags containing whitespace
double em tags
double em tags in p tag
a em with leading and trailing whitespace
a
em with extra leading and trailing
whitespace
strong tag content
before and after empty strong tags
before and after strong tags containing whitespace
before
and after strong tags containing whitespace
double strong tags
double strong tags in p tag
before
double strong tags containing whitespace
after
a strong with leading and trailing whitespace
a
strong with extra leading and trailing
whitespace
b tag content
i tag content
br tags become double space followed by newline
before hr
after hr
section 1
section 2
reverse_markdown-3.0.0/spec/assets/quotation.html 0000644 0000041 0000041 00000000305 14727742461 022300 0 ustar www-data www-data
Block of code
First quoted paragraph
Second quoted paragraph
reverse_markdown-3.0.0/spec/assets/escapables.html 0000644 0000041 0000041 00000000351 14727742461 022360 0 ustar www-data www-data
some text...
**two asterisks**
***three asterisks***
__two underscores__
___three underscores___
some text...
var theoretical_max_infin = 1.0;
reverse_markdown-3.0.0/spec/assets/html_fragment.html 0000644 0000041 0000041 00000000057 14727742461 023110 0 ustar www-data www-data naked text 1
paragraph text
naked text 2 reverse_markdown-3.0.0/spec/assets/minimum.html 0000644 0000041 0000041 00000000042 14727742461 021726 0 ustar www-data www-data
reverse_markdown-3.0.0/spec/assets/anchors.html 0000644 0000041 0000041 00000002306 14727742461 021715 0 ustar www-data www-data
some text...
Foobar
Fubar
Strong foobar
There should be no extra space before and after the anchor (stripped).
Exception: after an !there should be an extra space.
Even with stripped elements inbetween: !there should be an extra space.
ignore anchor tags with no link text
not ignore
anchor tags with images
pass through the text of internal jumplinks without treating them as links
pass through the text of anchor tags with no href without treating them as links
some text...
some text...
reverse_markdown-3.0.0/spec/assets/code.html 0000644 0000041 0000041 00000000562 14727742461 021174 0 ustar www-data www-data
pre block
code block
pre code block
Paragraph with inline code
block
var this;
this.is("A multi line code block")
console.log("Yup, it is")
Code with indentation:
tell application "Foo"
beep
end tell
reverse_markdown-3.0.0/spec/assets/from_the_wild.html 0000644 0000041 0000041 00000000477 14727742461 023111 0 ustar www-data www-data
.
*** intentcast
: logo design
.
I\_AM\_HELPFUL
reverse_markdown-3.0.0/spec/assets/lists.html 0000644 0000041 0000041 00000004601 14727742461 021416 0 ustar www-data www-data
some text...
- unordered list entry
- unordered list entry 2
- ordered list entry
- ordered list entry 2
- list entry 1st hierarchy
-
- nested unsorted list entry
-
- deep nested list entry
a nested list with no whitespace:
a nested list with lots of whitespace:
-
li 1, p 1
li 1, p 2
li 2, p 1
-
one
- one one
- one two
-
two
-
two one
- two one one
- two one two
- two two
- three
a nested list between adjacent list items
- alpha
- bravo
- charlie
- delta
- item followed with a text
text after the list
reverse_markdown-3.0.0/spec/assets/tables.html 0000644 0000041 0000041 00000002077 14727742461 021537 0 ustar www-data www-data
some text...
header 1 |
header 2 |
header 3 |
data 1-1 |
data 2-1 |
data 3-1 |
data 1-2 |
data 2-2 |
data 3-2 |
footer 1 |
footer 2 |
footer 3 |
header oblique |
header bold |
header code |
data oblique |
data bold |
data code |
some text...
reverse_markdown-3.0.0/spec/assets/full_example.html 0000644 0000041 0000041 00000001456 14727742461 022742 0 ustar www-data www-data
- li 1
-
- li 1
- li 2
h1
h2
h3
h4
Hallo em Text
strong
Block of code
First quoted paragraph
Second quoted paragraph
link
reverse_markdown-3.0.0/spec/assets/iframe.html 0000644 0000041 0000041 00000000316 14727742461 021522 0 ustar www-data www-data Welcome to My Page
This is a sample paragraph before the iframe.
This is a sample paragraph after the iframe.
reverse_markdown-3.0.0/spec/assets/unknown_tags.html 0000644 0000041 0000041 00000000154 14727742461 022774 0 ustar www-data www-data
Foo with bar
reverse_markdown-3.0.0/spec/assets/paragraphs.html 0000644 0000041 0000041 00000000621 14727742461 022406 0 ustar www-data www-data
First content
Second
content
Complex
Content
Trailing whitespace:
Trailing non-breaking space:
Combination: