MX 2 лет назад
Родитель
Сommit
3659155e44

+ 1 - 0
non_catalog_apps/hangman_game/README.md

@@ -10,3 +10,4 @@
 
 
 * Программист: Евгений Степанищев (@bolknote)
 * Программист: Евгений Степанищев (@bolknote)
 * Иллюстратор: Ева Степанищева (7 лет)
 * Иллюстратор: Ева Степанищева (7 лет)
+* За словарь татарских слов большое спасибо Институту прикладной семиотики АН РТ

+ 4 - 2
non_catalog_apps/hangman_game/files/menu.txt

@@ -1,6 +1,8 @@
 English
 English
 english.bolk
 english.bolk
+Español
+spanish.bolk
 Русский
 Русский
 russian.bolk
 russian.bolk
-Español
-spanish.bolk
+Татар теле
+tatar.bolk

+ 8 - 0
non_catalog_apps/hangman_game/files/tatar.bolk

@@ -0,0 +1,8 @@
+tatar.dict
+10
+3
++400
+410 4d8 411 412 413 414 415 416 496 417 418 419 41a 41b 41c 41d 4a2 41e 4e8 41f 420 421 422 423 4ae 424 425 4ba 426 427 428 429 42a 42b 42c 42d 42e 42f
+Яхшы
+Сез оттыгыз!
+Сез оттырдыгыз!

+ 1430 - 0
non_catalog_apps/hangman_game/files/tatar.dict

