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/], });