rachels il y a 1 an
Parent
commit
933935b187

+ 153 - 0
tools/QGen4/keywords.xml

@@ -0,0 +1,153 @@
+<?xml version="1.0" encoding="utf-8"?>
+<QGen-keywords>
+  <Statements>
+    <Keyword name="pl" desc="PL [выражение] / *PL [выражение] - вывод текста в дополнительное / основное окно описания, затем переход на новую строку"/>
+    <Keyword name="clear" desc="CLEAR / *CLEAR - очистка дополнительного / основного окна описания"/>
+    <Keyword name="clr" desc="CLR / *CLR - очистка дополнительного / основного окна описания"/>
+    <Keyword name="p" desc="P [выражение] / *P [выражение] - вывод текста в дополнительное / основное окно описания"/>
+    <Keyword name="nl" desc="NL [выражение] / *NL [выражение] - переход на новую строку, затем вывод текста в дополнительное / основное окно описания"/>
+    <Keyword name="msg" desc="MSG [выражение] - вывод сообщения в информационном окне"/>
+    <Keyword name="wait" desc="WAIT [#выражение] - остановка выполнения программы на заданное количество миллисекунд"/>
+    <Keyword name="act" desc="ACT [$название],[$путь к изображению]:[оператор] &amp; [оператор] &amp; ... - добавление действия"/>
+    <Keyword name="delact" desc="DELACT [$название] / DEL ACT [$название] - удаление действия"/>
+    <Keyword name="cla" desc="CLA - очистка списка действий"/>
+    <Keyword name="cmdclear" desc="CMDCLEAR - очистка строки ввода"/>
+    <Keyword name="cmdclr" desc="CMDCLEAR - очистка строки ввода"/>
+    <Keyword name="cls" desc="CLS - очищает экран, оставляя только список предметов"/>
+    <Keyword name="menu" desc="MENU [$выражение] - показ меню с заданным названием"/>
+    <Keyword name="settimer" desc="SETTIMER [#выражение] - задает интервал таймера для локации-счетчика"/>
+    <Keyword name="dynamic" desc="DYNAMIC [$строка кода],[параметр 1],[параметр 2], ... - динамическое выполнение кода"/>
+    <Keyword name="set" desc="SET [название переменной]=[выражение] - установка значения переменной"/>
+    <Keyword name="let" desc="LET [название переменной]=[выражение] - установка значения переменной"/>
+    <Keyword name="killvar" desc="KILLVAR [$название],[#индекс] - удаление всех переменных / указанной переменной"/>
+    <Keyword name="copyarr" desc="COPYARR [$массив-приемник],[$массив-источник] - копирование содержимого массива в другой массив"/>
+    <Keyword name="addobj" desc="ADDOBJ [$название],[$путь к изображению],[#позиция] / ADD OBJ [$название],[$путь к изображению],[#позиция] - добавление предмета"/>
+    <Keyword name="delobj" desc="DELOBJ [$название] / DEL OBJ [$название] - удаление предмета"/>
+    <Keyword name="killobj" desc="KILLOBJ [#позиция] - удаление всех предметов / предмета в заданной позиции"/>
+    <Keyword name="unselect" desc="UNSELECT - отмена выбора предмета"/>
+    <Keyword name="unsel" desc="UNSEL - отмена выбора предмета"/>
+    <Keyword name="killall" desc="KILLALL - удаление всех переменных и предметов"/>
+    <Keyword name="opengame" desc="OPENGAME [$выражение] - загрузка состояния игры"/>
+    <Keyword name="openqst" desc="OPENQST [$выражение] - открытие и запуск файла игры"/>
+    <Keyword name="addqst" desc="ADDQST [$выражение] - добавление локаций из указанного файла"/>
+    <Keyword name="killqst" desc="KILLQST - удаление всех добавленных через ADDQST локаций"/>
+    <Keyword name="savegame" desc="SAVEGAME [$выражение] - сохранение состояния игры"/>
+    <Keyword name="refint" desc="REFINT - обновление интерфейса"/>
+    <Keyword name="showacts" desc="SHOWACTS [#выражение] - показ / скрытие списка действий"/>
+    <Keyword name="showinput" desc="SHOWINPUT [#выражение] - показ / скрытие строки ввода"/>
+    <Keyword name="showobjs" desc="SHOWOBJS [#выражение] - показ / скрытие списка предметов"/>
+    <Keyword name="showstat" desc="SHOWSTAT [#выражение] - показ / скрытие дополнительного окна описания"/>
+    <Keyword name="if" desc="IF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... ELSE [оператор3] &amp; [оператор4] &amp; ... - условие"/>
+    <Keyword name="else" desc="IF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... ELSE [оператор3] &amp; [оператор4] &amp; ... - условие"/>
+    <Keyword name="elseif" desc="ELSEIF [#выражение]:[оператор1] &amp; [оператор2] &amp; ... - альтернативное условие"/>
+    <Keyword name="exit" desc="EXIT - завершение выполнения текущего кода"/>
+    <Keyword name="end" desc="END - завершение многострочной формы IF / ACT"/>
+    <Keyword name="jump" desc="JUMP [$выражение] - переход на указанную метку"/>
+    <Keyword name="gosub" desc="GOSUB [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
+    <Keyword name="gs" desc="GS [$выражение],[параметр 1],[параметр 2], ... - обработка указанной локации"/>
+    <Keyword name="goto" desc="GOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
+    <Keyword name="gt" desc="GT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию"/>
+    <Keyword name="xgoto" desc="XGOTO [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
+    <Keyword name="xgt" desc="XGT [$выражение],[параметр 1],[параметр 2], ... - переход на указанную локацию без очистки основного окна описания"/>
+    <Keyword name="play" desc="PLAY [$путь к звуковому файлу],[#громкость] - воспроизведение звукового файла с заданной громкостью"/>
+    <Keyword name="close" desc="CLOSE [$путь к звуковому файлу] / CLOSE ALL - остановка проигрывания звукового файла / всех звуковых файлов"/>
+    <Keyword name="view" desc="VIEW [$путь к графическому файлу] - просмотр изображения"/>
+  </Statements>
+  <Expressions>
+    <Keyword name="and" desc="[#выражение 1] AND [#выражение 2] - логическое &quot;и=&quot;"/>
+    <Keyword name="or" desc="[#выражение 1] OR [#выражение 2] - логическое &quot;или&quot;"/>
+    <Keyword name="obj" desc="OBJ [$предмет] - проверка наличия предмета в рюкзаке"/>
+    <Keyword name="loc" desc="LOC [$локация] - проверка существования локации"/>
+    <Keyword name="no" desc="NO [#выражение] - отрицание"/>
+    <Keyword name="mod" desc="[#выражение 1] MOD [#выражение 2] - вычисление остатка от деления"/>
+    <Keyword name="desc" desc="DESC([$выражение]) - возвращает текст базового описания локации"/>
+    <Keyword name="$desc" desc="$DESC([$выражение]) - возвращает текст базового описания локации"/>
+    <Keyword name="iif" desc="IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
+    <Keyword name="$iif" desc="$IIF([#выражение],[выражение_да],[выражение_нет]) - возвращает одно из выражений по условию"/>
+    <Keyword name="input" desc="INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
+    <Keyword name="$input" desc="$INPUT([выражение]) - показывает окно ввода текста и возвращает введенное значение"/>
+    <Keyword name="isplay" desc="ISPLAY([$выражение]) - проверяет, проигрывается ли в текущий момент указанный файл"/>
+    <Keyword name="max" desc="MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
+    <Keyword name="$max" desc="$MAX([выражение 1],[выражение 2], ...) - возвращает максимальное из значений аргументов"/>
+    <Keyword name="min" desc="MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
+    <Keyword name="$min" desc="$MIN([выражение 1],[выражение 2], ...) - возвращает минимальное из значений аргументов"/>
+    <Keyword name="rand" desc="RAND([#выражение 1],[#выражение 2]) - возвращает случайное число между заданными"/>
+    <Keyword name="rgb" desc="RGB([#красный],[#зеленый],[#синий]) - возвращает код цвета на основе 3-х составляющих"/>
+    <Keyword name="getobj" desc="GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
+    <Keyword name="$getobj" desc="$GETOBJ([#позиция]) - возвращает название предмета, расположенного в заданной позиции"/>
+    <Keyword name="dyneval" desc="DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
+    <Keyword name="$dyneval" desc="$DYNEVAL([$выражение],[параметр 1],[параметр 2], ...) - возвращает значение динамически вычисленного выражения"/>
+    <Keyword name="func" desc="FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
+    <Keyword name="$func" desc="$FUNC([$выражение],[параметр 1],[параметр 2], ...) - обработка указанной локации как функции"/>
+    <Keyword name="arrsize" desc="ARRSIZE([$выражение]) - возвращает число элементов в указанном массиве"/>
+    <Keyword name="arrpos" desc="ARRPOS([#начальный индекс],[$имя массива],[значение]) - поиск в массиве элемента с заданным значением"/>
+    <Keyword name="instr" desc="INSTR([#начальная позиция],[$текст],[$искомый текст]) - поиск вхождения текста"/>
+    <Keyword name="isnum" desc="ISNUM([$выражение]) - проверяет, является ли указанная строка числом"/>
+    <Keyword name="trim" desc="TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
+    <Keyword name="$trim" desc="$TRIM([$выражение]) - удаляет из текста прилегающие пробелы и символы табуляции"/>
+    <Keyword name="ucase" desc="UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
+    <Keyword name="$ucase" desc="$UCASE([$выражение]) - преобразует маленькие буквы текста в большие"/>
+    <Keyword name="lcase" desc="LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
+    <Keyword name="$lcase" desc="$LCASE([$выражение]) - преобразует большие буквы текста в маленькие"/>
+    <Keyword name="len" desc="LEN([$выражение]) - возвращает длину указанной строки"/>
+    <Keyword name="mid" desc="MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
+    <Keyword name="$mid" desc="$MID([$текст],[#начало],[#длина]) - вырезает из текста строку указанной длины начиная с заданной позиции"/>
+    <Keyword name="replace" desc="REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
+    <Keyword name="$replace" desc="$REPLACE([$текст],[$искомый текст],[$текст для замены]) - заменяет в тексте заданную строку"/>
+    <Keyword name="str" desc="STR([#выражение]) - переводит число в строку"/>
+    <Keyword name="$str" desc="$STR([#выражение]) - переводит число в строку"/>
+    <Keyword name="val" desc="VAL([$выражение]) - переводит строку в число"/>
+    <Keyword name="arrcomp" desc="ARRCOMP([#начальный индекс],[$имя массива],[$шаблон]) - поиск в массиве элемента, соответствующего регулярному выражению"/>
+    <Keyword name="strcomp" desc="STRCOMP([$выражение],[$шаблон]) - проверяет заданный текст на соответствие регулярному выражению"/>
+    <Keyword name="strfind" desc="STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="$strfind" desc="$STRFIND([$выражение],[$шаблон],[#номер]) - возвращает подстроку, соответствующую группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="strpos" desc="STRPOS([$выражение],[$шаблон],[#номер]) - возвращает позицию подстроки, соответствующей группе с номером [#номер] регулярного выражения"/>
+    <Keyword name="countobj" desc="COUNTOBJ - возвращает текущее число предметов"/>
+    <Keyword name="msecscount" desc="MSECSCOUNT - возвращает количество миллисекунд, прошедших с момента начала игры"/>
+    <Keyword name="rnd" desc="RND - возвращает случайное значение от 1 до 1000"/>
+    <Keyword name="curloc" desc="CURLOC - возвращает название текущей локации"/>
+    <Keyword name="$curloc" desc="$CURLOC - возвращает название текущей локации"/>
+    <Keyword name="qspver" desc="QSPVER - возвращает версию интерпретатора"/>
+    <Keyword name="$qspver" desc="$QSPVER - возвращает версию интерпретатора"/>
+    <Keyword name="selobj" desc="SELOBJ - возвращает название выделенного предмета"/>
+    <Keyword name="$selobj" desc="$SELOBJ - возвращает название выделенного предмета"/>
+    <Keyword name="selact" desc="SELACT - возвращает название выделенного действия"/>
+    <Keyword name="$selact" desc="$SELACT - возвращает название выделенного действия"/>
+    <Keyword name="curacts" desc="CURACTS - возвращает в виде кода все текущие действия"/>
+    <Keyword name="$curacts" desc="$CURACTS - возвращает в виде кода все текущие действия"/>
+    <Keyword name="user_text" desc="USER_TEXT - возвращает текст в строке ввода"/>
+    <Keyword name="$user_text" desc="$USER_TEXT - возвращает текст в строке ввода"/>
+    <Keyword name="usrtxt" desc="USRTXT - возвращает текст в строке ввода"/>
+    <Keyword name="$usrtxt" desc="$USRTXT - возвращает текст в строке ввода"/>
+    <Keyword name="maintxt" desc="MAINTXT - возвращает текст в основном окне описания"/>
+    <Keyword name="$maintxt" desc="$MAINTXT - возвращает текст в основном окне описания"/>
+    <Keyword name="stattxt" desc="STATTXT - возвращает текст в дополнительном окне описания"/>
+    <Keyword name="$stattxt" desc="$STATTXT - возвращает текст в дополнительном окне описания"/>
+  </Expressions>
+  <Variables>
+    <Keyword name="args" desc="ARGS - массив с параметрами процедуры / функции"/>
+    <Keyword name="$args" desc="$ARGS - массив с параметрами процедуры / функции"/>
+    <Keyword name="result" desc="RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
+    <Keyword name="$result" desc="$RESULT - переменная содержит результат, возвращаемый текущей функцией"/>
+    <Keyword name="disablescroll" desc="DISABLESCROLL - если переменная не равна 0, то запрещает автопрокрутку текста при выводе"/>
+    <Keyword name="disablesubex" desc="DISABLESUBEX - если переменная не равна 0, то запрещает использование &quot;подвыражений&quot; в тексте"/>
+    <Keyword name="nosave" desc="NOSAVE - если переменная не равна 0, то сохранение состояния игры пользователем невозможно"/>
+    <Keyword name="debug" desc="DEBUG - если переменная не равна 0, то отключается проверка идентификатора игры при загрузке состояния"/>
+    <Keyword name="$counter" desc="$COUNTER - переменная содержит название локации-счётчика"/>
+    <Keyword name="$ongload" desc="$ONGLOAD - переменная содержит название локации-обработчика загрузки состояния"/>
+    <Keyword name="$ongsave" desc="$ONGSAVE - переменная содержит название локации-обработчика сохранения состояния"/>
+    <Keyword name="$onnewloc" desc="$ONNEWLOC - переменная содержит название локации-обработчика перехода на новую локацию"/>
+    <Keyword name="$onactsel" desc="$ONACTSEL - переменная содержит название локации-обработчика выбора действия"/>
+    <Keyword name="$onobjsel" desc="$ONOBJSEL - переменная содержит название локации-обработчика выбора предмета"/>
+    <Keyword name="$onobjadd" desc="$ONOBJADD - переменная содержит название локации-обработчика добавления предмета"/>
+    <Keyword name="$onobjdel" desc="$ONOBJDEL - переменная содержит название локации-обработчика удаления предмета"/>
+    <Keyword name="$usercom" desc="$USERCOM - переменная содержит название локации-обработчика строки ввода"/>
+    <Keyword name="usehtml" desc="USEHTML - если переменная не равна 0, то включает возможность использования HTML"/>
+    <Keyword name="bcolor" desc="BCOLOR - переменная содержит цвет фона"/>
+    <Keyword name="fcolor" desc="FCOLOR - переменная содержит основной цвет шрифта"/>
+    <Keyword name="lcolor" desc="LCOLOR - переменная содержит основной цвет ссылок"/>
+    <Keyword name="fsize" desc="FSIZE - переменная содержит основной размер шрифта"/>
+    <Keyword name="$fname" desc="$FNAME - переменная содержит название основного шрифта"/>
+    <Keyword name="$backimage" desc="$BACKIMAGE - переменная содержит путь к фоновому изображению"/>
+  </Variables>
+</QGen-keywords>

BIN
tools/QGen4/langs/en/qgen_en.mo


BIN
tools/QGen4/qgen.exe


BIN
tools/qsp-analyser/QSP_Analyser.exe


BIN
tools/txt2gam.exe


BIN
tools/txt2gam.linux


BIN
tools/txt2gam.mac


+ 44 - 0
tools/txtmerge.py

@@ -0,0 +1,44 @@
+#!/usr/bin/env python
+# usage: txtmerge.py <input_dir> <output_file_name> 
+# does the exact opposite of txtsplit.py
+
+import os
+import sys
+import re
+import io 
+import xml.etree.ElementTree as ET
+
+assert len(sys.argv) == 4, "usage:\ntxtmerge.py <input_file_name> <input_dir> <output_file_name>"
+iname = str(sys.argv[1])
+idir = str(sys.argv[2])
+oname = str(sys.argv[3])
+
+# read the project xml file first
+# let's do this later in order to implement directory structure
+tree = ET.parse(iname)
+root = tree.getroot()
+
+ofile = io.open(oname, 'w', encoding='utf-16', newline='\r\n')
+
+for location in root.iter('Location'):
+    iname = location.attrib['name']
+    iname = iname.replace("$","_")
+
+    try:
+        ifile = io.open(os.path.join(idir,iname + '.qsrc'), 'rt', encoding='utf-8')
+        text = ifile.read()
+
+        # make sure there's a line at the end of file
+        # (why wouldn't there be one? WINDOWS!
+        if text[-1] != u'\n':
+            text += u'\n\n'
+
+        ofile.write(text)
+        ifile.close()
+    except IOError:
+        print("WARNING: missing location %s" % iname)
+        pass
+
+ofile.close()
+    
+