/* * Copyright 2015 Skynav, Inc. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY SKYNAV, INC. AND ITS CONTRIBUTORS “AS IS” AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL SKYNAV, INC. OR ITS CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ package com.skynav.ttv.model.imsc; import java.net.URI; import java.util.Map; import com.skynav.ttv.model.Profile.Specification; import com.skynav.ttv.model.Profile.Usage; import com.skynav.ttv.model.smpte.ST20522010; import com.skynav.ttv.model.ttml.TTML1; import static com.skynav.ttv.model.imsc.IMSC1.Constants.NAMESPACE_IMSC_EXTENSION; public class IMSC1TextProfileSpecification extends Specification { private static final Object[][] featureMapEntries = new Object[][] { { "#animation", Usage.REQUIRED }, { "#backgroundColor", Usage.REQUIRED }, { "#backgroundColor-block", Usage.REQUIRED }, { "#backgroundColor-inline", Usage.REQUIRED }, { "#backgroundColor-region", Usage.REQUIRED }, { "#bidi", Usage.REQUIRED }, { "#cellResolution", Usage.REQUIRED }, { "#clockMode", Usage.OPTIONAL }, { "#clockMode-gps", Usage.OPTIONAL }, { "#clockMode-local", Usage.OPTIONAL }, { "#clockMode-utc", Usage.OPTIONAL }, { "#color", Usage.REQUIRED }, { "#content", Usage.REQUIRED }, { "#core", Usage.REQUIRED }, { "#direction", Usage.REQUIRED }, { "#display", Usage.REQUIRED }, { "#display-block", Usage.REQUIRED }, { "#display-inline", Usage.REQUIRED }, { "#display-region", Usage.REQUIRED }, { "#displayAlign", Usage.REQUIRED }, { "#dropMode", Usage.OPTIONAL }, { "#dropMode-dropNTSC", Usage.OPTIONAL }, { "#dropMode-dropPAL", Usage.OPTIONAL }, { "#dropMode-nonDrop", Usage.OPTIONAL }, { "#extent", Usage.REQUIRED }, { "#extent-region", Usage.REQUIRED }, { "#extent-root", Usage.REQUIRED }, { "#fontFamily", Usage.REQUIRED }, { "#fontFamily-generic", Usage.REQUIRED }, { "#fontFamily-non-generic", Usage.REQUIRED }, { "#fontSize", Usage.REQUIRED }, { "#fontSize-anamorphic", Usage.REQUIRED }, { "#fontSize-isomorphic", Usage.REQUIRED }, { "#fontStyle", Usage.REQUIRED }, { "#fontStyle-italic", Usage.REQUIRED }, { "#fontStyle-oblique", Usage.REQUIRED }, { "#fontWeight", Usage.REQUIRED }, { "#fontWeight-bold", Usage.REQUIRED }, { "#frameRate", Usage.REQUIRED }, { "#frameRateMultiplier", Usage.REQUIRED }, { "#layout", Usage.REQUIRED }, { "#length", Usage.REQUIRED }, { "#length-cell", Usage.REQUIRED }, { "#length-em", Usage.REQUIRED }, { "#length-integer", Usage.REQUIRED }, { "#length-negative", Usage.REQUIRED }, { "#length-percentage", Usage.REQUIRED }, { "#length-pixel", Usage.REQUIRED }, { "#length-positive", Usage.REQUIRED }, { "#length-real", Usage.REQUIRED }, { "#lineBreak-uax14", Usage.OPTIONAL }, { "#lineHeight", Usage.REQUIRED }, { "#markerMode", Usage.OPTIONAL }, { "#markerMode-continuous", Usage.OPTIONAL }, { "#markerMode-discontinuous", Usage.OPTIONAL }, { "#metadata", Usage.REQUIRED }, { "#nested-div", Usage.REQUIRED }, { "#nested-span", Usage.REQUIRED }, { "#opacity", Usage.REQUIRED }, { "#origin", Usage.REQUIRED }, { "#overflow", Usage.REQUIRED }, { "#overflow-visible", Usage.REQUIRED }, { "#padding", Usage.REQUIRED }, { "#padding-1", Usage.REQUIRED }, { "#padding-2", Usage.REQUIRED }, { "#padding-3", Usage.REQUIRED }, { "#padding-4", Usage.REQUIRED }, { "#pixelAspectRatio", Usage.OPTIONAL }, { "#presentation", Usage.REQUIRED }, { "#profile", Usage.REQUIRED }, { "#showBackground", Usage.REQUIRED }, { "#structure", Usage.REQUIRED }, { "#styling", Usage.REQUIRED }, { "#styling-chained", Usage.REQUIRED }, { "#styling-inheritance-content", Usage.REQUIRED }, { "#styling-inheritance-region", Usage.REQUIRED }, { "#styling-inline", Usage.REQUIRED }, { "#styling-nested", Usage.REQUIRED }, { "#styling-referential", Usage.REQUIRED }, { "#subFrameRate", Usage.OPTIONAL }, { "#textAlign", Usage.REQUIRED }, { "#textAlign-absolute", Usage.REQUIRED }, { "#textAlign-relative", Usage.REQUIRED }, { "#textDecoration", Usage.REQUIRED }, { "#textDecoration-over", Usage.REQUIRED }, { "#textDecoration-through", Usage.REQUIRED }, { "#textDecoration-under", Usage.REQUIRED }, { "#textOutline", Usage.REQUIRED }, { "#textOutline-blurred", Usage.REQUIRED }, { "#textOutline-unblurred", Usage.REQUIRED }, { "#tickRate", Usage.REQUIRED }, { "#time-clock", Usage.REQUIRED }, { "#time-clock-with-frames", Usage.REQUIRED }, { "#time-offset", Usage.REQUIRED }, { "#time-offset-with-frames", Usage.REQUIRED }, { "#time-offset-with-ticks", Usage.REQUIRED }, { "#timeBase-clock", Usage.OPTIONAL }, { "#timeBase-media", Usage.REQUIRED }, { "#timeBase-smpte", Usage.OPTIONAL }, { "#timeContainer", Usage.REQUIRED }, { "#timing", Usage.REQUIRED }, { "#transformation", Usage.REQUIRED }, { "#unicodeBidi", Usage.REQUIRED }, { "#visibility", Usage.REQUIRED }, { "#visibility-block", Usage.REQUIRED }, { "#visibility-inline", Usage.REQUIRED }, { "#visibility-region", Usage.REQUIRED }, { "#wrapOption", Usage.REQUIRED }, { "#writingMode", Usage.REQUIRED }, { "#writingMode-horizontal", Usage.REQUIRED }, { "#writingMode-horizontal-lr", Usage.REQUIRED }, { "#writingMode-horizontal-rl", Usage.REQUIRED }, { "#writingMode-vertical", Usage.REQUIRED }, { "#zIndex", Usage.REQUIRED }, }; private static final Object[][] smpteExtensionMapEntries = new Object[][] { { "#image", Usage.OPTIONAL }, }; private static final Object[][] imsc1ExtensionMapEntries = new Object[][] { { "#altText", Usage.REQUIRED }, { "#aspectRatio", Usage.REQUIRED }, { "#forcedDisplay", Usage.REQUIRED }, { "#linePadding", Usage.REQUIRED }, { "#multiRowAlign", Usage.REQUIRED }, { "#progressivelyDecodable", Usage.REQUIRED }, }; public IMSC1TextProfileSpecification(URI profileUri) { super(profileUri, null, featuresMap(TTML1.Constants.NAMESPACE_TT_FEATURE, featureMapEntries), makeExtensionsMap()); } private static Map<URI,Usage> makeExtensionsMap() { Map<URI,Usage> fm = new java.util.HashMap<URI,Usage>(); fm.putAll(featuresMap(ST20522010.Constants.NAMESPACE_2010_EXTENSION, smpteExtensionMapEntries)); fm.putAll(featuresMap(NAMESPACE_IMSC_EXTENSION, imsc1ExtensionMapEntries)); return fm; } }