mokson 发表于 2020-6-15 11:34:46

用Lsp如何实现这个功能:删除字符格式?

本帖最后由 mokson 于 2020-6-15 14:03 编辑

当多行文字有多种字体时,可以打开多行文字的编辑状态并选中文本后,选择 “删除格式” > “删除字体格式”,以一键实现将多种字体变为一种字体。这是手工操作的方法,用lisp来实现的话,如何写这个lisp呢?


start4444 发表于 2020-6-15 12:26:44

http://bbs.mjtd.com/forum.php?mod=viewthread&tid=82857&highlight=%B6%E0%D0%D0%CE%C4%D7%D6%2B%B8%F1%CA%BD
搜一下,挺多的

e2002 发表于 2020-10-8 10:56:28

除了SctipMText 5.0c,Lee Mac也提供了一个 调用 ExgExp 库来处理的函数。
另外还有其他一些人也写了这样的处理函数。
前一段为了处理 Table中的文字去除格式,我参考某个函数,也写了一个直接解析去除的函数。

wmz 发表于 2020-10-11 14:03:03

本帖最后由 wmz 于 2020-10-11 14:12 编辑

e2002 发表于 2020-10-8 10:56
除了SctipMText 5.0c,Lee Mac也提供了一个 调用 ExgExp 库来处理的函数。
另外还有其他一些人也写了这样的 ...
SctipMText 5.0c太过复杂,操作不自由,我试着写一段直观一点的代码;;;;;;;取多行文字函数(e---多行文字图元对象名称,调用:(MtoT e))
(defun MtoT(e / ee str n n1 nn str0 str1 stra)
    (vl-load-com)
    (setq    n nil nn 0 str0 "" str1 "" stra "")
    (setq   ee (entget e))
    (setqstr (cdr(assoc 1 ee)))
    (while
         (setq   n (vl-string-search ";" str))
         (setq str (substr str (+ n 2))) ;;;;;;取格式符以后的字符串,无格式符则忽略
    )
    (setqstr (vl-string-subst "" "}" str)) ;;;;;去掉尾符号,无格式符则忽略
    (setq   nn (strlen str) n1 1 stra "")
   ;;;;;以下循环去除换行符"\P"但保留不属于换行的大写字符P——高手们可将下面的代码简化或优化
    (repeat nn
         (setq str1 "" str0 "")
         (setq str0 (substr str n1 1) n1 (1+ n1))
         (if (and(> n1 2)(<= n1 nn))(setq str1 (substr str (- n1 2) 1)))
      (cond ((and(= str0 "P")(/= str1 "\\"))(setq stra (strcat stra str0)))
          ((and(/= str0 "\\")(/= str0 "P"))(setq stra (strcat stra str0)))
      )
    )
       stra ;;;;;单行文字全字符串
)



页: [1]
查看完整版本: 用Lsp如何实现这个功能:删除字符格式?