<commit_before># encoding utf-8
#コンバート処理
class Convert
	def initialize()
		# 本来は別ファイルから読み込む
		@TAGS = %w[h1 h2 h3 h4 h5 h6 a span div].freeze
		@QUALIFIERS = {
			"."=>{
				"point"=>"intag",
				"usage"=>'class="<qsub>"',
			},
			"#"=>{
				"point"=>"intag",
				"usage"=>'id="<qsub>"',
			},
			":"=>{
				"point"=>"outtag",
				"usage"=>['<a href="<qsub>">','</a>'],
				"other"=>["bracket",],
			},
		}.freeze

		createStarters(@QUALIFIERS) #@STARTERS作成
	end

	#修飾部分の分離
	def separatorQ(qualifier)
		intags = []
		outtags = [[],[]]
		qualifier.scan(/(?<starter>#{@STARTERS.join("|")})(?<qsub>(\[.+?\]|[^#{@SYMBOL.join("")}])+)/) do |match|
			starter,qsub = $~[:starter],$~[:qsub] #starter => qualifierを起動する qsub => qualifierの本文
			qinfo = @QUALIFIERS[starter] 
			if qinfo["point"] == "intag"
				intags << qinfo["usage"].gsub(/<qsub>/,qsub) #qsubを有るべき場所に入れる
			elsif qinfo["point"] == "outtag"
				qsub.gsub!(/^\[(.+?)\]$/,'\1')
				outtags[0] << qinfo["usage"][0].gsub(/<qsub>/,qsub)
				outtags[1] << qinfo["usage"][1].gsub(/<qsub>/,qsub)
			end
		end
		return intags,outtags
	end

	#設定の中からスターターのリストを作る(join(|)で正規表現として使う)
	def createStarters(qualifiers)
		@STARTERS = []
		@SYMBOL = []
		qualifiers.each do |key,value|
			if value["other"]
				if value["other"].include?("bracket")
					@STARTERS << key + "\\[.+?\\]"
					@SYMBOL << key
				end
			else
				@STARTERS << key
				@SYMBOL << key
			end
		end
		@STARTERS.freeze
	end

	def main(contents)
	#ワンライナーbcml記法
		contents.gsub!(/(^\s*@(?<prefix>\S+)\s(?<subject>.+))/) do |match|
			subject,prefix = $~[:subject],$~[:prefix] #subject => 本文 prefix => @~の~の部分
			
			#タグを書いてる部分と修飾してる部分分離
			prefix.slice!(/^(?<tag>[a-z0-9あ-ん]+)/)
			qualifier = prefix
			tag = $~ ? $~[:tag] : ""

			#タグが設定されてるか確認
			unless @TAGS.include?(tag) || tag == ""
			end

			intags,outtags = separatorQ(qualifier)

			intag = intags.empty? ? "":" " + intags.join(" ")
			outtag = outtags.empty? ? "": [outtags[0].join(),outtags[1].join()]

			if tag == ""
				if outtag != ""
					goal = outtag[0] + subject + outtag[1]
				elsif intag != ""
					goal = "<span#{intag}>" + subject + "</span>"
				elsif intag != "" && outtag != ""
					goal = outtag[0] + "<span#{intag}>" + subject + "</span>" + outtag[1]
				end
			else
				goal = outtag[0] + "<#{tag}#{intag}>" + subject + "</#{tag}>" + outtag[1]
			end

			goal
		end
		puts 'contents' + contents
	end
end


fileName = File.basename(ARGV[0],'.bcml') #引数からファイル読み込み
newfile = open('convert' + '.html', 'w') #変換先ファイルを開く

#変換元ファイルを開いて変数に格納した後閉じる
source = open(fileName + '.bcml')
contents = source.read
source.close

#変換元データを処理した後変換先ファイルに書き込み<commit_msg>分離部分関数化<commit_after># encoding utf-8
#コンバート処理
class Convert
	def initialize()
		# 本来は別ファイルから読み込む
		@TAGS = %w[h1 h2 h3 h4 h5 h6 a span div].freeze
		@QUALIFIERS = {
			"."=>{
				"point"=>"intag",
				"usage"=>'class="<qsub>"',
			},
			"#"=>{
				"point"=>"intag",
				"usage"=>'id="<qsub>"',
			},
			":"=>{
				"point"=>"outtag",
				"usage"=>['<a href="<qsub>">','</a>'],
				"other"=>["bracket",],
			},
		}.freeze

		createStarters(@QUALIFIERS) #@STARTERS作成
	end

	#修飾部分の分離
	def separatorQ(qualifier)
		intags = []
		outtags = [[],[]]
		qualifier.scan(/(?<starter>#{@STARTERS.join("|")})(?<qsub>(\[.+?\]|[^#{@SYMBOL.join("")}])+)/) do |match|
			starter,qsub = $~[:starter],$~[:qsub] #starter => qualifierを起動する qsub => qualifierの本文
			qinfo = @QUALIFIERS[starter] 
			if qinfo["point"] == "intag"
				intags << qinfo["usage"].gsub(/<qsub>/,qsub) #qsubを有るべき場所に入れる
			elsif qinfo["point"] == "outtag"
				qsub.gsub!(/^\[(.+?)\]$/,'\1')
				outtags[0] << qinfo["usage"][0].gsub(/<qsub>/,qsub)
				outtags[1] << qinfo["usage"][1].gsub(/<qsub>/,qsub)
			end
		end
		intag = intags.empty? ? "":" " + intags.join(" ")
		outtag = outtags.empty? ? "": [outtags[0].join(),outtags[1].join()]
		return intag,outtag
	end

	#設定の中からスターターのリストを作る(join(|)で正規表現として使う)
	def createStarters(qualifiers)
		@STARTERS = []
		@SYMBOL = []
		qualifiers.each do |key,value|
			if value["other"]
				if value["other"].include?("bracket")
					@STARTERS << key + "\\[.+?\\]"
					@SYMBOL << key
				end
			else
				@STARTERS << key
				@SYMBOL << key
			end
		end
		@STARTERS.freeze
		@SYMBOL.freeze
	end

	#タグを書いてる部分と修飾してる部分分離
	def separator(data)
		subject = data[:subject]
		prefix = data[:prefix]
		prefix.slice!(/^(?<tag>[a-z0-9あ-ん]+)/)
		qualifier = prefix
		tag = $~ ? $~[:tag] : ""
		return subject,tag,qualifier
	end

	def main(contents)
	#ワンライナーbcml記法
		contents.gsub!(/(^\s*@(?<prefix>\S+)\s(?<subject>.+))/) do |match|
			subject,tag,qualifier = separator($~)

			#タグが設定されてるか確認
			unless @TAGS.include?(tag) || tag == ""
			end

			intag,outtag = separatorQ(qualifier)

			if tag == ""
				if outtag != ""
					goal = outtag[0] + subject + outtag[1]
				elsif intag != ""
					goal = "<span#{intag}>" + subject + "</span>"
				elsif intag != "" && outtag != ""
					goal = outtag[0] + "<span#{intag}>" + subject + "</span>" + outtag[1]
				end
			else
				goal = outtag[0] + "<#{tag}#{intag}>" + subject + "</#{tag}>" + outtag[1]
			end

			goal
		end
		puts 'contents' + contents
	end
end


fileName = File.basename(ARGV[0],'.bcml') #引数からファイル読み込み
newfile = open('convert' + '.html', 'w') #変換先ファイルを開く

#変換元ファイルを開いて変数に格納した後閉じる
source = open(fileName + '.bcml')
contents = source.read
source.close

#変換元データを処理した後変換先ファイルに書き込み
{'fraction_non_alphanumeric': 0.2345909600298842, 'fraction_numerical': 0.008591707134852447, 'mean_word_length': 3.518987341772152, 'pattern_counts': {'":': 6, '<': 69, '<?xml version=': 0, '>': 67, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '3963865', 'n_tokens_mistral': 2805, 'n_tokens_neox': 2467, 'n_words': 363}