mirror of
				https://gitlab.com/freepascal.org/lazarus/lazarus.git
				synced 2025-10-30 18:01:53 +01:00 
			
		
		
		
	improved invert assignment tool for comments from Andrew Haines
git-svn-id: trunk@6639 -
This commit is contained in:
		
							parent
							
								
									03115ff293
								
							
						
					
					
						commit
						9775b31e86
					
				| @ -46,26 +46,54 @@ begin | ||||
|   Result :=Length(Aline) - Length(TrimLeft(ALine)); | ||||
| end; | ||||
| 
 | ||||
| procedure DivideLines(Lines: TStrings; var AList: TStrings; var BList: TStrings); | ||||
| procedure DivideLines(Lines: TStrings; var PreList, AList, BList, PostList: TStrings); | ||||
| var | ||||
| X: Integer; | ||||
| ALine: String; | ||||
| fPos: Integer; | ||||
| EqPos: Integer; | ||||
| SemiPos: Integer; | ||||
| WordBeforeEqPos: Integer; | ||||
| TrueFalse: String; | ||||
|         function FindWordBeforeEquals(ALine: String): Integer; | ||||
|         var | ||||
|         X: Integer; | ||||
|         fPos: Integer; | ||||
|         begin | ||||
|           Result := 0; | ||||
|           fPos := Pos(':=', ALine); | ||||
|           if fPos > 0 then begin | ||||
|             ALine := Trim(Copy(ALine,1,fPos-1)); | ||||
|             for X := Length(ALine) downto 1 do begin | ||||
|               if ALine[X] = ' ' then begin | ||||
|                 Result := X+1; | ||||
|                 Exit; | ||||
|               end; | ||||
|             end; | ||||
|           end; | ||||
|         end; | ||||
| begin | ||||
|   AList.Clear; | ||||
|   BList.Clear; | ||||
|   for X := 0 to Lines.Count-1 do begin | ||||
|     ALine := Trim(Lines.Strings[X]); | ||||
| 
 | ||||
|     fPos := Pos(':=', ALine); | ||||
|     if (fPos > 0) and (Pos(';',ALine) > 0)  then begin | ||||
|       AList.Add(Trim(Copy(ALine, 1, fPos-1))); | ||||
|       BList.Add(Trim(Copy(ALine, fPos+2, (Pos(';', ALine)-3)-(fPos-1)))); | ||||
|     EqPos := Pos(':=', ALine); | ||||
|     SemiPos := Pos(';', ALine); | ||||
|     WordBeforeEqPos := FindWordBeforeEquals(ALine); | ||||
|      | ||||
|     if (EqPos > 0) and (SemiPos > 0) then begin | ||||
|       Alist.Add(Trim(Copy(ALine, WordBeforeEqPos+Ord(WordBeforeEqPos=0), EqPos - (WordBeforeEqPos+Ord(WordBeforeEqPos=0))))); | ||||
|       BList.Add(Trim(Copy(ALine, EqPos + 2, (SemiPos-1) -(EqPos+1)))); | ||||
|       PreList.Add(Trim(Copy(ALine,1, WordBeforeEqPos-1))); | ||||
|       PostList.Add(Trim(Copy(ALine, SemiPos, Length(ALine)-(SemiPos-1)))); | ||||
|       if Length(PreList.Strings[X]) > 0 then | ||||
|         PreList.Strings[X] := PreList.Strings[X] + ' '; | ||||
|     end | ||||
|     else begin  // not a valid line | ||||
|       PreList.Add(''); | ||||
|       AList.Add(ALine); | ||||
|       Blist.Add(''); | ||||
|       PostList.Add(''); | ||||
|     end; | ||||
|     // Check if is being assigned true or false | ||||
|     if CompareText(BList.Strings[X], 'True') = 0 then begin | ||||
| @ -82,7 +110,7 @@ begin | ||||
| 
 | ||||
| end; | ||||
| 
 | ||||
