Module: MaRuKu::Strings
- Included in:
- In::Markdown::BlockLevelParser, MDElement
- Defined in:
- lib/maruku/string_utils.rb,
lib/maruku.rb
Overview
Utility functions for dealing with strings.
Constant Summary collapse
- TAB_SIZE =
4
Instance Method Summary collapse
-
#parse_email_headers(s) ⇒ Symbol => String
Parses email headers, returning a hash.
-
#sanitize_ref_id(s) ⇒ String
Normalize a link reference.
-
#spaces_before_first_char(s) ⇒ Fixnum
This returns the position of the first non-list character in a list item.
-
#split_lines(s) ⇒ String
Split a string into multiple lines, on line feeds and/or carriage returns.
-
#strip_indent(s, n) ⇒ String
Removes indentation from the beginning of ‘s`, up to at most `n` spaces.
-
#unquote(s) ⇒ String
Remove line-initial ‘>` characters for a quotation.
Instance Method Details
#parse_email_headers(s) ⇒ Symbol => String
Parses email headers, returning a hash. ‘hash` is the message; that is, anything past the headers.
Keys are downcased and converted to symbols; spaces become underscores. For example:
My key: true
becomes:
{:my_key => true}
33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/maruku/string_utils.rb', line 33 def parse_email_headers(s) headers = {} scanner = StringScanner.new(s) while scanner.scan(/(\w[\w\s\-]+): +(.*)\n/) k, v = normalize_key_and_value(scanner[1], scanner[2]) headers[k.to_sym] = v end headers[:data] = scanner.rest headers end |
#sanitize_ref_id(s) ⇒ String
Normalize a link reference.
84 85 86 |
# File 'lib/maruku/string_utils.rb', line 84 def sanitize_ref_id(s) s.downcase.gsub(/\s+/, ' ') end |
#spaces_before_first_char(s) ⇒ Fixnum
This returns the position of the first non-list character in a list item.
spaces_before_first_char(‘*Hello’) #=> 1 spaces_before_first_char(‘* Hello’) #=> 2 spaces_before_first_char(‘ * Hello’) #=> 3 spaces_before_first_char(‘ * Hello’) #=> 5 spaces_before_first_char(‘1.Hello’) #=> 2 spaces_before_first_char(‘ 1. Hello’) #=> 5
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/maruku/string_utils.rb', line 59 def spaces_before_first_char(s) s = MaRuKu::MDLine.new(s.gsub(/([^\t]*)(\t)/) { $1 + " " * (TAB_SIZE - $1.length % TAB_SIZE) }) match = case s.md_type when :ulist # whitespace, followed by ('*'|'+'|'-') followed by # more whitespace, followed by an optional IAL, followed # by yet more whitespace s[/^\s*(\*|\+|\-)\s*(\{[:#\.].*?\})?\s*/] when :olist # whitespace, followed by a number, followed by a period, # more whitespace, an optional IAL, and more whitespace s[/^\s*\d+\.\s*(\{[:#\.].*?\})?\s*/] else tell_user "BUG (my bad): '#{s}' is not a list" '' end f = /\{(.*?)\}/.match(match) ial = f[1] if f [match.length, ial] end |
#split_lines(s) ⇒ String
Split a string into multiple lines, on line feeds and/or carriage returns.
13 14 15 |
# File 'lib/maruku/string_utils.rb', line 13 def split_lines(s) s.split(/\r\n|\r|\n/) end |
#strip_indent(s, n) ⇒ String
Removes indentation from the beginning of ‘s`, up to at most `n` spaces. Tabs are counted as TAB_SIZE spaces.
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 |
# File 'lib/maruku/string_utils.rb', line 103 def strip_indent(s, n) while n > 0 case s[0, 1] when ' ' n -= 1 when "\t" n -= TAB_SIZE else break end s = s[1..-1] end MDLine.new(s) end |
#unquote(s) ⇒ String
Remove line-initial ‘>` characters for a quotation.
92 93 94 |
# File 'lib/maruku/string_utils.rb', line 92 def unquote(s) s.gsub(/^>\s?/, '') end |