herbgobbler 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -5,7 +5,15 @@ module MethodCallNode
5
5
  text_string = ''
6
6
  self.elements.each do |node|
7
7
  if( node.is_a?( TextNode ) )
8
- translated_node = text_extractor.translate_text( node.text_value )
8
+
9
+ # If this method call is part of a string, then translate it
10
+ # as a method call otherwise just translate it is regular text
11
+ if( surrounding_nodes.nil? || !surrounded_by_text?( surrounding_nodes ) )
12
+ translated_node = text_extractor.translate_text( node.text_value )
13
+ else
14
+ translated_node = text_extractor.translate_method_call_text( node.text_value )
15
+ end
16
+
9
17
  text_string << "(#{translated_node.text_value})"
10
18
  else
11
19
  text_string << node.text_value
@@ -63,7 +63,12 @@ class RailsTextExtractor < BaseTextExtractor
63
63
  @translation_store.add_translation( call_node.key_value, call_node.original_text )
64
64
  call_node
65
65
  end
66
+
67
+ def translate_method_call_text( method_to_translate )
68
+ translate_text( method_to_translate )
69
+ end
66
70
 
71
+
67
72
  # This takes in a text node and returns one or more nodes that will
68
73
  # then be output. The nodes that are output should implement
69
74
  # node_name and text_value
@@ -22,6 +22,10 @@ class TextExtractor
22
22
  def translate_text( text_node_to_translate )
23
23
  raise "Please impelement me (translate_text)"
24
24
  end
25
+
26
+ def translate_method_call_text( method_to_translate )
27
+ raise "Please implement me (method_to_translate)"
28
+ end
25
29
 
26
30
  def end_html_text
27
31
  raise "Please implement me (end_html_text)"
@@ -6,6 +6,7 @@ class Tr8nTextExtractor < BaseTextExtractor
6
6
  @key_store = []
7
7
  @debug = false
8
8
  @html_tag_count = 0
9
+ @lambda_call = nil
9
10
  end
10
11
 
11
12
  # This is called when text extraction has begun
@@ -19,9 +20,19 @@ class Tr8nTextExtractor < BaseTextExtractor
19
20
 
20
21
  def add_variable( variable_name, variable_value )
21
22
  puts "Adding variable: #{variable_name} = #{variable_value}" if @debug
22
- @current_node.add_variable( variable_name, variable_value )
23
+ if( @lambda_call.nil? )
24
+ @current_node.add_variable( variable_name, variable_value )
25
+ else
26
+ @current_node.add_lambda( variable_name, variable_value, @lambda_call )
27
+ @lambda_call = nil
28
+ end
23
29
  end
24
30
 
31
+ def translate_method_call_text( method_to_translate )
32
+ @lambda_call = HerbTr8nLambdaCallNode.new( method_to_translate )
33
+ @lambda_call
34
+ end
35
+
25
36
  def translate_text( text_node_to_translate )
26
37
  puts "Translating text: #{text_node_to_translate}" if @debug
27
38
  # This should just return a node that responds to text_value
@@ -9,6 +9,10 @@ class HerbErbTr8nTextCallNode < HerbTr8nTextCallNode
9
9
  mark_as_called_and_push_whitespace
10
10
  super( name, value )
11
11
  end
12
+ def add_lambda( variable_name, variable_value, lambda_call_node )
13
+ mark_as_called_and_push_whitespace
14
+ super( variable_name, variable_value, lambda_call_node )
15
+ end
12
16
 
13
17
  def add_pluralization( variable_name, singular, variable )
14
18
  mark_as_called_and_push_whitespace
@@ -16,7 +16,7 @@ class HerbNodeRetainingTextNode < HerbNodeRetainingNode
16
16
  else
17
17
  false
18
18
  end
19
- elsif( find_last_non_whitespace_node.node_name == "html_start_tag" || find_first_non_whitespace_node.node_name == "html_end_tag" )
19
+ elsif( find_last_non_whitespace_node.node_name == "html_start_tag" || find_first_non_whitespace_node.node_name == "html_end_tag" || find_first_non_whitespace_node.node_name == "erb_block_end" )
20
20
  true
21
21
  else
22
22
  false
@@ -45,7 +45,7 @@ class HerbNodeRetainingTextNode < HerbNodeRetainingNode
45
45
  start_tag = HerbNodeRetainingTextNode.new
46
46
  start_tag.add_all( nodes[0..nodes.length - (end_tag.nodes.length + 1 ) ] )
47
47
  [start_tag, end_tag]
