Trước hết xin m?i các bác ghé đây xem thông tin http://www.vninformatics.com/forum/?action=msg&msg=102345<br>3330#1023453330
và download trước ...

À ... bữa trước post bài vội quá nên quên thêm một chút thông tin v? tác giả và chương trình rồi ! Hè hè, bây gi? thêm nè "PostPad ver 0.00 : sản phẩm của thành viên box GLLQ, TTNT, C++, CTDL, Linhtinh... đã xuất xưởng !..."

È, chơi vậy thui, bài này post lên là nhằm giúp những bác trình độ JS bèo nhèo như em đỡ tốn tí công sức khi phát triển tiếp chương trình :
- Trước hết, m?i cải tiến, nâng cấp có thể sửa đổi trong file parsedata.js nằm trong folder DDTHForumTreXanh.
- Hàm parseHTML() đuợc viết như sau :
+ Dùng hàm Replace() của lớp String để chuyển đổi từ dạng DDTHCode sang dạng HTMLCode.
+ Dùng các Regular Expression để xác định chuỗi DDTHCode cần đuợc thay thế !
+ Dùng các tag của HTMLCode để thay thế.
- Một số cú pháp thông dụng với Regular Expression (đã đặt trong dấu nháy ' ') :
'\' : Marks the next character like C/C++ done (\n, \r, \t)
'^' : Matches the beginning of input.
'$' : Matches the end of input.
'*' : Matches the preceding character zero or more times.
'+' : Matches the preceding character one or more times.
'?' : Matches the preceding character zero or one time.
'.' : Matches any single character except a newline character.
'(p)' : Matches pattern p and remembers the match. Retrieve from $1,$2...
'x|y' : Matches either x or y.
'{n,m}' : m,n >= 0. Matches preceding character at least n and at most m times.
'[...]' : A character set. Matches any one of the enclosed characters.
'[^...]' : A negative character set. Matches any character not enclosed.
'\d' : Matches a digit character.Equivalent to [0-9].
'\D' : Matches a nondigit character. Equivalent to [^0-9].
'\s' : Matches any white space including space, tab, form-feed, etc.
'\S' : Matches any nonwhite space character.
'\w' : Matches any word character including underscore.
'\W' : Matches any nonword character.
'\num' : Matches num, where num is a positive integer.
'\xn' : Matches n, where n is a two digits long hexadecimal value.

Các bác vận dụng các qui tắc trên để parse ... ví dụ :

- RegExp = /({color=0000FF}color=#{/color})(\xn\xn\xn)/g sẽ match với những chuỗi "color=#0ff00f" hay "color=#f00f0f"... chứ không match với "color=#0f" hay "color=0fffa0" ...
- Bây gi? vận dụng để thay thế thành chuỗi "font color=#..." như sau :

str.replace(RegExp, "font color=#$2");

* Ở đây dấu ngoặc () trên cái RegExp là để retrieve sau này thông qua ký tự $[index], ví dụ ở đây $1 sẽ là chuỗi "color=#", $2 là cái chuỗi số hex 3 bytes

Vậy hén ... cứ thế mà tiến ... À quên ... có thêm 1 bug nữa mà không để ý, đó là ký tự spacebar, nếu các bác gõ nhi?u spacebar liên tục nhau thì chương trình hiện ra hổng giống ... do đó, xin m?i các bác vào hàm parseHTML() và thêm dòng sau :

dataparsed = dataparsed.replace(/\s\s/g,"&n'bsp;&n'bsp;");

(Thêm 2 cái dấu nháy xanh xanh để cái trang web không hiểu nhầm khi post bài này ...)

À, nhớ thêm cho đúng vị trí đó ! Ví dụ nên để ngay trên cái dòng "fileheader=..."
Thui ... hết rồi !... Nếu ai hổng down đuợc thì mail tới em ... em sẽ gửi lại !...