Нужен скрипт, очень!

  • Автор темы Автор темы MBoris
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

MBoris

Топикстартер
10 лет на форуме
Сообщения
66
Реакции
0
Уважаемые Господа! Не секрет, что зачастую мы получаем для вёрстки файлы, содержащие вкрапления текста на разных языках, например на греческом. Если всё сделано правильно, то нет проблем. Однако, зачастую большие учёные, пишущие статьи, используют для этого фонты, где греческие буквы расположены вместо английских. В ИД это создаёт большие проблеммы. Короче, нужен скрипт на Javascriptе (работаем на Маке), который бы заменял в ВЫБОРКЕ греческие буквы, введённые таким варварским образом, в соответствующие символы юникода. В javascriptе не силён, нужен хотя бы пилотный скрипт, дальше уж сам как-нибудь.
Заранее спасибо. Да, совсем забыл: работаем на CS.
 
Ответ: Нужен скрипт, очень!

Образец — в студию, плиз:
- два скриншота с примерами, как есть и как надо.
- inx в архиве (только zip, а не sit).
 
Ответ: Нужен скрипт, очень!

Я знаю, их есть у меня. Но он мне не нравится.
 
Ответ: Нужен скрипт, очень!

kaatm сказал(а):
Образец — в студию, плиз:
- два скриншота с примерами, как есть и как надо.
- inx в архиве (только zip, а не sit).
Мне сложно в данный момент приготовить скриншоты и экспортный файл, но попробую обьяснить на словах:
есть текст на аглицком, к примеру, и в середине несколько слов на греческом. Думаю, все представили. Теперь, когда импортируем файл в ИД, должны получить весь текст на англицком, а греческий текст - соответственно, на греческом, если использовался нормальный греческий фонт, либо розовые квадратики, если аналогичный фонт отсутствует в системе (тогда присваиваем ему соответствующий символьный стиль - и идём дальше).
В случае фонта, изготовленного для работы на компах БЕЗ УСТАНОВЛЕННОГО ЯЗЫКОВОГО СКРИПТА (SuperGreek например), где греческие буквы расположены на месте ASCII кодов английского языка и имеющего, соответственно, установку ASCII Роман, вместо греческих букв получаем английские (а чаще - крякозябры). Вот эти крякозябры и нужно менять.
Нужно: в выборке найти символ из списка символов фонта изменить на символ из списка юникодов соответствия. (Списки - это будут мои проблеммы, нужно будет делать их для каждого из этих дебильных фонтов и не только для греческого.) Мне бы только само тело скрипта, типа: в выделенном найти первый символ, определить его АСЦИИ , заменить на соответсвующий уникод из списка замен, перейти к следующему, повторить до конца выделенного, после чего завершить работу.
В дальнейшем можно добавить определение конечного символьного стиля. Но это уже программа-максимум. Ну как, готов кто-нибудь?
Заранее спасибо и чтоб вы мне все были здоровы! 'Pkdraka'
 
Ответ: Нужен скрипт, очень!

Все равно, без исходников ничего не понятно.
Причем тут "языковые скрипты" и что это такое?
Используются ли в верстке юникодные OT-шрифты?
 
Ответ: Нужен скрипт, очень!

Как я понял, в ворде пользуются неуникодным шрифтом (шрифтами) с греческими символами. При импорте в принципиально уникодный индез вместо "хреческих" букв — всякая байда. Человеку нужна замена одних (неправильных) символов на другие (правильные).
Но тут я думаю, нужно иметь:
а) образец текста (того, в Word'е)
б) шрифт(ы) — те, неправильные
в) и, видимо, увлекательные посулы для скриптописателя :)
 
Ответ: Нужен скрипт, очень!

Дело не в том, что Ворд использует не юникод, а в том, что используются 7-битные фонты с символами греческого на местах английских. Правильная интерпретация этих фонтов в принципе невозможна в Индезайне.
Есть скрипт, предназначенный для перевода киррилицы в юникод (Апплскрипт), но у него особенность та, что обработке подвергаются все связанные фреймы, а мне нужно только выборку обрабатывать. Если кто сможет его подредактировать, меня вполне устроит!

tell application "InDesign CS"
tell document 1
set SelBoxes to selection
repeat with x in SelBoxes
set TextFrom to item 1 of text of parent story of x
--try
if class of x is text frame then ¬
if TextFrom is not "" then set text of parent story of x to my EncodeText(TextFrom)
--end try
end repeat
end tell
end tell


on EncodeText(Str)
set HexCodesStr to {"<0410>", "<0411>", "<0412>", "<0413>", "<0414>", "<0415>", "<0401>", "<0416>", "<0417>", "<0418>", "<0419>", "<041A>", "<041B>", "<041C>", "<041D>", "<041E>", "<041F>", "<0420>", "<0421>", "<0422>", "<0423>", "<0424>", "<0425>", "<0426>", "<0427>", "<0428>", "<0429>", "<042C>", "<042B>", "<042A>", "<042D>", "<042E>", "<042F>", "<0430>", "<0431>", "<0432>", "<0433>", "<0434>", "<0435>", "<0451>", "<0436>", "<0437>", "<0438>", "<0439>", "<043A>", "<043B>", "<043C>", "<043D>", "<043E>", "<043F>", "<0440>", "<0441>", "<0442>", "<0443>", "<0444>", "<0445>", "<0446>", "<0447>", "<0448>", "<0449>", "<044C>", "<044B>", "<044A>", "<044D>", "<044E>", "<044F>"}
set RusChars to "??????›??????????????????????????‡·‚„‰????????????????????????????"
set ResultString to Str
repeat with x from 1 to 66
if (character x of RusChars) is in ResultString then
set AppleScript's text item delimiters to {(character x of RusChars)}
set PartialStr to text items of ResultString
set AppleScript's text item delimiters to {item x of HexCodesStr}
set ResultString to PartialStr as string
end if
end repeat
set AppleScript's text item delimiters to {""}
return ResultString
end EncodeText
 
Ответ: Нужен скрипт, очень!

Выложи пример такого текста (сюда или мне в почту) - попробую помочь.
 
Ответ: Нужен скрипт, очень!

Сейчас попробую выложить. Сразу скажу, текст для примера создан искусственно: в оригинале - основной текст на иврите. Греческий текст введён с помощью фонта TimesITGR.
В архиве: indd, inx и jpeg, чтобы понятно было, как это у меня выглядит.
 

Вложения

Ответ: Нужен скрипт, очень!

Это все прекрасно, но где взять кодировку?
Смотрю я, MBoris, не нужен вам скрипт… Не хотите вы инфу давать.
 
Ответ: Нужен скрипт, очень!

kaatm сказал(а):
Это все прекрасно, но где взять кодировку?
Смотрю я, MBoris, не нужен вам скрипт… Не хотите вы инфу давать.
Простите, Каатм, но какую кодировку? Соответстия крякозябра юникоду?, Ну так для скрипта это не столь существенно: таблицы замен можно ведь и корректировать под конкретные крякозябры! Главное:
1. в выборке ->2. найти первый символ->3. в таблице искомых найти соответствующий ->4. из таблицы уникодов ввести соответствующий найденному искомому->5. перейти к последующему в выборке ->повторить шаги 3-5, (если больше символов в выборке нет - завершить работу.
Если хотите кодировки, то можно смотреть на:
http://www.hri.org/fonts/advanced/AllElot.txt (Greek Windows)
http://www.hri.org/fonts/advanced/All437.txt (Greek DOS)
 
Ответ: Нужен скрипт, очень!

Скажите, господа, есть здесь кто-нибудь, кто знает Аpplescript и может помочь мне подправить нижеприведённый кусок скрипта так, чтобы он обрабатывал только выборку?

Код:
tell application "InDesign CS"
	tell document 1
		set SelBoxes to selection
		repeat with x in SelBoxes
			set TextFrom to item 1 of text of parent story of x
			--try
			if class of x is text frame then ¬
				if TextFrom is not "" then set text of parent story of x to my EncodeText(TextFrom)
			--end try
		end repeat
	end tell
end tell
 
Ответ: Нужен скрипт, очень!

MBoris сказал(а):
Если хотите кодировки, то можно смотреть на:
http://www.hri.org/fonts/advanced/AllElot.txt (Greek Windows)
http://www.hri.org/fonts/advanced/All437.txt (Greek DOS)
Вы уверены, что кодировка в маковском шрифте соответствует досовской и виндовской? Я, наверно, тупой, но в файлах по ссылкам ничего понять не могу.

Разумнее, все же, писать на JavaScript — так вам гораздо быстрее помогут разобразаться с фрагментами кода.
 
Ответ: Нужен скрипт, очень!

Ну судя по тексту он обрабатывать только выделенные фреймы.
 
Ответ: Нужен скрипт, очень!

2 MBoris
PHP:
with (app) {
	myStory = selection[0].parentStory;
	
	findPreferences = null; 
	changePreferences = null;
	
	findPreferences.appliedFont = "TimesITGR";

	myTextArray = myStory.search("^?", false, false);
	
	for (i =0; i < myTextArray.length; i++)
	{
		alert (myTextArray[i].contents);
	}
}
Поставьте кусок внутрь текстового фрейма и запустите этот скрипт (.jsx). Он вам найдет в тексте все символы с примененным шрифтом "TimesITGR" и загонит их в массив.
А дальше уже сами - вместо alert (myTextArray.contents); напишите замену уже в соответствии с той таблицей что вы никому не хотите разглашать :)
 
Ответ: Нужен скрипт, очень!

kaatm сказал(а):
Вы уверены, что кодировка в маковском шрифте соответствует досовской и виндовской? Я, наверно, тупой, но в файлах по ссылкам ничего понять не могу.

Речь идёт о ПиСишных фонтах, сделанных для программ набора, НЕ ИСПОЛЬЗУЮЩИХ языковую поддержку операционнки.(см. SuperGreek, TimelTGR, LaserHebrew для иврита). ID их каким-то образом распознаёт как фонты Roman (Latin). Мне ещё придётся добывать их, открывать в Фонтографе и смотреть, какой символ где сидит и какому соответствует: геморой ещё тот, но вас им грузить не хочу, поэтому-то и "скрываю инфу". Будем считать так: гипотетически есть некий список крякозябров (хоть 1,2,3,4....) и другой список - заменителей (a,b,c,d,e...). Выбираем в тексте некое число, 4873, к примеру, прогоняем скрипт и получаем dhgc

Разумнее, все же, писать на JavaScript — так вам гораздо быстрее помогут разобразаться с фрагментами кода.

Дык, по мне - хоть на Фортране, лишь бы работал!, НО: в наличии CS, а посему jsx не канает.

ragman сказал(а):
Поставьте кусок внутрь текстового фрейма и запустите этот скрипт (.jsx). Он вам найдет в тексте все символы с примененным шрифтом "TimesITGR" и загонит их в массив.
А дальше уже сами - вместо alert (myTextArray.contents); напишите замену уже в соответствии с той таблицей что вы никому не хотите разглашать.

Нашёл, обработал, а как назад запихнуть? Насчёт неразглашения - см. выше.

Я вот чего спрашиваю: приведён код эплскрипта, который, как верно заметил Strizh, обрабатывает фреймы целиком, а мне нужно только выборку (словечко-два). Можно это на JS перелопатить? Или может кто поможет подправить этот эплскрипт? Это всё, что мне нужно, ребята! Чесслово! Ну тупой я! Когда я программирование учил, вас, наверное в октябрята принимали - башка у меня уже варит с перебоями. 'hz'
 
Ответ: Нужен скрипт, очень!

В AppleScript совсем ничего не понимаю. Но интуитивно накидал:
PHP:
with (app) {
	myStory = selection;
	for (i =0; i < myStory.length; i++)
	{
		if myStory[i] <> ""
		{
			myStory[i] = EncodeText(myStory[i]);
		}
	}
}
Вот только функция EncodeText(myStory) мне незнакома и думаю что это самописная функция в том же скрипте, кусок которого вы нам привели.
 
Статус
Закрыто для дальнейших ответов.