class Glaemscribe::API::ResolveVirtualsPostProcessorOperator
Public Instance Methods
apply(tokens,charset)
click to toggle source
# File lib/api/post_processor/resolve_virtuals.rb, line 78 def apply(tokens,charset) # Apply sequence chars tokens = apply_sequences(charset,tokens) # Clone the tokens so that we can perform ligatures AND diacritics without interferences new_tokens = tokens.clone # Handle l to r virtuals (diacritics ?) reset_trigger_states(charset) tokens.each_with_index{ |token,idx| apply_loop(charset,tokens,new_tokens,false,token,idx) } # Handle r to l virtuals (ligatures ?) reset_trigger_states(charset) tokens.reverse_each.with_index{ |token,idx| apply_loop(charset,tokens,new_tokens,true,token,tokens.count - 1 - idx) } new_tokens end
apply_loop(charset, tokens, new_tokens, reversed, token, idx)
click to toggle source
# File lib/api/post_processor/resolve_virtuals.rb, line 40 def apply_loop(charset, tokens, new_tokens, reversed, token, idx) if token == '*SPACE' || token =='*LF' reset_trigger_states(charset) return end # Check if token is a virtual char c = charset[token] return if c.nil? # May happen for empty tokens if c.virtual? && (reversed == c.reversed) # Try to replace last_trigger = @last_triggers[c] if last_trigger != nil new_tokens[idx] = last_trigger.names.first # Take the first name of the non-virtual replacement. token = new_tokens[idx] # Consider the token replaced, being itself a potential trigger for further virtuals (cascading virtuals) end end # Update states of virtual classes charset.virtual_chars.each{|vc| rc = vc[token] @last_triggers[vc] = rc if rc != nil } end
apply_sequences(charset,tokens)
click to toggle source
# File lib/api/post_processor/resolve_virtuals.rb, line 65 def apply_sequences(charset,tokens) ret = [] tokens.each { |token| c = charset[token] if c && c.sequence? ret += c.sequence else ret << token end } ret end
finalize(trans_options)
click to toggle source
Calls superclass method
# File lib/api/post_processor/resolve_virtuals.rb, line 28 def finalize(trans_options) super(trans_options) @last_triggers = {} # Allocate the lookup here to optimize end
reset_trigger_states(charset)
click to toggle source
# File lib/api/post_processor/resolve_virtuals.rb, line 33 def reset_trigger_states(charset) # For each virtual char in charset, maintain a state. charset.virtual_chars.each{ |vc| @last_triggers[vc] = nil # Clear the state } end