DRAKON.SU

Текущее время: Пятница, 29 Март, 2024 02:15

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 2 ] 
Автор Сообщение
 Заголовок сообщения: JSON to replace DRN as readable format
СообщениеДобавлено: Вторник, 01 Декабрь, 2020 02:53 

Зарегистрирован: Среда, 21 Октябрь, 2020 21:13
Сообщения: 32
Idea: Replace .drn source files with .json. Generate diagrams based on .json. Adding, removing, and editing text of icons updates the underlying .json. The .json format is independent of the target compile language.

This is what I consider to be the first step in making a better Drakon Visual Editor one day. First, get the source code (.drn) into .json readable, clean format. Diagrams should be generated based on the json source live, this way, code and diagram can have a back and forth relationship.

Изображение

How the following JSON works:
Each icon has a unique 'type'. Each icon has a position (x, y) on an imaginary 2D grid. The 2D grid starts at 0,0 at the header. The largest y value on the x0 line is always the end icon. "y" goes down, "x" goes to the right.

Question type icons have a "orientation" key which can be either "yes, no" or "no, yes" as the boolean is flipped.

Arrow loop type icons have a "connect" key which specifies where the arrow connects to, the icon found at the position represents the icon directly above the arrow connect point.

Loop type icons have an "end" key which specifies how many icons down on the same vertical y grid the pairing loop end icon is to be positioned.

As you can see, the following flat json structure (no crazy indentation) can represent any diagram complexity.

JSON source:
Код:
{
    "icons" : [
        {
            "type" : "header",
            "position" : [0, 0],
            "text" : "fibonacci",
        },
        {
            "type" : "arguments",
            "position" : [1, 0],
            "text" : "n",
        },
        {
            "type" : "question",
            "position" : [0, 1],
            "orientation" : ["No", "Yes"],
            "text" : "n === 0",
        },
        {
            "type" : "statement",
            "position" : [0, 2],
            "text" : "return 0",
        },
        {
            "type" : "end",
            "position" : [0, 3],
            "text" : "End",
        },
        {
            "type" : "question",
            "position" : [1, 1],
            "orientation" : ["Yes", "No"],
            "text" : "n > 2",
        },
        {
            "type" : "statement",
            "position" : [1, 2],
            "text" : "return 1",
        },
        {
            "type" : "statement",
            "position" : [2, 1],
            "text" : "return fibonacci(n - 2) + fibonacci(n - 1)",
        },
    ],
}


Future steps: Create richer types rather than just header, arguments, question, statement, end, arrow loop, and loop types. Richer types would be for richer display of data itself such as arrays, objects, tables, and expressions.

Loop types (not used above)
Код:
        {
            "type" : "arrow loop",
            "position" : [2, 2],
            "connect" : [0, 0]
        },
        {
            "type" : "loop",
            "position" : [2, 2],
            "text" : "foreach key, value in my_object",
            "end" : [2, 5]
        },


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: JSON to replace DRN as readable format
СообщениеДобавлено: Вторник, 01 Декабрь, 2020 11:52 

Зарегистрирован: Воскресенье, 24 Февраль, 2008 15:32
Сообщения: 5846
Откуда: Москва
Luke Alan писал(а):
Идея: заменить исходные файлы .drn на .json. Создавайте диаграммы на основе .json. Добавление, удаление и редактирование текста значков обновляет базовый файл .json. Формат .json не зависит от целевого языка компиляции.

Это то, что я считаю первым шагом к созданию лучшего визуального редактора Drakon однажды. Сначала преобразуйте исходный код (.drn) в читаемый и чистый формат .json. Диаграммы должны быть созданы на основе исходного кода json в реальном времени, таким образом, код и диаграмма могут иметь прямую и обратную связь.

Изображение

Как работает следующий JSON:
Каждый значок имеет уникальный «тип». Каждый значок имеет позицию (x, y) на воображаемой 2D-сетке. 2D-сетка начинается с 0,0 в заголовке. Наибольшее значение y в строке x0 всегда является значком конца. «y» идет вниз, «x» идет вправо.

У значков типа вопроса есть клавиша «ориентации», которая может быть либо «да, нет», либо «нет, да», поскольку логическое значение переворачивается.

У значков типа петли со стрелкой есть клавиша «подключения», которая указывает, где стрелка соединяется, значок, найденный в позиции, представляет значок непосредственно над точкой соединения стрелки.

У значков типа петли есть клавиша «конец», которая указывает, на сколько значков внизу в той же вертикальной сетке y должен быть расположен значок конца петли сопряжения.

Как видите, следующая плоская структура json (без сумасшедших отступов) может представлять диаграмму любой сложности.

Дальнейшие шаги: создавайте более расширенные типы, а не только заголовки, аргументы, вопросы, утверждения, конец, цикл со стрелкой и типы цикла. Более богатые типы предназначены для более подробного отображения самих данных, таких как массивы, объекты, таблицы и выражения.

Типы петель (не используются выше)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2008-2024, участники конференции «DRAKON.SU», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB