class Kramdown::Converter::Prismic
Constants
- TYPOGRAPHIC_SYMS
Public Instance Methods
convert(root)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 8 def convert(root) cleanup_ast(root).map do |child| convert_element(child) end.compact.flatten end
Private Instance Methods
cleanup_ast(root)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 16 def cleanup_ast(root) remove_blanks(root) root.children.map do |child| elements = [] extract_non_nestable_elements(child, elements) [child, elements] end.flatten.compact end
convert_a(element)
click to toggle source
This can only apply when an link with an image inside has been detected
# File lib/kramdown/converter/prismic.rb, line 131 def convert_a(element) image = element.children.first { type: 'image', content: { text: '', spans: [] }, data: { origin: { url: image.attr['src'] }, alt: image.attr['alt'], linkTo: { url: element.attr['href'] } } } end
convert_blockquote(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 105 def convert_blockquote(element) { type: 'preformatted', content: extract_content(element) } end
convert_codeblock(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 95 def convert_codeblock(element) { type: 'preformatted', content: { text: element.value, spans: [] } } end
convert_comment(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 202 def convert_comment(_element) warning('translating comment is not supported') nil end
convert_dl(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 192 def convert_dl(_element) warning('translating dl is not supported') nil end
convert_element(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 54 def convert_element(element) send("convert_#{element.type}", element) end
convert_em(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 155 def convert_em(element) convert_sub_html_element(element, 'em') end
convert_header(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 58 def convert_header(element) { type: "heading#{element.options[:level]}", content: extract_content(element) } end
convert_hr(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 112 def convert_hr(element); end
convert_html_element(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 168 def convert_html_element(element) if element.value == 'iframe' { content: { spans: [], text: '' }, type: 'embed', data: { embed_url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ', type: 'link' } } else warning('translating html elements is not supported') nil end end
convert_img(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 114 def convert_img(element) { type: 'image', content: { text: '', spans: [] }, data: { origin: { url: element.attr['src'] }, alt: element.attr['alt'] } } end
convert_li(type, element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 88 def convert_li(type, element) { type: type, content: extract_content(element) } end
convert_list(element, type)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 82 def convert_list(element, type) element.children.map do |child| convert_li(type, child) end end
convert_math(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 197 def convert_math(_element) warning('translating math is not supported') nil end
convert_ol(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 74 def convert_ol(element) convert_list(element, 'o-list-item') end
convert_p(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 65 def convert_p(element) return nil if element.children.size.zero? { type: 'paragraph', content: extract_content(element) } end
convert_raw(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 212 def convert_raw(_element) warning('translating raw is not supported') nil end
convert_strong(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 151 def convert_strong(element) convert_sub_html_element(element, 'strong') end
convert_sub_html_element(element, type)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 159 def convert_sub_html_element(element, type) content = extract_content(element) content[:spans].push({ type: type, start: 0, end: content[:text].size }) { type: 'paragraph', content: content } end
convert_table(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 187 def convert_table(_element) warning('translating table is not supported') nil end
convert_text(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 217 def convert_text(element) { type: 'paragraph', content: { text: element.value, spans: [] } } end
convert_ul(element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 78 def convert_ul(element) convert_list(element, 'list-item') end
convert_xml_comment(_element)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 207 def convert_xml_comment(_element) warning('translating xml comment is not supported') nil end
extract_content(element, memo = { text: '', spans: [] })
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 227 def extract_content(element, memo = { text: '', spans: [] }) element.children.each_with_object(memo) do |child, memo2| send("extract_span_#{child.type}", child, memo2) end end
extract_non_nestable_elements(child, elements)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 34 def extract_non_nestable_elements(child, elements) child.children = child.children.each_with_object([]) do |element, memo| if element.type == :a && element.children.size == 1 && element.children.first.type == :img elements << element elsif element.type == :img elements << element if child.children.size > 1 warning('images inside content will be moved to the top level and may be rendered differently') end elsif element.type == :ul warning('nested list moved to the top level') elements << element extract_non_nestable_elements(element, elements) else memo << element extract_non_nestable_elements(element, elements) end end end
extract_span_a(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 246 def extract_span_a(element, memo) insert_span(element, memo, { type: 'hyperlink', data: { url: element.attr['href'] } }) end
extract_span_abbreviation(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 288 def extract_span_abbreviation(element, memo) warning('translating abbreviation is not supported') memo[:text] += element.value end
extract_span_br(_element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 271 def extract_span_br(_element, memo) memo[:text] += "\n" end
extract_span_codespan(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 275 def extract_span_codespan(element, memo) warning('translating inline code is not supported') memo[:text] += element.value end
extract_span_em(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 261 def extract_span_em(element, memo) insert_span(element, memo, { type: 'em' }) end
extract_span_entity(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 311 def extract_span_entity(element, memo) memo[:text] += element.value.char end
extract_span_footnote(_element, _memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 284 def extract_span_footnote(_element, _memo) warning('translating footnote is not supported') end
extract_span_html_element(_element, _memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 280 def extract_span_html_element(_element, _memo) warning('translating html elements is not supported') end
extract_span_p(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 267 def extract_span_p(element, memo) extract_content(element, memo) end
extract_span_smart_quote(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 315 def extract_span_smart_quote(element, memo) memo[:text] += Utils::Entities.entity(element.value.to_s).char end
extract_span_strong(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 255 def extract_span_strong(element, memo) insert_span(element, memo, { type: 'strong' }) end
extract_span_text(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 241 def extract_span_text(element, memo) memo[:text] += element.value memo end
extract_span_typographic_sym(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 306 def extract_span_typographic_sym(element, memo) value = TYPOGRAPHIC_SYMS[element.value].map(&:char).join('') memo[:text] += value end
extract_span_xml_comment(element, memo)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 293 def extract_span_xml_comment(element, memo) warning('translating xml comment is not supported') end
insert_span(element, memo, span)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 233 def insert_span(element, memo, span) span[:start] = memo[:text].size extract_content(element, memo) span[:end] = memo[:text].size memo[:spans] << span memo end
remove_blanks(root)
click to toggle source
# File lib/kramdown/converter/prismic.rb, line 25 def remove_blanks(root) root.children = root.children.each_with_object([]) do |child, memo| unless child.type == :blank remove_blanks(child) memo << child end end end