Giter Club home page Giter Club logo

jones's Introduction

Java OneScript (Jones)

Jones - реализация OneScript на Java.

Зачем?

Расширение программ на Java-подобных языках через скрипты OneScript.

Как использовать?

Запуск скрипта из консоли

java -jar /path/to/jonec-exec.jar /path/to/script.os

где:

  • /path/to/jonec-exec.jar - путь к исполняемому файлу. Где найти? Самому собрать из исходников или посмотреть в релизах (если они есть).
  • /path/to/script.os - путь к скрипту OneScript.

Например:

java -jar jonec-exec.jar my-script.os

Подключение к приложению

Начальный пример

Скрипт my-script.os:

Перем ЧислоИзМодуля

Процедура ВывестиЧисло()
    Сообщить(ЧислоИзМодуля);
КонецПроцедуры

ЧислоИзМодуля = 42;

Подключаем зависимость (собирается на JitPack)

develop-SNAPSHOT - тег, по которому берется версия с JitPack. Тег может быть как номер версии (если есть релизы), так и хеш коммита на GitHub.

Gradle:

implementation group: 'com.github.otymko', name: 'JOneS', version: 'develop-SNAPSHOT'

Gradle (Kotlin):

implementation("com.github.otymko", "JOneS", "develop-SNAPSHOT")
<dependency>
    <groupId>com.github.otymko</groupId>
    <artifactId>JOneS</artifactId>
    <version>develop-SNAPSHOT</version>
</dependency>

Добавляем в приложение на Java:

// Путь к скрипту на Jones
Path pathToScript = Path.of("/path/to/my-script.os");
// Инициализация движка
ScriptEngine engine = new ScriptEngine();
// Инициализация компилятора
ScriptCompiler compiler = new ScriptCompiler(engine);
// Компиляция скрипта с базовым типом "Сценарий"(UserScriptContext)
ModuleImage moduleImage = compiler.compile(pathToScript, UserScriptContext.class);

// Создаём экземпляр объекта Сценарий из скомпилированного скрипта
ScriptDrivenObject sdo = engine.newObject(moduleImage);

// Получаем индекс метода по его ммени
int methodId = sdo.getScriptMethod("ВывестиЧисло");
// Вызываем метод
sdo.callScriptMethod(engine, methodId, new IValue[0]);

После выполнения кода, будет выведено сообщение:

42

Дорожная карта

Для начала, реализовать задачи на Доска MVP и выпустить релиз.

Лицензия

Используется лицензия Mozilla Public License Version 2.0

jones's People

Contributors

aponkratov avatar dependabot[bot] avatar dmpas avatar evilbeaver avatar otymko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

jones's Issues

Тип `СписокЗначений`

Конструкторы:

  • По умолчанию

Свойства:
Доступные значения - отсутствует в спецификации для oscript
ТипЗначения - отсутствует в спецификации для oscript

Методы:

  • Вставить
  • ВыбратьЭлементы - интерактивное действие
  • ВыгрузитьЗначения
  • Добавить
  • ЗагрузитьЗначения
  • ЗаполнитьПометки
  • Индекс
  • Количество
  • НайтиПоЗначению
  • НайтиПоИдентификатору - отсутствует в спецификации для oscript
  • ОтметитьЭлементы - интерактивное действие
  • Очистить
  • Получить
  • Сдвинуть
  • Скопировать
  • СортироватьПоЗначению
  • СортироватьПоПредставлению
  • Удалить

Дочерние типы:

Тип `Массив`

Конструкторы:

  • На основании фиксированного массива
  • По количеству элементов
  • По умолчанию

Методы:

  • ВГраница
  • Вставить
  • Добавить
  • Количество
  • Найти
  • Очистить
  • Получить
  • Удалить
  • Установить

Тип `Файл`

Конструкторы:

  • По имени файла

Свойства:

  • Имя
  • ИмяБезРасширения
  • ПолноеИмя
  • Путь
  • Расширение

Методы:

  • ПолучитьВремяИзменения
  • ПолучитьНевидимость
  • ПолучитьТолькоЧтение
  • ПолучитьУниверсальноеВремяИзменения
  • Размер
  • Существует
  • УстановитьВремяИзменения
  • УстановитьНевидимость
  • УстановитьТолькоЧтение
  • УстановитьУниверсальноеВремяИзменения
  • ЭтоКаталог
  • ЭтоФайл

