diff --git a/lib/coderay.rb b/lib/coderay.rb index c3de20b5..67edee18 100644 --- a/lib/coderay.rb +++ b/lib/coderay.rb @@ -279,6 +279,20 @@ def get_scanner_options options options.fetch :scanner_options, {} end + # Provide a list of supported code languages. + # + # Returns a hash of symbols. + def supported_languages(include_aliases=true, include_internals=false) + languages = CodeRay::Scanners.list + if include_aliases == true + languages += CodeRay::Scanners.plugin_hash.keys.map(&:to_sym) + end + if include_internals == false + languages -= %w(debug default raydebug scanner).map(&:to_sym) + end + return languages + end + end end diff --git a/test/functional/basic.rb b/test/functional/basic.rb index 752d4ba0..441eec0a 100644 --- a/test/functional/basic.rb +++ b/test/functional/basic.rb @@ -155,6 +155,40 @@ def test_list_of_scanners assert CodeRay::Scanners.list.include?(:text) end + def test_supported_languages_should_return_array_of_symbols + assert_kind_of(Array, CodeRay.supported_languages) + assert_kind_of(Symbol, CodeRay.supported_languages.first) + end + + def test_supported_languages_should_include_languages + assert CodeRay.supported_languages.include?(:ruby) + end + + def test_supported_languages_without_arguments_should_include_aliases_and_exclude_internals + assert CodeRay.supported_languages.include?(:javascript) + assert !CodeRay.supported_languages.include?(:debug) + end + + def test_supported_languages_with_arguments_should_include_aliases_and_exclude_internals + assert CodeRay.supported_languages(true, false).include?(:javascript) + assert !CodeRay.supported_languages(true, false).include?(:debug) + end + + def test_supported_languages_with_arguments_should_exclude_aliases_and_include_internals + assert !CodeRay.supported_languages(false, true).include?(:javascript) + assert CodeRay.supported_languages(false, true).include?(:debug) + end + + def test_supported_languages_with_arguments_should_include_aliases_and_internals + assert CodeRay.supported_languages(true, true).include?(:javascript) + assert CodeRay.supported_languages(true, true).include?(:debug) + end + + def test_supported_languages_with_arguments_should_exclude_aliases_and_internals + assert !CodeRay.supported_languages(false, false).include?(:javascript) + assert !CodeRay.supported_languages(false, false).include?(:debug) + end + def test_token_kinds assert_kind_of Hash, CodeRay::TokenKinds for kind, css_class in CodeRay::TokenKinds