Avatar billede hestetoften Nybegynder
15. april 2004 - 23:07 Der er 8 kommentarer og
1 løsning

Undersøg om cursor står i Tag?

Jeg har eksempelvis denne str:
  <form method="">
Jeg mangler en function der returnerer disse værdier:

  1. returner ingenting hvis cursor ikke står mellem (<) og(>)

  2. Tagname : hvis cursor står mellem form->method eller efter (method="") er i dette tilfælde (form)

  3. Subtag : hvis cursor står mellem "" i method, i dette tilfælde (method)
Avatar billede hrc Mester
16. april 2004 - 07:44 #1
Det var lige hvad jeg kunne ryste ud af ærmet - har ikke testet det.

function TForm1.InTag(const aIndex : integer) : boolean;
var
  st : string;
  i : integer;
  bStart, bEnd : boolean;
begin
  st := mHTML.Lines.Text;
  i := aIndex;
  bStart := false; bEnd := false;

  // Seek back - look for ending tag
  while (i > 1) and (st[i] <> '>') and not bStart do begin
    bStart := st[i] = '<';
    inc(i);
  end;

  if bStart then begin
    i := aIndex;
    while (i < length(st)) and not (st[i] in ['<','>']) and not bEnd do begin
      bEnd := st[i] = '>';
      inc(i);
    end;
  end;

  result := bStart and bEnd;
end;
Avatar billede hrc Mester
16. april 2004 - 15:10 #2
Flyeknepperi, men det kan blive lidt pænere - stadig ikke testet.

function TForm1.InTag(const aString : string; const aIndex : integer) : boolean;
var
  i : integer;
  bStart, bEnd : boolean;
begin
  bStart := false; bEnd := false;

  // Seek backards - look for start-tag
  i := aIndex;
  while (i > 1) and (aSt[i] <> '>') and not bStart do begin
    bStart := aSt[i] = '<';
    dec(i);
  end;

  // Seek forward if tag-start found - look for end-tag
  if bStart then begin
    i := aIndex;
    while (i < length(aSt)) and not (aSt[i] in ['<','>']) and not bEnd do begin
      bEnd := aSt[i] = '>';
      inc(i);
    end;
  end;

  result := bStart and bEnd;
end;

nå, ja - og fejlfrit var det i alt fald ikke før.
Avatar billede hrc Mester
16. april 2004 - 15:26 #3
Nå, ja. Måske virker funktionen, men spørgsmålet er ikke besvaret, beklager.

Du vil gerne have en funktion der, afhængig hvor man er i strengen,  returnerer følgende (eksempel: <form http="GulliGulli">)

spNone : (ikke i tag)
spTag : 'form'
spSubTag : 'http'
spValue : '"GulliGulli"'

Desuden skal den vel returnere indeks på første (eller sidste position af det returnerede), ikke?

Hvis man har fat i </form> skal den returnere .. hvad?
Avatar billede hrc Mester
16. april 2004 - 15:29 #4
Har jeg forstået det korrekt?

Jeg regner med at funktions-headeren ser nogenlunde sådan ud:

type
  TSegTypes = (stNone, stTag, stSubTag, stValue);

function GetAtIndex(const aString : string; aIndex : integer;
                    var aSegTag : string; var aSegType : TSegTypes) : integer;
Avatar billede hestetoften Nybegynder
16. april 2004 - 23:59 #5
Den skal returnere en string, der findes i Tagget

Det jeg forsøger er at få SynCompletionProposal til at virke med SynEdit

SynCompletionProposal skal kunne aktiveres med (Ctrl+Space) eller kun (Space)

ved brug af disse taster skal der undersøges:
1: står cursor i tag (hvis nej foretages intet) returner tom streng ('')

2: står cursor i en spValue (altså der hvor der i form-Method kan vælges [Get/Post])  returner strengen 'method'

3: hvis dette (2:) ikke er tilfældet returner da Tagget (form) returner strengen 'form'

hvis cursor befinder sig i </form> returneres tom streng '' (altså ikke i tag)

Håber Du/I forstår hvad jeg mener...

På forhånd tak.
Avatar billede hestetoften Nybegynder
17. april 2004 - 00:06 #6
PS.
Den retunerede streng bruges til opslag i IniFil hvor Tags er defineret.

Opslaget bruges til at fylde itemList i SynCompletionProposal, hvorefter SynCompletionProposal bliver sat til CanExecute := true;
Avatar billede fixxxer Nybegynder
22. april 2004 - 06:51 #7
Jeg er med på en lytter, og tillader mig at kommentere:

Men det er vel egenlig en form for parser vi bevæger os over i, og det er jo lettere sagt end gjort. Lad os antage at man nu som de fleste efterhånden også skriver et server-sidesprog i sin html kode, såsom asp og php. Begge bruger < og >-tegnet for at bestemme at deres script starter og begynder. Det skal denne jo også gerne tage højde for.
Og for at gøre tingene meget værre, så mener jeg vist også at en kode som fx onclick="if (value > 1){alert('');}" er ganske lovlig HTML, men ved vores parser det?

Hvis det lykkedes at lave en parser der kan tage højde for alt dette så vil jeg gerne stå højt på listen til at få source-koden til den :p
Avatar billede hrc Mester
22. april 2004 - 22:28 #8
Er du stadig interesseret i at få dette spg. besvaret? Har været væk fra den ret længe og vil lige høre om jeg skulle bruge tid på det - har efterhånden forstået spørgsmålet, men mangler lige lidt på den korrekte løsning.
Avatar billede hestetoften Nybegynder
22. april 2004 - 22:48 #9
Jeg har fundet ud af noget der dur.

poster det her, senere.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester