Избранное »

22.09.2014 – 07:27 | 2 комментария | 27 205 views

Здравствуйте все, кто работает в Индизайне!
Извещаем вас о том, что на youtube.com работает канал «InDesign Мастерская вёрстки». Там уже размещены более 70 видео с полным описанием как работать с программой DoTextOK. Другие интересные темы, касающиеся работы …

Читать полностью »
Работа в InDesign

Хитрости и секреты, приемы работы, уроки

Новая версия!

Особенности новой версии Индизайна

Плагины

Описание плагинов, информация о плагинах для работы с Adobe InDesign

Скрипты

Готовые к использованию скрипты для Adobe InDesign

Скриптинг

Описание языка, приёмов и методов программирования для Adobe InDesign

Home » Скрипты

Арабские цифры — в римские, и наоборот

Добавлено на 07.03.2009 – 03:38One Comment | 2 939 views

В русском языке римские цифры используются в следующих случаях:

  • номер века или тысячелетия: XIX век, II тысячелетие до н. э.;
  • порядковый номер монарха: Карл V, Екатерина II;
  • номер тома в многотомной книге (иногда — номера частей книги, разделов или глав);
  • В некоторых изданиях — номера листов с предисловием к книге, чтобы не исправлять ссылки внутри основного текста при изменении предисловия;
  • Иные важные события или пункты списка, например: V постулат Евклида, II мировая война, XXII съезд КПСС и т. п.

Римские цифры в нашей типографике принято набирать прописными.

Иногда приходится исправлять ошибки набора и вместо арабских цифр ставить римские. Немного облегчить эту задачу поможет приведенный ниже скрипт, найденный на японском сайте и адаптированный мной к нашим условиям. Максимальное число, которое можно преобразовать скриптом — это 4999, хотя традиционно римские цифры предоставляют возможность записывать числа натурального ряда от 1 до 3999 (см. материал в Википедии). Нуля, как такового, в римских цифрах нет.
Для преобразования необходимо выделить арабское число (или цифру) и запустить скрипт. Не было бы лишним в этой ситуации и создание клавиатурного сокращения для вызова скрипта.

Скрипт будет работать в InDesign CS3 | Windows, Mac, а возможно и в более старших и младших версиях Индизайна.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//arabic2roman 
//An InDesign CS3 JavaScript
// Скрипт переводит арабские числа в римские
// (c) Kenshi Muto, kmuto@debian.org (адаптация Б. Кащев)
 
main();
function main()
{
	if (app.documents.length == 0) 
	{
		alert ("Документ не открыт. Откройте вначале документ");
		return;
	}
	if(app.selection.length == 1 && (app.selection[0].constructor.name == "Word"  || app.selection[0].constructor.name =="Character"))
	{ 
		app.selection[0].contents = arabic2roman(app.selection[0].contents); 
	} 
	else 
	{
		alert("Выделите цифру или целое число от 1 до 4999 и попытайтесь снова");
		return;
	}
} // main()
function arabic2roman(s)
{
  var n = parseInt(s);
  var v = "";
  var i = ["", "I", "II", "III", "IV", "V", "VI", "VII", "VIII", "IX"];
  var x = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "LXXX", "XC"];
  var c = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "DCCC", "CM"];
  var m = ["", "M", "MM", "MMM", "MMMM"];
  if (n >= 1 && n < = 4999) {
    v += m[Math.floor(n / 1000)];
    n %= 1000;
    v += c[Math.floor(n / 100)];
    n %= 100;
    v += x[Math.floor(n / 10)];
    n %= 10;
    v+= i[n];
  } 
  return v;
}

Чтобы полностью раскрыть данную тему приведем скрипт обратного преобразования римских чисел в арабские. Скрипт написан тем же японским автором и пользоваться им точно так же.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//roman2arabic
//An InDesign CS3 JavaScript
// Скрипт переводит римские  числа в арабские.
// (c) Kenshi Muto, kmuto@debian.org (адаптация Б. Кащев)
 
main();
function main()
{
	if (app.documents.length == 0) 
	{
		alert ("Документ не открыт. Откройте вначале документ");
		return;
	}
	if(app.selection.length == 1 && (app.selection[0].constructor.name == "Word"  || app.selection[0].constructor.name =="Character"))
	{ 
		var myArabic = roman2arabic(app.selection[0].contents); 
		app.selection[0].contents = myArabic.toString(); 
	} 
	else 
	{
		alert("Выделите римское число или цифру и попытайтесь снова");
		return;
	}
} // main()
 
function roman2arabic(s)
{
  var i = 0;
  var v = 0;
  var n, c;
  s = s.toLowerCase();
  if (s.charAt(i) == "m") {
    for (n = 0; s.charAt(i) == "m"; n++) i++;
    if (n > 4) return 0;
    v += n * 1000;
  }
  if (s.charAt(i) == "d" || s.charAt(i) == "c") {
    if ((c = s.charAt(i)) == "d") {
      i++;
      v += 500;
    }
    if (c == "c" && s.charAt(i + 1) == "m") {
      i += 2;
      v += 900;
    } else if (c == "c" && s.charAt(i + 1) == "d") {
      i += 2;
      v += 400;
    } else {
      for (n = 0; s.charAt(i) == "c"; n++) i++;
      if (n > 4) return 0;
      v += n * 100;
    }
  }
  if (s.charAt(i) == "l" || s.charAt(i) == "x") {
    if ((c = s.charAt(i)) == "l") {
      i++;
      v += 50;
    }
    if (c == "x" && s.charAt(i + 1) == "c") {
      i += 2;
      v += 90;
    } else if (c == "x" && s.charAt(i + 1) == "l") {
      i += 2;
      v += 40;
    } else {
      for (n = 0; s.charAt(i) == "x"; n++) i++;
      if (n > 4) return 0;
      v += n * 10;
    }
  }
  if (s.charAt(i) == "v" || s.charAt(i) == "i") {
    if ((c = s.charAt(i)) == "v") {
      i++;
      v += 5;
    }
    if (c == "i" && s.charAt(i + 1) == "x") {
      i += 2;
      v += 9;
    } else if (c == "i" && s.charAt(i + 1) == "v") {
      i += 2;
      v += 4;
    } else {
      for (n = 0; s.charAt(i) == "i"; n++) i++;
      if (n > 4) return 0;
      v += n;
    }
  }
  return (s.charAt(i) == "" && v >= 1 && v < = 4999) ? v : 0;
}

Ссылка на вышеупомянутый японский сайт

One Comment »

Оставить комментарий!

Вы должны быть в системе чтобы оставить комментарий.