@@ -0,0 +1,1430 @@
++
++!"
+(
+++
++(
+"+
+(+
+ 
+"
+ +
++
+! и
+"+ 
+'и'и
+#"
+!"+
++'
++'
+'+
+"
+ш
+!+
+'
++"
+(
+""
+"" 
+"ш и
++
+ (
+ +
+ +!
+ +((
+!'+
+! #'+
+!+"(
+" 
+"'
+"ш
+"' 
+'и %
+(+
+Ђ"
+КиЂи(
+
+!+ 
+
+и
+# 
++
+
+'
+"и
+ ++
+ ++
+ +"
+"+ 
+(
+(
+( "
+К 
+и
+и!и
+
+и'и
+!
+$ 
+ии
++
+ +
+ +'
+#
+#+('+
+# 
+#+"+
+Ў'и
+Ў ии
+и* 
+и
+иии'
+и (
+и иЂ
+ши
+ш" и
++
+ 
+!+/",
+и"
+ии"
+ии"
+
+и"
+ 
+++
+
+и"
+ !"
+"+ (
+#+
++ и
++ и"
++и"
++и
++ 
++ $
++!*/
++$ "
++$$и"
+Ў !"
+и ии
+ши/
+шии
+ш!"
+ш�ии
+ш /
+ш "
+ш �и
+ш ии
+++
+и
+и
+# '
+Ў(и
+и*"
+и+
+ии"
+'+
++ +
+*/
+ 
+ # "
+и
+# 
+,и"
++/(
+иЂи
+
+
+К/"
+! 
+и 
+ии
+"!
+"$"
+"%
+ иЎи
+ "ии
+ "и
+!и и
+!
+!"%
+!"!
+!"и
+!и
+"",
+""$
+"'
+%"
+%"$
+%" 
+%" 
+%"+ 
+�""(
+�"К"
++"+
++ 
++'
+ш(+
+ш "'
+%и"
++ 
+++
++и
++'
+'
+
+
+"
+! 
+"
+++'
+++
+"
++ +
+,
+
+"
+и$ 
+
+ 
+ (
+ К
+ "
+ +
+ +(
+ 
+ "
+ 
+ (
+ (
+ Ў
+ Ў
+ "+
+ 
+ "#"
+ '
+ '+
+ "'
+ '+
+ +"
+!+и
+"
+"+ +
+(
+ККи
+ии
+и'
+и('и
+/
+ и(
+(
+и
+ '
+ и
+и'
+ ии"
+ иЎи
+!и'и
+!и"и
+Ђи(и
++
++
+!
+'
+ 
+'#
+ "+'
+ +
+ ++
+#
+#
+## #
+#
+#
+# !"(
+#("
+#(+
+#(+"
+#(+'
+#/'+
++(
++ '+
++
+++
++"ии
+++'
++ и"
++!и"
+++
++ 
++ /
++ #'+
++ ++
++"+
+/ %и
+Ўии
+Ўи 
+Ўии
+Ўи"и
+Ў(
+Ўи "и
+Ў"и и
+и!"и
+и$/"
+и�и
+ииЎ(
+ии"
+ии
+и"
+и и"
+и (и
+и ии"
+и!" Ў
+и!"ии
+и( 
+и($/"
+и(ии
+ши
+ш(и
+ш и
+ш�ии
+шЎи
+
+"+
+и*и"
+и+,
+# 
+ 
+"+
+"
+%"
+!и
+* 
+иЎ(и
+!+ +
+�
+ 
+!
+!$ 
+#"+
+#'
+#'
++
++'
+и $
+и*и
+и* 
+и и!и
+и%и
+ии �и
+и "ии
+и %Ўи
+и!%и и
+и!,ии
+и%Ўи
+и%ии
+и( *
+и�#
+ши '
+ши�и"
+ш!$ 
+шии!
+ !+
+ и
+*и"
+!
+++"
+и*и"
+ии"
+и и"
+и$и"
+и( /"
+"+'
++'+
+"+ 
+'++
+' +
+(К
+"(
+(
+ и
+Ўи"и
+Ў'и
+и и
+и ии'
+и и�и
+ !.
+ !
+ /",
+ +
+ и(и"и
+!!
+!
+!+ 
+!+(
+!
+!$!"
+! 
+!ии
+!и"и
+!(и
+! "
+!#'
+!#"
+!#Ўи 
+!#+('+
+!#
+!# '+
+!#+ +'
+!#+"+'
+!+++
+!+ '+
+!+(+
+!++'
+!+"
+!+ +"+
+!ии"
+!и",
+!и и
+!и%"/
+!ш
+!ш"и
+!ши(Ў
+!ш "
+!ш "'
+"'
+"'
+" 
+"
+""
+" %'+
+" "+'
+"" '
+"(
+"(
+"/'+
+"/+'
+"и
+"ии
+"(
+"# 
+"# '+
+" "(
+" +(
+"#
+"#++
+"#+
+"#
+"# +'
+"#"
+"++(
+"Ўи"и
+"Ў"
+"Ўи и
+"Ў"и и
+"и и
+"и* 
+"ии и
+"и*
+"и* 
+"и*! 
+"ии
+"иии
+"ии$!
+"и %
+"и �и
+"и� и
+"иЎ$+
+"иК и"
+"ш'
+"ш '
+"ши
+"ши"и
+"ш 
+"ш
+"ш"и'
+"ш('и
+#+'+
+#+ /
+#+ "
+# (
+# ++
+#"+ +'
+#"+ (
+$и
+$ !
+$
+$ !
+$и!и$и
+$и ("и
+$и!%и"
+%и
+%и
+%"+(
+%!!/"
+% $"
+%и ии"
+%и(и и"
+%шЎи"
+%ш  /"
+%ш и!и
+''
+'+(+
+'+
+'"
+'ии
+'#'+
+'# "(
+'++ +
+'+
+'++"+
+'++
+'+ '
+'Ў ии
+'иии
+'иии
+'и%и
+'иЎ(и
+'и'
+'ии(и
+'ш/
+(+ ,
+(+ и
+(
+(
+(
+( 
+( "/
+(" �
+(Ки
+((ии(
+(/",
+(
+(#
+(++
+(и*
+(и$",
+(и$"#
+(и%!/"
+(ш 
++(
++ #(
++ #+
+-и'
+-" 
+- ии(
+- '
+-!и/
+-!и�и
+-!и" 
+-"и '
+-'
+-'"и
+-(
+-(ии
+-(ии 
+. +!
+.! 
+.('+
+/(
+/++
+/(и
+/"#
+/+
+/ "#
+/ 
+/ и'
+/ "
+/ и
+/ +'Ў
+/ +( 
+/"
+/((
+/(Ў! 
+�и
+�ии
+�/",
+�"/"
+�"и'
+�Ђи'
+�++"+
+�+"+
+�+ '+
+�и 
+Ў и
+Ў"
+Ў'и'
+Ў'и
+Ў иЎ'
+Ў ии'
+Ў" '
+К+
+Кии"
+Кии!и
+и ии
+и!
+ии/"
+и и
+и$!#
+иКи/"
+ш("и(
+ш" 
+ш! 
+ш!#
+ш(и'
+#
+&
+" (
+ ' 
+#+'
+++
+ ++(
++"+'
+# (
+!+ 
+' 
+*/+'
+
+ +
+ "
+ ""+
+! 
+"
+$ +
+(+
+(*/#+
+- '
+Ђ!++
++ !
+
+и"'и
+" и
+
+(+
+ '
+!"+ +
+(!и 
+
+ и
+ и
+ "и
+ и(и
+ !ш
+ и
+" '
+и'
++
+ ++
+ +'+
+#+(+
+#(#
+Ў"
+Ўии(
+Ў" 
+Ў"ии
+ии%"
+ии'
+ии'
+и%
+ш '
+ш и'
+ш и
+ш"
+ш" '
++/",
+
+ !"(
+"(
+и+/",
++и"
+"+
+" '+
++и"
++ ++
+ш'
+ш�(
+ши'
+ш 
+ш и
+ #%и
+ 
+"
+*",
+!и"и
+!и"
+"
+ЎЂии
+++
+(
+ # /"
+и*$ 
+иКи  
+и�и
+ши �и"
+*" 
+*" 
+*" $
++
+*"!
+*"!
+и  
+'и"и(
++
++
+!/"
+!и
+!и "и
+!/"
+!" и
+!"% и
+"/
+(+
+++
++
++'
+ 
+"++
+ш "и
+ши"'
+шии
+ш,/(и 
+ши 
+ 
+/"
+++'
++ '+
++ !+
+
+и'
+"
+"
++ '
++'
+"+ '
+ии(
+" +
+#/"
++'
+"+ 
+  #К
+  "
+ # 
+ '+
+ '+
+ +
+ +'
+ +'
+ # 
+ (++
+ ++
+"#+
+"(
+"+ +'
+(
+( +
+(+/
+К 
+и(
+'и
+(и
+ 'и
+'
+ (
+!(
+!и'
+"'+
+'
+(и 
+!!"(
+ "
+'+
+'+
++'
++'+
+" '+
+ (
+ "( 
+ +"
+"+'+
+$%и
+("
+('++
+ и!"/
+#
+#
+#"
+#"+!
+#*.+'
+#*/
+++ !+
+++ 
+++(
+++Ў
+++"Ў(
+++(
++'+
+++ 
++ +
++ +
++ +!
++ ++'
++!+
++!"++
++!+ +
++'+"
+Ўи '
+Ў
+Ўи
+Ўи
+ЎЎ"
+Ў и
+Ў и'и
+Ў!+
+Ў'и'и
+Ўи
+Ўи
+Ў '
+Ў'
+Ў ии
+Ў 
+Ў и(
+Ў !и"и
+Ў"и '
+Ў' '
+Ў'"ии'
+ЎЂ'и
+и!"и(
+ши'
+ш+(
+ш"+(
+ши
+шЎ (
+ш'++(
+ш,/(и 
+ш и("и(
+"/
+иии
+ "
+"+'
+"#+
+'
+" 
+"#"
+"# 
+Ђ'
+/#и
+К 
+ 
+" 
+++ +
+и*(#
+и+(и"
+ии/"
+и
+ии'и
+иии"
+и %ии"
+и!иЎ
+и!%и"
+и" Ў(и
+и"и'
+и(и",
+иКии"
+ш
+шии
+ши  !
+ши и
+ш!
+ш%и   
+ш%и  и
+ /"
+ "(
+и(
+и!и(
+и!+%и"
+ '+(
+!"и
+"+(%и
+'+ "+'
+"и%"
+""
+ "(
+(и
+"##
+ " 
+иК
+ (
+ $(
+!"(
+!(
+!+
+!
+!+'
+!/"
+!+(
+!#'
+! +!
+! и'
+! "и
+!иЎ!
+!иЎ'и
+! /
+!Ђи
+!/
+! '
+! "и
+!""
+! + "
+!Ђ++
+!Ђ+
+!" $+
+!#(
+!#+ "+'
+!++
+!+++
+!+ %и
+!+ 
+!Ў'и
+!ии",
+!и "
+!и$и и(
+!и%ии(
+!иЎии 
+""(
+"",
+"++
+"+(
+"+(
+"+ (
+"" и
+"'++
+"('+
+"++'
+"+ (
+"++
+" $ 
+" +
+"!"+
+"(!
+"(
+"(
+"(Ў 
+"(+'
+"(#"
+"(*/
+" и
+"и �
+"и
+"и"и(
+" 
+" и'
+"" и
+" /
+" "(
+" ( 
+"+(
+" +"
+""+
+"#(
+"#
+"# 
+"#
+"#
+"#!"
+"#$ !
+"+++
+"+ +'
+"+ ++
+"ии
+"ии и'
+"и+
+"ии$
+"ии 
+"и+
+"ии
+"и+",
+"и и+
+"и-"
+"и-! 
+"ши'и
+"ш и
+"ш 'и
+"ш 
+"ш 
+"ш"и"'
+#ш
+#*+
+# '+
+# ++
+#" +
+#"+ "+'
+$  
+$ и(
+$ 
+$ /
+$ ""(
+%/"
+%!#!/"
+%и 
+%и 'иЎи
+%и'" Ў(
+%ш 
+'"'+
+'"(
+'(
+' #
+' ++
+' "и
+'и
+'+ '+
+' +
+'#++(
+'#+'+
+'#
+'+++
+'+ ++
+'+"+ 
+'Ў'(
+'и '
+'и (и
+'и'"+ 
+'и'" (
+'и'"иЂи
+'и'Ў '
+'ш 
+((++
+( +
+( !+
+( "и
+(&/
+(* /"
+($%и
+(+ "
+(и ",
+(иЎи
+(иКи '
++Ђ+ '
+-(и "и
+-('и
+/и(и
+/ + +'
+/ +"#
+/"%и
+/"%и
+/$ '+
+/Ђ'+
+�
+�!и
+�
+�!"и(
+�ии
+�ии
+�и'
+�и'
+�Ђи'и
+�К 
+�++"+'
+�ии
+�и+/",
+�ии",
+�иКии
+Ў!"
+Ў! '
+Ў"и '
+Кии!и 
+Кши и(
+и%и/"
+ии'
+ш и'
+ш и"'
+ш''
+ш'"+
+ш',+
+!" /
+"'+
+"!!
++!" 
+!! /
+!"
++(
+"+ 
+!"+ +'
+("+'
+(Ў и
+,/
+ и
+ и 
+ "'
+ '
+ии
+' 
+( 
+('
+"+'
+"+'
+/
+ "
++"++
+ш
+ш и'
+ /
+,"+
+и!и!и'
+и""и
+�и
+ */
+ #(
+ш 
+ш!"
+!"+
+и !%и
++
+"+ +
+ии 
+"!"
+# "+'
+
+"
+ "ии 
+!/
+!"*$ 
+!"и"
+"",
+"+'
++'+
+ш,+
+ "+'
+ !"
+!Ђ
+"+'
+" +'
+'+
+ !
+"+ +'
+ 
+ Ў 
+ +!+
+ +
+ !
+ �и
+ �(
+'
+" '
+"%и
+ +
++
+ и!"и
+#+ "+'
+#"+'
+#*/#+
+#%и
+#("+ 
+#(*/#+
++! "
++!"+ +'
+Ў !и"'
+Ў"и "'
+и (
+ш '
+!,
+!+
+и '
+!и
+"Ўи
+Ђ*+
+Ђ*/$ 
+и""и(
+%и""и(
+'# '+
++ #и
+и*Ў"
+и* $и"
+и'+
+и$и",
+и!и"и(
+и!,Ў/"
+и(#/"
+и�Ў /"
+и�!"и(
+ши
+ш
+ши �и
+ши!ии"
+ 
+и
++ +
+ "
+/"!++
+и %"
+ "/и(
+ "(
+"(и
+&
+ .!! 
+ " 
+ии 
+!'+
+!" '
+!#" 
+!# и"ии
+!#Ў'и'
+!++'
+!++$"(
+!Ў '
+!и",'и
+!и !и 
+!ш '
+!ш и"'
+!ш %и"и
+" "+'
+"+ +
+"+
+"+и
+"(+ +'
+" %+
+" "'+
+"(# '
+" ш(
+"ии
+"и"'
+"и"'
+"и и
+" ,+
+"+ +'
+" ++
+" &'+
+"#
+"# (
+"#""+'
+"#Ђ+ +'
+"и
+"и*"
+"ии"'
+"и и+/"
+"и-!! "
+"ш"# 
+# #+
+# +! 
+# +'++
+#"+Ђ'
+$" и!
+$и%(%и
+%+",
+%!"%и
+%�и"%и
+%и"и 
+%и""и(
+%#�+'+
+%и!"и%и
+'"+
+' '+
+'# (
+'+ +
+'+ ++
+'ии ии
+'ш 
+( ++
+( "+
+( "+'
+(и,/#+
++(++'
+/'+
+/+++
+/"+ "+'
+/"+ +
+/ +#" #
+/ +$
+/Ђ+ +
+�!++
+�+
+�и '
+�'и
+�и"'
+�шКЎ /"
+Ў'и
+Ў+и"
+Кши и
+Кши %и
+и%ии"
+и и"
+иЂиии(
+(+
+" $
+" "
+и �
+++
++++
+!++
+"+'и'и
+"+'
+ '++
+и
+(и
+ !ши
+и'
+ /
+ "/
+" 
+"!" 
++
++++
++ ++
+ш и
+ $шЎ
+ и
+Ў "'
+++
+" 
+'+
+'+
+*и
+и
+ !
+ '
+ /
++и
+( "+'
+#++
+(+'+
+  +
+ $+
+ +(+
+иЎ'
+" Кш�Ў
+++"
+++�(
++и
++ + 
++/$и"и
++Ђ+ +
+Ў 
+Ўи'
+Ў и
+/
+%+
+" !" 
+ ш,/
+!" +
+ш +
+ш и�и",
+' ++
+". !"
+ "
+ "�++(
+ Ў'и'
+"
+"Ў
+и�(и
+ +'
+ ш%!и"и
+!+ +
+!++
+!##(#
+!"%'+
+!#!+'
+!++ "+'
+!+ %#%и
+!и/%и"и
+"++
+"! 
+"" '+
+"" '++
+"и'
+" '++
+"+++'
+"Ўи'
+"ии 
+"и"
+"и+",'
+"и"и
+$/и(
+$"и,
+$ " 
+&" !.
+' !++
+' и
+' $
+'!" "+'
+("+ +
+(++
+( ""+'
+(+"+ +
+(+"+ +
+(иКи 'и
+-и" '
+.('++
+/+("+ +'
+/"+ "+'
+�и
+�+
+Ў#("+'
+и! и"'
+ш!" и'
+""Ўи и
+"%#�+
+ "+
+!+/",и
+Ў"и '
+ии'и
+ 
+/
+%"+
+ "Ўи и
+и*"и
+и",
+(и
+ !/+
+++ &
++ и"%и
+Ўи 'и
+и ! 
+ +
+/
+Ђ и"'
+!$ %и
+#$$и+/",
+ш'
+ш!$ %и
+$ 
+и!и
+"!"+
+" # +
+ #+
+ -"и
+ #
+!++
+!" %
+!+'+
+!&$+
+!# +
+"+("+'
+"+(""+'
+""("+ +'
+"++"+'
+"и* и
+"иК и"%и
+#," "+(
+(& /
+(/",и
+(иКи"и
+-(( #'+
+/ +""
+/ +"Ўи и
+ии '
++и"%и
+"+
+""+
+!"'+
+"
+ши!ии""и(
+'++
+"и $
+""Ўи и
+ "#/
+ "(+ #
+"'+"+ +'
+"!"'++
+$"Ў ии
+/ +Ў"и '
+Ў!'

+ 49 - 15
non_catalog_apps/hangman_game/files_src/bdfconv_prepare.py

@@ -3,14 +3,15 @@
 
 
 import os
 import os
 
 
-DIR = os.path.dirname(__file__) + '/../files/'
+DIR = os.path.dirname(__file__) + "/../files/"
+
 
 
 def convert_to_ranges(nums: list) -> str:
 def convert_to_ranges(nums: list) -> str:
     ranges = []
     ranges = []
     start = None
     start = None
 
 
     for i, num in enumerate(nums):
     for i, num in enumerate(nums):
-        if i == 0 or num != (prev := nums[i-1]) + 1:
+        if i == 0 or num != (prev := nums[i - 1]) + 1:
             if start is not None:
             if start is not None:
                 if prev != start:
                 if prev != start:
                     ranges.append("{}-{}".format(start, prev))
                     ranges.append("{}-{}".format(start, prev))
@@ -23,22 +24,22 @@ def convert_to_ranges(nums: list) -> str:
             ranges.append("{}-{}".format(start, last))
             ranges.append("{}-{}".format(start, last))
         else:
         else:
             ranges.append(str(start))
             ranges.append(str(start))
-    return ','.join(ranges)
+    return ",".join(ranges)
 
 
 
 
 def read_lang(name: str) -> set:
 def read_lang(name: str) -> set:
     with open(DIR + name) as file:
     with open(DIR + name) as file:
         d, _, _, unicode_base, keyboard, *strings = [x.strip() for x in file]
         d, _, _, unicode_base, keyboard, *strings = [x.strip() for x in file]
 
 
-        letters = {int(x, 16) for x in keyboard.split(' ')}
-        letters |= {ord(x) for x in ''.join(strings)}
+        letters = {int(x, 16) for x in keyboard.split(" ")}
+        letters |= {ord(x) for x in "".join(strings)}
 
 
-        if unicode_base[0] == '+':
+        if unicode_base[0] == "+":
             unicode_base = int(unicode_base, 16)
             unicode_base = int(unicode_base, 16)
 
 
-            with open(DIR + d, 'rb') as dictionary:
+            with open(DIR + d, "rb") as dictionary:
                 for line in dictionary:
                 for line in dictionary:
-                    letters |= {x + unicode_base for x in line.strip(b'\x0A')}
+                    letters |= {x + unicode_base for x in line.strip(b"\x0A")}
         else:
         else:
             letters |= {ord(x) for x in open(DIR + d).read()}
             letters |= {ord(x) for x in open(DIR + d).read()}
 
 
@@ -47,7 +48,7 @@ def read_lang(name: str) -> set:
 
 
 letters = set()
 letters = set()
 
 
-with open(DIR + 'menu.txt', 'r') as file:
+with open(DIR + "menu.txt", "r") as file:
     for i, line in enumerate(file):
     for i, line in enumerate(file):
         if i & 1 == 0:
         if i & 1 == 0:
             letters |= {ord(x) for x in line}
             letters |= {ord(x) for x in line}
@@ -57,12 +58,45 @@ with open(DIR + 'menu.txt', 'r') as file:
 letters -= {ord("\n")}
 letters -= {ord("\n")}
 
 
 fonts = {
 fonts = {
-    '6x12':  {10003, 10007, },
-    '6x13B': {ord('_'), },
+    "6x12": (
+        "6x12",
+        {
+            10003,
+            10007,
+        },
+    ),
+    "6x13B": (
+        "6x13B-patched",
+        {
+            ord("_"),
+        },
+    ),
 }
 }
 
 
-cmd = 'bdfconv -v -f 1 -m "{0}" {1}.bdf -o {1}.c -n u8g2_font_{1} -d {1}.bdf'
-
-for name, addon in fonts.items():
+print(
+    r"""
+(
+    declare -A L=( [Y]=04ae [uni018F]=04d8 [afii10147]=04e8);
+    awk "!/ENDFONT/ {if (/^CHARS /) print \$1 FS \$2+${#L[@]}+3; else print}" 6x13B.bdf
+    for key in "${!L[@]}"; do
+        awk "/CHAR $key\$/,/END/{print}" 6x13B.bdf|
+        sed "s/^ENC.*/ENCODING $((16#${L[$key]}))/;s/^START.*/STARTCHAR uni${L[$key]}/"
+    done;
+    echo -e "STARTCHAR uni04ba\nENCODING 1210\nSWIDTH 426 0\nDWIDTH 6 0\nBBX 6 13 0 -2
+BITMAP\n00\n00\nC0\nC0\nC0\nC0\nC0\nFC\nCC\nCC\nCC\n00\n00\nENDCHAR
+STARTCHAR uni04a2\nENCODING 1186\nSWIDTH 426 0\nDWIDTH 6 0\nBBX 6 13 0 -2
+BITMAP\n00\n00\nD8\nD8\nD8\nD8\nF8\nD8\nD8\nD8\nDC\n04\n00\nENDCHAR
+STARTCHAR uni0496\nENCODING 1174\nSWIDTH 426 0\nDWIDTH 6 0\nBBX 6 13 0 -2
+BITMAP\n00\n00\nA8\nA8\nA8\nF8\n20\nF8\nA8\nA8\nAC\n04\n00\nENDCHAR
+ENDFONT"
+) > 6x13B-patched.bdf
+"""
+)
+
+cmd = '../bdfconv/bdfconv -v -f 1 -m "{0}" {2}.bdf -o {1}.c -n u8g2_font_{1}'
+
+for name, (fontname, addon) in fonts.items():
     letters_str = convert_to_ranges(sorted(letters | addon))
     letters_str = convert_to_ranges(sorted(letters | addon))
-    print(cmd.format(letters_str, name)+"\n")
+    print(cmd.format(letters_str, name, fontname) + "\n")
+
+print("sed 's/U8G2_FONT_SECTION.*/=/' 6x12.c 6x13B.c")

+ 2 - 1
non_catalog_apps/hangman_game/files_src/convert.sh

@@ -1,4 +1,5 @@
 #!/bin/sh
 #!/bin/sh
 
 
 DIR=$(dirname $(readlink -f $0))
 DIR=$(dirname $(readlink -f $0))
-tr -d '\04\r\0' < "$DIR/russian.ucs2.dict" > "$DIR/../files/russian.dict"
+LC_ALL=C tr -d '\04\r\0' < "$DIR/russian.ucs2.dict" > "$DIR/../files/russian.dict"
+LC_ALL=C tr -d '\04\r\0' < "$DIR/tatar.ucs2.dict" > "$DIR/../files/tatar.dict"

BIN
non_catalog_apps/hangman_game/files_src/tatar.ucs2.dict


+ 9 - 10
non_catalog_apps/hangman_game/helpers/hangman.c

@@ -138,11 +138,11 @@ void hangman_draw_menu(Canvas* canvas, HangmanApp* app) {
 
 
     CONST txt_x = (canvas_width(canvas) - max_txt_w) / 2;
     CONST txt_x = (canvas_width(canvas) - max_txt_w) / 2;
 
 
-    if (menu_cnt > HANGMAN_MAX_MENU_SIZE) {
+    if(menu_cnt > HANGMAN_MAX_MENU_SIZE) {
         elements_scrollbar(canvas, app->menu_item, menu_cnt);
         elements_scrollbar(canvas, app->menu_item, menu_cnt);
     }
     }
 
 
-    for (uint8_t i = 0; i < rows; i++) {
+    for(uint8_t i = 0; i < rows; i++) {
         CONST txt_y = y + (i + 1) * txt_h;
         CONST txt_y = y + (i + 1) * txt_h;
         CONST menu_item = app->menu_frame_position + i;
         CONST menu_item = app->menu_frame_position + i;
 
 
@@ -234,17 +234,17 @@ void hangman_choice_letter(HangmanApp* app) {
 void hangman_clear_state(HangmanApp* app) {
 void hangman_clear_state(HangmanApp* app) {
     app->pos = 0;
     app->pos = 0;
     app->gallows_state = HANGMAN_GALLOWS_INIT_STATE;
     app->gallows_state = HANGMAN_GALLOWS_INIT_STATE;
-    app->need_generate = false;
     app->eog = HangmanGameOn;
     app->eog = HangmanGameOn;
 
 
-    if(app->word.arr != NULL) {
-        free(app->word.arr);
-    }
+    memset(app->opened, HangmanOpenedInit, HANGMAN_MAX_ALP_SIZE);
+    free(app->word.arr);
+    app->word = (HangmanWord){NULL, 0};
 
 
     if(app->lang != NULL) {
     if(app->lang != NULL) {
-        memset(app->opened, HangmanOpenedInit, HANGMAN_MAX_ALP_SIZE);
         app->word = hangman_get_random_word(app->lang->dict_file, app->lang->unicode_base);
         app->word = hangman_get_random_word(app->lang->dict_file, app->lang->unicode_base);
     }
     }
+
+    app->need_generate = false;
 }
 }
 
 
 int hangman_read_int(Stream* stream) {
 int hangman_read_int(Stream* stream) {
@@ -381,9 +381,8 @@ void hangman_app_free(HangmanApp** app) {
 
 
     hangman_free_menu_data((*app)->menu, (*app)->menu_cnt);
     hangman_free_menu_data((*app)->menu, (*app)->menu_cnt);
 
 
-    if((*app)->word.arr != NULL) {
-        free((*app)->word.arr);
-    }
+    free((*app)->word.arr);
+
     if((*app)->lang != NULL) {
     if((*app)->lang != NULL) {
         free((*app)->lang->dict_file);
         free((*app)->lang->dict_file);
         free((*app)->lang->message_ok);
         free((*app)->lang->message_ok);

+ 9 - 4
non_catalog_apps/hangman_game/helpers/hangman_fonts.c

@@ -51,11 +51,11 @@ const uint8_t u8g2_font_6x12[1223] =
 /*
 /*
   Fontname: -Misc-Fixed-Bold-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1
   Fontname: -Misc-Fixed-Bold-R-SemiCondensed--13-120-75-75-C-60-ISO10646-1
   Copyright: Public domain font.  Share and enjoy.
   Copyright: Public domain font.  Share and enjoy.
-  Glyphs: 98/1282
+  Glyphs: 110/1294
   BBX Build Mode: 0
   BBX Build Mode: 0
 */
 */
-const uint8_t u8g2_font_6x13B[1198] =
-    "b\0\3\3\3\4\3\5\4\6\15\0\376\11\376\13\376\0\14\1<\2\2 \5\0n\7!\7JC"
+const uint8_t u8g2_font_6x13B[1360] =
+    "n\0\3\3\3\4\3\5\4\6\15\0\376\11\376\13\376\0\14\1<\2\2 \5\0n\7!\7JC"
     "\307\223\0A\14NB\227\214\42b:\214\230\4B\15NBGI\242\27\222D\227\13\0C\13NB"
     "\307\223\0A\14NB\227\214\42b:\214\230\4B\15NBGI\242\27\222D\227\13\0C\13NB"
     "\17ED\324\223\204\2D\13NBGI\242\377\313\5\0E\13NB\307!\250X\21*\32F\13N"
     "\17ED\324\223\204\2D\13NBGI\242\377\313\5\0E\13NB\307!\250X\21*\32F\13N"
     "B\307!\250X\21j\4G\15NB\17ED\324R\42I(\0H\13NB\207\210\323a\304I\0"
     "B\307!\250X\21j\4G\15NB\17ED\324R\42I(\0H\13NB\207\210\323a\304I\0"
@@ -92,7 +92,12 @@ const uint8_t u8g2_font_6x13B[1198] =
     "\13\66B\17E\304IB\1\4\77\12\66B\307!\304\223\0\4@\14F:GE\304t\21*\2\4"
     "\13\66B\17E\304IB\1\4\77\12\66B\307!\304\223\0\4@\14F:GE\304t\21*\2\4"
     "A\14\66B\17EDT\222P\0\4B\13\66B\307E\22\22j\2\4C\15F:\207\210\313D\221"
     "A\14\66B\17EDT\222P\0\4B\13\66B\307E\22\22j\2\4C\15F:\207\210\313D\221"
     "$\241\0\4E\15\66B\207HB\223QD$\1\4H\20\66BG$\62\211L\42\223\310$r\10"
     "$\241\0\4E\15\66B\207HB\223QD$\1\4H\20\66BG$\62\211L\42\223\310$r\10"
-    "\4K\14\66BGlV\231T.\2\0";
+    "\4K\14\66BGlV\231T.\2\4\330\17NB\17E$\24\36FL\22\12\0\4\272\14NB"
+    "\207P\307C\210I\0\4\242\15V>\207D\277T\364\313\64\0\4\226\17V>G$\177\251\305*\371"
+    "\213\64\0\4\350\16NB\17E\304t\30\61I(\0\4\272\14NB\207P\307C\210I\0\4\242\15"
+    "V>\207D\277T\364\313\64\0\4\226\17V>G$\177\251\305*\371\213\64\0\4\256\15NB\207\210"
+    "$!\321\204:\1\4\272\14NB\207P\307C\210I\0\4\242\15V>\207D\277T\364\313\64\0\4"
+    "\226\17V>G$\177\251\305*\371\213\64\0\0";
 
 
 void hangman_set_font(Canvas* canvas, const uint8_t h) {
 void hangman_set_font(Canvas* canvas, const uint8_t h) {
     canvas_set_custom_u8g2_font(canvas, h == 12 ? u8g2_font_6x12 : u8g2_font_6x13B);
     canvas_set_custom_u8g2_font(canvas, h == 12 ? u8g2_font_6x12 : u8g2_font_6x13B);