class ArticleJSON::Import::GoogleDoc::HTML::CSSAnalyzer

Attributes

bold_classes[R]
centered_classes[R]
css_parser[R]
italic_classes[R]
right_aligned_classes[R]

Public Class Methods

new(css = '') click to toggle source

Initialize the parser with CSS code @param [String] css

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 14
def initialize(css = '')
  @css_parser = ::CssParser::Parser.new
  css_parser.load_string!(css)
  parse
end

Public Instance Methods

bold?(class_str) click to toggle source

Check if a given class attribute contains at least one class that makes its text bold @param [String] class_str @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 24
def bold?(class_str)
  (class_str.split(' ') & bold_classes).any?
end
centered?(class_str) click to toggle source

Check if a given class attribute contains at least one class that centers it @param [String] class_str @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 56
def centered?(class_str)
  (class_str.split(' ') & centered_classes).any?
end
italic?(class_str) click to toggle source

Check if a given class attribute contains at least one class that makes its text italic @param [String] class_str @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 32
def italic?(class_str)
  (class_str.split(' ') & italic_classes).any?
end
left_aligned?(class_str) click to toggle source

Check if a given class attribute contains no class that sets its alignment to right or center @param [String] class_str @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 48
def left_aligned?(class_str)
  !right_aligned?(class_str) && !centered?(class_str)
end
right_aligned?(class_str) click to toggle source

Check if a given class attribute contains at least one class that sets its alignment to the right @param [String] class_str @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 40
def right_aligned?(class_str)
  (class_str.split(' ') & right_aligned_classes).any?
end

Private Instance Methods

add_classes(rule_set, class_array) click to toggle source

Add all class selectors of a rule set to a given array @param [CssParser::RuleSet] rule_set @param [Array] class_array

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 129
def add_classes(rule_set, class_array)
  rule_set.each_selector do |selector|
    selector_name = selector.to_s.strip
    if selector_name[0] == '.'
      selector_name = selector_name[1, selector_name.length]
      unless class_array.include?(selector_name)
        class_array << selector_name
      end
    end
  end
end
clean_value_from_rule_set(rule_set, key) click to toggle source

@param [CssParser::RuleSet] rule_set @param [String] key @return [String]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 118
def clean_value_from_rule_set(rule_set, key)
  rule_set
    .get_value(key)
    .to_s
    .tr(';', '')
    .strip
end
parse() click to toggle source

Parse the CSS code and save CSS selectors for certain styles

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 63
def parse
  # arrays containing class names for certain formatting
  @bold_classes = []
  @italic_classes = []
  @right_aligned_classes = []
  @centered_classes = []

  css_parser.each_rule_set do |rule_set|
    # does this ruleset make text bold?
    if rule_set_is_bold?(rule_set)
      add_classes(rule_set, bold_classes)
    end
    # does this ruleset make text italic?
    if rule_set_is_italic?(rule_set)
      add_classes(rule_set, italic_classes)
    end
    # does this ruleset make text right-aligned?
    if rule_set_is_right_aligned?(rule_set)
      add_classes(rule_set, right_aligned_classes)
    end
    # does this ruleset make text centered?
    if rule_set_is_centered?(rule_set)
      add_classes(rule_set, centered_classes)
    end
  end
end
rule_set_is_bold?(rule_set) click to toggle source

@param [CssParser::RuleSet] rule_set @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 92
def rule_set_is_bold?(rule_set)
  value = clean_value_from_rule_set(rule_set, 'font-weight')
  value =~ /\d/ ? value.to_i >= 600 : %w(bold bolder).include?(value)
end
rule_set_is_centered?(rule_set) click to toggle source

@param [CssParser::RuleSet] rule_set @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 111
def rule_set_is_centered?(rule_set)
  clean_value_from_rule_set(rule_set, 'text-align') == 'center'
end
rule_set_is_italic?(rule_set) click to toggle source

@param [CssParser::RuleSet] rule_set @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 99
def rule_set_is_italic?(rule_set)
  clean_value_from_rule_set(rule_set, 'font-style') == 'italic'
end
rule_set_is_right_aligned?(rule_set) click to toggle source

@param [CssParser::RuleSet] rule_set @return [Boolean]

# File lib/article_json/import/google_doc/html/css_analyzer.rb, line 105
def rule_set_is_right_aligned?(rule_set)
  clean_value_from_rule_set(rule_set, 'text-align') == 'right'
end