about summary refs log tree commit diff stats
path: root/pkgs/by-name/tr/tree-sitter-yts/grammar.js
blob: 655f6deaf6f0a663dbbb4d69599adc33136857d8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
module.exports = grammar({
  name: "yts",

  rules: {
    source_file: ($) => repeat(choice($.line, $.comment)),
    line: ($) =>
      seq($.command, $.id, $.title, $.date, $.author, $.duration, $.url, "\n"),

    command: ($) => choice("pick", "p", "watch", "w", "drop", "d", "url", "u"),
    id: ($) => /[0-9]+/,
    title: ($) => seq($._q, /[^"]+/, $._q),
    date: ($) => seq($._q, /\d{4}-\d{2}-\d{2}/, $._q),
    author: ($) => seq($._q, /[^"]+/, $._q),
    duration: ($) =>
      seq(
        $._q,
        seq("[", choice("No Duration", /\d+m \d+s/, /\d+h \d+m/), "]"),
        $._q,
      ),
    url: ($) => seq($._q, /[^"]+/, $._q),
    comment: ($) => /#.*/,
    _q: ($) => $.quote,
    quote: ($) => /"/,
  },
  extras: ($) => [/\s/, /\\\r?\n/],
});