Changeset 2670

Show
Ignore:
Timestamp:
11/11/08 22:40:13 (2 months ago)
Author:
maxr
Message:

ada: calcuate token length in characters instead of code units.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/tendra/src/producers/ada/asis/asis-gela-scanners.adb

    r2669 r2670  
    3333      Position      : Source_Buffers.Cursor := Object.To; 
    3434      Accepted      : Scanner_Tables.Token; 
     35      Sur_Count     : Natural := 0; 
    3536   begin 
    3637      Object.From := Position; 
     
    5152            Accepted := Scanner_Tables.Accepted (Current_State); 
    5253 
     54            Sur_Count := Sur_Count + Boolean'Pos (Class = Surrogate); 
     55 
    5356            if Accepted /= Scanner_Tables.Error then 
    5457               Result := Accepted; 
    5558               Character_Class_Buffers.Mark (Object.Classes); 
    5659               Object.To := Position; 
     60               Object.Surrogates := Sur_Count; 
    5761            end if; 
    5862         end if; 
     
    6367      Token := Result; 
    6468   end Next_Token; 
     69 
     70   ------------------ 
     71   -- Token_Length -- 
     72   ------------------ 
     73 
     74   function Token_Length (Object : Scanner) return Positive is 
     75      use type Source_Buffers.Cursor; 
     76   begin 
     77      return Object.To - Object.From - Object.Surrogates; 
     78   end Token_Length; 
    6579 
    6680   ---------------- 
  • trunk/tendra/src/producers/ada/asis/asis-gela-scanners.ads

    r2669 r2670  
    3333   pragma Inline (Token_Span); 
    3434 
     35   function Token_Length (Object : Scanner) return Positive; 
     36   pragma Inline (Token_Length); 
     37 
    3538   procedure Initialize 
    3639     (Object :    out Scanner; 
     
    4750     (Classificator : access Classificators.Classificator'Class) is 
    4851      record 
    49          Classes   : Character_Class_Buffers.Character_Class_Buffer; 
    50          Start     : Scanner_Tables.State := Scanner_Tables.Default; 
    51          Input     : Source_Buffers.Cursor; 
    52          From      : Source_Buffers.Cursor; 
    53          To        : Source_Buffers.Cursor; 
     52         Classes    : Character_Class_Buffers.Character_Class_Buffer; 
     53         Start      : Scanner_Tables.State := Scanner_Tables.Default; 
     54         Input      : Source_Buffers.Cursor; 
     55         From       : Source_Buffers.Cursor; 
     56         To         : Source_Buffers.Cursor; 
     57         Surrogates : Natural := 0; 
    5458      end record; 
    5559 
  • trunk/tendra/src/producers/ada/xml/ayacc/asis-gela-parser.adt

    r2669 r2670  
    113113--text_io.put_Line (Token'Img & To_String (Get_Token_Value)); 
    114114         Scanners.Token_Span (Scanner, From, To); 
    115          Get_Current_Column := Get_Current_Column + (To - From); 
     115         Get_Current_Column := 
     116           Get_Current_Column + Scanners.Token_Length (Scanner); 
    116117 
    117118         while Token = New_Line_Token or 
     
    141142--text_io.put_Line (Token'Img & To_String (Get_Token_Value)); 
    142143            Scanners.Token_Span (Scanner, From, To); 
    143             Get_Current_Column := Get_Current_Column + (To - From); 
     144            Get_Current_Column := 
     145              Get_Current_Column + Scanners.Token_Length (Scanner); 
    144146         end loop; 
    145147