Написал в апреле 2013. Писался между делом и на коленке, но я старался не превращать код сразу же в хлам, а сохранить возможности развития.
Не планирую забрасывать, если люди не останутся равнодушны к этой затее.
# комментарий
[@] U n
[@] D n
[@] L n
[@] R n
[@] M n , n
A n
C n
W n
P n , n , n
S n
<
>
$(name=подпрограмма)
$(name)
$L n
$S n
$D n
Комментарии начинаются с символа #
и заканчиваются в конце строки.
Есть пять операций перемещения: четыре — по осям U
, D
, L
, R
,
и одна — M
, — перемещение с заданными координатами. Любая операция перемещения
может предваряться модификатором @
, который говорит о том, что рисовать
линию не надо, требуется только переместить перо-черепашку.
Две операции поворотов: A
, C
— против- и почасовой стрелке.
Операция установки толщины линии — W
.
Установка цвета производится оператором P
в формате RGB.
Масштабирование производится оператором S
.
Угловые скобки <
и >
сохраняют и восстанавливают контекст, соответственно.
В контекст входит положение, цвет, толщина линии и текущий масштаб.
Именованная подпрограмма объявляется при помощи конструкции
$(имя=текст подпрограммы)
.
Вызов именованной подпрограммы производится с помощью конструкции
$(имя)
.
Допускаются рекурсивные вызовы (хотя, объявить подпрограмму внутри другой подпрограммы нельзя; только вызвать).
Глубина рекурсии ограничивается двумя параметрами:
глубиной рекурсии $L
и минимальным масштабом $S
.
Если масштаб меньше заданного, то вызовы не осуществляются.
Кроме того, есть параметр, управляющий скоростью рисования —
$D
.
Простейший пример. Квадрат:
# рисуем линии:
# вверх на четыре единицы
U 4
# вправо
R 4
# вниз
D 4
# влево
L 4
Красный квадрат посередине
# Устанавливаем красный цвет
P 255, 0, 0
# Смещаемся вниз-влево, не рисуя
@ M -2, -2
# рисуем линии, как в предыдущем примере
U 4 R 4 D 4 L 4
Функции, повороты и масштабирования
# Создаём функцию, рисующую квадрат
$(sq= U4 R4 D4 L4 )
# устанавливаем красный цвет и риуем квадрат,
# вызывая функцию
P 255,0,0 $(sq)
# поворачиваем сиситему координат против часовой стрелки
# на 15 градусов
A 15
# изменяем масштаб
S 0.7
# корректируем цвет и рисуем новый квадрта
P 204,0,0 $(sq)
# ещё раз поворачиваем сиситему координат
A 15
# изменяем масштаб
S 0.7
# корректируем цвет и рисуем новый квадрта
P 153,0,0 $(sq)
Сложный пример:
$(Z=<C45$(F)>A45$(F))
$(F=U1S.707$(Z))
P 0,100,0
W .8
@D3.5S3
$(F)
(когда-нибудь напишу; если вы ждёте этих разъяснений, если они вам интересны, — пожалуйста пишите, — я потороплюсь)