Class: ReHighlightScanner

Inherits:
HighlightScanner show all
Defined in:
ext/ae-editor/ae-editor.rb

Instance Method Summary collapse

Methods inherited from HighlightScanner

#classes

Constructor Details

#initialize(_langs_conf) ⇒ ReHighlightScanner

Returns a new instance of ReHighlightScanner.



3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
# File 'ext/ae-editor/ae-editor.rb', line 3726

def initialize(_langs_conf)
  super(_langs_conf)
  @h_re = Hash.new
  @op_to_end_line = Array.new
  @op_to_end_line.concat(@langs_conf['re_op.to_line_end'].split(',')) if @langs_conf['re_op.to_line_end']

  @op_only_first = Array.new
  @op_only_first.concat(@langs_conf['re_op.only_first'].split(',')) if @langs_conf['re_op.only_first']
  
  self.classes.each{|c|
    @h_re[c]=Regexp::new(@langs_conf["re.#{c}"].strip) if @langs_conf["re.#{c}"]
  }
end

Instance Method Details

#find_tag(_tag, _row, _line_txt) ⇒ Object



3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
# File 'ext/ae-editor/ae-editor.rb', line 3741

def find_tag(_tag, _row, _line_txt)
  _txt = _line_txt
  to_ret = []
  _re = @h_re[_tag]
  m = _re.match(_txt)
  _end = 0
#    index = _line_txt.index("oldaccel1")
#    stampa = index && index >0
#    stampa=true
#    p "_line_txt=#{_line_txt}" if stampa
#    p "_tag=#{_tag}" if stampa
  while m && (_txt=m.post_match)
    if !defined?(_old_txt) || _txt != _old_txt
      b1 = _line_txt[m.begin(0)+_end-1..m.begin(0)+_end-1]
      b2 = _line_txt[m.begin(0)+_end..m.begin(0)+_end]
      e1 = _line_txt[m.end(0)+_end..m.end(0)+_end]        
      e2 = _line_txt[m.end(0)-1+_end..m.end(0)+_end-1]
      achar = ["\s","\t","\n",nil,')',']','}','',':','=',">","<"]
      
      ok = (achar.include?(b1)||achar.include?(b2)) && (achar.include?(e1)||achar.include?(e2))
      ok = ok || _line_txt[m.begin(0)+_end..m.end(0)+_end-1].strip.length==1
      
      

#        p "" if stampa
#        p "_line_txt[m.begin(0)+_end..m.begin(0)+_end]=#{_line_txt[m.begin(0)+_end..m.begin(0)+_end]}"   if stampa
#        p "_line_txt[m.end(0)+_end..m.end(0)+_end]=#{_line_txt[m.end(0)+_end..m.end(0)+_end]}"   if stampa
#        p "_line_txt[m.begin(0)+_end..m.end(0)+_end]=#{_line_txt[m.begin(0)+_end..m.end(0)+_end]}"   if stampa
#        p "ok=#{ok}"  if stampa
      
      if ok
        _old_txt = _txt
        _ibegin = _row.to_s+'.'+(m.begin(0)+_end).to_s
        _end = m.end(0) + _end  
        _iend = _row.to_s+'.'+(_end.to_s)
        to_ret << [_ibegin, _iend]
      end
      if @op_only_first.include?(_tag) && ok
        m = nil
      else
        m = _re.match(_txt)
      end
    else
      m = nil
    end
  end
  to_ret
end

#highlight_tags(_row_begin, _code, _classes = self.classes) ⇒ Object



3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
# File 'ext/ae-editor/ae-editor.rb', line 3790

def highlight_tags(_row_begin,_code,_classes=self.classes)
  super(_row_begin,_code)
  tags_map = Hash.new 
  lines = _code.split("\n")
  lines.each_with_index{|_line,_i|
    _line+="\n"
    _row = _row_begin+_i
    #p "_row=#{_row}-_line=#{_line}"
    _txt = _line
    _end = 0
    @op_to_end_line.each{|c|
      if _classes.include?(c) && @h_re[c]
        m_c = @h_re[c].match(_txt)
        if m_c then
          _ibegin = _row.to_s+'.'+(m_c.begin(0)).to_s
          _iend = _row.to_s+'.'+(_line.length - 1).to_s
          tags_map[c] = [] if tags_map[c].nil?
          tags_map[c] << [_ibegin, _iend]
          _txt = m_c.pre_match
        end
      end
    } if @langs_conf['re_op.to_line_end']

    _classes.each{|c|
      if !@op_to_end_line.include?(c) && @h_re[c]
        _tags = find_tag(c, _row, _txt)
        if _tags.length >0
          tags_map[c] = [] if tags_map[c].nil?
          tags_map[c].concat(_tags)
        end
      end
    } if _txt.strip.length > 0  
  }
  tags_map
end