Наверное, не очень сложный скрипт?

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

dooser

Топикстартер
15 лет на форуме
Сообщения
459
Реакции
103
Хотелось бы иметь скрипт, отвечающий нижеизложенным пожеланиям. Для Мака и ПиСи. Хотелось бы что бы ещё и в CS3 работал ;-]

Итак, есть выделение нескольких абзацев. Задача применить 1-ый стиль к первому выделенному абзацу, 2-ой стиль к последнему абзацу и 3-й стиль ко всем абзацам, находящимся между первым и последним. Можно немного усложнить, например, если первый и последний абазац это одно и то же и, соответственно "средних" абзацев нет, то к абзацу применяется стиль № 4.
Хорошо если скрипт можно повесить на хоткей и иметь настройки для разных групп стилей.

Поясню: такую конструкцию очень удобно иметь в книжной верстке — оформлять врезы, примеры и т.д.

Готов заплатить за это работу разумное количество вебмани. :y)


Не по теме:
P.S. Или я горожу огород? Есть более простое решение?
 
Ответ: Наверное, не очень сложный скрипт?

Может быть проще и дешевле будет воспользоваться уже готовым Next Style (Применение последовательности стилей к нескольким абзацам, если по-русски)?
 
Ответ: Наверное, не очень сложный скрипт?

Может быть проще и дешевле будет воспользоваться уже готовым Next Style (Применение последовательности стилей к нескольким абзацам, если по-русски)?

а как с последним абзацем быть?
 
Ответ: Наверное, не очень сложный скрипт?

Можно греп-стиль попробовать прикрутить и к 1-му, и к последнему абзацам (источник мысли). Только греп придумать под конкретную ситуацию.
 
Ответ: Наверное, не очень сложный скрипт?

а как с последним абзацем быть?


Не по теме:
не видя конкретного материала, ничего конкретного сказать не могу.

Но если все понятно в постановке задачи, можно "за это работу разумное количество вебмани" заработать. Я пас.

 
Ответ: Наверное, не очень сложный скрипт?

да задача то понятная. например, в списках бывает нужно - у первого элемента отбивка сверху большая, у промежуточных одинаковая сверху/снизу, у последнего большая снизу.
я в таких случаях оформляю все одним стилем (list), а потом скрипт меняет по всей публикации стиль первого абзаца в последовательности на list-first, а последнего на list-last.

здесь самая большая закавыка (как обычно) с пользовательскими настройками и интерфейсом.

ps кстати smartstyles это поддерживают, но каждую врезку придется выделять и перетаскивать на нее стиль из библиотеки смартов
 
Ответ: Наверное, не очень сложный скрипт?

А в исходном (вордовском) файле стили назначить уже совсем некошерно?
 
Ответ: Наверное, не очень сложный скрипт?

PHP:
#target "InDesign"

var option_sets = [
	{name:'item_1', top:'top', middle:'middle', bottom:'bottom', bottomspec:'bottom_f'}, // if only 2 paragraph selected, for last applied style, defined in 'bottomspec' field, 
	{name:'item_2', top:'top', middle:'middle', bottom:'bottom', bottomspec:'bottom_f'} // add new sets, divide  by ','
];

var option_clearOverrides = false;

function getStringList (list) {
	var result = [];
	for (var i=0; i < list.length; i++) {
		result.push(list[i].name);
	};
	return result;
}

function checkSet (doc, set) {
	var result = set;
	for (item in set) {
		if (item != 'name') {
			try {
				result[item] = doc.paragraphStyles.itemByName(set[item]);
			} catch (error) {return false}
		}
	}
	return result;
}

function applySet (paras, set) {
	switch (paras.length) {
		case 2:
			paras[0].applyParagraphStyle(set.top, option_clearOverrides);
			paras[1].applyParagraphStyle(set.bottomspec, option_clearOverrides);
		break;
		default:
			paras[0].applyParagraphStyle(set.top, option_clearOverrides);
			for (var i=1; i < paras.length-1; i++) {
				paras[i].applyParagraphStyle(set.middle, option_clearOverrides);
			};
			paras[paras.length-1].applyParagraphStyle(set.bottom, option_clearOverrides);
		break;
	}
}

with (app) {
	try {
		var doc = activeDocument;
		var text = selection[0];
		var paras = text.paragraphs;
	} catch (err) {
		alert(error);
		exit();
	}
	
	if (paras.length < 2) {exit()};
	
	var ui = dialogs.add({name:'Smart Style'});
	with (ui.dialogColumns.add()) {
		with (dialogRows.add().borderPanels.add().dialogColumns.add()) {
			dialogRows.add().staticTexts.add({staticLabel:'Select set:'});
			var ui_option = dialogRows.add().dropdowns.add({stringList:getStringList(option_sets), selectedIndex:0});
		}
		dialogRows.add().staticTexts.add({staticLabel:'Oleg Butrin © 2011'});
	}
	
	if (!ui.show()) {
		exit();
	}
	
	var set = checkSet(doc, option_sets[ui_option.selectedIndex]);
	if (!set) {
		alert('Invalid set!');
		exit();
	}
	
	applySet(paras, set);
}
 
Статус
Закрыто для дальнейших ответов.