Описание языка: docs.racket-lang.org/russian-lang/index.html
Уcтановка на маке:
Уcтановка на маке:
Запускаем простейший пример:brew install --cask racket
raco pkg install russian-lang
Пример большой программы:$ cat привет #!/usr/bin/env racket #!1 вывести "Приветик!\n" $ chmod +x привет $ ./привет Приветик!
github.com/Kalimehtar/russian-lang/blob/master/1/пример/шаблонизатор.1
Приведу код целиком:
Приведу код целиком:
#!1
используется строка
-- документация по адресу https://github.com/Kalimehtar/templater
программа() =
многострочное-значение = список()
многострочная-переменная = ложь
переменные = создать-соответствие #:глубокое-сравнение истина
прочитать-переменные! имя-файла =
читая-файл-с-проверкой "Не найден файл источника" имя-файла $ функция (порт)
цикл (строка $ в-строках порт)
обработать-директиву строка
обработать-директиву строка =
если
многострочная-переменная
продолжить-чтение-многострочного-значения! строка
префикс-строки(строка "включить ") => с-каталогом $ функция (полное-имя)
прочитать-переменные! полное-имя
префикс-строки(строка "@") => с-каталогом $ функция (полное-имя)
файл-шаблона := полное-имя
иначе
прочитать-строку-в-переменную строка
добавить! имя значение =
если не переменные[имя] тогда
вставить-в-соответствие! переменные имя значение
продолжить-чтение-многострочного-значения! строка =
если строка == "=="
тогда
добавить! многострочная-переменная
объединить-строки развернуть(многострочное-значение) "\n"
многострочная-переменная := ложь
иначе
многострочное-значение := пара строка многострочное-значение
прочитать-строку-в-переменную строка =
позиция = найти-в-строке строка "="
если позиция тогда
имя = обрезать-строку $ подстрока строка 0 позиция
значение = обрезать-строку $ подстрока строка $ позиция + 1
если префикс-строки значение "=" тогда
многострочная-переменная := имя
многострочное-значение := список()
иначе
добавить! имя значение
заменить-переменные строка =
значения строка-до строка-после имя-переменной = выбрать-имя-переменной строка
если строка-до тогда
заменить-переменные $ строка-до ++ (переменные[имя-переменной] || "") ++ строка-после
иначе
строка
с-каталогом(функ) имя =
функ $ каталог ++ обрезать-строку имя
аргументы = аргументы-командной-строки()
если длина-массива аргументы < 3 тогда
ошибка "Вызывать с аргументами: файл шаблона, файл источника, файл результата"
шаблон массив(файл-шаблона файл-источника файл-результата) = аргументы
каталог = получить-каталог файл-шаблона
прочитать-переменные! файл-источника
читая-файл-с-проверкой "Не найден файл шаблона" файл-шаблона $ функция (порт)
записывая-файл файл-результата #:если-существует 'заменить
функция (запись)
цикл (строка $ в-строках порт)
если
директива?(строка) => обработать-директиву
иначе
вывести/пс
заменить-переменные строка
запись
пусто
директива? строка =
проверяемая-строка = обрезать-строку строка
длина = длина-строки проверяемая-строка - 2
&&
длина > 3
подстрока проверяемая-строка 0 3 == "%[["
подстрока проверяемая-строка длина == "]]"
подстрока проверяемая-строка 3 длина
выбрать-имя-переменной строка =
позиция1 = найти-в-строке строка "[["
позиция2 = найти-в-строке подстрока(строка позиция1) "]]"
если позиция2 тогда
позиция2* = позиция1 + позиция2
значения
подстрока строка 0 позиция1
подстрока строка $ позиция2* + 2
подстрока строка (позиция1 + 2) позиция2*
иначе
значения ложь ложь ложь
префикс-строки строка поиск =
длина = длина-строки поиск
&&
длина-строки строка >= длина
подстрока строка 0 длина == поиск
подстрока строка длина
читая-файл-с-проверкой префикс-ошибки файл обработка =
если есть-файл? файл тогда
читая-файл файл обработка
иначе
ошибка $ префикс-ошибки ++ " " ++ файл
найти-в-строке строка поиск =
длина-поиска = длина-строки поиск
количество-позиций = длина-строки строка - длина-поиска + 1
если количество-позиций < 1 тогда
ложь
иначе
цикл/первый
для
сдвиг $ длина-строки строка - длина-поиска + 1
#:когда $ подстрока строка сдвиг (сдвиг + длина-поиска) == поиск
сдвиг
получить-каталог имя-файла =
пусть цикл (позиция $ длина-строки имя-файла - 1)
если
(имя-файла[позиция] == #\/ || имя-файла[позиция] == #\\)
подстрока имя-файла 0 $ позиция + 1
(позиция == 0)
""
иначе
цикл (позиция - 1)
программа()
no subject
Date: 2024-01-28 02:07 (UTC)Ой ужас какой. Discovery, блин.
no subject
Date: 2024-01-28 02:20 (UTC)no subject
Date: 2024-01-28 11:46 (UTC)Прикольная вещь, правда?
no subject
Date: 2024-01-28 19:09 (UTC)no subject
Date: 2024-01-28 19:13 (UTC)no subject
Date: 2024-01-28 21:23 (UTC)no subject
Date: 2024-01-28 02:09 (UTC)тут авторы не доработали
no subject
Date: 2024-01-28 02:40 (UTC)no subject
Date: 2024-01-28 15:52 (UTC)no subject
Date: 2024-01-29 12:36 (UTC)no subject
Date: 2024-02-08 21:52 (UTC)