48
- elsif(find_first_non_whitespace_node.node_name == "html_end_tag" )
48
+ elsif(find_first_non_whitespace_node.node_name == "html_end_tag" || find_first_non_whitespace_node.node_name == "erb_block_end")
49
49
  start_tag = extract_leading_tag
50
50
  end_tag = HerbNodeRetainingTextNode.new
51
51
  end_tag.add_all( nodes[start_tag.nodes.length..nodes.length ] )
@@ -0,0 +1,17 @@
1
+ class HerbTr8nLambdaCallNode
2
+
3
+ attr_reader :original_text
4
+
5
+ def initialize( original_text )
6
+ @original_text = original_text
7
+ end
8
+
9
+ def generate_lambda( value )
10
+ "lambda {|text| #{value}}"
11
+ end
12
+
13
+ def text_value
14
+ '"#{text}"'
15
+ end
16
+
17
+ end
@@ -5,7 +5,7 @@ class HerbTr8nStringNode
5
5
 
6
6
  ESCAPE_LOOKUP_TABLE = [
7
7
  ["\"", "quot"],
8
- ["\n", "break"],
8
+ ["\n", "br"],
9
9
  ["&ndash;", "ndash"],
10
10
  ["&mdash;", "mdash"],
11
11
  ["&iexcl;", "iexcl"],
@@ -19,6 +19,12 @@ class HerbTr8nTextCallNode
19
19
  @child_nodes << child_node
20
20
  @text_values << child_node
21
21
  end
22
+
23
+ def add_lambda( variable_name, variable_value, lambda_call_node )
24
+ @variable_names_and_values << [variable_name, lambda_call_node.generate_lambda( variable_value )]
25
+ @text_values << generate_block_variable( variable_name, lambda_call_node.original_text )
26
+
27
+ end
22
28
 
23
29
  def add_variable( name, value )
24
30
  @variable_names_and_values << [name, value]
@@ -40,12 +46,16 @@ class HerbTr8nTextCallNode
40
46
  end
41
47
 
42
48
  def block_variable
43
- to_return = "[#{variable_name_being_assigned_to}: "
44
- to_return += text_values_as_concated_string
45
- to_return += "]"
46
- to_return
49
+ generate_block_variable( variable_name_being_assigned_to, text_values_as_concated_string )
47
50
  end
48
51
 
52
+ def generate_block_variable( variable, text )
53
+ to_return = "[#{variable}: "
54
+ to_return += text
55
+ to_return += "]"
56
+ to_return
57
+ end
58
+
49
59
  def empty?
50
60
  @text_values.empty? && @variable_names_and_values.empty?
51
61
  end
@@ -93,7 +103,7 @@ class HerbTr8nTextCallNode
93
103
 
94
104
  def variable_string( html_end_tag, count )
95
105
  to_return = "\""
96
- to_return += @html_start_tag.text_value
106
+ to_return += escape_double_quotes( @html_start_tag.text_value )
97
107
  to_return += "{$#{count}}"
98
108
  to_return += html_end_tag.text_value
99
109
  to_return += "\""
@@ -142,5 +152,10 @@ class HerbTr8nTextCallNode
142
152
  @text_values << ( HerbTr8nStringNode.new( white_space_text ) ).to_s
143
153
  end
144
154
 
155
+ private
156
+ def escape_double_quotes( text )
157
+ text.gsub( "\"", "\\\"" )
158
+ end
159
+
145
160
  end
146
161
 
data/lib/nodes/nodes.rb CHANGED
@@ -15,3 +15,4 @@ require 'nodes/herb_tr8n_text_call_node'
15
15
  require 'nodes/herb_erb_tr8n_text_call_node'
16
16
  require 'nodes/herb_tr8n_string_node'
17
17
  require 'nodes/rails_text_variable_node'
18
+ require 'nodes/herb_tr8n_lambda_call_node'
@@ -1,3 +1,4 @@
1
+ #!/usr/bin/env ruby
1
2
  require 'backports'
2
3
  require_relative '../lib/herbgobbler'
3
4
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: herbgobbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-17 00:00:00.000000000 Z
12
+ date: 2012-04-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -102,6 +102,7 @@ files:
102
102
  - lib/nodes/herb_non_text_node.rb
103
103
  - lib/nodes/herb_string_variable.rb
104
104
  - lib/nodes/herb_text_node.rb
105
+ - lib/nodes/herb_tr8n_lambda_call_node.rb
105
106
  - lib/nodes/herb_tr8n_string_node.rb
106
107
  - lib/nodes/herb_tr8n_text_call_node.rb
107
108
  - lib/nodes/herb_white_space_text_node.rb