Так а все правильно - все дело в том, что по идее для многострочного текста символы "{" и "}" являются служебными, обрамляющими форматирование, насколько я понял. Можно, конечно, снять это дело, и обращаться только к частям "\\f" и ";" (который идет после "\\f" и означает окончание описания фонта), но тогда гарантированно будут оставаться символы "}".
п.1: вот вариант с глобальным откатом для вызовов unf-all и unf-sel (я прошу прощения, упустил как-то из виду) - код просто заменить:
;|=============================================================================
* Функция удаления форматирования на выбранных элементах многострочного
* текста
=============================================================================|;
(defun c:unf-sel (/ selset item *kpblc-activedoc*)
(setq selset (ssget '((0 . "MTEXT")))
*kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))
) ;_ end of setq
(vla-startundomark *kpblc-activedoc*)
(while (and
selset
(> (sslength selset) 0)
) ;_ end of and
(setq item (ssname selset 0))
(ssdel item selset)
(vlax-put-property
(vlax-ename->vla-object item)
"TextString"
(_kpblc-clear-mtext
(vlax-get-property (vlax-ename->vla-object item) "TextString")
) ;_ end of _kpblc-clear-mtext
) ;_ end of vlax-put-property
) ;_ end of while
(vla-endundomark *kpblc-activedoc*)
) ;_ end of defun
;|=============================================================================
* Функция удаления форматирования на всех элементах многострочного текста
=============================================================================|;
(defun c:unf-all (/ selset item *kpblc-activedoc*)
(setq selset (ssget "_X" '((0 . "MTEXT")))
*kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object))
) ;_ end of setq
(vla-startundomark *kpblc-activedoc*)
(while (and
selset
(> (sslength selset) 0)
) ;_ end of and
(setq item (ssname selset 0))
(ssdel item selset)
(vlax-put-property
(vlax-ename->vla-object item)
"TextString"
(_kpblc-clear-mtext
(vlax-get-property (vlax-ename->vla-object item) "TextString")
) ;_ end of _kpblc-clear-mtext
) ;_ end of vlax-put-property
) ;_ end of while
(vla-endundomark *kpblc-activedoc*)
) ;_ end of defun
п.2 Форматирование вида \h2x не является форматированием шрифта, оно задает только высоту следующего текста. Поэтому и не сносится.
п.3. А что там должно быть изначально-то?
Смотри логику поведения - полужирным выделено сносимое. для удобства еще и на разные строки разбил ;)
[b]{\fArial Narrow|b0|i0|c204|p34;[/b]
Воздухозаборная
[b]\fArial Narrow|b0|i0|c0|p34;[/b]
\
[b]{\fArial Narrow|b0|i0|c204|p34;[/b]
решетка
[b]\fArial Narrow|b0|i0|c0|p34;[/b]
\
[b]}[/b]
[b]\fArial Narrow|b0|i0|c204|p34;[/b]
900х600 (
[b]\fArial Narrow|b0|i0|c0|p34;[/b]
h
[b]\fArial Narrow|b0|i0|c204|p34;[/b]
) на отм.2,600
[b]}[/b]
Так что в принципе все правильно - надо либо сносить лишние "\", либо как-то еще выкручиваться - например, в функции _kpblc-clear-mtext на моменте назначения sub_pos поиграться с выбираемыми моментами. Только тут надо учесть, что просто "\\" сносить низзя - таким манером еще и подчеркивание, бывает, назначается.