From 5c3b5b5f33d221a0efb1c948f5473d9aeb45edba Mon Sep 17 00:00:00 2001 From: Michael Camilleri Date: Mon, 13 May 2019 18:31:03 +0900 Subject: [PATCH] Import: Lexer for Slice interface language (#50) --- lib/rouge/demos/slice | 27 +++++++++++++++++++++++++++ lib/rouge/lexers/slice.rb | 33 +++++++++++++++++++++++++++++++++ spec/lexers/slice_spec.rb | 18 ++++++++++++++++++ spec/visual/samples/slice | 1 + 4 files changed, 79 insertions(+) create mode 100644 lib/rouge/demos/slice create mode 100644 lib/rouge/lexers/slice.rb create mode 100644 spec/lexers/slice_spec.rb create mode 120000 spec/visual/samples/slice diff --git a/lib/rouge/demos/slice b/lib/rouge/demos/slice new file mode 100644 index 0000000000..0e3733731b --- /dev/null +++ b/lib/rouge/demos/slice @@ -0,0 +1,27 @@ +// File system module. +module Filesystem { + + // Node interface: + interface Node { + idempotent string name(); + } + + exception GenericError { + string reason; + } + + sequence Lines; + + ["java:implements:java.lang.AutoCloseable"] + interface File extends Node { + idempotent Lines read(); + idempotent void write(Lines text) throws GenericError; + } + + sequence NodeSeq; + + // Directory interface: + interface Directory extends Node { + idempotent NodeSeq list(); + } +} diff --git a/lib/rouge/lexers/slice.rb b/lib/rouge/lexers/slice.rb new file mode 100644 index 0000000000..9a9d4a48be --- /dev/null +++ b/lib/rouge/lexers/slice.rb @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +module Rouge + module Lexers + load_lexer 'c.rb' + + class Slice < C + tag 'slice' + filenames '*.ice' + mimetypes 'text/slice' + + title "Slice" + desc "Slice interface language (https://doc.zeroc.com/display/Ice37/The+Slice+Language)" + + def self.keywords + @keywords ||= Set.new %w( + extends implements enum interface struct class module dictionary const + optional out throws exception local idempotent sequence + + Object LocalObject Value + ) + end + + def self.keywords_type + @keywords_type ||= Set.new %w( + bool string byte long float double int void short + ) + end + + end + end +end diff --git a/spec/lexers/slice_spec.rb b/spec/lexers/slice_spec.rb new file mode 100644 index 0000000000..6f859f9f17 --- /dev/null +++ b/spec/lexers/slice_spec.rb @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- # +# frozen_string_literal: true + +describe Rouge::Lexers::Slice do + let(:subject) { Rouge::Lexers::Slice.new } + + describe 'guessing' do + include Support::Guessing + + it 'guesses by filename' do + assert_guess :filename => 'foo.ice' + end + + it 'guesses by mimetype' do + assert_guess :mimetype => 'text/slice' + end + end +end diff --git a/spec/visual/samples/slice b/spec/visual/samples/slice new file mode 120000 index 0000000000..9409d77eb0 --- /dev/null +++ b/spec/visual/samples/slice @@ -0,0 +1 @@ +../../../lib/rouge/demos/slice \ No newline at end of file