GenoPro Logo Оболочки программы - SDK примеры

Примеры условий

Пожалуйста, помните, Вы можете использовать оператор Не!, чтобы инвертировать значение в любой момент.

= Сравнение Равно (без учета регистра)
Сравнивает значение тега со строкой. Для сравнения не важно наличие прописных строчных знаков. Заметьте, пожалуйста, что диакритические знаки тоже воспринимаются как нормальные знаки. Например, буквы "E", "e", "Й", "й", "И" и "и" - одно и то же для оператора  =
@[?i.gender(="m")]@Male@[.i.gender]@
Сравнивает, равен ли пол "m" или "M", и выводит "Мужской".
@[?i.gender(="F")]@Female@[.i.gender]@
Сравнивает равен ли пол "F" или "f", и выводит символ женского пола.
@[?i.gender(!="?")]@Gender is known@[.i.gender]@
Сравнивает, равен ли пол "?".  Оператор Не! может быть использован с любым оператором.
@[?i.children.count(=0)]@No children@[.i.child.count]@
Сравнивает, равно ли число детей нулю. Пожалуйста, заметьте, нуль не заключается в кавычки, и следовательно, сравнение числовое.
В: Какая разница между числовым и строчным сравнением?
О: Числовое сравнение использует число, для представления сравнения, вместо того чтобы сравнивать все знаки индивидуально. Например, числовое сравнение  20 < 100 не то же самое, что строчное сравнение "20" < "100". В строчном сравнении, символ 2 - больше символа 1, в результате 20 - больше 100.

 

