tm_syntax_highlighting 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2008 [name of plugin creator]
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,68 @@
1
+ TmSyntaxHighlighting
2
+ ====================
3
+ ** NOTE: You must install ultraviolet *before* installing this plugin. Follow the instructions below.
4
+
5
+ This plugin allows you to add TextMate themed syntax highlighting to your views.
6
+
7
+ It requires the Ultraviolet gem, which requires TextPow, which requires oniguruma (both the gem and the system library).
8
+
9
+ Oniguruma is a regular expression library used by TextPow in order to properly parse TextMate syntax/language files.
10
+ It's relatively easy to install, here is the URL for the library:
11
+ http://www.geocities.jp/kosako3/oniguruma/
12
+
13
+ Then you need to do
14
+ $ gem install ultraviolet
15
+ which should install ultraviolet, textpow, and oniguruma.
16
+
17
+ Lastly, in order for this plugin to properly copy the syntax CSS files from ultraviolet, ultraviolet must already be installed. In other words, you need to install ultraviolet before installing this plugin.
18
+
19
+ The plugin comes with a generator for the stylesheets for the different themes.
20
+
21
+ # to see a list of themes
22
+ $ script/generate syntax_css list
23
+
24
+ # to copy all the themes to public/stylesheets/syntax
25
+ $ script/generate syntax_css all
26
+
27
+ # to copy a single theme to public/stylesheets/syntax
28
+ $ script/generate syntax_css theme_name
29
+
30
+ Example
31
+ =======
32
+
33
+ The plugin adds 2 view helper methods: code and syntax_css
34
+
35
+ code (helper method) usage
36
+ ==========================
37
+
38
+ code(some_ruby_code, :theme => "twilight", :lang => "ruby", :line_numbers => true)
39
+
40
+ lang and line_numbers are optional. lang will default to plain_text and line_numbers will default to true.
41
+ It is *HIGHLY* recommended that you fragment_cache or some other type of caching for code fragments (TextPow and/or Ultraviolet have some speed issues).
42
+
43
+ theme can be an array, and one will be chosen at random.
44
+
45
+ you can set defaults in an initializer:
46
+
47
+ # config/initializers/tm_syntax_config.rb
48
+ TmSyntaxHighlighting.defaults = {:theme => "sunburst", :line_numbers => true, :lang => "ruby"}
49
+
50
+ again, theme can be an array and will be chosen at random.
51
+
52
+
53
+ syntax_css (helper_method) usage
54
+ ================================
55
+ lastly, the syntax_css method will include the stylesheet tags for the themes
56
+
57
+ you can call it with a theme name
58
+
59
+ syntax_css("twilight")
60
+
61
+ or if you call it with no options, it will include all the css files for the themes used in this request
62
+
63
+ code(some_ruby_code, :theme => "twilight")
64
+ code(some_more_ruby_code, :theme => "sunburst")
65
+ ...
66
+ syntax_css # yields stylesheet tags for both twilight and sunburst
67
+
68
+
data/Rakefile ADDED
@@ -0,0 +1,45 @@
1
+ require 'rake'
2
+ require 'rake/testtask'
3
+ require 'rake/rdoctask'
4
+ require 'uv'
5
+
6
+ begin
7
+ require 'jeweler'
8
+ Jeweler::Tasks.new do |s|
9
+ s.name = "tm_syntax_highlighting"
10
+ #s.executables = "tm_syntax_highlighting"
11
+ s.summary = "a gem to get syntaxhilight via ultraviolet"
12
+ s.description = "a gem to get syntaxhilight via ultraviolet"
13
+ s.email = "seivan@kth.se"
14
+ s.homepage = "http://github.com/seivan"
15
+ #s.rubyforge_project = 'pickles'
16
+ s.authors = ["Seivan Heidari"]
17
+ #s.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore']
18
+ s.add_development_dependency ["ultraviolet"]
19
+ Jeweler::GemcutterTasks.new
20
+ end
21
+ Jeweler::RubyforgeTasks.new do |rubyforge|
22
+ #rubyforge.doc_task = "yardoc"
23
+ end
24
+ rescue LoadError
25
+ puts "Jeweler not available. Install it with: gem install jeweler"
26
+ end
27
+
28
+ desc 'Default: run unit tests.'
29
+ task :default => :test
30
+
31
+ desc 'Test the tm_syntax_highlighting plugin.'
32
+ Rake::TestTask.new(:test) do |t|
33
+ t.libs << 'lib'
34
+ t.pattern = 'test/**/*_test.rb'
35
+ t.verbose = true
36
+ end
37
+
38
+ desc 'Generate documentation for the tm_syntax_highlighting plugin.'
39
+ Rake::RDocTask.new(:rdoc) do |rdoc|
40
+ rdoc.rdoc_dir = 'rdoc'
41
+ rdoc.title = 'TmSyntaxHighlighting'
42
+ rdoc.options << '--line-numbers' << '--inline-source'
43
+ rdoc.rdoc_files.include('README')
44
+ rdoc.rdoc_files.include('lib/**/*.rb')
45
+ end
data/VERSION ADDED
@@ -0,0 +1,2 @@
1
+ 0.0.0
2
+ 0.0.1
@@ -0,0 +1,49 @@
1
+ class SyntaxCssGenerator < Rails::Generator::Base
2
+ def manifest
3
+ record do |m|
4
+ # This whole copy CSS files to the tamplates folder isn't very clean
5
+ # generator library doesn't let me specify an absolute path for m.file so this is a compromise
6
+ # FIXME: make this cleaner
7
+ theme = args[0]
8
+
9
+ themes = Uv.themes
10
+
11
+ if theme == "all"
12
+ m.directory("public/stylesheets/syntax")
13
+ copy_theme_from_uv(*themes)
14
+ themes.each do |css|
15
+ m.file("/#{css}.css", "public/stylesheets/syntax/#{css}.css")
16
+ end
17
+ elsif theme == "list"
18
+ puts themes.sort.join("\n")
19
+ else
20
+ css = themes.detect do |s|
21
+ s.downcase.strip == theme.downcase.strip
22
+ end
23
+
24
+ if css
25
+ m.directory("public/stylesheets/syntax")
26
+ m.file("#{css}.css", "public/stylesheets/syntax/#{css}.css")
27
+ else
28
+ usage_message
29
+ puts "Could not find theme named #{theme}."
30
+ end
31
+ end
32
+ end
33
+ end
34
+
35
+ protected
36
+ def banner
37
+ puts "Copies Syntax CSS files to public/stylesheets/syntax/\n\n"
38
+ end
39
+
40
+ def usage_message
41
+ puts "Usage: #{$0} syntax_css [all | list | theme_name]"
42
+ end
43
+
44
+ def copy_theme_from_uv(*args)
45
+ args.each do |theme|
46
+ FileUtils.cp(File.join(Uv.path, "render", "xhtml", "files", "css", "#{theme}.css"), source_path("/"))
47
+ end
48
+ end
49
+ end
File without changes
data/init.rb ADDED
@@ -0,0 +1,9 @@
1
+ require 'rubygems'
2
+ require 'uv'
3
+
4
+ # takes about a second to this, if we don't do it now, then the first call to highlight will take a little longer
5
+ Uv.init_syntaxes
6
+
7
+ ActionView::Base.send(:include, TmSyntaxHighlighting::Helper)
8
+ ActionController::Base.send(:extend, TmSyntaxHighlighting::Controller)
9
+
data/install.rb ADDED
@@ -0,0 +1 @@
1
+ puts IO.read(File.join(File.dirname(__FILE__), 'README'))
@@ -0,0 +1,81 @@
1
+ module TmSyntaxHighlighting
2
+ module Helper
3
+ def code(code, options = {})
4
+ options = TmSyntaxHighlighting.defaults.merge_with(options)
5
+ TmSyntaxHighlighting.defaults[:current_themes] << options[:theme]
6
+ options[:lang] = "plain_text" unless Uv.syntaxes.include?(options[:lang])
7
+ Uv.parse(code, "xhtml", options[:lang], options[:line_numbers], options[:theme])
8
+ end
9
+
10
+ def syntax_css(theme = nil)
11
+ themes = [theme || TmSyntaxHighlighting.defaults.options[:theme]].flatten
12
+ themes = (themes & TmSyntaxHighlighting.defaults[:current_themes]) if theme.nil? && TmSyntaxHighlighting.defaults[:current_themes]
13
+ themes.uniq.collect do |theme|
14
+ stylesheet_link_tag "syntax/#{theme}"
15
+ end.join("\n")
16
+ end
17
+ end
18
+
19
+ module Controller
20
+ def self.extended(base)
21
+ base.after_filter :reset_syntax_css_includes
22
+ base.send(:include, InstanceMethods)
23
+ TmSyntaxHighlighting.defaults.reset_current_themes
24
+ end
25
+
26
+ module ClassMethods
27
+ end
28
+
29
+ module InstanceMethods
30
+ def reset_syntax_css_includes
31
+ TmSyntaxHighlighting.defaults.reset_current_themes
32
+ end
33
+ end
34
+ end
35
+
36
+ def self.defaults
37
+ Config
38
+ end
39
+
40
+ def self.defaults=(options_hash)
41
+ options_hash.each do |key, value|
42
+ self.defaults.send("#{key}=", value)
43
+ end
44
+ end
45
+
46
+ class Config
47
+ @@attributes = [:theme, :lang, :line_numbers, :current_themes]
48
+ cattr_accessor @@attributes
49
+
50
+ self.line_numbers = true
51
+ class << self
52
+ def [](key)
53
+ self.send(key)
54
+ end
55
+
56
+ def []=(key, value)
57
+ self.send("#{key}=", value)
58
+ end
59
+
60
+ def options
61
+ opts = {}
62
+ @@attributes.each do |attribute|
63
+ opts[attribute] = self.send(attribute)
64
+ end
65
+ opts
66
+ end
67
+
68
+ def merge_with(opts)
69
+ opts = self.options.merge(opts)
70
+ if opts[:theme].is_a?(Array)
71
+ opts[:theme] = opts[:theme][rand(opts[:theme].size)]
72
+ end
73
+ opts
74
+ end
75
+
76
+ def reset_current_themes
77
+ self.current_themes = []
78
+ end
79
+ end
80
+ end
81
+ end
@@ -0,0 +1,8 @@
1
+ require 'test/unit'
2
+
3
+ class TmSyntaxHighlightingTest < Test::Unit::TestCase
4
+ # Replace this with your real tests.
5
+ def test_this_plugin
6
+ flunk
7
+ end
8
+ end
data/uninstall.rb ADDED
@@ -0,0 +1 @@
1
+ # Uninstall hook code here
metadata ADDED
@@ -0,0 +1,74 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: tm_syntax_highlighting
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.0
5
+ platform: ruby
6
+ authors:
7
+ - Seivan Heidari
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-26 00:00:00 +01:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: ultraviolet
17
+ type: :development
18
+ version_requirement:
19
+ version_requirements: !ruby/object:Gem::Requirement
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ version:
25
+ description: a gem to get syntaxhilight via ultraviolet
26
+ email: seivan@kth.se
27
+ executables: []
28
+
29
+ extensions: []
30
+
31
+ extra_rdoc_files:
32
+ - README
33
+ files:
34
+ - MIT-LICENSE
35
+ - README
36
+ - Rakefile
37
+ - VERSION
38
+ - generators/syntax_css/syntax_css_generator.rb
39
+ - generators/syntax_css/templates/.gitignore
40
+ - init.rb
41
+ - install.rb
42
+ - lib/tm_syntax_highlighting.rb
43
+ - test/tm_syntax_highlighting_test.rb
44
+ - uninstall.rb
45
+ has_rdoc: true
46
+ homepage: http://github.com/seivan
47
+ licenses: []
48
+
49
+ post_install_message:
50
+ rdoc_options:
51
+ - --charset=UTF-8
52
+ require_paths:
53
+ - lib
54
+ required_ruby_version: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ version:
60
+ required_rubygems_version: !ruby/object:Gem::Requirement
61
+ requirements:
62
+ - - ">="
63
+ - !ruby/object:Gem::Version
64
+ version: "0"
65
+ version:
66
+ requirements: []
67
+
68
+ rubyforge_project:
69
+ rubygems_version: 1.3.5
70
+ signing_key:
71
+ specification_version: 3
72
+ summary: a gem to get syntaxhilight via ultraviolet
73
+ test_files:
74
+ - test/tm_syntax_highlighting_test.rb