/******************************************************************************
* Copyright (c) 2004, 2014  Ericsson AB
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*   Zoltan Jasz - initial implementation and initial documentation
*   Abhishek Gupta
*   Attila Balasko
*   Endre Kulcsar
*   Gabor Bettesch
*   Gabor Szalai
*   Janos Kovesdi
*   Sandor Palugyai
*   Tibor Csondes
******************************************************************************/
//
//  File:          XSD.ttcn
//  Rev:           R9A
//  Prodnr:        CNL 113 368
//
////////////////////////////////////////////////////////////////////////////////
module XSD {

import from UsefulTtcn3Types all;

//These constants are used in the XSD date/time type definitions
const charstring
  dash := "-",
  cln  := ":",
  year := "(0(0(0[1-9]|[1-9][0-9])|[1-9][0-9][0-9])|[1-9][0-9][0-9][0-9])",
  yearExpansion := "(-([1-9][0-9]#(0,))#(,1))#(,1)",
  month := "(0[1-9]|1[0-2])",
  dayOfMonth := "(0[1-9]|[12][0-9]|3[01])",
  hour := "([01][0-9]|2[0-3])",
  minute := "([0-5][0-9])",
  second := "([0-5][0-9])",
  sFraction := "(.[0-9]#(1,))#(,1)",
  endOfDayExt := "24:00:00(.0#(1,))#(,1)",
  nums := "[0-9]#(1,)",
  ZorTimeZoneExt := "(Z|[+-]((0[0-9]|1[0-3]):[0-5][0-9]|14:00))#(,1)",
  durTime := "(T[0-9]#(1,)"&
             "(H([0-9]#(1,)(M([0-9]#(1,)(S|.[0-9]#(1,)S))#(,1)|.[0-9]#(1,)S|S))#(,1)|"&
             "M([0-9]#(1,)(S|.[0-9]#(1,)S)|.[0-9]#(1,)M)#(,1)|"&
             "S|"&
             ".[0-9]#(1,)S))"

//anySimpleType

type XMLCompatibleString AnySimpleType
with {
variant "XSD:anySimpleType";
};

//anyType;

type record AnyType
{
	record of String attr,
	record of String elem_list
}
with {
variant "XSD:anyType";
variant (attr) "anyAttributes";
variant (elem_list) "anyElement";
};
// String types

type XMLCompatibleString String
with {
variant "XSD:string";
};

type XMLStringWithNoCRLFHT NormalizedString
with {
variant "XSD:normalizedString";
};

type NormalizedString Token
with {
variant "XSD:token";
};

type XMLStringWithNoWhitespace Name
with {
variant "XSD:Name";
};

type XMLStringWithNoWhitespace NMTOKEN
with {
variant "XSD:NMTOKEN";
};

type Name NCName
with {
variant "XSD:NCName";
};

type NCName ID
with {
variant "XSD:ID";
};

type NCName IDREF
with {
variant "XSD:IDREF";
};

type NCName ENTITY
with {
variant "XSD:ENTITY";
};

type octetstring HexBinary
with {
variant "XSD:hexBinary";
};

type octetstring Base64Binary
with {
variant "XSD:base64Binary";
};

type XMLStringWithNoCRLFHT AnyURI
with {
variant "XSD:anyURI";
};

type charstring Language (pattern "[a-zA-Z]#(1,8)(-\w#(1,8))#(0,)")
with {
variant "XSD:language";
};
// Integer types

type integer Integer
with {
variant "XSD:integer";
};

type integer PositiveInteger (1 .. infinity)
with {
variant "XSD:positiveInteger";
};

type integer NonPositiveInteger (-infinity .. 0)
with {
variant "XSD:nonPositiveInteger";
};

type integer NegativeInteger (-infinity .. -1)
with {
variant "XSD:negativeInteger";
};

type integer NonNegativeInteger (0 .. infinity)
with {
variant "XSD:nonNegativeInteger";
};

type longlong Long
with {
variant "XSD:long";
};

type unsignedlonglong UnsignedLong
with {
variant "XSD:unsignedLong";
};

type long Int
with {
variant "XSD:int";
};

type unsignedlong UnsignedInt
with {
variant "XSD:unsignedInt";
};

type short Short
with {
variant "XSD:short";
};

type unsignedshort UnsignedShort
with {
variant "XSD:unsignedShort";
};

type byte Byte
with {
variant "XSD:byte";
};

type unsignedbyte UnsignedByte
with {
variant "XSD:unsignedByte";
};

// Float types

type float Decimal
with {
variant "XSD:decimal";
};

type IEEE754float Float
with {
variant "XSD:float";
};

type IEEE754double Double
with {
variant "XSD:double";
};

// Time types

type charstring Duration (pattern
  "{dash}#(,1)P({nums}(Y({nums}(M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|" &
  "{durTime}#(,1))|M({nums}D{durTime}#(,1)|{durTime}#(,1))|D{durTime}#(,1))|{durTime})")
with {
variant "XSD:duration";
};

type charstring DateTime (pattern
  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}T({hour}{cln}{minute}{cln}{second}" &
 "{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
with {
variant "XSD:dateTime";
};

type charstring Time (pattern
  "({hour}{cln}{minute}{cln}{second}{sFraction}|{endOfDayExt}){ZorTimeZoneExt}" )
with {
variant "XSD:time";
};

type charstring Date (pattern
  "{yearExpansion}{year}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
with {
variant "XSD:date";
};

type charstring GYearMonth (pattern
  "{yearExpansion}{year}{dash}{month}{ZorTimeZoneExt}" )
with {
variant "XSD:gYearMonth";
};

type charstring GYear (pattern
  "{yearExpansion}{year}{ZorTimeZoneExt}" )
with {
variant "XSD:gYear";
};

type charstring GMonthDay (pattern
 "{dash}{dash}{month}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
with {
variant "XSD:gMonthDay";
};

type charstring GDay (pattern
  "{dash}{dash}{dash}{dayOfMonth}{ZorTimeZoneExt}" )
with {
variant "XSD:gDay";
};

type charstring GMonth (pattern
  "{dash}{dash}{month}{ZorTimeZoneExt}" )
with {
variant "XSD:gMonth";
};

// Sequence types

type record of NMTOKEN NMTOKENS
with {
variant "XSD:NMTOKENS";
};

type record of IDREF IDREFS
with {
variant "XSD:IDREFS";
};

type record of ENTITY ENTITIES
with {
variant "XSD:ENTITIES";
};

type record QName
{
	AnyURI uri  optional,
	NCName name
}
with {
variant "XSD:QName";
};

// Boolean type

type boolean Boolean
with {
variant "XSD:boolean";
};

//TTCN-3 type definitions supporting the mapping of W3C XML Schema built-in datatypes

type utf8string XMLCompatibleString
(
	char(0,0,0,9)..char(0,0,0,9),
	char(0,0,0,10)..char(0,0,0,10),
	char(0,0,0,12)..char(0,0,0,12),
  	char(0,0,0,32)..char(0,0,215,255),
  	char(0,0,224,0)..char(0,0,255,253),
  	char(0,1,0,0)..char(0,16,255,253)
)

type utf8string XMLStringWithNoWhitespace
(
	char(0,0,0,33)..char(0,0,215,255),
  	char(0,0,224,0)..char(0,0,255,253),
  	char(0,1,0,0)..char(0,16,255,253)
)

type utf8string XMLStringWithNoCRLFHT
(
	char(0,0,0,32)..char(0,0,215,255),
 	char(0,0,224,0)..char(0,0,255,253),
  	char(0,1,0,0)..char(0,16,255,253)
)

}
with{
encode "XML"
}
