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