I had the same thought as hanhphuc since the forum updates, about the "old" forum code tags.
However didn't had enough time to practice, but now managed to get some.
So this is a variation of Lee's stripcomments that uses regex (I had a hard time to figure out the regex pattern) :
; (StripForumCodeTags (getfiled "Specify LISP file" (strcat (getenv "userprofile") "\\Desktop\\") "lsp" 16))
; StripForumCodeTags is a variation routine of the "stripcomments" one by Lee Mac https://www.theswamp.org/index.php?topic=53746.30 (Get rid of comments)
(defun StripForumCodeTags ( lsp / des rgx rtn str tmp )
(if (and (eq 'STR (type lsp)) (setq des (open lsp "r")))
(progn
(while (setq str (read-line des)) (setq tmp (vl-list* "\n" str tmp))) (close des)
(cond
( (null (setq rgx (vlax-create-object "vbscript.regexp"))) (prompt "\nUnable to interface with RegEx object.") )
(
(vl-catch-all-error-p
(setq rtn
(vl-catch-all-apply
(function
(lambda ( )
(foreach x '(Global Multiline Ignorecase)
(vlax-put-property rgx x acTrue)
); foreach
(vlax-put-property rgx 'pattern
(strcat ; \[\s*\w*\s*=\s*"\s*\w*\s*"\s*\]|\[\s*/*\s*[a-z]\s*\]|\[\s*/*\s*\w*\s*\]
"\\[\\s*\\w*\\s*=\\s*\"\\s*\\w*\\s*\"\\s*\\]"
"|" "\\[\\s*\/*\\s*[a-z]\\s*\\]"
"|" "\\[\\s*\/*\\s*\\w*\\s*\\]"
); strcat
); vlax-put-property
(vlax-invoke rgx 'replace (apply 'strcat (reverse tmp)) "")
)
)
)
)
)
(prompt (strcat "\nError: " (vl-catch-all-error-message rtn)))
)
( (princ rtn) )
)
)
(princ "\nUnable to read the file.")
)
(and (eq 'VLA-OBJECT (type rgx)) (vl-catch-all-apply (function vlax-release-object) (list rgx)))
(princ)
); defun StripForumCodeTags
And a sample code that I tested:
(defun [b][i][u]C:SampleCode[/b][/i][/u] ( / str SS i e o )
; unformat forum code tags, example
; [I][u][B] Grrr [/B][/u][ / I ] [ color = " blue " ] sample defun [ / color ]
([ color = " blue " ]cond[ / color ]
( (not (setq str (getstring [ color = " purple " ]"\nSpecify a string: "[ / color ]))) (prompt "\nBye") )
( (= "" str) (prompt "\nBYE!") )
( (setq SS (ssget [color="purple"]"_:L-I"[/color] '(0 . "*TEXT")))
(repeat (setq i (sslength SS))
(and
(setq e (ssname SS (setq i (1- i))))
(setq o (vlax-ename->vla-object e))
(if (vlax-property-available-p o 'TextString) (vlax-put-property o 'TextString str))
)[color="green"]; and [/color]
)[color="green"]; repeat [/color]
)[ color = "green" ]; setq SS [/color]
)[ color = "green" ]; cond [/ color ]
)[ color = "green" ]; defun [B][I][U]C:SampleCode[/B][/I][/U] [ / color ]
[ color = " blue " ] [color="green"]
[ attribute = " value " ] ; something [attribute="value"]
[ font = " arial " ] [font="arial"]
[ color = " blue " ] [color="green"]
[/color] [ / color ]
[/whatever] [ / whatever ]
[b][i][u] [ / i ] [ / u ] [ / b ]
[a] [ a ] [k] [ k ] [ / a ] [ / k ]
[ ] [ / ]
that will yield result of:
(defun C:SampleCode ( / str SS i e o )
; unformat forum code tags, example
; Grrr sample defun
(cond
( (not (setq str (getstring "\nSpecify a string: "))) (prompt "\nBye") )
( (= "" str) (prompt "\nBYE!") )
( (setq SS (ssget "_:L-I" '(0 . "*TEXT")))
(repeat (setq i (sslength SS))
(and
(setq e (ssname SS (setq i (1- i))))
(setq o (vlax-ename->vla-object e))
(if (vlax-property-available-p o 'TextString) (vlax-put-property o 'TextString str))
); and
); repeat
); setq SS
); cond
); defun C:SampleCode
; something
So you can get an idea of what "stuff" it gets rid off..
NOTE that one must be careful with the square brackets in his .lsp code, that are usually used within ssget/wcmatch patterns or regex (inception).
Cheers!