From e5c953b67b79d84796c40310923dff7651634f8c Mon Sep 17 00:00:00 2001 From: mattias Date: Wed, 27 Feb 2008 14:10:09 +0000 Subject: [PATCH] codetools: implemented TCCodeParserTool.Replace git-svn-id: trunk@14281 - --- components/codetools/ccodeparsertool.pas | 25 ++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/components/codetools/ccodeparsertool.pas b/components/codetools/ccodeparsertool.pas index 83ecc0caff..8ad43ee51c 100644 --- a/components/codetools/ccodeparsertool.pas +++ b/components/codetools/ccodeparsertool.pas @@ -88,6 +88,8 @@ type function AtomIsIdentifier: boolean; function GetAtom: string; + procedure Replace(FromPos, ToPos: integer; const NewSrc: string); + procedure IncreaseChangeStep; procedure WriteDebugReport; @@ -210,6 +212,29 @@ begin Result:=copy(Src,AtomStart,SrcPos-AtomStart); end; +procedure TCCodeParserTool.Replace(FromPos, ToPos: integer; const NewSrc: string + ); +var + Node: TCodeTreeNode; + DiffPos: Integer; +begin + DebugLn(['TCCodeParserTool.Replace ',FromPos,'-',ToPos,' Old="',copy(Src,FromPos,ToPos-FromPos),'" New="',NewSrc,'"']); + IncreaseChangeStep; + Code.Replace(FromPos,ToPos-FromPos,NewSrc); + Src:=Code.Source; + SrcLen:=length(Src); + // update positions + DiffPos:=length(NewSrc)-(ToPos-FromPos); + if DiffPos<>0 then begin + Node:=Tree.Root; + while Node<>nil do begin + AdjustPositionAfterInsert(Node.StartPos,true,FromPos,ToPos,DiffPos); + AdjustPositionAfterInsert(Node.EndPos,false,FromPos,ToPos,DiffPos); + Node:=Node.Next; + end; + end; +end; + procedure TCCodeParserTool.IncreaseChangeStep; begin if FChangeStep<>$7fffffff then