cm: boolean;
No: string;
oc : string;
- st, et: string;
pos, pmin : integer;
j : integer;
token : array[0..5] of string;
db : boolean;
len : integer;
rink : string;
+ function addResAnchor(const Left :string) : string;
+ var
+ st,et : string;
+ begin
+ //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
+ if j <= len then begin
+ if db then j := j - 2
+ else j := j - 1;
+ end;
+ //\89½\82à\90\94\8e\9a\82ª\8c©\82Â\82©\82ç\82È\82¢\82Æ\82«
+ if No = '' then begin
+ Result := Left + Copy(s, 1, j - 1);
+ end else begin
+ separateNumber(st, et, No, '-');
+
+ if not DatToHTML then begin
+ Result := Left + Format(FORMAT_LINK,
+ [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]);
+ end else begin
+ Result := Left + Format('<a href="#%s">', [st]);
+ end;
+ Result := Result + Copy(s, 1, j - 1) + '</a>';
+ end;
+ Delete(s, 1, j - 1);
+ end;
+
+ procedure getNumberString;
+ begin
+ while (j <= len) do begin
+ if (ByteType(s, j) = mbSingleByte) then begin
+ //1byte\95¶\8e\9a
+ ch := s[j];
+ Inc(j);
+ db := false;
+ end else begin
+ //2byte\95¶\8e\9a
+ ch := ZenToHan(Copy(s, j, 2));
+ Inc(j, 2);
+ db := true;
+ end;
+
+ if System.Pos(ch, SN) > 0 then begin
+ No := No + ch;
+ end else if (ch = '-') then begin
+ if sw then break;
+ if No = '' then break;
+ No := No + ch;
+ sw := true;
+ end else begin
+ break;
+ end;
+ end;
+ end;
+
+ function checkComma : boolean;
+ begin
+ j := 1;
+ len := Length(s);
+ if ((len > 0) and (s[j] = ',')) or ((len > 1) and (ZenToHan(Copy(s, j ,2)) = ',')) then begin
+ Result := true;
+ if (ByteType(s, j) = mbSingleByte) then
+ Inc(j)
+ else
+ Inc(j, 2);
+ No := '';
+ end else begin
+ Result := false;
+ end;
+ end;
begin
//s \82É\96{\95¶\82ð\91S\95\94\93ü\82ê\82é
s := Body;
end;
// \83\8c\83X\83A\83\93\83J\81[\82ª\8aÜ\82Ü\82ê\82Ä\82¢\82½\82ç,\82ª\91±\82\8cÀ\82è\83A\83\93\83J\81[\82Æ\82µ\82Ä\88µ\82¤
if i <= 3 then begin
- cm := false;
- j := 1 ;
+ No := '';
+ cm := checkComma;
len := Length(s);
- if ((len > 0) and (s[j] = ',')) or
- ((len > 1) and (ZenToHan(Copy(s, j ,2)) = ',')) then begin
- cm := true;
- db := false;
- sw := false;
- if (ByteType(s, j) = mbSingleByte) then
- Inc(j)
- else
- Inc(j, 2);
- No := '';
- len := Length(s);
- while cm do begin
- while (j <= len) do begin
- if (ByteType(s, j) = mbSingleByte) then begin
- //1byte\95¶\8e\9a
- ch := s[j];
- Inc(j);
- db := false;
- end else begin
- //2byte\95¶\8e\9a
- ch := ZenToHan(Copy(s, j, 2));
- Inc(j, 2);
- db := true;
- end;
- if System.Pos(ch, SN) > 0 then begin
- No := No + ch;
- end else if (ch = '-') then begin
- if sw then break;
- if No = '' then cm := false;
- No := No + ch;
- sw := true;
- end else begin
- break;
- end;
- end;
- //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
- if j <= len then begin
- if db then j := j - 2
- else j := j - 1;
- end;
- //\89½\82à\90\94\8e\9a\82ª\8c©\82Â\82©\82ç\82È\82¢\82Æ\82«
- if No = '' then begin
- Result := Result + Copy(s, 1, j - 1);
- end else begin
- separateNumber(st, et, No, '-');
-
- if not DatToHTML then begin
- Result := Result + Format(FORMAT_LINK,
- [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]);
- end else begin
- Result := Result + Format('<a href="#%s">', [st]);
- end;
- Result := Result + Copy(s, 1, j - 1) + '</a>';
- end;
- Delete(s, 1, j - 1);
- j := 1;
- if (s[j] = ',') or (ZenToHan(Copy(s, j ,2)) = ',') then begin
- cm := true;
- if (ByteType(s, j) = mbSingleByte) then
- Inc(j)
- else
- Inc(j, 2);
- No := '';
- len := Length(s);
- end else begin
- cm := false;
- end;
- end;
+ while cm do begin
+ getNumberString;
+ Result := addResAnchor(Result);
+ cm := checkComma;
end;
end;
end else begin
sw := false;
db := false;
len := Length(s);
- while j <= len do begin
- if (ByteType(s, j) = mbSingleByte) then begin
- //1byte\95¶\8e\9a
- ch := s[j];
- Inc(j);
- db := false;
- end else begin
- //2byte\95¶\8e\9a
- ch := ZenToHan(Copy(s, j, 2));
- Inc(j, 2);
- db := true;
- end;
-
- if System.Pos(ch, SN) > 0 then begin
- No := No + ch;
- end else if (ch = '-') then begin
- if sw then break;
- if No = '' then break;
- No := No + ch;
- sw := true;
- end else begin
- break;
- end;
- end;
- //\8fI\92[\82Ü\82Å\8ds\82Á\82Ä\82Ì\8fI\97¹\82©\83`\83F\83b\83N
- if j <= len then begin
- if db then j := j - 2
- else j := j - 1;
- end;
- //\89½\82à\90\94\8e\9a\82ª\8c©\82Â\82©\82ç\82È\82¢\82Æ\82«
- if No = '' then begin
- Result := Result + Copy(s, 1, j - 1);
- end else begin
- separateNumber(st, et, No, '-');
-
- if not DatToHTML then begin
- Result := Result + Format(FORMAT_LINK,
- [ParamBBS, Bbs, ParamKey, Key, ParamStart, st, ParamTo, et, ParamNoFirst, ParamTrue]);
- end else begin
- Result := Result + Format('<a href="#%s">', [st]);
- end;
- Result := Result + Copy(s, 1, j - 1) + '</a>';
- end;
- Delete(s, 1, j - 1);
+ getNumberString;
+ Result := addResAnchor(Result);
end;
end;
Result := Result + s;