diff --git a/lib/rouge/demos/slice b/lib/rouge/demos/slice new file mode 100644 index 0000000000..7c382201d1 --- /dev/null +++ b/lib/rouge/demos/slice @@ -0,0 +1,10 @@ +// Printer.ice +module Demo +{ + interface Printer + { + // A client can invoke this operation on a server. + // In this example we print the string s + void printString(string s); + } +} diff --git a/lib/rouge/lexers/slice.rb b/lib/rouge/lexers/slice.rb new file mode 100644 index 0000000000..f2739cbd95 --- /dev/null +++ b/lib/rouge/lexers/slice.rb @@ -0,0 +1,32 @@ +# -*- 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 "Specification Language for Ice (doc.zeroc.com)" + + 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 100644 index 0000000000..0e3733731b --- /dev/null +++ b/spec/visual/samples/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(); + } +}