search/mag_sel search/close
Aspose::Words::CommentRangeStart Class Referencefinal

Denotes the start of a region of text that has a comment associated with it.

To create a comment anchored to a region of text, you need to create a Comment and then create CommentRangeStart and CommentRangeEnd and set their identifiers to the same Id value.

CommentRangeStart is an inline-level node and can only be a child of Paragraph.

See also
Aspose::Words::Comment
Aspose::Words::CommentRangeEnd
Examples

Shows how print the contents of all comments and their comment ranges using a document visitor.

void CreateCommentsAndPrintAllInfo()
{
auto doc = MakeObject<Document>();
auto newComment = MakeObject<Comment>(doc);
newComment->set_Author(u"VDeryushev");
newComment->set_Initial(u"VD");
newComment->set_DateTime(System::DateTime::get_Now());
newComment->SetText(u"Comment regarding text.");
// Add text to the document, warp it in a comment range, and then add your comment.
SharedPtr<Paragraph> para = doc->get_FirstSection()->get_Body()->get_FirstParagraph();
para->AppendChild(MakeObject<CommentRangeStart>(doc, newComment->get_Id()));
para->AppendChild(MakeObject<Run>(doc, u"Commented text."));
para->AppendChild(MakeObject<CommentRangeEnd>(doc, newComment->get_Id()));
para->AppendChild(newComment);
// Add two replies to the comment.
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"New reply.");
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"Another reply.");
PrintAllCommentInfo(doc->GetChildNodes(NodeType::Comment, true));
}
static void PrintAllCommentInfo(SharedPtr<NodeCollection> comments)
{
auto commentVisitor = MakeObject<ExComment::CommentInfoPrinter>();
// Iterate over all top-level comments. Unlike reply-type comments, top-level comments have no ancestor.
std::function<bool(SharedPtr<Node> c)> haveNoAncestor = [](SharedPtr<Node> c)
{
return (System::DynamicCast<Comment>(c))->get_Ancestor() == nullptr;
};
for (auto comment : System::IterateOver<Comment>(comments->LINQ_Where(haveNoAncestor)))
{
// First, visit the start of the comment range.
auto commentRangeStart = System::DynamicCast<CommentRangeStart>(comment->get_PreviousSibling()->get_PreviousSibling()->get_PreviousSibling());
commentRangeStart->Accept(commentVisitor);
// Then, visit the comment, and any replies that it may have.
comment->Accept(commentVisitor);
for (const auto& reply : System::IterateOver<Comment>(comment->get_Replies()))
{
reply->Accept(commentVisitor);
}
// Finally, visit the end of the comment range, and then print the visitor's text contents.
auto commentRangeEnd = System::DynamicCast<CommentRangeEnd>(comment->get_PreviousSibling());
commentRangeEnd->Accept(commentVisitor);
std::cout << commentVisitor->GetText() << std::endl;
}
}
class CommentInfoPrinter : public DocumentVisitor
{
public:
CommentInfoPrinter() : mVisitorIsInsideComment(false), mDocTraversalDepth(0)
{
mBuilder = MakeObject<System::Text::StringBuilder>();
mVisitorIsInsideComment = false;
}
String GetText()
{
return mBuilder->ToString();
}
VisitorAction VisitRun(SharedPtr<Run> run) override
{
if (mVisitorIsInsideComment)
{
IndentAndAppendLine(String(u"[Run] \"") + run->get_Text() + u"\"");
}
}
VisitorAction VisitCommentRangeStart(SharedPtr<CommentRangeStart> commentRangeStart) override
{
IndentAndAppendLine(String(u"[Comment range start] ID: ") + commentRangeStart->get_Id());
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentRangeEnd(SharedPtr<CommentRangeEnd> commentRangeEnd) override
{
mDocTraversalDepth--;
IndentAndAppendLine(String(u"[Comment range end] ID: ") + commentRangeEnd->get_Id() + u"\n");
mVisitorIsInsideComment = false;
}
VisitorAction VisitCommentStart(SharedPtr<Comment> comment) override
{
IndentAndAppendLine(
String::Format(u"[Comment start] For comment range ID {0}, By {1} on {2}", comment->get_Id(), comment->get_Author(), comment->get_DateTime()));
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentEnd(SharedPtr<Comment> comment) override
{
mDocTraversalDepth--;
IndentAndAppendLine(u"[Comment end]");
mVisitorIsInsideComment = false;
}
private:
bool mVisitorIsInsideComment;
int mDocTraversalDepth;
SharedPtr<System::Text::StringBuilder> mBuilder;
void IndentAndAppendLine(String text)
{
for (int i = 0; i < mDocTraversalDepth; i++)
{
mBuilder->Append(u"| ");
}
mBuilder->AppendLine(text);
}
};

#include <Aspose.Words.Cpp/CommentRangeStart.h>

+ Inheritance diagram for Aspose::Words::CommentRangeStart:

Public Member Functions

 CommentRangeStart (SharedPtr< DocumentBase > doc, int32_t id)
 Initializes a new instance of this class. More...
 
bool Accept (SharedPtr< DocumentVisitor > visitor) override
 Accepts a visitor. More...
 
Aspose::Words::Revisions::DisplacedByType get_DisplacedByCustomXml () override
 
int32_t get_Id () const
 Specifies the identifier of the comment to which this region is linked. More...
 
NodeType get_NodeType () const override
 Returns CommentRangeStart. More...
 
virtual const TypeInfoGetType () const override
 
virtual bool Is (const TypeInfo &target) const override
 
void set_DisplacedByCustomXml (Aspose::Words::Revisions::DisplacedByType value) override
 
void set_Id (int32_t value)
 Setter for get_Id. More...
 
- Public Member Functions inherited from Node
SharedPtr< NodeClone (bool isCloneChildren)
 Creates a duplicate of the node. More...
 
int32_t get_CustomNodeId () const
 Specifies custom node identifier. More...
 
virtual SharedPtr< DocumentBaseget_Document () const
 Gets the document to which this node belongs. More...
 
virtual bool get_IsComposite ()
 Returns true if this node can contain other nodes. More...
 
SharedPtr< Nodeget_NextSibling ()
 Gets the node immediately following this node. More...
 
SharedPtr< CompositeNodeget_ParentNode ()
 Gets the immediate parent of this node. More...
 
SharedPtr< Nodeget_PreviousSibling ()
 Gets the node immediately preceding this node. More...
 
SharedPtr< Rangeget_Range ()
 Returns a Range object that represents the portion of a document that is contained in this node. More...
 
SharedPtr< CompositeNodeGetAncestor (NodeType ancestorType)
 Gets the first ancestor of the specified NodeType. More...
 
template<typename T >
GetAncestorOf ()
 
virtual String GetText ()
 Gets the text of this node and of all its children. More...
 
SharedPtr< NodeNextPreOrder (SharedPtr< Node > rootNode)
 Gets next node according to the pre-order tree traversal algorithm. More...
 
SharedPtr< NodePreviousPreOrder (SharedPtr< Node > rootNode)
 Gets the previous node according to the pre-order tree traversal algorithm. More...
 
void Remove ()
 Removes itself from the parent. More...
 
void set_CustomNodeId (int32_t value)
 Setter for get_CustomNodeId. More...
 
String ToString (SaveFormat saveFormat)
 Exports the content of the node into a string in the specified format. More...
 
String ToString (SharedPtr< SaveOptions > saveOptions)
 Exports the content of the node into a string using the specified save options. More...
 

Static Public Member Functions

static const TypeInfoType ()
 
- Static Public Member Functions inherited from Node
static String NodeTypeToString (NodeType nodeType)
 A utility method that converts a node type enum value into a user friendly string. More...
 
static const TypeInfoType ()
 

Constructor & Destructor Documentation

◆ CommentRangeStart()

Aspose::Words::CommentRangeStart::CommentRangeStart ( System::SharedPtr< Aspose::Words::DocumentBase doc,
int32_t  id 
)

Initializes a new instance of this class.

When CommentRangeStart is created, it belongs to the specified document, but is not yet part of the document and ParentNode is null.

To append a CommentRangeStart to the document use InsertAfter or InsertBefore on the paragraph where you want the comment inserted.

Parameters
docThe owner document.
idThe comment identifier to which this object is linked.
Examples

Shows how print the contents of all comments and their comment ranges using a document visitor.

void CreateCommentsAndPrintAllInfo()
{
auto doc = MakeObject<Document>();
auto newComment = MakeObject<Comment>(doc);
newComment->set_Author(u"VDeryushev");
newComment->set_Initial(u"VD");
newComment->set_DateTime(System::DateTime::get_Now());
newComment->SetText(u"Comment regarding text.");
// Add text to the document, warp it in a comment range, and then add your comment.
SharedPtr<Paragraph> para = doc->get_FirstSection()->get_Body()->get_FirstParagraph();
para->AppendChild(MakeObject<CommentRangeStart>(doc, newComment->get_Id()));
para->AppendChild(MakeObject<Run>(doc, u"Commented text."));
para->AppendChild(MakeObject<CommentRangeEnd>(doc, newComment->get_Id()));
para->AppendChild(newComment);
// Add two replies to the comment.
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"New reply.");
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"Another reply.");
PrintAllCommentInfo(doc->GetChildNodes(NodeType::Comment, true));
}
static void PrintAllCommentInfo(SharedPtr<NodeCollection> comments)
{
auto commentVisitor = MakeObject<ExComment::CommentInfoPrinter>();
// Iterate over all top-level comments. Unlike reply-type comments, top-level comments have no ancestor.
std::function<bool(SharedPtr<Node> c)> haveNoAncestor = [](SharedPtr<Node> c)
{
return (System::DynamicCast<Comment>(c))->get_Ancestor() == nullptr;
};
for (auto comment : System::IterateOver<Comment>(comments->LINQ_Where(haveNoAncestor)))
{
// First, visit the start of the comment range.
auto commentRangeStart = System::DynamicCast<CommentRangeStart>(comment->get_PreviousSibling()->get_PreviousSibling()->get_PreviousSibling());
commentRangeStart->Accept(commentVisitor);
// Then, visit the comment, and any replies that it may have.
comment->Accept(commentVisitor);
for (const auto& reply : System::IterateOver<Comment>(comment->get_Replies()))
{
reply->Accept(commentVisitor);
}
// Finally, visit the end of the comment range, and then print the visitor's text contents.
auto commentRangeEnd = System::DynamicCast<CommentRangeEnd>(comment->get_PreviousSibling());
commentRangeEnd->Accept(commentVisitor);
std::cout << commentVisitor->GetText() << std::endl;
}
}
class CommentInfoPrinter : public DocumentVisitor
{
public:
CommentInfoPrinter() : mVisitorIsInsideComment(false), mDocTraversalDepth(0)
{
mBuilder = MakeObject<System::Text::StringBuilder>();
mVisitorIsInsideComment = false;
}
String GetText()
{
return mBuilder->ToString();
}
VisitorAction VisitRun(SharedPtr<Run> run) override
{
if (mVisitorIsInsideComment)
{
IndentAndAppendLine(String(u"[Run] \"") + run->get_Text() + u"\"");
}
}
VisitorAction VisitCommentRangeStart(SharedPtr<CommentRangeStart> commentRangeStart) override
{
IndentAndAppendLine(String(u"[Comment range start] ID: ") + commentRangeStart->get_Id());
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentRangeEnd(SharedPtr<CommentRangeEnd> commentRangeEnd) override
{
mDocTraversalDepth--;
IndentAndAppendLine(String(u"[Comment range end] ID: ") + commentRangeEnd->get_Id() + u"\n");
mVisitorIsInsideComment = false;
}
VisitorAction VisitCommentStart(SharedPtr<Comment> comment) override
{
IndentAndAppendLine(
String::Format(u"[Comment start] For comment range ID {0}, By {1} on {2}", comment->get_Id(), comment->get_Author(), comment->get_DateTime()));
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentEnd(SharedPtr<Comment> comment) override
{
mDocTraversalDepth--;
IndentAndAppendLine(u"[Comment end]");
mVisitorIsInsideComment = false;
}
private:
bool mVisitorIsInsideComment;
int mDocTraversalDepth;
SharedPtr<System::Text::StringBuilder> mBuilder;
void IndentAndAppendLine(String text)
{
for (int i = 0; i < mDocTraversalDepth; i++)
{
mBuilder->Append(u"| ");
}
mBuilder->AppendLine(text);
}
};

Member Function Documentation

◆ Accept()

bool Aspose::Words::CommentRangeStart::Accept ( System::SharedPtr< Aspose::Words::DocumentVisitor visitor)
overridevirtual

Accepts a visitor.

Calls VisitCommentRangeStart().

For more info see the Visitor design pattern.

Parameters
visitorThe visitor that will visit the node.
Returns
False if the visitor requested the enumeration to stop.
Examples

Shows how print the contents of all comments and their comment ranges using a document visitor.

void CreateCommentsAndPrintAllInfo()
{
auto doc = MakeObject<Document>();
auto newComment = MakeObject<Comment>(doc);
newComment->set_Author(u"VDeryushev");
newComment->set_Initial(u"VD");
newComment->set_DateTime(System::DateTime::get_Now());
newComment->SetText(u"Comment regarding text.");
// Add text to the document, warp it in a comment range, and then add your comment.
SharedPtr<Paragraph> para = doc->get_FirstSection()->get_Body()->get_FirstParagraph();
para->AppendChild(MakeObject<CommentRangeStart>(doc, newComment->get_Id()));
para->AppendChild(MakeObject<Run>(doc, u"Commented text."));
para->AppendChild(MakeObject<CommentRangeEnd>(doc, newComment->get_Id()));
para->AppendChild(newComment);
// Add two replies to the comment.
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"New reply.");
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"Another reply.");
PrintAllCommentInfo(doc->GetChildNodes(NodeType::Comment, true));
}
static void PrintAllCommentInfo(SharedPtr<NodeCollection> comments)
{
auto commentVisitor = MakeObject<ExComment::CommentInfoPrinter>();
// Iterate over all top-level comments. Unlike reply-type comments, top-level comments have no ancestor.
std::function<bool(SharedPtr<Node> c)> haveNoAncestor = [](SharedPtr<Node> c)
{
return (System::DynamicCast<Comment>(c))->get_Ancestor() == nullptr;
};
for (auto comment : System::IterateOver<Comment>(comments->LINQ_Where(haveNoAncestor)))
{
// First, visit the start of the comment range.
auto commentRangeStart = System::DynamicCast<CommentRangeStart>(comment->get_PreviousSibling()->get_PreviousSibling()->get_PreviousSibling());
commentRangeStart->Accept(commentVisitor);
// Then, visit the comment, and any replies that it may have.
comment->Accept(commentVisitor);
for (const auto& reply : System::IterateOver<Comment>(comment->get_Replies()))
{
reply->Accept(commentVisitor);
}
// Finally, visit the end of the comment range, and then print the visitor's text contents.
auto commentRangeEnd = System::DynamicCast<CommentRangeEnd>(comment->get_PreviousSibling());
commentRangeEnd->Accept(commentVisitor);
std::cout << commentVisitor->GetText() << std::endl;
}
}
class CommentInfoPrinter : public DocumentVisitor
{
public:
CommentInfoPrinter() : mVisitorIsInsideComment(false), mDocTraversalDepth(0)
{
mBuilder = MakeObject<System::Text::StringBuilder>();
mVisitorIsInsideComment = false;
}
String GetText()
{
return mBuilder->ToString();
}
VisitorAction VisitRun(SharedPtr<Run> run) override
{
if (mVisitorIsInsideComment)
{
IndentAndAppendLine(String(u"[Run] \"") + run->get_Text() + u"\"");
}
}
VisitorAction VisitCommentRangeStart(SharedPtr<CommentRangeStart> commentRangeStart) override
{
IndentAndAppendLine(String(u"[Comment range start] ID: ") + commentRangeStart->get_Id());
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentRangeEnd(SharedPtr<CommentRangeEnd> commentRangeEnd) override
{
mDocTraversalDepth--;
IndentAndAppendLine(String(u"[Comment range end] ID: ") + commentRangeEnd->get_Id() + u"\n");
mVisitorIsInsideComment = false;
}
VisitorAction VisitCommentStart(SharedPtr<Comment> comment) override
{
IndentAndAppendLine(
String::Format(u"[Comment start] For comment range ID {0}, By {1} on {2}", comment->get_Id(), comment->get_Author(), comment->get_DateTime()));
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentEnd(SharedPtr<Comment> comment) override
{
mDocTraversalDepth--;
IndentAndAppendLine(u"[Comment end]");
mVisitorIsInsideComment = false;
}
private:
bool mVisitorIsInsideComment;
int mDocTraversalDepth;
SharedPtr<System::Text::StringBuilder> mBuilder;
void IndentAndAppendLine(String text)
{
for (int i = 0; i < mDocTraversalDepth; i++)
{
mBuilder->Append(u"| ");
}
mBuilder->AppendLine(text);
}
};

Implements Aspose::Words::Node.

◆ get_DisplacedByCustomXml()

Aspose::Words::Revisions::DisplacedByType Aspose::Words::CommentRangeStart::get_DisplacedByCustomXml ( )
override

◆ get_Id()

int32_t Aspose::Words::CommentRangeStart::get_Id ( ) const

Specifies the identifier of the comment to which this region is linked.

Examples

Shows how print the contents of all comments and their comment ranges using a document visitor.

void CreateCommentsAndPrintAllInfo()
{
auto doc = MakeObject<Document>();
auto newComment = MakeObject<Comment>(doc);
newComment->set_Author(u"VDeryushev");
newComment->set_Initial(u"VD");
newComment->set_DateTime(System::DateTime::get_Now());
newComment->SetText(u"Comment regarding text.");
// Add text to the document, warp it in a comment range, and then add your comment.
SharedPtr<Paragraph> para = doc->get_FirstSection()->get_Body()->get_FirstParagraph();
para->AppendChild(MakeObject<CommentRangeStart>(doc, newComment->get_Id()));
para->AppendChild(MakeObject<Run>(doc, u"Commented text."));
para->AppendChild(MakeObject<CommentRangeEnd>(doc, newComment->get_Id()));
para->AppendChild(newComment);
// Add two replies to the comment.
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"New reply.");
newComment->AddReply(u"John Doe", u"JD", System::DateTime::get_Now(), u"Another reply.");
PrintAllCommentInfo(doc->GetChildNodes(NodeType::Comment, true));
}
static void PrintAllCommentInfo(SharedPtr<NodeCollection> comments)
{
auto commentVisitor = MakeObject<ExComment::CommentInfoPrinter>();
// Iterate over all top-level comments. Unlike reply-type comments, top-level comments have no ancestor.
std::function<bool(SharedPtr<Node> c)> haveNoAncestor = [](SharedPtr<Node> c)
{
return (System::DynamicCast<Comment>(c))->get_Ancestor() == nullptr;
};
for (auto comment : System::IterateOver<Comment>(comments->LINQ_Where(haveNoAncestor)))
{
// First, visit the start of the comment range.
auto commentRangeStart = System::DynamicCast<CommentRangeStart>(comment->get_PreviousSibling()->get_PreviousSibling()->get_PreviousSibling());
commentRangeStart->Accept(commentVisitor);
// Then, visit the comment, and any replies that it may have.
comment->Accept(commentVisitor);
for (const auto& reply : System::IterateOver<Comment>(comment->get_Replies()))
{
reply->Accept(commentVisitor);
}
// Finally, visit the end of the comment range, and then print the visitor's text contents.
auto commentRangeEnd = System::DynamicCast<CommentRangeEnd>(comment->get_PreviousSibling());
commentRangeEnd->Accept(commentVisitor);
std::cout << commentVisitor->GetText() << std::endl;
}
}
class CommentInfoPrinter : public DocumentVisitor
{
public:
CommentInfoPrinter() : mVisitorIsInsideComment(false), mDocTraversalDepth(0)
{
mBuilder = MakeObject<System::Text::StringBuilder>();
mVisitorIsInsideComment = false;
}
String GetText()
{
return mBuilder->ToString();
}
VisitorAction VisitRun(SharedPtr<Run> run) override
{
if (mVisitorIsInsideComment)
{
IndentAndAppendLine(String(u"[Run] \"") + run->get_Text() + u"\"");
}
}
VisitorAction VisitCommentRangeStart(SharedPtr<CommentRangeStart> commentRangeStart) override
{
IndentAndAppendLine(String(u"[Comment range start] ID: ") + commentRangeStart->get_Id());
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentRangeEnd(SharedPtr<CommentRangeEnd> commentRangeEnd) override
{
mDocTraversalDepth--;
IndentAndAppendLine(String(u"[Comment range end] ID: ") + commentRangeEnd->get_Id() + u"\n");
mVisitorIsInsideComment = false;
}
VisitorAction VisitCommentStart(SharedPtr<Comment> comment) override
{
IndentAndAppendLine(
String::Format(u"[Comment start] For comment range ID {0}, By {1} on {2}", comment->get_Id(), comment->get_Author(), comment->get_DateTime()));
mDocTraversalDepth++;
mVisitorIsInsideComment = true;
}
VisitorAction VisitCommentEnd(SharedPtr<Comment> comment) override
{
mDocTraversalDepth--;
IndentAndAppendLine(u"[Comment end]");
mVisitorIsInsideComment = false;
}
private:
bool mVisitorIsInsideComment;
int mDocTraversalDepth;
SharedPtr<System::Text::StringBuilder> mBuilder;
void IndentAndAppendLine(String text)
{
for (int i = 0; i < mDocTraversalDepth; i++)
{
mBuilder->Append(u"| ");
}
mBuilder->AppendLine(text);
}
};

◆ get_NodeType()

Aspose::Words::NodeType Aspose::Words::CommentRangeStart::get_NodeType ( ) const
overridevirtual

Returns CommentRangeStart.

Examples

Shows how to traverse a composite node's tree of child nodes.

void RecurseChildren()
{
auto doc = MakeObject<Document>(MyDir + u"Paragraphs.docx");
// Any node that can contain child nodes, such as the document itself, is composite.
ASSERT_TRUE(doc->get_IsComposite());
// Invoke the recursive function that will go through and print all the child nodes of a composite node.
TraverseAllNodes(doc, 0);
}
void TraverseAllNodes(SharedPtr<CompositeNode> parentNode, int depth)
{
for (SharedPtr<Node> childNode = parentNode->get_FirstChild(); childNode != nullptr; childNode = childNode->get_NextSibling())
{
std::cout << (String(u'\t', depth)) << Node::NodeTypeToString(childNode->get_NodeType());
// Recurse into the node if it is a composite node. Otherwise, print its contents if it is an inline node.
if (childNode->get_IsComposite())
{
std::cout << std::endl;
TraverseAllNodes(System::DynamicCast<CompositeNode>(childNode), depth + 1);
}
else if (System::ObjectExt::Is<Inline>(childNode))
{
std::cout << " - \"" << childNode->GetText().Trim() << "\"" << std::endl;
}
else
{
std::cout << std::endl;
}
}
}

Implements Aspose::Words::Node.

◆ GetType()

virtual const System::TypeInfo& Aspose::Words::CommentRangeStart::GetType ( ) const
overridevirtual

Reimplemented from Aspose::Words::Node.

◆ Is()

virtual bool Aspose::Words::CommentRangeStart::Is ( const System::TypeInfo target) const
overridevirtual

Reimplemented from Aspose::Words::Node.

◆ set_DisplacedByCustomXml()

void Aspose::Words::CommentRangeStart::set_DisplacedByCustomXml ( Aspose::Words::Revisions::DisplacedByType  value)
override

◆ set_Id()

void Aspose::Words::CommentRangeStart::set_Id ( int32_t  value)

◆ Type()

static const System::TypeInfo& Aspose::Words::CommentRangeStart::Type ( )
static