Revisión | 68e4c8378608e1ca3e2ddd8eaed2d30ac9f3617b (tree) |
---|---|
Tiempo | 2008-09-21 12:20:19 |
Autor | cvs2git <cvs2git> |
Commiter | cvs2git |
This commit was manufactured by cvs2svn to create tag 'v1_59_0_768'.
@@ -249,6 +249,8 @@ type | ||
249 | 249 | function LFusianaGet(const s: String): Boolean; |
250 | 250 | // Cookieの取得 |
251 | 251 | procedure GetCookie(Rawtext: String; ABoard: TBoard); |
252 | + // hiddenデータ取得 | |
253 | + procedure GetHiddenParameter(Rawtext: String; ABoard: TBoard); | |
252 | 254 | //! 入力アシストのポップアップメニューのクリックイベント |
253 | 255 | procedure InputAssistMenuClick(Sender: TObject); |
254 | 256 | //! TMemoのカーソル位置に文字列挿入 |
@@ -832,7 +834,10 @@ begin | ||
832 | 834 | |
833 | 835 | if MsgResult = IDYES then begin |
834 | 836 | GetCookie(Indy.Response.RawHeaders.Text, Board); |
835 | - | |
837 | + if (Board.Is2ch) then begin | |
838 | + GetHiddenParameter(ResponseText, Board); | |
839 | + end; | |
840 | + | |
836 | 841 | if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then |
837 | 842 | raise Exception.Create(''); |
838 | 843 |
@@ -860,6 +865,9 @@ begin | ||
860 | 865 | |
861 | 866 | if MsgResult = IDYES then begin |
862 | 867 | GetCookie(Indy.Response.RawHeaders.Text, Board); |
868 | + if (Board.Is2ch) then begin | |
869 | + GetHiddenParameter(ResponseText, Board); | |
870 | + end; | |
863 | 871 | |
864 | 872 | if (Board.SPID = '') and (Board.PON = '') and (Board.Cookie = '') then |
865 | 873 | raise Exception.Create(''); |
@@ -1898,7 +1906,90 @@ begin | ||
1898 | 1906 | end; |
1899 | 1907 | end; |
1900 | 1908 | end; |
1909 | +//! hiddenデータ取得 | |
1910 | +procedure TEditorForm.GetHiddenParameter(Rawtext: String; ABoard: TBoard); | |
1911 | +const | |
1912 | + INPUT_MARK = '<input type=hidden' ; // 大文字小文字ばらばらなことに注意 | |
1913 | + VALUE_MARK = 'value=' ; // 大文字小文字ばらばらなことに注意 | |
1914 | + NAME_MARK = 'name=' ; // 大文字小文字ばらばらなことに注意 | |
1915 | + IGNORE_NAMES : array[0..6] of String = | |
1916 | + ('subject', 'from', 'mail', 'message', 'bbs', 'time', 'key'); | |
1917 | +var | |
1918 | + tmp, line, name, value, lname : String; | |
1919 | + pos, pose, i : Integer; | |
1920 | +begin | |
1921 | + tmp := AnsiLowerCase(Rawtext); | |
1922 | + pos := AnsiPos(INPUT_MARK, tmp); | |
1923 | + while (pos > 0 ) do begin | |
1924 | + tmp := Copy(Rawtext, pos + Length(INPUT_MARK), Length(tmp)); | |
1925 | + Delete(Rawtext, 1, pos+ Length(INPUT_MARK) - 1); | |
1926 | + pose := AnsiPos('>', tmp); | |
1927 | + // name=xxx value=yyy が切り出される | |
1928 | + line := Copy(tmp, 1, pose - 1); | |
1929 | + name := ''; | |
1930 | + value := ''; | |
1931 | + pos := AnsiPos(NAME_MARK, tmp); | |
1932 | + if (pos > 0) then begin | |
1933 | + name := Copy(Rawtext, pos + Length(NAME_MARK), Length(line)); | |
1934 | + //半角"で始まっているか | |
1935 | + if AnsiPos('"', name) = 1 then begin | |
1936 | + // 半角"までをコピー | |
1937 | + Delete(name, 1, 1); | |
1938 | + pose := AnsiPos('"', name); | |
1939 | + if (pose > 0) then begin | |
1940 | + Delete(name, pose, Length(name)); | |
1941 | + end else begin | |
1942 | + pose := AnsiPos(' ', name); | |
1943 | + if (pose > 0) then begin | |
1944 | + Delete(name, pose, Length(name)); | |
1945 | + end; | |
1946 | + end; | |
1947 | + end else begin | |
1948 | + pose := AnsiPos(' ', name); | |
1949 | + if (pose > 0) then begin | |
1950 | + Delete(name, pose, Length(name)); | |
1951 | + end; | |
1952 | + end; | |
1953 | + end; | |
1954 | + lname := AnsiLowerCase(name); | |
1955 | + for i := 0 to Length(IGNORE_NAMES) do begin | |
1956 | + if lname = IGNORE_NAMES[i] then begin | |
1957 | + name := ''; | |
1958 | + break; | |
1959 | + end; | |
1960 | + end; | |
1961 | + pos := AnsiPos(VALUE_MARK, tmp); | |
1962 | + if (name <> '') and (pos > 0) then begin | |
1963 | + value := Copy(Rawtext, pos + Length(VALUE_MARK), Length(line)); | |
1964 | + //半角"で始まっているか | |
1965 | + if AnsiPos('"', value) = 1 then begin | |
1966 | + // 半角"までをコピー | |
1967 | + Delete(value, 1, 1); | |
1968 | + pose := AnsiPos('"', value); | |
1969 | + if (pose > 0) then begin | |
1970 | + Delete(value, pose, Length(value)); | |
1971 | + end else begin | |
1972 | + pose := AnsiPos(' ', value); | |
1973 | + if (pose > 0) then begin | |
1974 | + Delete(value, pose, Length(value)); | |
1975 | + end; | |
1976 | + end; | |
1977 | + end else begin | |
1978 | + pose := AnsiPos(' ', value); | |
1979 | + if (pose > 0) then begin | |
1980 | + Delete(value, pose, Length(name)); | |
1981 | + end; | |
1982 | + end; | |
1983 | + end; | |
1984 | + if (name <> '') then begin | |
1985 | + ABoard.Cookie := ABoard.Cookie + name + '=' + value + '; '; | |
1901 | 1986 | |
1987 | + end; | |
1988 | + Delete(tmp, 1, Length(line)); | |
1989 | + Delete(Rawtext, 1, Length(line)); | |
1990 | + pos := AnsiPos(INPUT_MARK, tmp); | |
1991 | + end; | |
1992 | +end; | |
1902 | 1993 | |
1903 | 1994 | //! サンバ更新のアクションのUpdateイベント 簡単のためタイマーと同じにしておく |
1904 | 1995 | procedure TEditorForm.UpdateSambaActionUpdate(Sender: TObject); |
@@ -2341,8 +2432,7 @@ begin | ||
2341 | 2432 | Result := Result + 'MDMD=' + GikoSys.Setting.BeCode + '; ' |
2342 | 2433 | + 'DMDM=' + GikoSys.Setting.BeUserID + '; '; |
2343 | 2434 | end; |
2344 | - | |
2345 | - end; | |
2435 | + end; | |
2346 | 2436 | |
2347 | 2437 | Result := 'Cookie: ' + Result + 'NAME=' + NameComboBox.Text + '; MAIL=' + MailComboBox.Text; |
2348 | 2438 |
@@ -264,7 +264,7 @@ const | ||
264 | 264 | ZERO_DATE: Integer = 25569; |
265 | 265 | BETA_VERSION_NAME_E = 'beta'; |
266 | 266 | BETA_VERSION_NAME_J = 'バタ'; |
267 | - BETA_VERSION = 58; | |
267 | + BETA_VERSION = 59; | |
268 | 268 | BETA_VERSION_BUILD = ''; //!< debug版など |
269 | 269 | APP_NAME = 'gikoNavi'; |
270 | 270 | BE_PHP_URL = 'http://be.2ch.net/test/p.php?i='; |
@@ -1891,84 +1891,93 @@ http://2ch.net/ | ||
1891 | 1891 | の場合 stRef = 32, endRes = 50 になる |
1892 | 1892 | } |
1893 | 1893 | procedure TGikoSys.GetPopupResNumber(URL : string; var stRes, endRes : Int64); |
1894 | +const | |
1895 | + START_NAME : array[0..1] of String = ('st=', 'start='); | |
1896 | + END_NAME : array[0..1] of String = ('to=', 'end='); | |
1897 | + RES_NAME : array[0..0] of String = ('res='); | |
1894 | 1898 | var |
1895 | 1899 | buf : String; |
1896 | 1900 | convBuf : String; |
1897 | 1901 | ps : Int64; |
1898 | 1902 | pch : PChar; |
1903 | + bufList : TStringList; | |
1904 | + i, j, idx : Integer; | |
1899 | 1905 | begin |
1900 | 1906 | URL := Trim(LowerCase(URL)); |
1901 | - if (AnsiPos('&st=', URL ) <> 0) and ( AnsiPos( '&to=',URL) <> 0 ) then begin | |
1902 | - stRes := 0; | |
1903 | - endRes := 0; | |
1904 | - try | |
1905 | - buf := Copy( URL, AnsiPos('&st=', URL ) + 4, AnsiPos( '&to=',URL) - AnsiPos('&st=', URL ) - 4 ); | |
1906 | - if buf <> '' then | |
1907 | - stRes := StrToInt64( buf ); | |
1908 | - if AnsiPos( '&nofirst=',URL) <> 0 then begin | |
1909 | - buf := Copy( URL, AnsiPos('&to=', URL ) + 4, AnsiPos( '&nofirst=',URL) - AnsiPos('&to=', URL ) - 4); | |
1910 | - end else begin | |
1911 | - buf := Copy( URL, AnsiPos('&to=', URL ) + 4, Length( URL ) - AnsiPos('&to=', URL ) - 4 + 1 ); | |
1912 | - ps := 0; | |
1913 | - pch := PChar(buf); | |
1914 | - while ( ps < Length(buf) )and ( pch[ps] >= '0' ) and ( pch[ps] <= '9' ) do Inc(ps); | |
1915 | - buf := Copy( buf, 1, ps ); | |
1916 | - end; | |
1917 | - try | |
1918 | - if buf <> '' then | |
1919 | - endRes := StrToInt64(buf) | |
1920 | - except | |
1921 | - endRes := 0; | |
1922 | - end; | |
1923 | - except | |
1924 | - stRes := 0; | |
1925 | - end; | |
1926 | - if (stRes <> 0) and (endRes = 0) then | |
1927 | - endRes := stRes + MAX_POPUP_RES | |
1928 | - else if (stRes = 0) and (endRes <> 0) then begin | |
1929 | - stRes := endRes - MAX_POPUP_RES; | |
1930 | - if stRes < 1 then | |
1931 | - stRes := 1; | |
1932 | - end; | |
1933 | - GikoSys.GetBrowsableThreadURL( URL ); | |
1934 | - end else if( AnsiPos('&res=', URL ) <> 0 ) then begin | |
1935 | - endRes := 0; | |
1936 | - buf := Copy( URL, AnsiPos('&res=', URL ) + 5, Length( URL ) - AnsiPos('&res=', URL ) - 5 + 1 ); | |
1937 | - ps := 0; | |
1938 | - pch := PChar(buf); | |
1939 | - while ( ps < Length(buf) )and ( pch[ps] >= '0' ) and ( pch[ps] <= '9' ) do Inc(ps); | |
1940 | - buf := Copy( buf, 1, ps ); | |
1941 | - try | |
1942 | - if buf <> '' then | |
1943 | - stRes := StrToInt(buf) | |
1944 | - else begin | |
1945 | - stRes := 0; | |
1946 | - end; | |
1947 | - except | |
1948 | - stRes := 0; | |
1949 | - end; | |
1950 | - end else if (AnsiPos('&start=', URL ) <> 0) and ( AnsiPos( '&end=',URL) <> 0 ) then begin | |
1951 | - try | |
1952 | - stRes := StrToInt64( Copy( URL, AnsiPos('&start=', URL ) + 7, AnsiPos( '&end=',URL) - AnsiPos('&start=', URL ) - 7 ) ); | |
1953 | - if AnsiPos( '&nofirst=',URL) <> 0 then begin | |
1954 | - buf := Copy( URL, AnsiPos('&end=', URL ) + 5, AnsiPos( '&nofirst=',URL) - AnsiPos('&end=', URL ) - 5); | |
1955 | - end else begin | |
1956 | - buf := Copy( URL, AnsiPos('&end=', URL ) + 5, Length( URL ) - AnsiPos('&to=', URL ) - 5 + 1 ); | |
1957 | - ps := 0; | |
1958 | - pch := PChar(buf); | |
1959 | - while ( ps < Length(buf) )and ( pch[ps] >= '0' ) and ( pch[ps] <= '9' ) do Inc(ps); | |
1960 | - buf := Copy( buf, 1, ps ); | |
1961 | - end; | |
1962 | - try | |
1963 | - if buf <> '' then | |
1964 | - endRes := StrToInt64(buf); | |
1965 | - except | |
1966 | - endRes := 0; | |
1967 | - end; | |
1968 | - except | |
1969 | - stRes := 0; | |
1970 | - end; | |
1971 | - end else if ( AnsiPos('.html',URL) <> Length(URL) -4 ) and ( AnsiPos('.htm',URL) <> Length(URL) -3 ) then begin | |
1907 | + for i := 0 to Length(START_NAME) -1 do begin | |
1908 | + idx := AnsiPos(START_NAME[i], URL); | |
1909 | + if (idx <> 0) then begin | |
1910 | + break; | |
1911 | + end; | |
1912 | + idx := AnsiPos(END_NAME[i], URL); | |
1913 | + if (idx <> 0) then begin | |
1914 | + break; | |
1915 | + end; | |
1916 | + | |
1917 | + end; | |
1918 | + | |
1919 | + if (idx <> 0) then begin | |
1920 | + idx := AnsiPos('?', URL); | |
1921 | + if (idx = 0) then begin | |
1922 | + idx := LastDelimiter('/', URL); | |
1923 | + end; | |
1924 | + stRes := 0; | |
1925 | + endRes := 0; | |
1926 | + bufList := TStringList.Create(); | |
1927 | + try | |
1928 | + bufList.Delimiter := '&'; | |
1929 | + bufList.DelimitedText := Copy(URL, idx + 1, Length(URL)); | |
1930 | + for i := 0 to bufList.Count - 1 do begin | |
1931 | + convBuf := ''; | |
1932 | + // 開始レス番の検索 | |
1933 | + if (stRes = 0) then begin | |
1934 | + for j := 0 to Length(START_NAME) - 1 do begin | |
1935 | + idx := AnsiPos(START_NAME[j], bufList[i]); | |
1936 | + if (idx = 1) then begin | |
1937 | + convBuf := Copy(bufList[i], idx + Length(START_NAME[j]), Length(bufList[i])); | |
1938 | + stRes := StrToInt64Def( convBuf, 0 ); | |
1939 | + break; | |
1940 | + end; | |
1941 | + end; | |
1942 | + end; | |
1943 | + // 終了レス番の検索 | |
1944 | + if (convBuf = '') and (endRes = 0) then begin | |
1945 | + for j := 0 to Length(END_NAME) - 1 do begin | |
1946 | + idx := AnsiPos(END_NAME[j], bufList[i]); | |
1947 | + if (idx = 1) then begin | |
1948 | + convBuf := Copy(bufList[i], idx + Length(END_NAME[j]), Length(bufList[i])); | |
1949 | + endRes := StrToInt64Def( convBuf, 0 ); | |
1950 | + break; | |
1951 | + end; | |
1952 | + end; | |
1953 | + end; | |
1954 | + // レス番の検索 | |
1955 | + if ((stRes = 0) and (endRes = 0) and (convBuf = '')) then begin | |
1956 | + for j := 0 to Length(RES_NAME) - 1 do begin | |
1957 | + idx := AnsiPos(RES_NAME[j], bufList[i]); | |
1958 | + if (idx = 1) then begin | |
1959 | + convBuf := Copy(bufList[i], idx + Length(RES_NAME[j]), Length(bufList[i])); | |
1960 | + stRes := StrToInt64Def( convBuf, 0 ); | |
1961 | + endRes := stRes; | |
1962 | + break; | |
1963 | + end; | |
1964 | + end; | |
1965 | + end; | |
1966 | + end; | |
1967 | + | |
1968 | + if (stRes <> 0) and (endRes = 0) then begin | |
1969 | + endRes := stRes + MAX_POPUP_RES; | |
1970 | + end else if (stRes = 0) and (endRes <> 0) then begin | |
1971 | + stRes := endRes - MAX_POPUP_RES; | |
1972 | + if stRes < 1 then begin | |
1973 | + stRes := 1; | |
1974 | + end; | |
1975 | + end; | |
1976 | + finally | |
1977 | + bufList.clear; | |
1978 | + bufList.free; | |
1979 | + end; | |
1980 | + end else if ( AnsiPos('.html',URL) <> Length(URL) -4 ) and ( AnsiPos('.htm',URL) <> Length(URL) -3 ) then begin | |
1972 | 1981 | buf := Copy(URL, LastDelimiter('/',URL)+1,Length(URL)-LastDelimiter('/',URL)+1); |
1973 | 1982 | if Length(buf) > 0 then begin |
1974 | 1983 | if AnsiPos('-', buf) = 1 then begin |
@@ -1977,15 +1986,10 @@ begin | ||
1977 | 1986 | ps := 0; |
1978 | 1987 | pch := PChar(buf); |
1979 | 1988 | while ( ps < Length(buf) )and ( pch[ps] >= '0' ) and ( pch[ps] <= '9' ) do Inc(ps); |
1980 | - try | |
1981 | - convBuf := Copy( buf, 1, ps ); | |
1982 | - if convBuf <> '' then | |
1983 | - endRes := StrToInt64(convBuf) | |
1984 | - else | |
1985 | - endRes := 0; | |
1986 | - except | |
1987 | - endRes := 0; | |
1988 | - end; | |
1989 | + convBuf := Copy( buf, 1, ps ); | |
1990 | + if convBuf <> '' then begin | |
1991 | + endRes := StrToInt64Def(convBuf, 0); | |
1992 | + end; | |
1989 | 1993 | if endRes <> 0 then begin |
1990 | 1994 | stRes := endRes - MAX_POPUP_RES; |
1991 | 1995 | if stRes < 1 then |
@@ -2003,15 +2007,10 @@ begin | ||
2003 | 2007 | ps := 0; |
2004 | 2008 | pch := PChar(buf); |
2005 | 2009 | while ( ps < Length(buf) )and ( pch[ps] >= '0' ) and ( pch[ps] <= '9' ) do Inc(ps); |
2006 | - try | |
2007 | - convBuf := Copy( buf, 1, ps ); | |
2008 | - if convBuf <> '' then | |
2009 | - endRes := StrToInt64(convBuf) | |
2010 | - else | |
2011 | - endRes := 0; | |
2012 | - except | |
2013 | - endRes := 0; | |
2014 | - end; | |
2010 | + convBuf := Copy( buf, 1, ps ); | |
2011 | + if convBuf <> '' then begin | |
2012 | + endRes := StrToInt64Def(convBuf, 0); | |
2013 | + end; | |
2015 | 2014 | end else begin |
2016 | 2015 | stRes := 0; |
2017 | 2016 | end; |
@@ -2021,9 +2020,6 @@ begin | ||
2021 | 2020 | end; |
2022 | 2021 | end; |
2023 | 2022 | end; |
2024 | - end else begin | |
2025 | - //stRes := 0; | |
2026 | - //endRes := 0; | |
2027 | 2023 | end; |
2028 | 2024 | end; |
2029 | 2025 |
@@ -1481,30 +1481,31 @@ end; | ||
1481 | 1481 | class function THTMLCreate.DeleteLink(const s: string): string; |
1482 | 1482 | var |
1483 | 1483 | s1: string; |
1484 | - s2: string; | |
1484 | + mark: string; | |
1485 | 1485 | idx: Integer; |
1486 | - i: Integer; | |
1487 | 1486 | begin |
1488 | - i := 0; | |
1489 | - Result := ''; | |
1490 | - while True do begin | |
1491 | - s1 := GikoSys.GetTokenIndex(s, '<a href="', i); | |
1492 | - s2 := GikoSys.GetTokenIndex(s, '<a href="', i + 1); | |
1493 | - | |
1494 | - idx := Pos('">', s1); | |
1495 | - if idx <> 0 then | |
1496 | - Delete(s1, 1, idx + 1); | |
1497 | - idx := Pos('">', s2); | |
1498 | - if idx <> 0 then | |
1499 | - Delete(s2, 1, idx + 1); | |
1500 | - | |
1501 | - Result := Result + s1 + s2; | |
1502 | - | |
1503 | - if s2 = '' then | |
1504 | - Break; | |
1487 | + mark := '<a href="'; | |
1488 | + Result := ''; | |
1489 | + s1 := s; | |
1490 | + idx := AnsiPos(mark, s1); | |
1491 | + while idx <> 0 do begin | |
1492 | + Result := Copy(s1, 1, idx - 1); | |
1493 | + Delete(s1, 1, idx); | |
1494 | + // タグのエンドを探す | |
1495 | + idx := AnsiPos('">', s1); | |
1496 | + if idx <> 0 then begin | |
1497 | + Delete(s1, 1, idx + 1); | |
1498 | + end; | |
1499 | + // </a> まで | |
1500 | + idx := AnsiPos('</a>', s1); | |
1501 | + if idx <> 0 then begin | |
1502 | + Result := Result + Copy(s1, 1, idx - 1); | |
1503 | + Delete(s1, 1, idx + 3); | |
1504 | + end; | |
1505 | + idx := AnsiPos(mark, s1); | |
1506 | + end; | |
1505 | 1507 | |
1506 | - inc(i, 2); | |
1507 | - end; | |
1508 | + Result := Result + s1; | |
1508 | 1509 | end; |
1509 | 1510 | { |
1510 | 1511 | \brief HTML化のための置換 |
@@ -859,7 +859,7 @@ const | ||
859 | 859 | SPAMFILTER_FILE_NAME = 'SpamFilter.ini'; |
860 | 860 | LANGUAGE_FILE_NAME = 'language.ini'; |
861 | 861 | INPUTASSIST_FILE_NAME = 'InputAssist.ini'; |
862 | - FIXED_COOKIE = 'hana=mogera'; | |
862 | + FIXED_COOKIE = ''; | |
863 | 863 | REPLACE_FILE_NAME = 'replace.ini'; |
864 | 864 | EXT_PREVIEW_FILE_NAME = 'extpreview.ini'; |
865 | 865 |
@@ -13,8 +13,8 @@ SourceDir=G:\Release | ||
13 | 13 | OutputDir=G:\InnoSetup\Output |
14 | 14 | SetupIconFile="G:\gikoNaviSFX_102\MainIcon.ico" |
15 | 15 | ; ギコナビのバージョンにあわせてください |
16 | -VersionInfoVersion=1.57.1.744 | |
17 | -OutputBaseFilename=gikoNavi_b57_setup | |
16 | +VersionInfoVersion=1.58.1.764 | |
17 | +OutputBaseFilename=gikoNavi_b58_setup | |
18 | 18 | |
19 | 19 | |
20 | 20 | [Tasks] |
@@ -1,4 +1,4 @@ | ||
1 | -■ギコナビ Version1.00 バタ58 Readme.txt | |
1 | +■ギコナビ Version1.00 バタ59 Readme.txt | |
2 | 2 | |
3 | 3 | |
4 | 4 | ------------------------------ |
@@ -108,7 +108,10 @@ LICENSE | ||
108 | 108 | ------------------------------ |
109 | 109 | 履歴 |
110 | 110 | ------------------------------ |
111 | -2008/09/20 | |
111 | +2008/XX/XX | |
112 | + Version バタ59 | |
113 | + | |
114 | +2008/09/16 | |
112 | 115 | Version バタ58 |
113 | 116 | プレビューのURLから登録してある外部アプリを起動する機能を追加 |
114 | 117 | レス送信エディタで、連続して投稿できるようにする機能を追加 |
@@ -2,6 +2,6 @@ | ||
2 | 2 | <span class="top"><a href="menu:<PLAINNUMBER/>" name="<PLAINNUMBER/>"><img src="<SKINPATH/>img\n_l.gif" class="left"></a> |
3 | 3 | <span class="name">No.<PLAINNUMBER/>:<NAME/></span><img src="<SKINPATH/>img\r.gif" class="right"></span><span |
4 | 4 | class="main"> |
5 | -<span class="date"><MAIL/> [<DATE/>]</span> | |
5 | +<span class="date"><MAIL/> <DATE/></span> | |
6 | 6 | <span class="message"><MESSAGE/></span></span> |
7 | 7 | </div> |
@@ -1,6 +1,6 @@ | ||
1 | 1 | <div><span class="top"><a href="menu:<PLAINNUMBER/>" name="<PLAINNUMBER/>"><img src="<SKINPATH/>img\o_l.gif" class="left"></a> |
2 | 2 | <span class="name">No.<PLAINNUMBER/>:<NAME/> </span><img src="<SKINPATH/>img\r.gif" class="right"></span><span |
3 | 3 | class="main"> |
4 | -<span class="date"><MAIL/> [<DATE/>]</span> | |
4 | +<span class="date"><MAIL/> <DATE/></span> | |
5 | 5 | <span class="message"><MESSAGE/></span></span> |
6 | 6 | </div> |