Благодаря теме http://zx.pk.ru/showthread.php?t=8534 и товарищу axor'у написал одну утилитку подготовки текстов для программ.
Возможности:
- макроподстановки (в том числе и рекурсивные)
- выборка по ключам (для огранизации переводов)
- автоматическая токенизация (для уменьшения размера текста)
- экспорт в ассемблерный файл
Вкратце, на примере, как можно применять.
Предположим, пишем мы игру про Диззи и хотим автоматизировать работу с текстами. Пишем следующий текстовик:
# имена главных персонажей
= HERO1
en> "Dizzy"
ru> "Диззи"
= HERO2
en> "Daisy"
ru> "Дейзи"
# места действия
< PLACE_WORLD
en> HERO1 "'s World"
ru> "Мир " HERO1
< PLACE_HOME
en> HERO1 " and " HERO2 "'s home. "
ru> "Дом " HERO2 " и " HERO2 ". "
en> "Welcome!"
ru> "Добро пожаловать!"
# локация
< START_SCREEN
> PLACE_HOME
Как видно, синтаксис очень простой. За символами = и < начинается имя макроса (вид символа определяет дальнейший тип макроса- локальный или глобальный). После опционального ключа и символа > идут текстовые фрагменты, заключенные в кавычки и имена макросов. Ключи в данном случае определяют язык перевода.
После инстанциирования по ключу (Textator.exe --process --key ru input.txt) получаем результат для русского языка:
# This file was automatically generated
< PLACE_HOME
> "Дом Дейзи и Дейзи. Добро пожаловать!"
< PLACE_WORLD
> "Мир Диззи"
< START_SCREEN
> "Дом Дейзи и Дейзи. Добро пожаловать!"
Или для английского (Textator.exe --process --key en input.txt):
# This file was automatically generated
< PLACE_HOME
> "Dizzy and Daisy's home. Welcome!"
< PLACE_WORLD
> "Dizzy's World"
< START_SCREEN
> "Dizzy and Daisy's home. Welcome!"
Как видно, исчезли все локальные макросы (которые были объявлены через =).
Также заметна избыточность текстов. Для исправления, применим следующую функцию- токенизацию. Ну и попутно переведем все в ассемблерный исходник:
Код:
; This source was automatically generated
; Local entries
TOK0 db "Dizzy",0
TOK3 db "Daisy",0
TOK6 db "home",0
TOK8 db "Welcome",0
; Global entries
PLACE_HOME
TOKEN TOK0
db " and "
TOKEN TOK3
db "'s "
TOKEN TOK6
db ". "
TOKEN TOK8
db "!",0
PLACE_WORLD
TOKEN TOK0
db "'s World",0
START_SCREEN
TOKEN TOK0
db " and "
TOKEN TOK3
db "'s "
TOKEN TOK6
db ". "
TOKEN TOK8
db "!",0
Вкратце, все
Техническая информация:
- проект хостится на http://code.google.com/p/textator
- доступны исходные коды (+Makefile, Code::Blocks project, MSVS project)
- также выложены последние билды для винды (из разных студий, на всякий случай).
В комплекте с билдом идет файл примера и исходники распаковщиков. Поскольку эти распаковщики писались "вслепую", просьба их потестировать и сообщить мне об ошибках и прочем, равно как и об ошибках в программе
Что в планах:
- написать внятное руководство (я тут не весь функционал расписал, но его легко откопать)
- улучшить токенизатор, ибо существующий был написан на коленке
Upd:
Свежие билды:
Builds list
Руководство:
Manual