code_filtered 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,10 @@
1
+ === 0.1.1 / 2008-03-05
2
+
3
+ * 1 minor enhancement
4
+ * now requires redcloth, bluecloth and coderay
5
+
6
+ === 0.1.0 / 2008-03-05
7
+
8
+ * 1 major enhancement
9
+ * Birthday!
10
+
@@ -0,0 +1,7 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/code_filtered
6
+ lib/code_filtered.rb
7
+ test/test_code_filtered.rb
@@ -0,0 +1,64 @@
1
+ = CodeFiltered
2
+
3
+ http://rubyforge.org/projects/sintaxi/
4
+
5
+ == DESCRIPTION:
6
+
7
+ Filters from your choice of Markdown, Textile or Plain HTML into
8
+ HTML and gives appropriate markup for syntax highlighting on code.
9
+
10
+ == FEATURES/PROBLEMS:
11
+
12
+ * Formats Textile or Markdown
13
+ * Applies markup to code for syntax highlighting.
14
+ * requires a filter(string) column
15
+
16
+ == SYNOPSIS:
17
+
18
+ In any model specify what columns to filter and how it should
19
+ be filtered using a 'filter' column with a value of Markdown,
20
+ Textile or Plain HTML.
21
+
22
+ code_filtered :body, :excerpt
23
+
24
+ In this case the filtered(html) data will be saved to body_html
25
+ and excerpt_html (be sure those columns exist in your database.
26
+
27
+ All instances of <code></code> will have markup for syntax
28
+ highlighting. Specify your markup language eg. <code:ruby></code>
29
+ or <code:javascript></code>
30
+
31
+ == REQUIREMENTS:
32
+
33
+ * RedCloth
34
+ * BlueCloth
35
+ * CodeRay
36
+
37
+ == INSTALL:
38
+
39
+ * sudo gem install code_filtered
40
+
41
+ == LICENSE:
42
+
43
+ (The MIT License)
44
+
45
+ Copyright (c) Brock Whitten 2008
46
+
47
+ Permission is hereby granted, free of charge, to any person obtaining
48
+ a copy of this software and associated documentation files (the
49
+ 'Software'), to deal in the Software without restriction, including
50
+ without limitation the rights to use, copy, modify, merge, publish,
51
+ distribute, sublicense, and/or sell copies of the Software, and to
52
+ permit persons to whom the Software is furnished to do so, subject to
53
+ the following conditions:
54
+
55
+ The above copyright notice and this permission notice shall be
56
+ included in all copies or substantial portions of the Software.
57
+
58
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
59
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
60
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
61
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
62
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
63
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
64
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,17 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'rubygems'
4
+ require 'hoe'
5
+ require './lib/code_filtered.rb'
6
+
7
+ Hoe.new('code_filtered', CodeFiltered::VERSION) do |p|
8
+ p.rubyforge_name = 'sintaxi'
9
+ p.author = 'Brock Whitten'
10
+ p.email = 'brock@sintaxi.com'
11
+ p.summary = 'filter Markdown or Textile to html with code syntax highlighting'
12
+ p.description = p.paragraphs_of('README.txt', 2..5).join("\n\n")
13
+ p.url = p.paragraphs_of('README.txt', 0).first.split(/\n/)[1..-1]
14
+ p.changes = p.paragraphs_of('History.txt', 0..1).join("\n\n")
15
+ end
16
+
17
+ # vim: syntax=Ruby
File without changes
@@ -0,0 +1,53 @@
1
+ require 'RedCloth'
2
+ require 'BlueCloth'
3
+ require 'coderay'
4
+
5
+ class CodeFiltered
6
+ VERSION = '0.1.1'
7
+ end
8
+
9
+ module Sintaxi
10
+ module CodeFiltered
11
+
12
+ def self.included(base)
13
+ base.extend ActMethods
14
+ end
15
+
16
+ module ActMethods
17
+ def filtered_light(*columns)
18
+ unless included_modules.include? InstanceMethods
19
+ include InstanceMethods
20
+ class_inheritable_accessor :unfiltered
21
+ before_save :filter_columns
22
+ end
23
+ self.unfiltered ||= columns ||= []
24
+ end
25
+ end
26
+
27
+ module InstanceMethods
28
+ def filter_columns
29
+ unfiltered.each do |column|
30
+ send "#{column}_html=", sanitize(send(column).to_s.dup, self.filter)
31
+ end
32
+ end
33
+
34
+ def sanitize(text, filter="Plain HTML")
35
+ textilized = case filter
36
+ when "Markdown" then sanitize_code(BlueCloth.new(text)).to_html
37
+ when "Textile" then sanitize_code(RedCloth.new(text).to_html)
38
+ else sanitize_code(text.dup)
39
+ end
40
+ end
41
+
42
+ def sanitize_code(text)
43
+ text.scan(/(<code\:([a-z].+?)>(.+?)<\/code>)/m).each do |match|
44
+ text.gsub!(match[0],CodeRay.scan(match[2], match[1].to_sym).div(:css => :class))
45
+ end
46
+ text
47
+ end
48
+ end
49
+
50
+ end
51
+ end
52
+
53
+ ActiveRecord::Base.send :include, Sintaxi::CodeFiltered if defined?(ActiveRecord::Base)
File without changes
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: code_filtered
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Brock Whitten
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2008-03-05 00:00:00 -08:00
13
+ default_executable:
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: hoe
17
+ version_requirement:
18
+ version_requirements: !ruby/object:Gem::Requirement
19
+ requirements:
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.0
23
+ version:
24
+ description: "== DESCRIPTION: Filters from your choice of Markdown, Textile or Plain HTML into HTML and gives appropriate markup for syntax highlighting on code. == FEATURES/PROBLEMS: * Formats Textile or Markdown * Applies markup to code for syntax highlighting. * requires a filter(string) column"
25
+ email: brock@sintaxi.com
26
+ executables:
27
+ - code_filtered
28
+ extensions: []
29
+
30
+ extra_rdoc_files:
31
+ - History.txt
32
+ - Manifest.txt
33
+ - README.txt
34
+ files:
35
+ - History.txt
36
+ - Manifest.txt
37
+ - README.txt
38
+ - Rakefile
39
+ - bin/code_filtered
40
+ - lib/code_filtered.rb
41
+ - test/test_code_filtered.rb
42
+ has_rdoc: true
43
+ homepage:
44
+ post_install_message:
45
+ rdoc_options:
46
+ - --main
47
+ - README.txt
48
+ require_paths:
49
+ - lib
50
+ required_ruby_version: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: "0"
55
+ version:
56
+ required_rubygems_version: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
59
+ - !ruby/object:Gem::Version
60
+ version: "0"
61
+ version:
62
+ requirements: []
63
+
64
+ rubyforge_project: sintaxi
65
+ rubygems_version: 1.0.1
66
+ signing_key:
67
+ specification_version: 2
68
+ summary: filter Markdown or Textile to html with code syntax highlighting
69
+ test_files:
70
+ - test/test_code_filtered.rb