Описание продукта ng.schema
===========================
Продукт **ng.schema** предоставляет поля схем интерфейсов и виджеты 
для них. 

interfaceswitcher
-----------------
Модуль предоставляет два поля, которые могут быть использованы
для динамического назначения интерфейсов:

InterfaceChoice
    Назначение одного интерефейса из списка;
    
InterfaceSet
    Назначение нескольких интерфейсов из списка.
    
Интерфейсы выбираются из числа субинтерфейсов интерфейса, передаваемого полю
в качестве параметра. 

Пример использования::

    from ng.schema.interfaceswitcher.interfacechoicefield import InterfaceChoice
    from ng.schema.interfaceswitcher.interfacesetfield import InterfaceSet

    class IA(Interface) :
        pass
        
    class IA1(IA) :
        pass
        
    class IA2(IA) :
        pass
        
    class IOb(Interface) :
    
        ifc = InterfaceChoice(
            title=u'Interface of IA',
            interface = IA,
            )

        ifs = InterfaceSet(
            title=u'Interface of IA',
            interface = IA,
            with_title=True
            )
            
В приведенном примере аргумент **interface** используется, чтобы передать
базовый интерфейс для коллекции переключаемых интерфейсов, а флаг **with_title**
управляет способом формирования словаря интерфейсов: истинное значение
вызовет формирование словаря с названиями элементов, взятыми из строки
документации (**__doc__**) в интерфейсе, в противном случае название формируется
точечным синтаксисом пути к интерфейсу.
            
regexp
------

Модуль предоставляет поля, выполняющие проверку текста регулярным выражением
и его преобразование правилами переписывания. Каждое правило переписывания
состоит из регулярного выражения, собирающим словарь из фрагментов текста, и
строки формата, использумой, чтобы распечатать словарь.

Пример использования::        

    from ng.schema.regexp.regexpfield import Regexp        
    class IOb(Interface) :
        title = Regexp(title = u'Title',
            description = u'Title',
            default = u'',
            required = True,
            regexp = (
                  (False, u"^.*/.*$", u"Title do not content symbol '/'"),
                ),
            rewrite = (
                (u"^\s*(?P<name>\w+)\s*-\s*(?P<number>[0-9]+)\s*$", u"%(name)s-%(number)s"),
                (u"^\s*(?P<name>[^\s])\s*$", u"%(name)s"),
                )
            )
    
Поле, определенное в этом примере, позволяет ввести строку, не содержащую символ "/", и вырезает
из нее пробелы вокруг тире между названием и номером, затем концевые пробелы.

floatdayttime
-------------
Поле позволяет представить атрибут, содержащий число с плавающей запятой, в форме строки
времени в формате "HH:MM:SS". 

Пример использования::

    from ng.schema.floatdaytime.floatdaytime import FloatDayTime
    class IOb(Interface) :
        time = FloatDayTime(
            title = u"Time",
            description = u"Time of day",
            required = False,
            min=u'00:00',
            max=u'24:00',
            default=u'00:00'
            )

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

Пример использования::

    <addform
        label="Add Article"
        name="AddArticle.html"
        schema="ng.content.article.interfaces.IDocShortLogo"
        content_factory="ng.content.article.article.article.Article"
        class=".nexturl.NextUrl"
        permission="zope.ManageContent"
	    layer="...interfaces.GreenpsySkin"
        set_before_add="title"
	    >
	    <widget 
		    field="author"
		    class="ng.schema.principalidwidget.principalidwidget.PrincipalIdWidget" />
    </addform>
    
dropdowndatewidget
------------------
Виджет позволяет вводить дату выбором значения из трех выпадающих списков для дня,
месяца и года.

Пример использования::

    <editform
        schema="..interfaces.IProfileAnnotation"
        for="..interfaces.IProfileAnnotation"
        label="Profile"
        name="profileannotation.html"
        permission="zope.ManageContent"
        menu="zmi_views" title="ProfileAnnotation" 
        >
        <widget field="birthday" class="ng.schema.dropdowndatewidget.dropdowndatewidget.DropDownDateWidget" />
   </editform> 