== Сравнение Равно (с учетом регистра)
Этот оператор очень похож на = оператор (см. выше), но оно различает верхний и нижний регистры. Для этого оператора строка "GenoPro" отличается от "genopro".
@[?i.comment(=="SECRET")]@Secret Comment@[.i.comment]@
Сравнивает, равен ли комментарий субъекту "SECRET" (все буквы - прописные) и выводит сведения "секретный комментарий".
@[?i.name.first(==i.name.last]@invalid name@[.i.name.first]@
Сравнивает, равно ли имя фамилии.  Если нет кавычек вокруг "i.name.last", сравнение будет сделано еще с одним тегом.

 

< Сравнение Меньше Чем (без учета регистра)
Сравнивает, является ли значение тега меньше, чем данное значение. Верхний и нижний регистры не различаются. Если значение заключено в кавычки(" "), то сравнивается строка.
@[?i.name.last(<"A")]@Invalid Last Name@[.i.name.last]@
Выводит "Неправильная фамилия", если фамилия субъекта меньше, чем буква А.
@[?i.name.last(!<"A")]@Last name is valid@[.i.name.last]@
Выводит "Правильная фамилия", если фамилия субъекта не меньше, чем буква А. Точно также используется оператор Больше > .
@[?i.picture.count(!<1)]@@[i.picture.primary]@@[.i.picture.count]@
Выводит на экран главную иллюстрацию, если число иллюстраций больше 1. Пожалуйста, заметьте, что 1 не заключена в кавычки, и сравнение числовое. Такой же тег для @[?i.picture.count(!<1)]@ был бы @[?i.picture.count(>0)]@.

 

~= Содержит (без учета регистра)
Сравнивает, содержит ли тег символ, число или подстроку.
@[?i.name.last(~="^22")]@Last name contains a quote@[.i.name.last]@
Иногда Вы, возможно, захотите узнать, содержит ли данный тег особый символ или строку.
@[?i.name(~="?")]@Name contains at least one ?@[.i.name]@
Полное имя содержит символ вопроса
 (?).

 

*= сопоставление шаблонов(без учета регистра)
Сравнивает, совпадает ли содержимое тега с данным шаблоном. Шаблон может содержать подстановочные знаки  ? и *.
@[?i.name.last(*="*s")]@Last name ends with the letter S@[.i.name.last]@
Этот шаблон "*s" означает что-либо, оканчивающееся на  s. Вы можете комбинировать любое число подстановочных знаков в шаблоне. Сопоставление шаблонов похоже на оператор, но предлагает большую гибкость. Единственный отрицательный аспект - он не может определить, содержит ли строка * или ?.
Примеры
 *="^22*^22" - Любая строка, заключенная в кавычки (the ^22 кавычка).
 *="^28*^29" - Любая строка, заключенная в скобки. (^28 и ^28 - скобки).
 !*="*abc*"  - Любая строка, не содержащая "abc" (имеющая любые комбинации верхнего и нижнего регистров)
 *="?*"      - Любая строка, содержащая хотя бы один символ.

E Пустой / Не пустой
Сравнивает, является ли содержимое тега пустым. Это очень похоже на сравнение тега с пустой строкой при помощи оператора ="" .  Преимущество этого тега в том,  что его можно также использовать для определения наличия иллюстрации, потому что сравнение иллюстрации с пустой строкой не производится.
@[?i.name.middle(E)]@No middle name@[.i.name.middle]@
@[?i.name.middle(!E)]@@[i.name.middle(/H)]@@[.i.name.middle]@
Выводит отчество без автоматической гиперссылки.
@[?i.picture.primary(!E)]@@[i.picture.primary]@@[.i.picture.primary]@
Выводит на экран главную иллюстрацию (если главная иллюстрация существует).
?E= Пустой параметр
В случае тега с пустым значением, можно вывести какой-нибудь текст вместо пустого значения.
Пример:
@[?i.name(?E="<NoName>")]@ - Это выведет на экран <NoName>, если тег  i.name пуст. 

D Определенный / Неопределенный
Этот оператор очень похож на Пустой / Не пустой.  Тег может быть определенным, но оставаться пустым. Вы можете определить сколько угодно тегов в словаре тегов. Например, если Вы хотите добавить информацию о специфике языка в Skin.dic, Вы всегда можете использовать тег где-либо в словаре.
@[?author(D)]@Copyright @[author]@@[.author]@
В этом примере условие определяет, известен ли автор тега, и выводит ли информацию о защите прав. Поскольку автор тега - не прописан  в программу тег, Вам нужно будет добавить следующие данные в файл Skin.dic:
author = "Your Name"

 

?# Группировка цикла
Условный оператор ?# имеет значение  'истина', если значение тега отличается от его предыдущего значения. Этот условный оператор полезен при определении, изменилось ли значение тега внутри цикла.
Вот пример создания списка уникальных фамилий:

@[#i.count]@ 
<-- Начало цикла (Цикл через всех субъектов)
  @[?#i.name.last]@
  <-- Группировка циклов
    @[i.name.last]@
  @[.i.name.last]@
@[.i.count]@

В этом примере условие группировки цикла @[?#i.name.last]@ вычисляется, если значение тега i.name.last изменилось по сравнению  предыдущим значением. Если это такой случай, фамилия выводится на экран подчеркнутым жирным шрифтом. Программа использует оператор группировки цикла чтобы сгенерировать индексы всех имен, сгруппированных по фамилии.

Сортировка цикла

Циклы

Циклы полезны для организации Ваших семейных данных, поскольку Вы можете вывести одну и ту же информацию в двух разных распечатках. Например, Вы можете организовать Ваши иллюстрации, создав альбом по датам, по описаниям или по членам семей.

Пример - испанская оболочка, где субъекты рассортированы по отчеству. Шаблон home.htm выводит полный список всех уникальных отчеств, найденных в фамильном дереве. Первый шаг - рассортировать субъектов по отчеству (sort=MLF) и затем использовать тег @[i.name.middle]@, чтобы вывести эти отчества. Условная группировка цикла (?#) предотвращает появление тега i.name.middle более одного раза, а кодировка тега (/H) не допускает создания автоматической гиперссылки.   Пустой параметр (?E=) is used to используется, чтобы выводить на экран что-нибудь, если у субъекта нет отчества.

@[#i.count(sort=MLF)]@
@[?#i.name.middle]@@[i.name.middle(/H,?E=dic.strLastNameUnknown)]@
@[.i.name.middle]@
@[.i.count]@