📄 smlparse.h
字号:
HX_RESULT validateCDATA(const char* pszStr) const;
HX_RESULT validateIDREF(const char* pszStr) const;
HX_RESULT validateNMTOKEN(const char* pszStr) const;
HX_RESULT validateEnumerated(UINT32 ulElem, UINT32 ulAttr, const char* pszStr);
BOOL isXMLLetter(char c) const;
BOOL isXMLDigit(char c) const;
BOOL isXMLNameChar(char c) const;
BOOL isNamespacePrefixed(const char* pszStr);
HX_RESULT normalizeAttribute(const char* pszStr,
BOOL bIsCDATA,
REF(char*) rpszNormal);
HX_RESULT validateAttribute(UINT32 ulElement, UINT32 ulAttrib,
const char* pszStr, REF(char*) rpszNormStr);
HX_RESULT validateElementName(SMILNode* pNode);
HX_RESULT setupValidationNamespaces(SMILNode* pNode);
HX_RESULT validateAgainstDTD();
HX_RESULT checkExtensionElementNamespace(SMIL2Element eElem,
SupportedNamespace eNS);
HX_RESULT checkExtensionAttributeNamespace(SMIL2Attribute eAttr,
SupportedNamespace eNS);
#endif /* #if defined(HELIX_FEATURE_SMIL2_VALIDATION) */
CNamespaceInfo* getNamespaceInfo(const char* pszStr, REF(const char*) rpszAttr);
HX_RESULT createElements();
HX_RESULT durationResolved(const char* pID, UINT32 ulDuration,
BOOL bSetByParent=FALSE,
BOOL bDurationExtendingDueToPause=FALSE);
HX_RESULT trackRemoved(const char* pID, UINT32 ulDuration);
HX_RESULT adjustForNegativeOffset(const char* pID);
void insertTimelineElement(const char* pID, UINT32 ulDelay);
void resetTimelineElementDuration(const char* pID,
UINT32 ulDuration,
UINT32 ulPriorDuration);
void resetTimelineElementDelay(const char* pID, UINT32 ulDelay,
UINT32 ulPriorDelay);
void resetTimeline();
HX_RESULT prepForSeek(UINT32 ulOldTime, UINT32 ulNewTime);
HX_RESULT handlePrefetchFinished(const char* pID, UINT32 ulTimeFinished);
UINT16 getFragmentGroup(const char* pFragment);
UINT32 getFragmentOffset(const char* pFragment,
BOOL& bFragFoundAndResolved,
BOOL bResolveBeginOfFragmentTarget=FALSE,
ULONG32 ulCurTime=0);
HX_RESULT handleNextElement(CSmilElementHandler* pHandler);
HX_RESULT setAllElementHandlers(CSmilElementHandler* pHandler);
SMILNode* findFirstNode(SMILNodeTag tag);
SMILNode* getFirstNodeChild(SMILNode* pNode);
SMILNode* getPrevNode(SMILNode* pCurrentNode);
CSmilElement* findElement(const char* pID);
SMILNode* getNextNodeChild();
SMILNodeTag getSyncTag(SMILNode* pNode);
void getPacketPending(UINT16 unStreamNumber);
HX_RESULT addGlobalNamespace(const char* pNamespace, const char* pPrefix);
HX_RESULT storeNamespaces(SMILNode* pNode);
HX_RESULT addToNamespaceScope(SMILNode* pNode);
HX_RESULT removeFromNamespaceScope(SMILNode* pNode);
BOOL isSupportedNonRNNamespace(const char* pNamespace);
HX_RESULT addBeginTimeSyncElement(CSmilElement* pElement);
HX_RESULT addEndTimeSyncElement(CSmilElement* pElement);
HX_RESULT resolveSyncBaseElements();
HX_RESULT handleExclDescendants();
HX_RESULT addBeginEventElement(SmilTimeValue* pTimeVal);
HX_RESULT tryToResolveBeginEndEvents(const char* pEventName,
const char* pEventElementId,
ULONG32 ulEventTime);
HX_RESULT addEndEventElement(SmilTimeValue* pTimeVal);
HX_RESULT addBeginMediaMarkerSyncElement(SmilTimeValue* pTmpVal);
HX_RESULT addEndMediaMarkerSyncElement(SmilTimeValue* pTmpVal);
HX_RESULT resolveMediaMarkerTime(const char* pszID,
const char* pszMarkerName,
UINT32 ulMarkerTime,
REF(BOOL) rbNeedHandleElements);
HX_RESULT handlePendingScheduling(INT32 lCurTime,
INT16 iCurrentGroupIndex,
REF(BOOL) bSomeScheduleWasChanged,
/*OUT*/ CHXSimpleList* pPauseDisplayElementHideList,
/*OUT*/ CHXSimpleList* pPauseDisplayDisableElementList);
HX_RESULT checkPendingBeginAndEndTimes(INT32 lCurTime,
INT16 iCurrentGroupIndex,
REF(BOOL) bREFSomeScheduleWasChanged,
INT32 lRecursionCount,
/*OUT*/ CHXSimpleList* pPauseDisplayElementHideList,
/*OUT*/ CHXSimpleList* pPauseDisplayDisableElementList,
BOOL bDoHandleExclBeforePlaybackStarts);
HX_RESULT insertElementWithPendingBeginOrEnd(CSmilElement* pElement,
INT32 lCurTime,
SmilTimingListType listType);
void handleAllXMMFReferences();
CHXMapStringToOb* findNextPendingOnLoadURL(UINT32 lCurTime);
BOOL hasActivateEventListener(const char* pMediaID,
INT16 iCurrentGroupIndex);
const char* getDefaultNamespace();
// note -- the pErr array returned has the same scope as the SMILParser
// object
HX_RESULT getErrors(CHXPtrArray** pErrs);
SMILNode* getSyncAncestor(SMILNode* pNode);
// /NOTE: sync base is not always begin of sync ancestor; in a seq, it's
// end of prior sibling (if any), so this calculates all that:
virtual ULONG32 getSyncBaseTimeInGroupTimeCoords(SMILNode* pNode);
// /Tells whether any node all the way up to the root has specified
// ancestor tag:
BOOL hasAncestor(SMILNodeTag ancestor, SMILNode* pNode);
// Added to be able to quickly lookup <anchor> or <area> tags
// by id and not by the region they map to.
CSmilAnchorElement* getAnchorOrAreaElement(const char* pID);
// XXXMEH - moved this from private to public so that we
// could animate the coords attribute. This method is needed
// to parse the coords attribute.
HX_RESULT parseAnchorCoords(const char* pCoords,
CSmilAnchorElement* pAnchor);
BOOL presentationContainsASource() {return m_bContainsSource; }
BOOL presentationContainsInitiallyScheduledTrack() {
return m_bContainsInitiallyScheduledTrack; }
ULONG32 presentationDurIfNoInitialTracksScheduled() {
return m_ulDurIfNoInitialTracksScheduled; }
BOOL EstablishBeginTimeList();
BOOL EstablishEndTimeList();
BOOL EstablishBeginEventList();
BOOL EstablishEndEventList();
CHXSimpleList* GetPendingBeginTimeList() {return m_pPendingBeginTimeList;}
CHXSimpleList* GetPendingEndTimeList() {return m_pPendingEndTimeList;}
CHXSimpleList* GetBeginEventList() {return m_pBeginEventList;}
CHXSimpleList* GetEndEventList() {return m_pEndEventList;}
BOOL isDuplicateEntry(CHXSimpleList* pList,
SmilTimeValue* pTimeValue);
HX_RESULT addResumeEvent(SmilTimeValue* pTimeValue,
REF(BOOL) bOldResumeEventWasRemoved);
HX_RESULT addUndeferEvent(SmilTimeValue* pTimeValue,
REF(BOOL) bOldUndeferEventWasRemoved);
HX_RESULT addResumeOrUndeferEvent(SmilTimeValue* pTimeValue,
REF(BOOL) bOldSuchEventWasRemoved,
BOOL bIsResumeEvent);
HX_RESULT computeRemoveTime(const char* pszID,
REF(UINT32) rulRemoveTime);
void InitPersistent(UINT32 ulPersistentComponentID, IHXValues* pProperties);
BOOL isTimelineObject(SMILNode* pNode);
static BOOL isMediaObject(SMILNode* pNode);
BOOL isNonMediaPlayableObject(SMILNode* pNode);
BOOL isTimeContainerObject(SMILNode* pNode);
UINT16 getNumGroups() const { return m_usNumGroups; }
const char* getEnumAttrString(SMIL2Attribute eAttr, BYTE ucVal);
void setParseError(HX_RESULT rv) { m_lParseError = rv; }
HX_RESULT getParseError() const { return m_lParseError; }
BOOL isAttributeAnimated(const char* pszElementID,
UINT32 ulAttrName);
SMIL2Element getSMIL2Element(const char* pszStr);
SMIL2Attribute getSMIL2Attribute(const char* pszStr);
void checkForExternalEvents();
BOOL anyExternalEvents(const char* pszID);
ExternalEventInfo* getFirstExternalEvent(const char* pszID);
ExternalEventInfo* getNextExternalEvent(const char* pszID);
void checkForEventHandlers();
AccessErrorBehavior getAccessErrorBehavior(SMILNode* pNode);
UINT32 GetUniqueNumber() { return m_ulNextVar++; }
// CSmilParser static public member methods
static HX_RESULT parseRegionDimension(const char* pszStr,
REF(double) rdValue,
REF(CSS2Type) reType);
static HX_RESULT parseZIndex(const char* pszStr,
REF(INT32) rlValue,
REF(CSS2Type) reType);
static HX_RESULT parseColor(const char* pszStr,
REF(UINT32) rulColor,
REF(CSS2Type) reType);
static HX_RESULT parseFit(const char* pszStr,
REF(Fit) reValue);
static HX_RESULT parseRegAlign(const char* pszStr,
REF(RegAlign) reValue);
static HX_RESULT parseOpacity(const char* pszStr, REF(UINT32) rulOpacity);
static HX_RESULT parseFill(const char* pszStr, REF(FillType) reFill);
static HX_RESULT getFillString(FillType eFill, REF(CHXString) rcFill);
static HX_RESULT getEraseString(EraseType eErase, REF(CHXString) rcErase);
static HX_RESULT parseFillDefault(const char* pszStr, REF(FillDefaultType) reFillDefault);
static HX_RESULT parseAccelDecel(const char* pszStr, REF(double) rdVal);
#if defined(HELIX_FEATURE_SMIL2_TRANSITIONS)
static HX_RESULT getDefaultTransitionSubType(const char* pszType, REF(CHXString) rcSubType);
static BOOL isLegalTransitionType(const char* pszType);
static BOOL isLegalTransitionSubType(const char* pszType, const char* pszSubType);
#endif /* #if defined(HELIX_FEATURE_SMIL2_TRANSITIONS) */
static HX_RESULT parseMarkerURI(const char* pszStr,
REF(CHXString) rcMarker,
REF(BOOL) rbExternal,
REF(CHXString) rcExternalFileName);
static HX_RESULT parseHandlerForID(const char* pszStr,
REF(CHXString) rcHandlerID);
static HX_RESULT parseAccessErrorBehavior(const char* pszStr,
REF(AccessErrorBehavior) reErr);
#if defined(XXXMEH_SPLINE_ANIMATION)
static HX_RESULT parseKeyTimes(const char* pszVal, CSmilAnimateElement* pAnim);
static HX_RESULT parseKeySplines(const char* pszVal, CSmilAnimateElement* pAnim);
static HX_RESULT parseSVGPath(const char* pszVal, CSmilAnimateElement* pAnim);
#endif
static BOOL isDataURL(const char* pszURL);
static HX_RESULT validateDataURL(const char* pszURL);
static void addStringProperty(IHXValues* pValues,
IUnknown* pContext,
const char* pszName,
const char* pszValue);
BOOL allTracksNeedReflushHint() { return m_bAllTracksNeedReflushHint; }
// CSmilParser public members
CHXStack* m_pNodeListStack;
SMILNodeList* m_pNodeList;
UINT32 m_ulErrorLineNumber;
UINT32 m_ulErrorColumnNumber;
IHXBuffer* m_pErrorText;
IHXBuffer* m_pDefaultNamespace;
UINT32 m_ulPersistentComponentDelay;
UINT32 m_ulPersistentComponentDuration;
CSmilTimelineElementManager* m_pTimelineElementManager;
friend class CSmilParserResponse;
private:
void close();
void initRequireTags();
void GetSystemScreenInfo(REF(UINT32) rulScreenHeight,
REF(UINT32) rulScreenWidth,
REF(UINT32) rulScreenBitDepth);
void getPreferences();
HX_RESULT createHeadElements(SMILNodeList* pNodeList);
HX_RESULT createSeqWrapper(SMILNodeList* pNodeList, BOOL bMakeInnerPar);
HX_RESULT createBodyElements(SMILNodeList* pNodeList);
HX_RESULT createElementForAnchorTarget(CSmilAAnchorElement* pAnchor,
SMILNodeList* pNodeList);
#if 0 /*XXXEH- I wrote this and then didn't need it but it may come in
handy later so #if(0) it out: */
BOOL hasNoSourceChildren(SMILNode* pNode);
#endif
HX_RESULT assignGroupIndexes(SMILNodeList* pNodeList);
HX_RESULT assignGroupIndexOnPar(SMILNode* pNode, UINT16 nGroup);
HX_RESULT assignGroupIndexOnSeq(SMILNode* pNode, UINT16& nGroup);
HX_RESULT constructTimelineElements(SMILNodeList* pNodeList);
HX_RESULT setInitialDelays(SMILNodeList* pNodeList);
void setInitialDelay(SMILNode* pNode);
void setInitialDelayOnSeq(SMILNode* pNode);
HX_RESULT expandRepeatElements(SMILNodeList* pNodeList);
HX_RESULT printBodyElements(SMILNodeList* pNodeList);
HX_RESULT updateEventElements(SMILNodeList* pNodeList);
HX_RESULT insertElementByTimestamp(CSmilElement* pElement);
HX_RESULT addGroup(SMILNode* pNode);
HX_RESULT insertGroups();
HX_RESULT mapID(SMILNode* pNode, BOOL bOverWrite = FALSE);
HX_RESULT mapChildrenIDs(SMILNodeList* pNodeList, BOOL bOverWrite = FALSE);
HX_RESULT markRepeatReplica(SMILNodeList* pNodeList, RepeatTag repeatTag);
BOOL testAttributeFailed(SMILNode* pNode);
BOOL customTestFailed(SMILNode* pNode);
BOOL systemComponentFailed(IHXBuffer* pRequiredValue);
HX_RESULT markTestAttributeNodes(SMILNodeList* pNodeList);
HX_RESULT selectSwitchNodes(SMILNode* pNode);
BOOL inSeq(SMILNode* pNode);
HX_RESULT createParent(SMILNode* pChildNode, SMILNodeTag tag,
SMILNode*& pParent, SMILNode*& pParentEnd);
void resolveTimestamps();
void resolveTimestamps(SMILNodeList* pNodeList);
UINT32 getStartTime(SMILNode* pNode);
CSmilRegion* makeRegion(SMILNode* pNode);
CSmilRegPoint* makeRegPoint(SMILNode* pNode);
#if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT)
CSmilViewport* makeViewport(SMILNode* pNode);
#endif /* #if defined(HELIX_FEATURE_SMIL2_MULTIWINDOWLAYOUT) */
CSmilTransition* makeTransition(SMILNode* pNode, REF(HX_RESULT) retVal);
CSmilRootLayout* makeRootLayout(SMILNode* pNode);
CSmilMeta* makeMeta(SMILNode* pNode);
CSmilMetadata* makeMetadata(SMILNode* pNode);
CSmilCustomTest* makeCustomTest(SMILNode* pNode,
REF(HX_RESULT) retVal);
CSmilRendererPreFetch* makeRendererPreFetch(SMILNode* pNode);
CSmilSource* makeSource(SMILNode* pNode);
CSmilPriorityClassElement* makePriorityClassElement(SMILNode* pNode);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -