Методические материалы по разработке СТУ и СМИС, СМИК, СУКС
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Поиск литературы, чертежей, моделей и прочих материалов > Ищу прогу для шрифтов

Ищу прогу для шрифтов

Ответ
Поиск в этой теме
Непрочитано 15.02.2005, 12:39 #1
Ищу прогу для шрифтов
RomanS
 
Регистрация: 14.02.2005
Сообщений: 5

нужно заменить символы на обычные буквы алфавита
пример: %%222 это Ю
и так дальше
обычными средсвами типа find&replase - долго и чертежей много, и можно сбиться
Просмотров: 4680
 
Непрочитано 15.02.2005, 15:22
1 | #2
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Дык я ж тебе отправил. Или не дошло письмо?
Код:
[Выделить все]
(vl-load-com)

    (defun changeU+ (
		 String
		 /
		 inString
		 wrongSym
		 rightSym
		 oldLen
		 tempLen
		 newLen
		 iCount
		 )
  (setq wrongSym(list "%%192" "%%193" "%%194" "%%195" "%%196" "%%197" "%%168" 
                      "%%198" "%%199" "%%200" "%%201" "%%202" "%%203" "%%204"
		      "%%205" "%%206" "%%207" "%%208" "%%209" "%%210" "%%211"
		      "%%212" "%%213" "%%214" "%%215" "%%216" "%%217" "%%220"
		      "%%218" "%%221" "%%222" "%%223" "%%219" "%%224" "%%225"
		      "%%226" "%%227" "%%228" "%%229" "%%184" "%%230" "%%231"
		      "%%232" "%%233" "%%234" "%%235" "%%236" "%%237" "%%238"
		      "%%239" "%%240" "%%241" "%%242" "%%243" "%%244" "%%245"
		      "%%246" "%%247" "%%248" "%%249" "%%252" "%%250" "%%253"
		      "%%254" "%%255" "%%251" "%%185")
	
	rightSym(list 192 193 194 195 196 197 168 198 199 200 201 202 203 204
		      205 206 207 208 209 210 211 212 213 214 215 216 217 220
		      218 221 222 223 219 224 225 226 227 228 229 184 230 231
		      232 233 234 235 236 237 238 239 240 241 242 243 244 245
		      246 247 248 249 252 250 253 254 255 251 185)
	inString String
	oldLen(strlen inString)
	tempLen oldLen
	iCount 0
	); end setq
      (repeat 2
  (if(vl-string-search "%%" inString)
    (progn
  (while(/= tempLen newLen)
    (repeat(length wrongSym)
    (setq tempLen newLen
      	  inString(vl-string-subst(chr(nth iCount rightSym))(nth iCount wrongSym) inString)
          iCount(1+ iCount)); end setq
      ); end repeat
    (setq newLen(strlen String)
	  iCount 0); end setq
    ); end while
  (setq newLen(strlen inString)
	rCount (+ rCount(/(- oldLen newLen)6))
	); end setq
  ); end progn
    ); end if
	); end repeat
  inString
  ); end changeU+



(defun c:rusm (/
	       actDoc
	       selText
	       selBlocks
	       attList
	       blockCol
	       layerCol
	       layoutCol
	       layState
	       rCount
	       )

  
  (princ "\n§§§   RUSM V1.9 Russian Letters Restore Utility   §§§")
  (princ "\n§§§ Special Version For Microstation Exported Files §§§")
  (princ "\n§§§§ ©Alexander Smirnov, Riga, 2005, asmirnov@inbox.lv §§§§")
  (getstring "\n§§§ Press [Enter] to Run or [Esc] to Quit ")
  (setvar "cmdecho" 0)
  (command "_.undo" "_BE")
  (setq rCount 0
	actDoc(vla-get-ActiveDocument(vlax-get-acad-object))
	layerCol(vla-get-layers actDoc)
	layState '()
	); end setq
  
  (vlax-for l layerCol
    (setq layState(append layState(list(list l(vla-get-Lock l)))))
    (vla-put-Lock l :vlax-false)
    ); end vlax-for
    
(if
  (setq selText(ssget "_X" '((-4 . "<OR")(0 . "TEXT")(0 . "MTEXT")(-4 . "OR>"))))
  (progn
  (setq selText
	 (mapcar 'vlax-ename->vla-object
		 (vl-remove-if 'listp
		   (mapcar 'cadr
			   (ssnamex selText)))))
  (foreach i selText
    (vla-put-TextString i (changeU+ (vla-get-TextString i)))
    ); end foreach 
	); end progn
  ); end if
  (if
  (setq selText(ssget "_X" '((0 . "ATTDEF"))))
  (progn
  (setq selText
	 (mapcar 'vlax-ename->vla-object
		 (vl-remove-if 'listp
		   (mapcar 'cadr
			   (ssnamex selText)))))
  (foreach i selText
    (vla-put-TextString i (changeU+ (vla-get-TextString i)))
    (vla-put-TagString i (changeU+ (vla-get-TagString i)))
    (vla-put-PromptString i (changeU+ (vla-get-PromptString i)))
    ); end foreach 
	); end progn
  ); end if

  (if
  (setq selBlocks(ssget "_X" '((0 . "INSERT"))))
  (progn
    (setq selBlocks
	   (mapcar 'vlax-ename->vla-object
		 (vl-remove-if 'listp
		   (mapcar 'cadr
			   (ssnamex selBlocks)))))
  (foreach i selBlocks
    (if(= :vlax-true(vla-get-HasAttributes i))
      (progn
    (setq attList(vlax-safearray->list(vlax-variant-value(vla-GetAttributes i))))
    (foreach i attList
      (vla-put-TextString i (changeU+(vla-get-TextString i)))
      (vla-put-TagString i (changeU+(vla-get-TagString i)))
      ); end foreach
    ); end progn
      ); end if
	  ); end foreach
    ); end progn
  ); end if

  (if
  (setq blockCol(vla-get-blocks actDoc))
  (progn
  (vlax-for i blockCol
    (vla-put-Name i(changeU+ (vla-get-Name i)))
    (vlax-for n i
      (if(member(vla-get-ObjectName n) '("AcDbMText" "AcDbText"))
	(vla-put-TextString n (changeU+ (vla-get-TextString n)))
	); end if
      ); end vlax-for
    ); end vlax-for
(command "_.regenall")
  ); end progn
    ); end if
(if layerCol
  (progn
     (vlax-for i layerCol
	(vla-put-Name i (changeU+ (vla-get-Name i)))
    ); end vlax-for
    ); end progn
  ); end if

  (if
    (setq layoutCol(vla-get-Layouts actDoc))
      (progn
     (vlax-for l layoutCol
	   (if(not
		(vl-catch-all-error-p
		  (vl-catch-all-apply
	               'vla-put-Name (list l (changeU+ (vla-get-Name l)))
		       ); end vl-catch-all-apply
		  ); end vl-all-error-p
		); end not
	     T
	     ); end if
    ); end vlax-for
    ); end progn
  ); end if

  (foreach l layState
    (vla-put-Lock (car l)(cadr l))
      ); end vlax-for

  (princ(strcat "\n§§§ Restore Complete. Letters Restored: ["(itoa rCount) "]"))(terpri)
  (princ "\n§§§ Welcome to http://www.dwg.ru §§§")
  (if(=(substr(getvar "ACADVER")1 2) "16")
        (command "_.undo" "_E") 
      ); end if
  (setvar "cmdecho" 1)
  (princ)
 ); end rusr

(princ "RUSM V1.9 Help: Type RUSM and Press [Enter] to Run ")
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 15.02.2005, 16:24
#3
RomanS


 
Регистрация: 14.02.2005
Сообщений: 5
<phrase 1=


Огромное СПАСИБО. Велике ДЯКУЮ. Thank You Very Much. Danke SCHOON. Merci. Gracia. ΕΥΧΑΡΙΣΤΟ ΠΩΛΥ альба шюкран. Мулцимеску.
Супер. Просто супер.

Киев-Рига.
RomanS вне форума  
 
Непрочитано 15.02.2005, 20:11
#4
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Lūdzu, nav par ko...
{Smirnoff} вне форума  
 
Непрочитано 17.02.2005, 15:54 Остались проблемы
#5
Shaman

программист
 
Регистрация: 17.02.2005
Минск
Сообщений: 4


Спасибо за помощь, но почему-то с некоторыми символами все равно остаются проблемы.
__________________
Ох уже эти Автокады
Shaman вне форума  
 
Непрочитано 17.02.2005, 17:06
#6
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,154
<phrase 1=


Я может не в тему....но такие символы ОТОБРАЖАЮТСЯ шрифтами типа russw.shx, russwin.shx, ruslat.shx и т.д
С правкой, конечно, проблемы.
Apelsinov вне форума  
 
Непрочитано 17.02.2005, 18:09
#7
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Shaman
Цитата:
Спасибо за помощь, но почему-то с некоторыми символами все равно остаются проблемы.
Если можно поконкретнее о каких символах и в каких шрифтах идет речь. :?: Речь об этом варианте программы, по быстрому переделанному для конкретного cлучая или изначального RUSR?
>Apelsinov
Все устранимо, но хотелось бы знать поконкретнее. Дело в том что я вообще не сталкиваюсь с файлами в которых есть русские шрифты, если только кто то не пришлет. У нас по латышски все...
{Smirnoff} вне форума  
 
Непрочитано 18.02.2005, 14:40
#8
Shaman

программист
 
Регистрация: 17.02.2005
Минск
Сообщений: 4


>Fantomas
Проблема с этим вариантом программы. Просто в шрифте на том месте где должна стоять буква Ц(%%163) стоит буква Ö. (Я=ß, Ь=Ü, Д=Ä) Если заменяеш %%214 на %%163 в первом массиве (wrongSym), то начинаюся проблемы с отображением этой буквы. Хотя в окне редактирования текст выглядит правильно.
Если же в двух массивах заменит 214 на 163 (wrongSym и rightSym), то отобразится все правильно, но в окне редактирования будет буква Ö.
Кроме того такая же проблема с Юникодовскими кодами тех же букв
например буква Ц вместо кода \U+00D6 имеет код \U+00A3.
И после использования программы RUSR 1.5 эти буквы (а именно Ц, Д, Ь и Я) остались не перекодированны.
Или есть версия RUSR которая работает с ASCII? Может у тебя есть ее исходник? А то не хочется запускать для переодировки 2 программы по отдельности.

Шрифт придет по почте от Sergi
__________________
Ох уже эти Автокады
Shaman вне форума  
 
Непрочитано 18.02.2005, 15:39
#9
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,154
<phrase 1=


Цитата:
Сообщение от Fantomas
>Apelsinov
Все устранимо, но хотелось бы знать поконкретнее. Дело в том что я вообще не сталкиваюсь с файлами в которых есть русские шрифты, если только кто то не пришлет. У нас по латышски все...
В смысле - конкретнее? Я вроде все написал.
Просто если у кому-то не нужна правка текста,
а только его правильное отображение,
то возможно просто надо изменить шрифт.

Вообще я сам с этим сталкивался несколько раз, но давно.
Получаешь чужой файл - а там все этими самыми хрюнями написано.
Лечил именно заменой шрифта, но на редактор онож не действует, потому с правкой такого текста были проблемы.

Програмка твоя* все проблемы такого рода может решить,
но мне интересно как такой текст вообще-то получается?
С помощью конвертирования из других программ в dwg?
или ,может быть , это наследство акаду из старых версий...

*(ты - сдесь это от бааальшого уваженья )
Apelsinov вне форума  
 
Непрочитано 18.02.2005, 15:56
#10
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Shaman

Исходник вы видите в постинге, по стравнению с версией 1.5 добавлено только обработка некоторых объектов содержащих текст. С разными шрифтами безусловно могут быть проблеммы и думаю лучшим решением будет не попытки бесконечно изменять списки rightSym и wrongSym а написать таки версию с диалоговым окном, где таблицы можно будет подгружать из текстовых файлов, самостоятельно создавать и редактировать их. На днях займусь этим, результат вы увидите в разделе Download.

А пока постарайтесь самостоятельно заменить нужные символы в списках. RUSR в некомпилированном виде лежит сейчас в Download. Признак по которму строка подлежит обработке находится в строке (if(vl-string-search "%%" inString) в RUSR соответственно вместо "%%" стоит "\\U+".
{Smirnoff} вне форума  
 
Непрочитано 18.02.2005, 16:24
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
но мне интересно как такой текст вообще-то получается?
С помощью конвертирования из других программ в dwg?
или ,может быть , это наследство акаду из старых версий...
Много проблем возникает при экспорте, как та которая решалась в этой ветке.

А стандартный "автокадовский" случай это когда файл создается и редактируется при различных региональных установках. Проблемма в том что где то в автокадовском файле (не выяснил где) сохраняется при каких региональных установках он был создан или в последний раз редактировался. Т. е. при открытии фала созданного в English USA при региональных установках Russian АКАД пытается воспроизвести этот текст соответственно юникодовской странице Latin, а не символы которых в этой таблице нет записывает как "\\U+" Сохранился и получил результат... Самое интересное что на данное явление влияет не только системный язык, но и страна.
Меня вообще поражает что Autodesk до сих пор не может решить эту проблемму. Наверное американцы считают что все остальные должны писать исключительно на латинице.

На счет "ты" не вопрос Это я в основном на вы, мало ли кто обидится за фамилиарность :shock: Думаю обращение на "ты" надо прописать в правилах форума. 8)
{Smirnoff} вне форума  
 
Непрочитано 23.02.2005, 14:26
#12
Shaman

программист
 
Регистрация: 17.02.2005
Минск
Сообщений: 4


>Fantomas
Спасибо за исходник программы!
Только при ее использовании была найдена следущая ошибка, при наличии в Multiline Text следущего содержимого:

\U+00C8\U+00CD\U+00B3\U+00C8\U+00CAA\U+00BC\U+00C8\U+00FF \U+00C8\U+00CB\U+00C8 O\U+00C1PA\U+00C1O\U+00D2\U+00CAA PE\U+00C7\U+00D3\U+00CB\U+00BE\U+00D2A\U+00D2O\U+00C2
\U+00C8\U+00C7\U+00CCEPE\U+00CD\U+00C8\U+00C9 \U+00C8 \U+00C2\U+00DB\U+00B3A\U+00D7A C\U+00C8\U+00C3\U+00CDA\U+00CBA \U+00C8\U+00C7\U+00CCEPE\U+00CD\U+00C8\U+00FF \U+00CDA \U+00CCEC\U+00D2E

при работе версии 1.5 результат получился такой:
ИН\U+00B3ИКA\U+00BCИя ИЛИ OБPAБOТКA PEЗУЛ\U+00BEТAТOВ
ИЗМEPEНИЙ И ВЫ\U+00B3AЧA CИГНAЛA ИЗМEPEНИя НA МECТE

а при работе версии 1.9:
ИН\U+00B3ИКA\U+00BCИя ИЛИ OБPAБOТКA PEЗУЛ\U+00BEТAТOВ
ИЗМEPEНИЙ И ВЫ\U+00B3AЧA C\U+00C8ГНAЛA \U+00C8ЗМEPEН\U+00C8я НA МECТE

Почему-то в разных частях Multiline буква "И" (\U+00C8) то перекодировалась, а то нет. Можно кстати где-нить взять предыдущие версии программы?
__________________
Ох уже эти Автокады
Shaman вне форума  
 
Непрочитано 24.02.2005, 19:25
#13
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


>Shaman

Привет. Извини, поздно отвечаю. Думаю это особенности отдельно взятых шрифтов.
Я уже пишу версию с диалоговым окном, где можно будет быстро менять таблицы декодировки, сохранять их в файлах и загружать их и редактировать.

Версия 1.5 принципиально ничем не отличается, но обрабатывает только TEXT и MTEXT. Таблица возможно была доработана уже не помню...

Подожди некоторое время или сам поменяй элементы обоих списков. Чтобы выяснить каким номерам соответствуют символы во втором списке, сделайте в командной строке (vl-string->list "ваша строка").
{Smirnoff} вне форума  
 
Непрочитано 01.03.2005, 15:40
#14
Shaman

программист
 
Регистрация: 17.02.2005
Минск
Сообщений: 4


Цитата:
Сообщение от Shaman
Почему-то в разных частях Multiline буква "И" (\U+00C8) то перекодировалась, а то нет.
При повторном запуске программы (1.9) не перекодированные буквы "И" были перекодированы.
__________________
Ох уже эти Автокады
Shaman вне форума  
 
Непрочитано 01.03.2005, 17:34
#15
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Цитата:
При повторном запуске программы (1.9) не перекодированные буквы "И" были перекодированы.
Знаю такую проблемму. Причина её появления пока остается для меня загадкой и скрыта где то в недрах ActiveX... Я контролировал в отладчике один файл с такой же проблеммой, на замену передавалась исправленная строка, однако после применения функции (VLA-PUT-TEXTSTRING кажется именно буква 'и' опять отображалась в \+U.

Я сейчас переписываю все на VBA, с диалоговым окном где можно будет править таблицы самостоятельно, может там эта проблема отпадет...
{Smirnoff} вне форума  
 
Непрочитано 07.09.2019, 14:08
#16
allar8


 
Регистрация: 12.03.2013
Сообщений: 600


Цитата:
Сообщение от {Smirnoff} Посмотреть сообщение
(vl-load-com)

(defun changeU+ (
String
/
inString
wrongSym
rightSym
oldLen
tempLen
newLen
iCount
)
(setq wrongSym(list "%%192" "%%193" "%%194" "%%195" "%%196" "%%197" "%%168"
"%%198" "%%199" "%%200" "%%201" "%%202" "%%203" "%%204"
"%%205" "%%206" "%%207" "%%208" "%%209" "%%210" "%%211"
"%%212" "%%213" "%%214" "%%215" "%%216" "%%217" "%%220"
"%%218" "%%221" "%%222" "%%223" "%%219" "%%224" "%%225"
"%%226" "%%227" "%%228" "%%229" "%%184" "%%230" "%%231"
"%%232" "%%233" "%%234" "%%235" "%%236" "%%237" "%%238"
"%%239" "%%240" "%%241" "%%242" "%%243" "%%244" "%%245"
"%%246" "%%247" "%%248" "%%249" "%%252" "%%250" "%%253"
"%%254" "%%255" "%%251" "%%185")

rightSym(list 192 193 194 195 196 197 168 198 199 200 201 202 203 204
205 206 207 208 209 210 211 212 213 214 215 216 217 220
218 221 222 223 219 224 225 226 227 228 229 184 230 231
232 233 234 235 236 237 238 239 240 241 242 243 244 245
246 247 248 249 252 250 253 254 255 251 185)
Чет попробовал кракозябры из rustxt перевести в символы нормальных шрифтов - не получилось
Экспериментировал на символе %%161 - в нормальных шрифтах это %%225
это маленькая буква "б"

в коде писал так:
(setq wrongSym(list "%%161")

rightSym(list 225)

в результате превращается в знак вопроса
И это только с отдельным символом а в слове вообще не находит и выдает сообщение
§§§ Restore Complete. Letters Restored: [0]
мож не так что-то понимаю?
или с этим шрифтом не покатит этот лисп?

Последний раз редактировалось allar8, 07.09.2019 в 16:18.
allar8 вне форума  
Ответ
Вернуться   Форум DWG.RU > Поиск литературы, чертежей, моделей и прочих материалов > Ищу прогу для шрифтов

Система Техэксперт
Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск