Skip to content

frylo0/md-tpl

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 

Repository files navigation

MD_TPL

Это простой язык и препроцессор для маркдауна

Возможности:

  • подстановка кусков маркдауна
  • автонумерация (например рисунков)
  • вставка содержимого других файлов (например исходного кода программы)

Термины:

  • кусочек - файл, который находится в папке с шаблонами
  • основной шаблон - файл с расширением .tpl.md, который мы хотим превратить в простой .md

Содержание

Использование

Язык регистрозависимый. ПРИВЕТ и ПрИвЕт не одно и то же в рамках языка.

Рекомендуется называть ваш основной шаблон используя расширение .tpl.md, это позволит вам разместить рядом с ним простой .md файл.

После того как вы скачали репозиторий, используйте скрипт md_tpl.py для препроцессинга. Это будет выглядеть так:

python путь/к/md_tpl.py аргументы

Подробнее про аргументы скрипта (цифра - порядковый номер передачи скрипту):

  1. Путь к основному шаблону
  2. Путь для вывода маркдауна

То есть перевод основного шаблона в маркдаун выглядит так (допустим у нас файл README.tpl.md и все файлы в текущей директории):

python ./md_tpl.py ./README.tpl.md ./README.md

Дополнительные аргументы (каждый из них имеет формат --аргумент=значение): --template_folder=путь/к/папке/кусочков - указывает путь к папке кусочков (шаблонов). По умолчанию используется папка markdown_templates, которая находится рядом со скриптом md_tpl.py. Если будете перемещать скрипт не забудьте и папку или укажите к ней путь через этот аргумент скрипта.

Синтаксис

Базовый синтаксис

Для вставки переменной используется следующий синтаксис:

{ название_переменной }

Кусочки - куски маркдауна, которые можно легко вызывать в основном шаблоне и в самих кусочках. Все кусочки должны лежать в одной папке. Название файла кусочка определяет его называние для вызова. Для вызова кусочка используется вот такой синтаксис:

(( название_кусочка = переменная1: "значение 1", переменная2: "значение 2", ... ))

После знака = идут переменные в формате JSON: ключ: "значение". Для упрощения синтаксиса ключи (названия переменных) идут без кавычек. Нельзя передавать массивы и другие объекты как значения переменных, однако переменные могут иметь любые названия, например : или + или другие спец. символы.

Однако есть одна специальная переменная - =. Использование этой переменной позволяет писать короче.
(( кусочек = =:"значение" ))
Можно записать так:
(( кусочек == "значение" ))
Такой синтаксис не запрещает другие переменные, например:
(( картинка == "./путь/к/картинке.jpg", заголовок: "заголовок картинки" ))

В таком случае у нас будет две переменных внутри кусочка: = и заголовок.

Можно писать вызов кусочков в несколько строк:

(( 
кусочек = 
   переменная1: "значение1",
   переменная2: "значение2"
))

Главное чтобы все запятые стояли на месте, иначе вы получите ошибку.

Какие переменные будут подставлены в итоге зависит только от того что вы напишете в кусочек. Если в кусочек передана переменная, которая не используется в нём, она будет проигнорирована.

В основном шаблоне можно использовать только вызов кусочков.

В самих кусочках можно вставлять переменные.

Специальные директивы

Вставка специальных директив выглядит как вставка переменных, только каждая директива начинается со знака $:

{ $директива }

Директивы могут принимать параметры вот так:

{ $директива(параметры) }

Похоже на вызов функции.

Список директив:

  • $n - номер кусочка этого типа. Если наш кусочек картинка с автонумерацией, то используйте {$n}, чтобы добавить автономер.
  • $args - подставляет все аргументы текущего кусочка. Эта директива используется для вызова одного кусочка внутри другого и передачи аргументов "из вне".
  • $file(путь) - подставляет содержимое файла по указанному пути. Путь рассматривается относительно основного шаблона.

В остальном этом простой маркдаун. Надеюсь вы знаете, что в маркдауне можно писать HTML код, поэтому MD_TPL удобно использовать чтобы обуздать куски HTML, и убрать его из основного шаблона.

Примеры

Во всех примерах в качестве основного шаблона будет выступать файл BASE.tpl.md, вывод происходить в OUTPUT.md, а кусочки будут лежать в папке markdown_templates.

В репозитории уже есть готовые шаблоны, используйте их на своё усмотрение.

Картинка с автонумерацией и заголовком
<!-- markdown_templates/image.md -->
<p align="center">
<img src="{src}"><br>
Рисунок №{$n} - {title}
</p>
<!-- BASE.tpl.md -->
Это приложения к дипломной работе:

