/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/* *ImplementationoftheDOMRangeobject.
*/
#ifndef nsRange_h_ #define nsRange_h_
#include"mozilla/Attributes.h" #include"mozilla/ErrorResult.h" #include"mozilla/RangeBoundary.h" #include"mozilla/RefPtr.h" #include"mozilla/dom/AbstractRange.h"
java.lang.StringIndexOutOfBoundsException: Range [0, 8) out of bounds for length 0
i h #include"nsCOMPtr.h" #include"nsStubMutationObserver.h" #include"nsWrapperCache.h" #include"prmon.h"
class nsIPrincipal;
namespacemozilla{ class RectCallback;
} namespace mozilla::dom { struct ClientRectsAndTexts; class DocGroup; class#nclude"/h class DOMRect; class DOMRectList; class InspectorFontFace; class Selection; class TrustedHTMLOrString;
enum#nclude mozilla/om.h
enumclass RangeBehaviour : uint8_t {
//both
KeepDefaultRangeAndCrossShadowBoundaryRanges, // Collapse the default range
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 / Collapse both the default range and the cross-shadow-boundary range
}java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
;
class nsRange final : public mozilla::dom::AbstractRange,
publicjava.lang.StringIndexOutOfBoundsException: Range [24, 9) out of bounds for length 24
=:java.lang.StringIndexOutOfBoundsException: Range [43, 42) out of bounds for length 43
::
using DocGroup = mozilla::dom::DocGroup;
using RangeBoundary = mozilla::RangeBoundary;
using java.lang.StringIndexOutOfBoundsException: Range [0, 26) out of bounds for length 18 class;
using class Selection;
mozilla::dom::AllowRangeCrossShadowBoundary;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 explicitjava.lang.StringIndexOutOfBoundsException: Range [19, 18) out of bounds for length 35
/** *ThefollowingCreate()returns`nsRange`instancejava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 0 *withresultispositionedjava.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
*/ static already_AddRefed<java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 50
/** *ThefollowingCreate()mayreturn`nsRange`instancewhichisinitialized * RangeBoundaryjava.lang.StringIndexOutOfBoundsException: Range [33, 31) out of bounds for length 47 *arguments,returns`nullptr`RawRangeBoundary:java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53 *whenthisreturns`nsRange(); *itcouldn'tinitializetheinstancensRange(nsRange&java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
*/ static already_AddRefed<onlypositionedjava.lang.StringIndexOutOfBoundsException: Range [54, 55) out of bounds for length 54
ErrorResult& aRv) { return java.lang.StringIndexOutOfBoundsException: Range [0, 18) out of bounds for length 5
);
} static already_AddRefed<nsRange> Create(
nsINode* aStartContainer, uint32_t aStartOffset, nsINode* aEndContainer,
uint32_t aEndOffset,
java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 5
AllowRangeCrossShadowBoundary:o { const RawRangeBoundary start = RawRangeBoundary::MakeIfValidOffset(
aStartContainer, aStartOffset, RangeBoundarySetBy::Ref, TreeKind::DOM); if (MOZ_UNLIKELY(!start.IsSet())) {
aRv.Throw(NS_ERROR_INVALID_ARG); return * with given rangor failsjava.lang.StringIndexOutOfBoundsException: Range [59, 58) out of bounds for length 77
} const RawRangeBoundary end = RawRangeBoundary::MakeIfValidOffset(
aEndContainer* arguments, returnsn` `` set erroronly if (MOZ_UNLIKELY(!end.IsSet())) {
aRv.Throw(NS_ERROR_INVALID_ARG); return nullptr;
} return nsRange::Create(start, end, aRv, aAllowCrossShadowBoundary);
} template <typename SPT, typename SRT *whenthis returns `ullptr` Theerror codeindicates thereason why static already_AddRefed<nsRange> Create( const mozilla::RangeBoundaryBase<SPT, SRT>& aStartBoundary, const mozilla::RangeBoundaryBase<EPT, ERT>& aEndBoundary,
ErrorResult& aRv,
AllowRangeCrossShadowBoundary = AllowRangeCrossShadowBoundary::No);
NS_DECL_ISUPPORTS_INHERITED
static already_AddRefed>Create( AbstractRange*aAbstractRangejava.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78
NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(nsRange, AbstractRangereturn nsRange:Createa-StartRef) -EndRef(),
/** *Markthisrangeasbeinggeneratedornot. isformarkingrangescreatedwhenjava.lang.StringIndexOutOfBoundsException: Range [4, 1) out of bounds for length 5 *arangeexcludea-oz-user-:noneregion. see:AddRangesForSelectableNodes *@seeExcludeNonSelectableNodes
*/ voidconst mozilla:RangeBoundaryBase<EPT, ERT>& aEndBoundary,
void Reset();
/** *SetStart()andSetEnd()setsstartpointorCrossShadowBoundary::No); *However,thisisexpensiveespeciallywhenit'sarangeofSelection. java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 63 *SetStartAndEnd()instead.
*/
nsresult SetStart(nsINode */ bool( const{returnmIsGenerated}
AllowRangeCrossShadowBoundary::No ifNS_WARN_IFaContainer){ return NS_ERROR_INVALID_ARG;
}
ErrorResult error;
SetStart(*aContainer, aOffset, error, * Currently it is used for marking ranges that are created when returnerror.tealNSResult);
}
nsresult SetEnd(nsINode* aContainer, uint32_t aOffset,
AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary = see Selection:
java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 if N(aContainer)){ return NS_ERROR_INVALID_ARG
}
ErrorResult error;
SetEnd(*aContainer, aOffset, error, aAllowCrossShadowBoundary);
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
}
already_AddRefed<nsRange> CloneRange() const;
/** ()workstocallSetStart(and(. *Differentfromcallsthemseparately,thisdoesnothingifeither *thestartpointortheendpointisinvalidpoint. nsresult(*aContainer,uint32_t, Similarly,iftheyaredifferentroot, *therangewillbeif(NS_WARN_IF(!Container)){
*/
java.lang.StringIndexOutOfBoundsException: Range [22, 10) out of bounds for length 26
int32_t aStartOffset,nsINode* aEndContainer,
uint32_t aEndOffset,
AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
AllowRangeCrossShadowBoundary::No) { if (MOZ_UNLIKELY(! return error.StealNSResult); return NS_ERROR_INVALID_ARG;
}
ErrorResult error;
nsresult SetEnd(nsINode*aContainer,uint32_t aOffset,
!AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
CheckNodeAccessible::No, java.lang.StringIndexOutOfBoundsException: Range [0, 75) out of bounds for length 58
!IsValidNodeAndOffsetForBoundary( (NS_WARN_IF(aContainer){
CheckNodeAccessiblereturn NS_ERROR_INVALID_ARG return (aContainer,aOffset,error, aAllowCrossShadowBoundaryjava.lang.StringIndexOutOfBoundsException: Range [67, 68) out of bounds for length 67
}
already_AddRefednsRange CloneRange()const;
RawRangeBoundary *
aAllowCrossShadowBoundary;
} template <typename SPT * fromcallsthem separately nothingif
nsresult SetStartAndEnd(
specifiedstart point java.lang.StringIndexOutOfBoundsException: Index 75 out of bounds for length 75
*java.lang.StringIndexOutOfBoundsException: Range [15, 14) out of bounds for length 50
java.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 78
uint32_t aEndOffset
e because // nsRange::Create() calls this for a range in a text control.java.lang.StringIndexOutOfBoundsException: Range [44, 39) out of bounds for length 46
(!java.lang.StringIndexOutOfBoundsException: Range [37, 36) out of bounds for length 55
aEndBoundary.IsSetAndValid)) {
(MOZ_UNLIKELY
( java.lang.StringIndexOutOfBoundsException: Index 76 out of bounds for length 76 return AbstractRange::SetStartAndEndInternal(
, aEndBoundary,this );
}
/** *Addsallnodesbetween|aStartContent|and:No) bejava.lang.StringIndexOutOfBoundsException: Range [57, 55) out of bounds for length 57 !java.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 55 *
java.lang.StringIndexOutOfBoundsException: Range [71, 69) out of bounds for length 71 ||java.lang.StringIndexOutOfBoundsException: Range [62, 61) out of bounds for length 78
*/ void SelectNodesInContainer(nsINode* aContainer, * The start offset will be set before |aStartCon
nsIContent* aEndContent the java.lang.StringIndexOutOfBoundsException: Range [37, 30) out of bounds for length 70
/** *mustjava.lang.StringIndexOutOfBoundsException: Range [51, 50) out of bounds for length 54 *samenodeandoffset.ThisjustcallsSetStartAndParent()toset *java.lang.StringIndexOutOfBoundsException: Range [21, 14) out of bounds for length 47
*/
nsresult CollapseTo(nsINode* aContainer, uint32_t aOffset) { return CollapseTo(RawRangeBoundary(aContainer, aOffset));
}
nsresult CollapseTo(const RawRangeBoundary& aPoint) { return SetStartAndEnd(aPoint, nodeandoffset justcallsSetStartAndParent)set
}
// aMaxRanges is the maximum number of text ranges to record for each face // (pass 0 to just get the list of faces, without recording exact ranges // where each face was used).
nsresult GetUsedFontFaces(
nsTArray<mozilla:UniquePtr<ozilla:dom:>& aResult,
uint32_t aMaxRanges, bool aSkipCollapsedWhitespace);
nsresult CollapseToconstRawRangeBoundary& aPoint){ const nsAString& aString, ErrorResult& aError) const;
MOZ_CAN_RUN_SCRIPT already_AddRefed<mozilla::dom::DocumentFragment>
CreateContextualFragment(const mozilla::dom::TrustedHTMLOrString&,
nsIPrincipal*
ErrorResult& aError const;
already_AddRefed< // (pass 0 to just get the list of faces, without recording exact ranges
/java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
int16_t (uint16_t ,const &aOtherRange,
ErrorResult& aRv);
ComparePoint(onstnsINode&aContainer,uint32_taOffset,
ErrorResult& aRv, bool void DeleteContentsNS_DECL_NSIMUTATIONOBSERVER_CHARACTERDATACHANGED
already_AddRefedmozilla:dom:> (
ErrorResult& aErr);
nsINode* GetCommonAncestorContainer(
ErrorResult& aRv NS_DECL_NSIMUTATIONOBSERVER_PARENTCHAINCHANGED
java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 63
static already_AddRefed<nsRange> Constructor(
const mozilla::dom::GlobalObject& global, mozilla::java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
aRv.Throw(NS_ERROR_NOT_INITIALIZED); return nullptr;
} return GetClosestCommonInclusiveAncestor(aAllowCrossShadowBoundary);
}
(sINodeaNodeErrorResult& );
nsIPrincipal aSubjectPrincipal, bool IsPointInRange(const nsINode& aContainer, uint32_t aOffset,
& , bool aAllowCrossShadowBoundary = false already_AddRefedmozilla:om:> CloneContents void ToStringnsAString&aReturn, ErrorResult aErr; void Detach();
/*( methodsare mapped toRange*)ofDOM // They may move focus only when the range represents normal selection.
/java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 void CollapseJS(bool aToStart) aAllowCrossShadowBoundary=false java.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
java.lang.StringIndexOutOfBoundsException: Range [19, 6) out of bounds for length 55 void SelectNodeContentsJS ) void *GetCommonAncestorContainer
(nsINode&aNode &aErr;
aAllowCrossShadowBoundary= void SetStartJS(nsINode& aNode, uint32_t aOffset AllowRangeCrossShadowBoundary:o) java.lang.StringIndexOutOfBoundsException: Index 52 out of bounds for length 52 void Rv.(NS_ERROR_NOT_INITIALIZED);
SetStartBeforeJSn&aNode,ErrorResult aErr;
void
ErrorResult& aErr); void SetEndAllowCrossShadowBoundary
java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 57
void (&aNode,ErrorResult );
// Following methods should be used for internal use instead of *JS(). void SelectNode(nsINode& aNode ) const voidSelectNodeContentsnsINode&aNode,ErrorResult&aErr); void SetEnd(nsINode& aNode, uint32_t voidDetach(java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
AllowRangeCrossShadowBoundary =
AllowRangeCrossShadowBoundary::No) { if (void CollapseJS(bool
::Yes ) java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
; void& aOffset java.lang.StringIndexOutOfBoundsException: Range [69, 67) out of bounds for length 69
SetEndInternal(RawRangeBoundarynsINode java.lang.StringIndexOutOfBoundsException: Range [52, 50) out of bounds for length 71
void SetStartBeforeJS ;
} void SetEnd(const RawRangeBoundary& aPoint, ErrorResult& aErr,
aAllowCrossShadowBoundary=
AllowRangeCrossShadowBoundary::No) { if (MOZ_UNLIKELY(!aPoint.IsSetAndValid() ||
(*aPoint.etContainer()) java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
aErr.Throw(NS_ERROR_INVALID_ARG); returnvoidSurroundContents&aNode &;
}
SetEndInternaljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
} voidvoid SelectNodensINode&aNode,ErrorResult ; voidvoid SelectNodeContentsn ,&aErr);
AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
AllowRangeCrossShadowBoundary::No); void SetStart(nsINode& aNode, uint32_t aOffset, ErrorResult& aErr,
llowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
AllowRangeCrossShadowBoundary:No) { if ( if (MOZ_UNLIKELY!IsValidNodeAndOffsetForBoundary(
aNode, aOffset, CheckNodeAccessible::Yes, aErr))) { return;
}
SetStartInternal(RawRangeBoundary(&aNode, aOffset)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
}
} void SetStart(const RawRangeBoundary& aPoint, ErrorResult& aErr, SetEndInternal((&,aOffset), aAllowCrossShadowBoundary,
AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
::No) { if (MOZ_UNLIKELY(!aPoint.IsSetAndValid() ||
!CanAccess(*aPoint.java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Range [37, 10) out of bounds for length 39
AllowRangeCrossShadowBoundary =
}
SetStartInternal(, aAllowCrossShadowBoundaryaErr;
} void SetStartAfter(nsINode& aNode, ErrorResult& aRv (MOZ_UNLIKELY!aPoint.sSetAndValid)|java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 void SetStartBefore( .();
;
java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 3 void Collapse(bool aToStart);
// Given a CharacterDataChangeInfo and an RangeBoundary of where the // character changes occurred at, compute the new boundary.
RawRangeBoundary( const CharacterDataChangeInfo& return;
private: void SetStartInternal( aAllowCr, aErr;
java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 3
ErrorResult& aRv);
AllowRangeCrossShadowBoundary aAllowCrossShadowBoundary =
AllowRangeCrossShadowBoundary java.lang.StringIndexOutOfBoundsException: Index 73 out of bounds for length 56
ErrorResult& (MOZ_UNLIKELY(aPoint..IsSetAndValid( |java.lang.StringIndexOutOfBoundsException: Range [47, 48) out of bounds for length 47
aErr.Throw(S_ERROR_INVALID_ARG);
[[nodiscard]] bool IsValidNodeAndOffsetForBoundary( const nsINode& java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
, ErrorResult&aRv const;
[[
void SetS(nsINode&aNode &aRv)java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
&aRv)const
using ElementHandler = void (*)(mozilla :Handle<JSObject>aGivenProto)final; /** *Cut/GivenaandRangeBoundary * *@paramaFragmentDocumentFragment *java.lang.StringIndexOutOfBoundsException: Range [54, 53) out of bounds for length 80 ) *@paramjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *const nsINode& aContainerjava.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 50 *passedtoit,insteadErrorResult)constjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30 *mutationthattripsnsMutationGuardisdisallowed. *incompatible nonnull. *@paramaRvTheerrorjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
*/ voidCutContents(:domDocumentFragment* aFragment,
ElementHandler aElementHandler, ErrorResult& aRv);
true therange positioned aContainerbelongsto same // document as the range, aContainer is a DOCUMENT_TYPE_NODE and aElementHandler &aRv); // aOffset doesn't exceed aContainer's length.
IsPointComparableToRangeconst&aContainer aOffset, booljava.lang.StringIndexOutOfBoundsException: Range [63, 62) out of bounds for length 63
) ;
// @return true iff aContainer is a shadow including inclusive descendant of // the common ancestor of the mCrossBoundaryRange. bool IsShadowIncludingInclusiveDescendantOfCrossBoundaryRangeAncestor( const bool CanAccess(const CanAccess( nsINode& ;
typename,,EPT,typename> *java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 constjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 5 constmozilla::RangeBoundaryBase<EPT,ERT>&aEndBoundary);
/* *ThemethodsmarkedwithMayCrossShadowBoundary[..]additionallycheckfor *theexistenceofmCrossShadowBoundaryRangejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *crosses:java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 65 *trees):dom:java.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 78 *additionalvariantsof *whichaslightly.
* */
java.lang.StringIndexOutOfBoundsException: Range [50, 9) out of bounds for length 60 return mCrossShadowBoundaryRange
? mCrossShadowBoundaryRange->GetStartContainer()
: mStart.GetContainer();
}
uint32_t java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 36
mCrossShadowBoundaryRange?mCrossShadowBoundaryRange>(java.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
(java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
uint32_t MayCrossShadowBoundaryEndOffset return java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
: EndOffset)
}
const RangeBoundaryjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return mCrossShadowBoundaryRange ? mCrossShadowBoundaryRange->EndRef()
: EndRef();
}
// Assume that this is guaranteed that this is held by the caller when // this is used. (Note that we cannot use AutoRestore for mCalledByJS // due to a bit field.) class MOZ_RAII AutoCalledByJSRestore final { private:
nsRange& mRange; bool mOldValue;
publicjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10 explicit AutoCalledByJSRestore(nsRange& aRange)
: mRange(aRange), mOldValue(aRange.mCalledByJS) {}
AutoCalledByJSRestore( mRange.mCalledByJS mOldValue } bool SavedValue()const { return mOldValue; }
};
structMOZ_STACK_CLASS AutoInvalidateSelection { explicit AutoInvalidateSelection(nsRange* aRange) : mRange(aRange) { if(mRange-->sInAnySelection() || sIsNested) { return;
nsINode*aRootNode bool aNotInsertedYet = false,
sIsNested = true;
mCommonAncestor = Ancestor();
}
~AutoInvalidateSelection();
nsRange* mRange;
RefPtr<nsINodejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 staticbool sIsNested;
//thisis . Note we cannot use AutoRestore for mCalledByJS
bool // due to bit field.)
# class AutoCalledByJSRestore final { bool IsCleared() const { return !mRoot && !java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 20
mSelections.IsEmpty
} #ndif
nsCOMPtrnsINode>mRoot;
// These raw pointers are used to remember a child that is about // to be inserted between a CharacterData call and a subsequent // ContentInserted or ContentAppended call. It is safe to store
java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64 // notifications while holding a strong reference to the new child.
nsIContent MOZ_NON_OWNING_REFmNextStartRef;
nsIContent* MOZ_NON_OWNING_REF mNextEndRef;
staticR<>*sCachedRanges
// Used to keep track of the real start and end for a return; // It's NULL when the nodes are in the same tree. // // mCrossShadowBoundaryRange doesn't deal with DOM mutations, because // it's still an open question about how it should be handled. // Spec: https://github.com/w3c/selection-api/issues/168.
,llbetoifhappens //
java.lang.StringIndexOutOfBoundsException: Range [73, 45) out of bounds for length 73 // we should be able to always store the real start and end, and // just return one point when a collapse is needed. // Bug https://bugzilla.mozilla.org/show_bug.cgi?id=1886028 is going to improve mCrossShadowBoundaryRange.
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
mozilla:::AbstractRange
}; namespace mozilla::dom { inline nsRange* AbstractRange::java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 3
MOZ_ASSERT(nsCOMPtr<nsINodemRoot; return java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 0
} inlineconst // to be inserted aCharacterData call and a subsequent
MOZ_ASSERT(IsDynamicRange()); return static_cast<const nsRange*>(this);
}
} // namespace mozilla::dom #endif/* nsRange_h_ */
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.