<commit_before>#!/bin/sh

# Color reset
rst=`echo "[0;48;05;16m"`

# Colors
light_blue="[38;05;123m"
error_red="[38;05;202m"
success_green="[38;05;82m"
yellow="[38;05;228m"
red="[38;05;210m"
orange="[38;05;223m"
cyan="[38;05;51m"
green="[38;05;46m"
purple="[38;05;201m"
grey="[38;05;240m"



# Patterns

lexemize=':loop s/^(("((\\.)|[^\\"])*"|\n[[:alpha:]]+[[:alnum:].]*\n|\n[[:digit:]]+([.][[:digit:]]+)?\n|\n[=*}{()[]\n|\n[]]\n|[, ]|\n['"'][[:alnum:]]['"']\n|\n::\n|\n->\n|\n=>\n)*)([[:alpha:]]+[[:alnum:].]*|[[:digit:]]+([.][[:digit:]]+)?|['"'][[:alnum:]]['"']|=>|[=*}{()[]|[]]|::|->)/\1\n\6\n/; t loop;'

cOrange="s/\n([[:alpha:]]+[[:alnum:].]*|[*=])\n/$orange\1$rst/g;"
cGreen="s/\n(['][[:alnum:]][']|[)(])\n/$green\1$rst/g;"
cRed="s/\n([[:digit:]]+([.][[:digit:]]+)?)\n/$red\1$rst/g;"
cCyan="s/\n([[]|[]]|::|->|=>)\n/$cyan\1$rst/g;"
cPurple="s/\n([}{])\n/$purple\1$rst/g;"
cStrings='s/"((\\.)|[^\\"])*"/'"$yellow&$rst/g;"

loading="/^Loading package /{s/^.*$/$grey&$rst/;}"
failed_loading="/^Failed, modules loaded: none.$/{s/^.*$/$error_red&$rst/;}"
success_loading="/^Ok, modules loaded:/{s/^.*$/$success_green&$rst/;}"
interactive="/^<interactive>:/{s/^.*$/$error_red&$rst/;}"

exec "`which ghc`" --interactive ${1+"$@"} 2>&1 |\
sed -r "
$success_loading
$failed_loading
$loading
$interactive
$lexemize $cOrange $cRed $cGreen $cCyan $cPurple $cStrings"<commit_msg>Fixed bug with negative numbers<commit_after>#!/bin/sh

# Color reset
rst=`echo "[0;48;05;16m"`

# Colors
light_blue="[38;05;123m"
error_red="[38;05;202m"
success_green="[38;05;82m"
yellow="[38;05;228m"
red="[38;05;210m"
orange="[38;05;223m"
cyan="[38;05;51m"
green="[38;05;46m"
purple="[38;05;201m"
grey="[38;05;240m"


# машину Тьюринга строми так:
# Сначала выделяем то, что нужно раскрасить - оборачиваем с начала и с конца тем, чего в строке точно нет: символом новой строки.
# регуляра, в целом, получается такая:
# ^((то, что пропускаем)|\n(то, что ищем)\n)*(то, что ищем)
# ищем от начала строки, напарываемся на (то, что ищем). и меняем на \n(то, что ищем)\n. И заново и пока не пройдёмся вдоль строки не найдя ничего...

# Затем по строке ищем специфичные шаблоны. находим - раскрашиваем и убираем разрывы строк.
#
# ':loop s/abc/def/; t loop' 
# t = тест. если программа сработала - возвращаемся в начало. если несработала - выход. 
lexemize=':loop s/^(("((\\.)|[^\\"])*"|\n_?[[:alnum:]]+[[:alnum:].]*\n|\n-?[[:digit:]]+([.][[:digit:]]+)?\n|\n[=*}{()[]\n|\n[]]\n|[, ]|\n['"'][[:alnum:]]['"']\n|\n::\n|\n->\n|\n=>\n)*)(_?[[:alnum:]]+[[:alnum:].]*|-?[[:digit:]]+([.][[:digit:]]+)?|['"'][[:alnum:]]['"']|=>|[=*}{()[]|[]]|::|->)/\1\n\6\n/; t loop'
	
# 's/   
# ^(
# (     "((\\.)|[^\\"])*"                    |   строки не трогаем. их раскрашиваем в последнюю очередь.
#       \n_?[[:alnum:]]+[[:alnum:].]*\n      |    
#       \n-?[[:digit:]]+([.][[:digit:]]+)?\n |
#       \n[=*}{()[]\n                        |
#		\n[]]\n                              |
#		[, ]                                 |
#		\n['"'][[:alnum:]]['"']\n            |
#		\n::\n                               |
#		\n->\n                               |
#		\n=>\n)
#	*)
#	(_?[[:alnum:]]+[[:alnum:].]*|[[:digit:]]+([.][[:digit:]]+)?|['"'][[:alnum:]]['"']|=>|[=*}{()[]|[]]|::|->)/\1\n\6\n/	'


# Красный: число, возможно отрицательное.
#
#
#
cRed="s/\n(-?[[:digit:]]+([.][[:digit:]]+)?)\n/$red\1$rst/g;"

# идентификатор или =
# шаблон: Или: сначала хотя бы одна буква (слово, фраза), затем несколько блоков "цифробуква."
#         или: * или =
cOrange="s/\n(_?[[:alnum:]]+[[:alnum:].]*|[*=])\n/$orange\1$rst/g;"

# Зелёный: одиночные символы в одинарных кавычках и круглые скобки
# 'a'
# '3'
# ()
cGreen="s/\n(['][[:alnum:]][']|[)(])\n/$green\1$rst/g;"

# Голубой: 
# ::
# ->
# =>
# ]
# [
cCyan="s/\n([[]|[]]|::|->|=>)\n/$cyan\1$rst/g;"

# фигурные скобки раскрашиваем фиолетовым
cPurple="s/\n([}{])\n/$purple\1$rst/g;"

# шаблон строки: 
# "
# либо (\\.) - бэкслэш с любым последующим символом, кроме новой строки
# либо [^\\"] - либо не бэкслэш.
# в любом количестве
# "
cStrings='s/"((\\.)|[^\\"])*"/'"$yellow&$rst/g;"
loading="/^Loading package /{s/^.*$/$grey&$rst/;}"
failed_loading="/^Failed, modules loaded: none.$/{s/^.*$/$error_red&$rst/;}"
success_loading="/^Ok, modules loaded:/{s/^.*$/$success_green&$rst/;}"
interactive="/^<interactive>:/{s/^.*$/$error_red&$rst/;}"

# -r = расширенные регвыры в программе
# sed 's/abc/def/g; s/xyz/uvw/g' = сначала выполняется одна программа, затем следующая.
exec "`which ghc`" --interactive ${1+"$@"} 2>&1 |\
sed -r "
$success_loading
$failed_loading
$loading
$interactive
$lexemize $cRed $cOrange $cGreen $cCyan $cPurple $cStrings"

{'fraction_non_alphanumeric': 0.33870621104663656, 'fraction_numerical': 0.0367504835589942, 'mean_word_length': 3.9669156883671293, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 1, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5278338', 'n_tokens_mistral': 2462, 'n_tokens_neox': 2382, 'n_words': 293}