(( image = src:"./01.jpg", title:"Первая картинка" ))

(( 
image = 
   src:"https://longlonglonglonglong.domain/path/to/image.jpg", 
   title:"Вторая картинка"
))
<!-- OUTPUT.tpl.md -->
Это приложения к дипломной работе:

<p align="center">
<img src="./01.jpg"><br>
Рисунок №1 - Первая картинка
</p>

<p align="center">
<img src="https://longlonglonglonglong.domain/path/to/image.jpg"><br>
Рисунок №2 - Вторая картинка
</p>
Раскрывающийся блок
<!-- markdown_templates/toggle{.md -->
<details><summary>{=}</summary>
<!-- markdown_templates/toggle}.md -->
</details>
<!-- BASE.tpl.md -->
Ниже представлен исходный код hello world на с++:

(( toggle{ == "Исходный код" ))

```c++
#include <iostream>
int main() {
   std::cout << "Hello, World!";
   return 0;
}
```

(( toggle} ))
<!-- OUTPUT.tpl.md -->
Ниже представлен исходный код hello world на с++:

<details><summary>Исходный код</summary>

```c++
#include <iostream>
int main() {
   std::cout << "Hello, World!";
   return 0;
}
```

</details>
Раскрывающийся блок c картинкой
<!-- markdown_templates/image.md -->
<p align="center">
<img src="{src}"><br>
Рисунок №{$n} - {title}
</p>
<!-- markdown_templates/toggle.md -->
<details><summary>{=}</summary>
(( {:} = {$args} ))
</detail>
<!-- markdown_templates/toggle-image.md -->
(( 
toggle == "Открыть изображение",
::"image"
      src:"{src}",
      title:"{title}"
))
<!-- BASE.tpl.md -->
Теперь мои картинки такие компактные:

(( toggle-image = src:"one.jpg", title:"Первый рисунок" ))

(( toggle-image = src:"two.jpg", title:"Второй рисунок" ))

На первом шаге происходит вот такая замена:

<!-- OUTPUT.tpl.md -->
Теперь мои картинки такие компактные:

(( 
toggle == "Открыть изображение",
::"image"
      src:"one.jpg",
      title:"Первый рисунок"
))

(( 
toggle == "Открыть изображение",
::"image"
      src:"two.jpg",
      title:"Второй рисунок"
))

Вторым шагом подключается toggle:

<!-- OUTPUT.tpl.md -->
Теперь мои картинки такие компактные:

<details><summary>Открыть изображение</summary>
(( 
image = 
   =:"Открыть изображение", 
   ::"image", 
   src:"one.jpg",
   title:"Первый рисунок"
))
</detail>

<details><summary>Открыть изображение</summary>
(( 
image = 
   =:"Открыть изображение", 
   ::"image", 
   src:"two.jpg",
   title:"Второй рисунок"
))
</detail>

Дальше используется шаблон картинки. Все аргументы, которые в нём не используются, игнорируются. Таким образом на шаблон картинки оказывают влияние только src и title:

<!-- OUTPUT.tpl.md -->
Теперь мои картинки такие компактные:

<details><summary>Открыть изображение</summary>
<p align="center">
<img src="one.jpg"><br>
Рисунок №1 - Первый рисунок
</p>
</detail>

<details><summary>Открыть изображение</summary>
<p align="center">
<img src="two.jpg"><br>
Рисунок №2 - Второй рисунок 
</p>
</detail>
Вставка исходного кода из файлов программы
<!-- markdown_templates/file.md -->
{$file({=})}
// Human.h
class Human {
public:
   int age;
   Human(int humanAge);
}
// Human.cpp
#include "Human.h"

Human::Human(int humanAge) {
   age = humanAge;
}
<!-- BASE.tpl.md -->
Был разработан класс Human:

```c++
(( file == "Human.h" ))
```
```c++
(( file == "Human.cpp" ))
```
<!-- OUTPUT.tpl.md -->
Был разработан класс Human:

```c++
class Human {
public:
   int age;
   Human(int humanAge);
}
```
```c++
#include "Human.h"

Human::Human(int humanAge) {
   age = humanAge;
}
```

Некоторые из примеров выше повторяют файлы из папки markdown_templates из репозитория.

Главной целью этого препроцессора является максимально повысить читабельность маркдауна в любых ситуациях.

Если найдёте баг пишите в issues.

About

simple markdown templater

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages