30. september 2003 - 15:50Der er
23 kommentarer og 1 løsning
Convert Tag Case
Hej, Jeg ved ikke helt hvordan jeg skal lave det så jeg spørger jer :)
Jeg skal ha gjort sådan så alle HTML tags bliver til UpperCase. Men der skal også tages højde for at der kan være PHP og ASP "tags" i dokumentet - Altså <% og <?.
Går ud fra du mener det her: <tag href="www.exp.dk">Rigtig meget tekst og evt. flere tags</tag> ---> <TAG href="www.exp.dk">Rigtig meget tekst og evt. flere tags</TAG>
function TagsToUpperCase(Text: String): String; var I,L:Integer; S:String; begin Result := Text; I := 0; while True do begin if (Text[I] = '<') and (Text[I+1] <> '%') and (Text[I+1] <> '?') then begin L := Length(Text); if Pos(' ', Copy(Result,I,Length(Result)-I)) <> 0 then L := Pos(' ', Copy(Result,I,Length(Result)-I)); if (Pos('>',Copy(Result,I,Length(Text)-I)) <= L) and (Pos('>', Copy(Result,I,Length(Text)-I)) <> 0) then L := Pos('>', Copy(Result,I,Length(Result)-I)); S := Copy(Result, I, L); L := Length(S); Delete(Result, I, L); Insert(UpperCase(S),Result,I); end; Inc(I); if I = Length(Text) then Break; end; end;
Synes godt om
Slettet bruger
30. september 2003 - 17:33#7
Det her laver også href til uppercase:
function TagsToUpperCase1(Text: String): String; var I:Integer; IsInTag: Boolean; begin Result := Text; IsInTag := False; I := 0; while True do begin if (Text[I] = '<') and (Text[I+1] <> '%') and (Text[I+1] <> '?') then IsInTag := True else if (Text[I] = '>') and (Text[I-1] <> '%') and (Text[I-1] <> '?') then IsInTag := False;
if IsInTag = True then begin if LastDelimiter(' ', Copy(Text, 0, I)) < LastDelimiter('<', Copy(Text, 0, I)) then begin Delete(Result, I, 1); Insert(UpperCase(Text[I]),Result,I); end; if LastDelimiter('=', Copy(Text, 0, I)) < LastDelimiter(' ', Copy(Text, 0, I)) then begin Delete(Result, I, 1); Insert(UpperCase(Text[I]),Result,I); end; end; Inc(I); if I >= Length(Text) then Break; end; end;
function TagsToUpperCase(Text: String): String; var I:Integer; IsInTag: Boolean; begin Result := Text; for I := 0 to Length(Text) do begin if (Text[I] = '<') and (Text[I+1] <> '%') and (Text[I+1] <> '?') then IsInTag := True; if (Text[I] = '>') and (Text[I-1] <> '%') and (Text[I-1] <> '?') then IsInTag := False; if IsInTag then begin if (LastDelimiter('=', Copy(Text, 0, I)) < LastDelimiter(' ', Copy(Text, 0, I))) or (LastDelimiter(' ', Copy(Text, 0, I)) < LastDelimiter('<', Copy(Text, 0, I))) then begin Delete(Result, I, 1); Insert(UpperCase(Text[I]),Result,I); end; end; end; end;
Virker fint... Opretter lige et spm.. Har en sidste opg til 150 points igen hvis du er med på den? Den går ud på udvidet søg og udvidet erstart. Du ved søg i mappe, åbne filer osv :)
hejhej -> Din TagsToUpperCase-funktion er lidt langsom (det kan mærkes)... Den her er noget hurtigere, og i mine test lige så effektiv:
function TagCase(S: String; UpCase: Boolean = true): String;
function CaseIt(S: String; UpCase: Boolean): String; begin if UpCase then Result := AnsiUpperCase(S) else Result := AnsiLowerCase(S); end;
var J, K, L: Integer; S1: String; TextStyle: (tsText, tsTag, tsTagProp, tsTagPropText); begin Result := ''; TextStyle := tsText; while Length(S) > 0 do begin case TextStyle of tsText: begin J := Pos('<', S);
if J = 0 then J := Length(S) else begin TextStyle := tsTag;
if J < Length(S) then if (Copy(S, J, 2)[2] in ['!', '?', '%']) then TextStyle := tsText; end;
Result := Result + Copy(S, 1, J); Delete(S, 1, J); end; tsTag, tsTagProp: begin J := Pos(' ', S); K := Pos('>', S); if TextStyle = tsTagProp then L := Pos('"', S) else L := -1;
if J = 0 then J := Length(S);
if K < J then begin J := K; TextStyle := tsText; end else TextStyle := tsTagProp;
if (L < J) and (L > 0) then begin J := L; TextStyle := tsTagPropText; end;
Result := Result + CaseIt(Copy(S, 1, J), UpCase); Delete(S, 1, J); end; tsTagPropText: begin J := Pos('"', S); if J = 0 then J := Length(S) else TextStyle := tsTagProp;
Result := Result + Copy(S, 1, J); Delete(S, 1, J); end; end; end; end;
Brug den her, den er bedre gearet til <!-- kommentarter -->:
function TagCase(S: String; UpCase: Boolean = true): String;
function CaseIt(S: String; UpCase: Boolean): String; begin if UpCase then Result := AnsiUpperCase(S) else Result := AnsiLowerCase(S); end;
var J, K, L: Integer; TextStyle: (tsText, tsTag, tsTagProp, tsTagPropText, tsComment); begin Result := ''; TextStyle := tsText; while Length(S) > 0 do begin case TextStyle of tsText: begin J := Pos('<', S);
if J = 0 then J := Length(S) else begin TextStyle := tsTag;
if J < Length(S) then if (Copy(S, J, 2)[2] in ['?', '%']) then TextStyle := tsText else if Copy(S, J, 4) = '<!--' then TextStyle := tsComment; end;
Result := Result + Copy(S, 1, J); Delete(S, 1, J); end; tsComment: begin J := Pos('-->', S);
if J = 0 then J := Length(S);
TextStyle := tsText;
Result := Result + Copy(S, 1, J); Delete(S, 1, J); end; tsTag, tsTagProp: begin J := Pos(' ', S); K := Pos('>', S); if TextStyle = tsTagProp then L := Pos('"', S) else L := -1;
if J = 0 then J := Length(S);
if K < J then begin J := K; TextStyle := tsText; end else TextStyle := tsTagProp;
if (L < J) and (L > 0) then begin J := L; TextStyle := tsTagPropText; end;
Result := Result + CaseIt(Copy(S, 1, J), UpCase); Delete(S, 1, J); end; tsTagPropText: begin J := Pos('"', S); if J = 0 then J := Length(S) else TextStyle := tsTagProp;
Result := Result + Copy(S, 1, J); Delete(S, 1, J); end; end; end; end;
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.