| function InvertLine(VarA, VarB: String; LineStart, EqualPosition: Integer): String; | ||||
| function InvertLine(PreVar, VarA, VarB, PostVar: String; LineStart, EqualPosition: Integer): String; | ||||
| var | ||||
| fLength: Integer; | ||||
| X: Integer; | ||||
| @ -99,7 +127,7 @@ begin | ||||
|     Exit; | ||||
|   end; | ||||
| 
 | ||||
|   Result := Result + VarB; | ||||
|   Result := Result + PreVar + VarB; | ||||
| 
 | ||||
|   fLength := Length(Trim(Result)); | ||||
|   if fLength < EqualPosition then begin | ||||
| @ -107,7 +135,7 @@ begin | ||||
|       Result := Result + ' '; | ||||
|     end; | ||||
|   end; | ||||
|   Result := Result + ' := ' + VarA + ';'; | ||||
|   Result := Result + ' := ' + VarA + PostVar; | ||||
| end; | ||||
| 
 | ||||
| function IsAWholeLine(ALine: String): Boolean; | ||||
| @ -136,6 +164,7 @@ begin | ||||
|   or (Pos('else', ALine) > 0) | ||||
|   or (Pos('and', ALine) > 0) | ||||
|   or (Pos('or', ALine) > 0) | ||||
|   or (Pos('//', ALine) > 0) | ||||
|   then Result := True; | ||||
| end; | ||||
| 
 | ||||
| @ -146,15 +175,22 @@ end; | ||||
| function InvertAssignment(ALines:TStrings):TStrings; | ||||
| var | ||||
| Lines: TStringList; | ||||
| PreList, | ||||
| AList, | ||||
| BList: TStringList; | ||||
| Indents: ^Integer; | ||||
| BList, | ||||
| PostList: TStringList; | ||||
| Indents: PInteger; | ||||
| X, Y: Integer; | ||||
| EqPos: Integer; | ||||
| ALine: String; | ||||
| begin | ||||
|   if ALines.Count = 0 then begin | ||||
|     Result := ALines; | ||||
|     Exit; | ||||
|   end; | ||||
|    | ||||
|   Lines := TStringList.Create; | ||||
|   if ALines.Count>0 then begin | ||||
| 
 | ||||
|   GetMem(Indents,SizeOf(Integer)*ALines.Count); | ||||
| 
 | ||||
|   // Put a line on multiple lines, on one line | ||||
| @ -174,12 +210,13 @@ begin | ||||
|   end; | ||||
|    | ||||
|   ALines.Clear; | ||||
|   end; | ||||
|    | ||||
|   PreList := TStringList.Create; | ||||
|   AList := TStringList.Create; | ||||
|   BList := TStringList.Create; | ||||
|   PostList := TStringList.Create; | ||||
|    | ||||
|   DivideLines(Lines, AList, BList); | ||||
|   DivideLines(Lines, PreList, AList, BList, PostList); | ||||
|   Lines.Free; | ||||
|    | ||||
|   //Find where the ':=' should be | ||||
| @ -190,13 +227,20 @@ begin | ||||
|   end; | ||||
| 
 | ||||
|   for X := 0 to AList.Count-1 do begin | ||||
|     ALines.Add(InvertLine(Alist.Strings[X], BList.Strings[X], Indents[X], EqPos)); | ||||
|     ALines.Add(InvertLine(PreList.Strings[X], | ||||
|                             Alist.Strings[X], | ||||
|                             BList.Strings[X], | ||||
|                          PostList.Strings[X], | ||||
|                                  Indents[X], | ||||
|                                      EqPos)); | ||||
|   end; | ||||
|   PreList.Free; | ||||
|   AList.Free; | ||||
|   BList.Free; | ||||
|   PostList.Free; | ||||
|   ReAllocMem(Indents,0); | ||||
| 
 | ||||
|   Result := ALines; | ||||
|   ReAllocMem(Indents,0); | ||||
|   // TODO: How do you stop this from adding a new line at the end of the last item | ||||
| end; | ||||
| ////////////////////////////////////////////////////////////////////// | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 mattias
						mattias