Java-реализация парсера Links Notation.
Добавьте зависимость в ваш pom.xml:
<dependency>
<groupId>io.github.link-foundation</groupId>
<artifactId>links-notation</artifactId>
<version>0.1.0</version>
</dependency>Добавьте зависимость в ваш build.gradle:
implementation 'io.github.link-foundation:links-notation:0.1.0'Для разработчиков, работающих с исходным кодом:
cd java
mvn installСборка проекта:
mvn clean compileЗапуск тестов:
mvn testimport io.github.linkfoundation.linksnotation.Parser;
import io.github.linkfoundation.linksnotation.Link;
import java.util.List;
public class Example {
public static void main(String[] args) throws Exception {
// Создание парсера
Parser parser = new Parser();
// Парсинг строки в формате Lino
String input = """
papa (lovesMama: loves mama)
son lovesMama
daughter lovesMama
all (love mama)
""";
List<Link> result = parser.parse(input);
// Доступ к структуре
for (Link link : result) {
System.out.println(link.toString());
}
}
}import io.github.linkfoundation.linksnotation.Link;
import java.util.Arrays;
import java.util.List;
// Создание связей программно
Link child1 = new Link("child1");
Link child2 = new Link("child2");
Link parent = new Link("parent", Arrays.asList(child1, child2));
System.out.println(parent.toString()); // (parent: child1 child2)
// Доступ к свойствам связи
System.out.println("ID: " + parent.getId());
System.out.println("Значения: " + parent.getValues());import io.github.linkfoundation.linksnotation.Parser;
import io.github.linkfoundation.linksnotation.Link;
import io.github.linkfoundation.linksnotation.LinksGroup;
// Работа с вложенными структурами
String input = """
parent
child1
child2
grandchild1
grandchild2
""";
Parser parser = new Parser();
List<Link> parsed = parser.parse(input);
// Работа с группами
LinksGroup group = new LinksGroup(parsed);
System.out.println(group.format());papa (lovesMama: loves mama)
son lovesMama
daughter lovesMama
all (love mama)
papa has car
mama has house
(papa and mama) are happy
(linksNotation: links notation)
(This is a linksNotation as well)
(linksNotation supports (unlimited number (of references) in each link))
parent
child1
child2
grandchild1
grandchild2
3:
papa
loves
mama
Это эквивалентно:
(3: papa loves mama)
Основной класс парсера для преобразования строк в связи.
Parser()- Создать парсер с настройками по умолчаниюParser(int maxInputSize, int maxDepth)- Создать парсер с пользовательскими лимитамиparse(String input)- Распарсить строку Lino и вернуть связи
Представляет отдельную связь с ID и значениями.
Link()- Создать пустую связьLink(String id)- Создать связь с IDLink(String id, List<Link> values)- Создать связь с ID и значениямиgetId()- Получить идентификатор связиgetValues()- Получить список дочерних значений/связейtoString()- Преобразовать связь в строкуformat(boolean lessParentheses)- Форматировать с опциональным сокращением скобокequals(Object other)- Проверить равенство с другой связьюstatic formatLinks(List<Link> links)- Форматировать список связей
Контейнер для группировки связанных связей.
LinksGroup()- Создать пустую группуLinksGroup(List<Link> links)- Создать группу со связямиadd(Link link)- Добавить связь в группуgetLinks()- Получить список связейsize()- Получить количество связейisEmpty()- Проверить, пуста ли группаformat()- Форматировать группу как строку
Исключение, выбрасываемое при ошибке парсинга.
src/main/java/io/github/linkfoundation/linksnotation/Link.java- Структура данных Linksrc/main/java/io/github/linkfoundation/linksnotation/LinksGroup.java- Контейнер группы связейsrc/main/java/io/github/linkfoundation/linksnotation/Parser.java- Реализация парсераsrc/main/java/io/github/linkfoundation/linksnotation/ParseException.java- Исключение парсингаsrc/test/java/- Тестовые файлы
Проект использует Google Java Format через Spotless:
mvn spotless:applyПроверка форматирования:
mvn spotless:check- Java 11 или выше
- Maven 3.6+
- Group ID:
io.github.link-foundation - Artifact ID:
links-notation - Версия: 0.1.0
- Лицензия: Unlicense