Class: Glaemscribe::API::Mode

Inherits:
Object
  • Object
show all
Defined in:
lib/api/mode.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ Mode

Returns a new instance of Mode.



46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/api/mode.rb', line 46

def initialize(name)
  @name               = name
  @errors             = []
  @warnings           = []
  @supported_charsets = {}
  @options            = {}
  @last_raw_options   = nil
 
  @pre_processor    = TranscriptionPreProcessor.new(self)
  @processor        = TranscriptionProcessor.new(self)
  @post_processor   = TranscriptionPostProcessor.new(self)
end

Instance Attribute Details

#authorsObject

Returns the value of attribute authors.



32
33
34
# File 'lib/api/mode.rb', line 32

def authors
  @authors
end

#default_charsetObject

Returns the value of attribute default_charset.



38
39
40
# File 'lib/api/mode.rb', line 38

def default_charset
  @default_charset
end

#errorsObject

Returns the value of attribute errors.



27
28
29
# File 'lib/api/mode.rb', line 27

def errors
  @errors
end

#human_nameObject

Returns the value of attribute human_name.



32
33
34
# File 'lib/api/mode.rb', line 32

def human_name
  @human_name
end

#inventionObject

Returns the value of attribute invention.



42
43
44
# File 'lib/api/mode.rb', line 42

def invention
  @invention
end

#languageObject

Returns the value of attribute language.



32
33
34
# File 'lib/api/mode.rb', line 32

def language
  @language
end

#latest_option_valuesObject (readonly)

Returns the value of attribute latest_option_values.



44
45
46
# File 'lib/api/mode.rb', line 44

def latest_option_values
  @latest_option_values
end

#nameObject

Returns the value of attribute name.



30
31
32
# File 'lib/api/mode.rb', line 30

def name
  @name
end

#optionsObject

Returns the value of attribute options.



35
36
37
# File 'lib/api/mode.rb', line 35

def options
  @options
end

#post_processorObject

Returns the value of attribute post_processor.



33
34
35
# File 'lib/api/mode.rb', line 33

def post_processor
  @post_processor
end

#pre_processorObject

Returns the value of attribute pre_processor.



33
34
35
# File 'lib/api/mode.rb', line 33

def pre_processor
  @pre_processor
end

#processorObject

Returns the value of attribute processor.



33
34
35
# File 'lib/api/mode.rb', line 33

def processor
  @processor
end

#raw_mode_nameObject

Read from glaeml



40
41
42
# File 'lib/api/mode.rb', line 40

def raw_mode_name
  @raw_mode_name
end

#supported_charsetsObject

Returns the value of attribute supported_charsets.



37
38
39
# File 'lib/api/mode.rb', line 37

def supported_charsets
  @supported_charsets
end

#versionObject

Returns the value of attribute version.



32
33
34
# File 'lib/api/mode.rb', line 32

def version
  @version
end

#warningsObject

Returns the value of attribute warnings.



28
29
30
# File 'lib/api/mode.rb', line 28

def warnings
  @warnings
end

#worldObject

Returns the value of attribute world.



42
43
44
# File 'lib/api/mode.rb', line 42

def world
  @world
end

#writingObject

Returns the value of attribute writing.



32
33
34
# File 'lib/api/mode.rb', line 32

def writing
  @writing
end

Instance Method Details

#finalize(options = {}) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/api/mode.rb', line 67

def finalize(options={})
        
  if options == @last_raw_options
    # Small optimization : don't refinalize if options are the same as before
    return
  end      
        
  @last_raw_options = options      
        
  # Hash: option_name => value_name
  trans_options = {}
  
  # Build default options
  @options.each { |oname, o|
    trans_options[oname] = o.default_value_name
  }   

  # Push user options
  options.each { |oname, valname|
    # Check if option exists
    opt = @options[oname]
    next if(!opt)
      
    val = opt.value_for_value_name(valname)
    next if val == nil
      
    trans_options[oname] = valname
  }
    
  trans_options_converted = {}

  # Do a conversion to values space
  trans_options.each{ |oname,valname| 
    trans_options_converted[oname] = @options[oname].value_for_value_name(valname)
  }

  # Add the option defined constants to the whole list for evaluation purposes
  @options.each { |oname, o|
    # For enums, add the values as constants for the evaluator
    if(o.type == Option::Type::ENUM)
      o.values.each{ |name, val|
        trans_options_converted[name] = val
      }
    end
  }   
  
  @latest_option_values = trans_options_converted
     
  @pre_processor.finalize(@latest_option_values)
  @post_processor.finalize(@latest_option_values)
  @processor.finalize(@latest_option_values)
    
  raw_mode.finalize options if raw_mode
    
  self
end

#inspectObject



63
64
65
# File 'lib/api/mode.rb', line 63

def inspect
  to_s
end

#raw_modeObject



124
125
126
127
128
129
# File 'lib/api/mode.rb', line 124

def raw_mode
  return @raw_mode if @raw_mode
  loaded_raw_mode = (@raw_mode_name && Glaemscribe::API::ResourceManager.loaded_modes[@raw_mode_name])    
  return nil if !loaded_raw_mode
  @raw_mode = loaded_raw_mode.deep_clone
end

#replace_specials(l) ⇒ Object



131
132
133
134
135
# File 'lib/api/mode.rb', line 131

def replace_specials(l)
  l.
    gsub("_",SPECIAL_CHAR_UNDERSCORE).
    gsub("\u00a0",SPECIAL_CHAR_NBSP)
end

#strict_transcribe(content, charset = nil) ⇒ Object



137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
# File 'lib/api/mode.rb', line 137

def strict_transcribe(content, charset = nil)
  charset = default_charset if !charset
  return false, "*** No charset usable for transcription. Failed!" if !charset
  
  # Parser works line by line
  ret = content.lines.map{ |l| 
    restore_lf = false
    if l[-1] == "\n"
      l[-1] = "" 
      restore_lf = true
    end
    l = @pre_processor.apply(l)
    l = replace_specials(l)
    l = @processor.apply(l)
    l = @post_processor.apply(l, charset)
    l += "\n" if restore_lf
    l
  }.join
  return true, ret
end

#to_sObject



59
60
61
# File 'lib/api/mode.rb', line 59

def to_s
  " <Mode #{name}: Language '#{language}', Writing '#{writing}', Human Name '#{human_name}', Authors '#{authors}', Version '#{version}'> "
end

#transcribe(content, charset = nil) ⇒ Object



158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
# File 'lib/api/mode.rb', line 158

def transcribe(content, charset = nil)
  if raw_mode
    chunks = content.split(/({{.*?}})/m)
    ret = ''
    res = true
    chunks.each{ |c|
      if c =~ /{{(.*?)}}/m
        succ, r = raw_mode.strict_transcribe($1,charset)
        res = res && succ
        ret += r if succ
      else
        succ, r = strict_transcribe(c,charset)
        res = res && succ
        ret += r if succ
      end
    }
    return res,ret
  else
    strict_transcribe(content,charset)
  end
end