Коллекция: Структура

  • Базовая реализация
  • Свойства по индексу
  • Свойства по имени
  • Перебор КлючЗначение в цикле

Расширить возможности ScriptTester

Класс ScriptTester - класс для тестирования (утверждений), похожий на 1testrunner. Для того чтобы не ломать API - нужно реализовать методы:

  • Проверить
  • ПроверитьИстину
  • ПроверитьЛожь
  • ПроверитьРавенство
  • ПроверитьНеРавенство
  • ПроверитьРавенствоДатСТочностью2Секунды
  • ПроверитьДату
  • ПроверитьБольше
  • ПроверитьБольшеИлиРавно
  • ПроверитьМеньше
  • ПроверитьМеньшеИлиРавно
  • ПроверитьЗаполненность
  • ПроверитьНеЗаполненность
  • ПроверитьВхождение
  • ПроверитьКодСОшибкой
  • ПроверитьТип

Не видит метод, объявленный ниже по коду

Функция ТестРаннегоОпределения(Переменная)
    Возврат ВернутьЗначение(Переменная);
КонецФункции

Функция ВернутьЗначение(Переменная)
    Значение = 120 + Переменная;
    Возврат Значение;
КонецФункции

Ошибка: Метод не найден ВернутьЗначение

Выпадает вызов метода из `Имя.Метод().Имя`

Код Т.Добавить().Индекс=Значение; выдаёт байткод:

   722: Command(code=LineNum, argument=217)
   723: Command(code=PushLoc, argument=0)
   724: Command(code=ResolveProp, argument=51)
   725: Command(code=PushLoc, argument=1)
   726: Command(code=AssignRef, argument=0)

напрочь отсутствует ResolveMethodProc.

Процедуры и функции работы с файлами

Методы:

  • КопироватьФайл
  • ПереместитьФайл
  • УдалитьФайлы
  • НайтиФайлы
  • СоздатьКаталог
  • ПолучитьИмяВременногоФайла
  • РазделитьФайл
  • ОбъединитьФайлы ?
  • ПолучитьФайл ?
  • ПоместитьФайл ?
  • ПолучитьФайлы ?
  • ПоместитьФайлы ?

Тип `ТаблицаЗначений`

Конструкторы:

  • По умолчанию

Свойства:

  • Индексы (#181 )
  • Колонки

Методы:

  • Вставить
  • ВыбратьСтроку ?
  • ВыгрузитьКолонку
  • Добавить
  • ЗагрузитьКолонку
  • #206
  • Индекс
  • Итог
  • Количество
  • Найти
  • НайтиСтроки
  • Очистить
  • Получить
  • Свернуть
  • Скопировать
  • СкопироватьКолонки
  • Сортировать
  • Удалить

Дочерние типы:

Тип `Соответствие`

Конструкторы:

  • На основании фиксированного соответствия
  • По умолчанию

Методы:

  • Вставить
  • Количество
  • Очистить
  • Получить
  • Удалить

Синтаксические конструкции: Условия

  • Простое условие:
Если Условие Тогда
  // ...
КонецЕсли;
  • Условие с Иначе
Если Условие Тогда
  // ...
Иначе
  // ...
КонецЕсли;
  • Условие с несколькими ветками:
Если Условие Тогда
  // ...
ИначеЕсли Условие2 Тогда
  // ...
Иначе
  // ...
КонецЕсли;

Условный оператор

Добавить поддержку условного оператора в компиляторе и в машине.

Грамматика:

?(<Логическое выражение>, <Выражение 1>, <Выражение 2>)

Свойство `ЭтотОбъект` для SDO

Пример:

Перем Переменная Экспорт;

Переменная = "Значение1";
Сообщить(Переменная);
ЭтотОбъект.Переменная = "Значение2";
Сообщить(Переменная);

Выхлоп:

Значение1
Значение2

Тип `УникальныйИдентификатор`

Тип предназначен для создания и хранения глобального уникального идентификатора GUID.

Конструкторы:

  • Из строки
  • По умолчанию

Тип `Структура`

Конструкторы:

  • #109
  • По ключам и значениям

Методы:

  • Вставить
  • Количество
  • Очистить
  • Свойство
  • Удалить

Тип `РегулярноеВыражение `

Свойства:

  • ИгнорироватьРегистр
  • Многострочный

Методы:

  • Совпадает
  • НайтиСовпадения
  • Разделить
  • Заменить

Конструкторы:

  • По регулярному выражению

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.