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.



3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
# File 'ext/ae-editor/ae-editor.rb', line 3625

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



3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
# File 'ext/ae-editor/ae-editor.rb', line 3640

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



3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
# File 'ext/ae-editor/ae-editor.rb', line 3689

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