MX 2 anni fa
parent
commit
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);