Иногда ложно срабатывает переход к исходнику, т.к. идентификатор попадается в комментарии.
Чтобы это пофиксить, нужно в DevReferences поправить процедуру SearchIdent как дано ниже:
Добавлена вложенная процедура Comment и два IFа ее вызывающие
Код:
PROCEDURE SearchIdent (t: TextModels.Model; ident: TextMappers.String; VAR beg, end: INTEGER; bold: BOOLEAN);
VAR r: TextModels.Reader; found: BOOLEAN; ch: CHAR; len, i: INTEGER;
PROCEDURE Comment;
BEGIN INC(beg); r.ReadChar(ch);
LOOP
LOOP
WHILE ch = "(" DO INC(beg); r.ReadChar(ch);
IF ch = "*" THEN Comment END
END;
IF ch = "*" THEN INC(beg); r.ReadChar(ch); EXIT END ;
IF r.eot THEN EXIT END ;
INC(beg); r.ReadChar(ch)
END;
IF ch = ")" THEN INC(beg); r.ReadChar(ch); EXIT END ;
END
END Comment;
BEGIN
end := 0;
IF ident # "" THEN
len := 0; WHILE ident[len] # 0X DO INC(len) END;
r := t.NewReader(NIL); found := FALSE;
beg := 0; r.SetPos(0); r.ReadChar(ch);
WHILE ~r.eot & ~found DO
(* search legal start symbol *)
WHILE ~r.eot & ((ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z")) DO
INC(beg); r.ReadChar(ch);
IF ch = "(" THEN
INC(beg); r.ReadChar(ch);
IF ch = "*" THEN
Comment;
END;
END;
END;
i := 0;
WHILE ~r.eot & (~bold OR SpecialFont(r)) & (i # len) & (ch = ident[i]) DO
r.ReadChar(ch); INC(i)
END;
found := (i = len) &
((ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z"));
IF ~r.eot & ~found THEN (* skip rest of identifier *)
beg := r.Pos() - 1;
WHILE ~r.eot &
~((ch < "0") OR (ch > "9") & (ch < "A") OR (ch > "Z") & (ch # "_") & (ch < "a") OR (ch > "z")) DO
INC(beg); r.ReadChar(ch);
IF ch = "(" THEN
INC(beg); r.ReadChar(ch);
IF ch = "*" THEN
Comment;
END;
END;
END
END
END;
IF found THEN end := r.Pos() - 1 END
END
END SearchIdent;