Skip to content

Instantly share code, notes, and snippets.

@vittee
Created June 28, 2017 16:10
Show Gist options
  • Save vittee/8227f1f7311d1db8aab49fb84c39fa79 to your computer and use it in GitHub Desktop.
Save vittee/8227f1f7311d1db8aab49fb84c39fa79 to your computer and use it in GitHub Desktop.
Quick and dirty VS Code Syntax Highlighter for Liquidsoap scripting language.
{
"$schema": "https://raw.githubusercontent.com/martinring/tmlanguage/master/tmlanguage.json",
"name": "liquidsoap",
"patterns": [
{
"include": "#keywords"
},
{
"include": "#strings"
},
{
"include": "#comments"
},
{
"include": "#constants"
},
{
"include": "#builtin-operators"
},
{
"include": "#punctuations"
},
{
"include": "#number"
}
],
"repository": {
"comments": {
"patterns": [
{
"name": "comment.line.number-sign",
"match": "#.*"
}
]
},
"keywords": {
"patterns": [
{
"name": "keyword.control.liquidsoap",
"match": "\\b(if|then|else|elseif|begin|end|def|fun|rec|ref|not|and|or|mod|in|out|at|id)\\b"
},
{
"name":"keyword.operator.liquidsoap",
"match": "\\b\not|and|or|mod\b"
}
]
},
"strings": {
"name": "string.quoted.double.liquidsoap",
"begin": "\"",
"end": "\"",
"patterns": [
{
"name": "constant.character.escape.liquidsoap",
"match": "\\\\."
}
]
},
"number": {
"patterns": [
{
"name": "constant.numeric",
"match": "\\b([0-9]+(\\.[0-9]*)?)\\b"
}
]
},
"constants": {
"patterns": [
{
"name": "constant.language.boolean.liquidsoap",
"match": "\\b(true|false)\\b"
}
]
},
"builtin-operators": {
"patterns": [
{
"name":"markup.bold.arithmatic.liquidsoap",
"match": "(\\+|\\-|\\*|\\/|\\+\\.|\\-\\.|\\*\\.|\\/\\.)"
},
{
"name": "constant.regexp.operator.string.liquidsoap",
"match": "(%|\\^)"
},
{
"name": "storage.modifier.comparison.liquidsoap",
"match": "(==|!=|<|<=|>|>=)"
},
{
"name":"storage.modifier.ref.liquidsoap",
"match": "(\\!|:=|=)"
},
{
"name": "support.function.bool.liquidsoap",
"match": "\\b(random.bool)\\b"
},
{
"name":"support.class.liquidsoap",
"match": "(add_decoder|add_metadata_resolver|add_oblivious_decoder|add_playlist_parser|add_protocol|clock|clock.assign_new|clock.unify|configure.default_font|configure.libdir|configure.logdir|configure.rundir|enable_external_faad_decoder|enable_external_flac_decoder|enable_external_mpc_decoder|enable_replaygain_metadata|file.duration|garbage_collect|get|get_clock_status|harbor.http.register|harbor.http.remove|harbor.https.register|harbor.https.remove|liquidsoap.version|log|log_clocks|metadata.export|mutexify|playlist.parse|process_uri|register|register_flow|request.create|request.create.raw|request.destroy|request.filename|request.log|request.metadata|request.ready|request.resolve|server.execute|set|source.fallible|source.id|source.init|source.is_ready|source.remaining|source.seek|source.shutdown|source.skip|argv|basename|dirname|environment|exe_ext|exec_at|exit|file.contents|file.exists|file.extension|file.is_directory|file.mime_default|file.temp|file.watch|get_mime|get_process_lines|get_process_output|getenv|getopt|getpid|gettimeofday|is_directory|on_shutdown|os.type|path.concat|read|reopen.stderr|reopen.stdin|reopen.stdout|restart|run_process|shutdown|source.is_up|source.on_shutdown|system|test_process|which)"
},
{
"name":"support.function.list.liquidsoap",
"match": "(list.add|list.append|list.assoc|list.filter|list.filter_assoc|list.fold|list.hd|list.iter|list.length|list.map|list.mapi|list.mem|list.mem_assoc|list.nth|list.randomize|list.remove|list.remove_assoc|list.rev|list.sort|list.tl)"
},
{
"name":"support.constant.math.liquidsoap",
"match": "(fst|snd|abs|bool_of_float|bool_of_int|dB_of_lin|float_of_int|int_of_float|lin_of_dB|pow|random.float|random.int)"
},
{
"name": "support.type.property-name",
"match": "(base64.decode|base64.encode|bool_of_string|float_of_string|int_of_string|json_of|of_json|quote|string.capitalize|string.case|string.concat|string.escape|string.extract|string.length|string.match|string.recode|string.replace|string.split|string.sub|string.trim|string.utf8.escape|string_of|string_of_metadata|url.decode|url.encode|url.split|url.split_args)"
},
{
"name": "keyword.control.track.liquidsoap",
"match": "(append|crossfade|cue_cut|delay|drop_metadata|eat_blank|fallback|fallback.skip|insert_metadata|map_metadata|merge_tracks|mksafe|notify_metadata|on_blank|on_end|on_metadata|on_offset|on_track|once|osd_metadata|overlap_sources|playlist.merge|prepend|random|rewrite_metadata|rotate|rotate.merge|say_metadata|sequence|server.insert_metadata|skip_blank|smart_crossfade|smooth_add|source.dynamic|store_metadata|strip_blank|switch)"
},
{
"name": "keyword.operator.new",
"match": "(audio_to_stereo|drop_audio|drop_midi|drop_video|mean|mux_audio|mux_mono|mux_stereo|mux_video|stereo.left|stereo.right|swap|blank|empty|fail|gstreamer.hls|input.external|input.external.avi|input.external.rawvideo|input.ffmpeg.video|input.gstreamer.audio|input.gstreamer.audio_video|input.gstreamer.video|input.harbor|input.harbor.ssl|input.http|input.https|input.mencoder.video|input.mplayer|input.portaudio|input.udp|input.v4l2|input.v4l2_with_audio|noise|playlist|playlist.once|playlist.reloadable|playlist.safe|request.dynamic|request.equeue|request.queue|saw|sine|single|square|buffer|buffer.adaptative|gstreamer.encode_jpeg_avi|gstreamer.encode_mp3|gstreamer.encode_x264_avi|gstreamer.rtp.mpeg4|output.ao|output.dummy|output.external|output.file|output.gstreamer.audio|output.gstreamer.audio_video|output.gstreamer.video|output.harbor|output.harbor.ssl|output.icecast|output.portaudio|output.prefered|output.shoutcast|output.udp|add|amplify|clip|comb|compand|compress|compress.exponential|cross|echo|fade.final|fade.in|fade.initial|fade.out|limit|mic_filter|mix|normalize|nrj|pipe|sky|smart_cross|stereo.ms.decode|stereo.ms.encode|stereo.pan|stretch|peak|peak.stereo|rms|rms.stereo|server.rms|video.volume|vumeter|add_timeout|ignore|add_skip_command|http.delete|http.get|http.head|http.post|http.put|http_codes|http_response|https.delete|https.get|https.head|https.post|https.put|icy.update_metadata|interactive.bool|interactive.float|interactive.string|print|server.register)"
}
]
},
"punctuations": {
"patterns": [
{
"name": "comment.line.number-sign.comma.liquidsoap",
"match": "[,~]"
},
{
"name": "keyword.other.unit",
"match": "(\\[|\\])"
}
]
}
},
"scopeName": "source.liq"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment