25 lines
		
	
	
		
			630 B
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			630 B
		
	
	
	
		
			Ruby
		
	
	
	
# frozen_string_literal: true
 | 
						|
 | 
						|
module Gitlab
 | 
						|
  module FrontMatter
 | 
						|
    DELIM_LANG = {
 | 
						|
      '---' => 'yaml',
 | 
						|
      '+++' => 'toml',
 | 
						|
      ';;;' => 'json'
 | 
						|
    }.freeze
 | 
						|
 | 
						|
    DELIM = Regexp.union(DELIM_LANG.keys)
 | 
						|
 | 
						|
    PATTERN = %r{
 | 
						|
      \A(?:[^\r\n]*coding:[^\r\n]*)?         # optional encoding line
 | 
						|
      \s*
 | 
						|
      ^(?<delim>#{DELIM})[ \t]*(?<lang>\S*)  # opening front matter marker (optional language specifier)
 | 
						|
      \s*
 | 
						|
      ^(?<front_matter>.*?)                  # front matter block content (not greedy)
 | 
						|
      \s*
 | 
						|
      ^(\k<delim> | \.{3})                   # closing front matter marker
 | 
						|
      \s*
 | 
						|
    }mx.freeze
 | 
						|
  end
 | 
						|
end
 |