66 ERR(
"Could not find range in document\n");
73 {
'c',
'h',
'a',
'r',
'a',
'c',
't',
'e',
'r',0};
76 static const WCHAR sentenceW[] =
77 {
's',
'e',
'n',
't',
'e',
'n',
'c',
'e',0};
79 {
't',
'e',
'x',
't',
'e',
'd',
'i',
't',0};
91 static const WCHAR seW[] = {
'S',
't',
'a',
'r',
't',
'T',
'o',
'E',
'n',
'd',0};
92 static const WCHAR ssW[] = {
'S',
't',
'a',
'r',
't',
'T',
'o',
'S',
't',
'a',
'r',
't',0};
93 static const WCHAR esW[] = {
'E',
'n',
'd',
'T',
'o',
'S',
't',
'a',
'r',
't',0};
94 static const WCHAR eeW[] = {
'E',
'n',
'd',
'T',
'o',
'E',
'n',
'd',0};
109 nsIDOMNode_GetNodeType(
node, &
type);
119 nsres = nsIDOMNode_QueryInterface(
node, &IID_nsIDOMText, (
void**)&nstext);
123 nsres = nsIDOMText_GetData(nstext, nsstr);
124 nsIDOMText_Release(nstext);
126 ERR(
"GetData failed: %08x\n", nsres);
136 nsIDOMNode_GetChildNodes(
node, &node_list);
137 nsIDOMNodeList_Item(node_list, off, &
ret);
138 nsIDOMNodeList_Release(node_list);
153 nsres = nsIDOMNode_GetChildNodes(
parent, &node_list);
157 nsres = nsIDOMNodeList_Item(node_list,
ret, &
node);
160 nsIDOMNode_Release(
node);
163 nsIDOMNode_Release(
node);
167 nsIDOMNodeList_Release(node_list);
173 nsIDOMNode_AddRef(
node);
177 rangepoint->
off = off;
182 nsIDOMNode_Release(rangepoint->
node);
187 return point1->
node == point2->
node && point1->
off == point2->
off;
201 nsIDOMNode_Release(
node);
206 nsres = nsIDOMNode_GetParentNode(iter->
node, &
node);
214 nsIDOMNode_Release(
node);
224 nsres = nsIDOMNode_GetChildNodes(
node, &node_list);
227 nsres = nsIDOMNodeList_GetLength(node_list, &
ret);
228 nsIDOMNodeList_Release(node_list);
240 nsres = nsIDOMNode_QueryInterface(
node, &IID_nsIDOMText, (
void**)&nstext);
243 nsres = nsIDOMText_GetLength(nstext, &
ret);
244 nsIDOMText_Release(nstext);
264 nsIDOMNode_Release(
node);
269 nsres = nsIDOMNode_GetParentNode(iter->
node, &
node);
285 nsIDOMRange_GetStartContainer(
This->nsrange, &
node);
286 nsIDOMRange_GetStartOffset(
This->nsrange, &off);
290 nsIDOMNode_Release(
node);
298 nsIDOMRange_GetEndContainer(
This->nsrange, &
node);
299 nsIDOMRange_GetEndOffset(
This->nsrange, &off);
303 nsIDOMNode_Release(
node);
310 ERR(
"failed: %08x\n", nsres);
317 ERR(
"failed: %08x\n", nsres);
328 nsres = nsIDOMNode_QueryInterface(
node, &IID_nsIDOMElement, (
void**)&
elem);
333 nsIDOMElement_GetTagName(
elem, &tag_str);
334 nsIDOMElement_Release(
elem);
416 nsIDOMNode_QueryInterface(
node, &IID_nsIDOMText, (
void**)&nstext);
419 nsIDOMText_GetData(nstext, &data_str);
424 nsIDOMText_Release(nstext);
430 static const WCHAR endlW[] = {
'\r',
'\n'};
433 static const WCHAR endl2W[] = {
'\r',
'\n',
'\r',
'\n'};
445 nsIDOMNode_GetFirstChild(
node, &iter);
448 nsIDOMNode_GetNextSibling(iter, &tmp);
449 nsIDOMNode_Release(iter);
459 nsIDOMRange_GetCollapsed(
This->nsrange, &collapsed);
471 if(iter.
type == TEXT_NODE) {
491 nsIDOMNode_Release(
node);
496 ERR(
"End of document?\n");
598 nsIDOMNode_Release(
node);
607 nsIDOMNode_Release(
node);
618 nsIDOMNode_Release(
node);
692 nsIDOMNode_Release(
node);
703 nsIDOMNode_Release(
node);
816 *
ppv = &
This->IHTMLTxtRange_iface;
818 *
ppv = &
This->IHTMLTxtRange_iface;
820 *
ppv = &
This->IOleCommandTarget_iface;
852 nsIDOMRange_Release(
This->nsrange);
866 return IDispatchEx_GetTypeInfoCount(&
This->dispex.IDispatchEx_iface, pctinfo);
874 return IDispatchEx_GetTypeInfo(&
This->dispex.IDispatchEx_iface, iTInfo, lcid, ppTInfo);
883 return IDispatchEx_GetIDsOfNames(&
This->dispex.IDispatchEx_iface,
riid, rgszNames,
884 cNames, lcid, rgDispId);
889 VARIANT *pVarResult, EXCEPINFO *pExcepInfo,
UINT *puArgErr)
893 return IDispatchEx_Invoke(&
This->dispex.IDispatchEx_iface, dispIdMember,
riid,
894 lcid,
wFlags, pDispParams, pVarResult, pExcepInfo, puArgErr);
909 nsres = nsIDOMRange_CloneContents(
This->nsrange, &fragment);
916 nsIDOMDocumentFragment_Release(fragment);
947 nsres = nsIDOMHTMLDocument_CreateTextNode(
This->doc->nsdoc, &text_str, &text_node);
950 ERR(
"CreateTextNode failed: %08x\n", nsres);
953 nsres = nsIDOMRange_DeleteContents(
This->nsrange);
955 ERR(
"DeleteContents failed: %08x\n", nsres);
957 nsres = nsIDOMRange_InsertNode(
This->nsrange, (
nsIDOMNode*)text_node);
959 ERR(
"InsertNode failed: %08x\n", nsres);
961 nsres = nsIDOMRange_SetEndAfter(
This->nsrange, (
nsIDOMNode*)text_node);
963 ERR(
"SetEndAfter failed: %08x\n", nsres);
965 return IHTMLTxtRange_collapse(&
This->IHTMLTxtRange_iface, VARIANT_FALSE);
999 nsIDOMRange_GetCommonAncestorContainer(
This->nsrange, &nsnode);
1001 nsIDOMNode_GetParentNode(nsnode, &tmp);
1002 nsIDOMNode_Release(nsnode);
1012 nsIDOMNode_Release(nsnode);
1016 hres = IHTMLDOMNode_QueryInterface(&
node->IHTMLDOMNode_iface, &IID_IHTMLElement, (
void**)
parent);
1029 nsIDOMRange_CloneRange(
This->nsrange, &nsrange);
1031 nsIDOMRange_Release(nsrange);
1046 *InRange = VARIANT_FALSE;
1052 nsres = nsIDOMRange_CompareBoundaryPoints(
This->nsrange, NS_START_TO_START,
1055 nsres = nsIDOMRange_CompareBoundaryPoints(
This->nsrange, NS_END_TO_END,
1058 *InRange = VARIANT_TRUE;
1062 ERR(
"CompareBoundaryPoints failed: %08x\n", nsres);
1083 nsres = nsIDOMRange_CompareBoundaryPoints(
This->nsrange, NS_START_TO_START,
1086 nsres = nsIDOMRange_CompareBoundaryPoints(
This->nsrange, NS_END_TO_END,
1093 ERR(
"CompareBoundaryPoints failed: %08x\n", nsres);
1111 nsIDOMRange_Collapse(
This->nsrange,
Start != VARIANT_FALSE);
1136 nsIDOMRange_GetCollapsed(
This->nsrange, &is_collapsed);
1157 nsres = nsIDOMHTMLDocument_GetBody(
This->doc->nsdoc, &nsbody);
1159 ERR(
"Could not get body: %08x\n", nsres);
1163 nsres = nsIDOMRange_SelectNodeContents(
This->nsrange, (
nsIDOMNode*)nsbody);
1164 nsIDOMHTMLElement_Release(nsbody);
1166 ERR(
"Collapse failed: %08x\n", nsres);
1195 return IHTMLTxtRange_collapse(&
This->IHTMLTxtRange_iface, VARIANT_TRUE);
1207 IHTMLTxtRange_collapse(&
This->IHTMLTxtRange_iface, VARIANT_TRUE);
1220 IHTMLTxtRange_collapse(&
This->IHTMLTxtRange_iface, VARIANT_TRUE);
1229 TRACE(
"ret %d\n", *ActualCount);
1316 nsres = nsIDOMWindow_GetSelection(
This->doc->basedoc.window->nswindow, &nsselection);
1318 ERR(
"GetSelection failed: %08x\n", nsres);
1322 nsISelection_RemoveAllRanges(nsselection);
1323 nsISelection_AddRange(nsselection,
This->nsrange);
1324 nsISelection_Release(nsselection);
1337 nsres = nsIDOMRange_Collapse(
This->nsrange,
TRUE);
1341 nsres = nsIDOMRange_CreateContextualFragment(
This->nsrange, &nsstr, &doc_frag);
1344 ERR(
"CreateContextualFragment failed: %08x\n", nsres);
1348 nsres = nsIDOMRange_InsertNode(
This->nsrange, (
nsIDOMNode*)doc_frag);
1349 nsIDOMDocumentFragment_Release(doc_frag);
1351 ERR(
"InsertNode failed: %08x\n", nsres);
1355 nsres = nsIDOMRange_Collapse(
This->nsrange,
FALSE);
1372 nsres = nsIDOMRange_SelectNodeContents(
This->nsrange,
elem->node.nsnode);
1374 ERR(
"SelectNodeContents failed: %08x\n", nsres);
1382 IHTMLTxtRange *SourceRange)
1404 case NS_START_TO_START:
1405 case NS_END_TO_START:
1406 nsres = nsIDOMRange_GetStartContainer(src_range->
nsrange, &ref_node);
1409 nsres = nsIDOMRange_GetStartOffset(src_range->
nsrange, &ref_offset);
1412 set_start = how_type == NS_START_TO_START;
1415 case NS_START_TO_END:
1416 nsres = nsIDOMRange_GetEndContainer(src_range->
nsrange, &ref_node);
1419 nsres = nsIDOMRange_GetEndOffset(src_range->
nsrange, &ref_offset);
1422 set_start = how_type == NS_START_TO_END;
1427 nsres = nsIDOMRange_ComparePoint(
This->nsrange, ref_node, ref_offset, &
cmp);
1432 nsres = nsIDOMRange_SetStart(
This->nsrange, ref_node, ref_offset);
1434 nsres = nsIDOMRange_Collapse(
This->nsrange,
FALSE);
1437 nsres = nsIDOMRange_SetEnd(
This->nsrange, ref_node, ref_offset);
1441 nsres = nsIDOMRange_SetEnd(
This->nsrange, ref_node, ref_offset);
1443 nsres = nsIDOMRange_Collapse(
This->nsrange,
TRUE);
1446 nsres = nsIDOMRange_SetStart(
This->nsrange, ref_node, ref_offset);
1451 nsIDOMNode_Release(ref_node);
1456 IHTMLTxtRange *SourceRange,
LONG *
ret)
1474 nsres = nsIDOMRange_CompareBoundaryPoints(
This->nsrange, nscmpt, src_range->
nsrange, &nsret);
1476 ERR(
"CompareBoundaryPoints failed: %08x\n", nsres);
1624 return IHTMLTxtRange_QueryInterface(&
This->IHTMLTxtRange_iface,
riid,
ppv);
1630 return IHTMLTxtRange_AddRef(&
This->IHTMLTxtRange_iface);
1636 return IHTMLTxtRange_Release(&
This->IHTMLTxtRange_iface);
1640 ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
1653 static const PRUnichar blockquoteW[] = {
'B',
'L',
'O',
'C',
'K',
'Q',
'U',
'O',
'T',
'E',0};
1658 if(!
This->doc->nsdoc) {
1659 WARN(
"NULL nsdoc\n");
1666 nsIDOMRange_ExtractContents(
This->nsrange, &fragment);
1667 nsIDOMHTMLElement_AppendChild(p_elem, (
nsIDOMNode*)fragment, &tmp);
1668 nsIDOMDocumentFragment_Release(fragment);
1669 nsIDOMNode_Release(tmp);
1671 nsIDOMHTMLElement_AppendChild(blockquote_elem, (
nsIDOMNode*)p_elem, &tmp);
1672 nsIDOMHTMLElement_Release(p_elem);
1673 nsIDOMNode_Release(tmp);
1675 nsIDOMRange_InsertNode(
This->nsrange, (
nsIDOMNode*)blockquote_elem);
1676 nsIDOMHTMLElement_Release(blockquote_elem);
1687 nCmdexecopt, pvaIn, pvaOut);
1689 if(pguidCmdGroup &&
IsEqualGUID(&CGID_MSHTML, pguidCmdGroup)) {
1694 FIXME(
"Unsupported cmdid %d of CGID_MSHTML\n", nCmdID);
1737 nsIDOMRange_AddRef(nsrange);
1738 ret->nsrange = nsrange;
1743 *
p = &
ret->IHTMLTxtRange_iface;
static void * heap_alloc(size_t len)
static BOOL heap_free(void *mem)
static void * heap_realloc(void *mem, size_t len)
#define InterlockedIncrement
#define InterlockedDecrement
static void list_remove(struct list_entry *entry)
static void list_add_head(struct list_entry *head, struct list_entry *entry)
const char * debugstr_mshtml_guid(const GUID *iid)
static WCHAR characterW[]
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei GLenum type
GLint GLint GLint GLint GLint GLint y
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
HTMLElement * unsafe_impl_from_IHTMLElement(IHTMLElement *iface)
HRESULT create_nselem(HTMLDocumentNode *doc, const WCHAR *tag, nsIDOMHTMLElement **ret)
HRESULT get_node(HTMLDocumentNode *This, nsIDOMNode *nsnode, BOOL create, HTMLDOMNode **ret)
static const WCHAR emptyW[]
HRESULT init_dispex(jsdisp_t *dispex, script_ctx_t *ctx, const builtin_info_t *builtin_info, jsdisp_t *prototype)
#define memcpy(s1, s2, n)
#define cmp(status, error)
static VARIANTARG static DISPID
void release_dispex(DispatchEx *This)
BOOL dispex_query_interface(DispatchEx *This, REFIID riid, void **ppv)
HRESULT nsnode_to_nsstring(nsIDOMNode *, nsAString *) DECLSPEC_HIDDEN
void nsAString_Finish(nsAString *) DECLSPEC_HIDDEN
UINT32 nsAString_GetData(const nsAString *, const PRUnichar **) DECLSPEC_HIDDEN
void nsAString_InitDepend(nsAString *, const PRUnichar *) DECLSPEC_HIDDEN
BOOL nsAString_Init(nsAString *, const PRUnichar *) DECLSPEC_HIDDEN
static void node_release(HTMLDOMNode *node)
#define NS_SUCCEEDED(res)
#define DEFAULT_UNREACHABLE
BSTR WINAPI SysAllocString(LPCOLESTR str)
png_const_structrp png_const_inforp int * unit
#define IsEqualGUID(rguid1, rguid2)
#define LIST_FOR_EACH_ENTRY(elem, list, type, field)
IOleCommandTarget IOleCommandTarget_iface
IHTMLTxtRange IHTMLTxtRange_iface
static nsIDOMNode * get_child_node(nsIDOMNode *node, UINT32 off)
static HRESULT WINAPI HTMLTxtRange_moveEnd(IHTMLTxtRange *iface, BSTR Unit, LONG Count, LONG *ActualCount)
static void wstrbuf_append_node(wstrbuf_t *buf, nsIDOMNode *node, BOOL ignore_text)
static BOOL wstrbuf_init(wstrbuf_t *buf)
static BOOL find_word_end(rangepoint_t *iter, BOOL is_collapsed)
static HRESULT WINAPI HTMLTxtRange_get_text(IHTMLTxtRange *iface, BSTR *p)
static HRESULT WINAPI RangeCommandTarget_Exec(IOleCommandTarget *iface, const GUID *pguidCmdGroup, DWORD nCmdID, DWORD nCmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut)
static void get_text_node_data(nsIDOMNode *node, nsAString *nsstr, const PRUnichar **str)
static HRESULT WINAPI HTMLTxtRange_move(IHTMLTxtRange *iface, BSTR Unit, LONG Count, LONG *ActualCount)
static ULONG WINAPI HTMLTxtRange_AddRef(IHTMLTxtRange *iface)
static range_unit_t string_to_unit(LPCWSTR str)
static int get_child_index(nsIDOMNode *parent, nsIDOMNode *child)
static WCHAR move_next_char(rangepoint_t *iter)
static HTMLTxtRange * get_range_object(HTMLDocumentNode *doc, IHTMLTxtRange *iface)
static void wstrbuf_finish(wstrbuf_t *buf)
static HRESULT WINAPI HTMLTxtRange_queryCommandIndeterm(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL *pfRet)
static HRESULT WINAPI HTMLTxtRange_parentElement(IHTMLTxtRange *iface, IHTMLElement **parent)
static BOOL rangepoint_cmp(const rangepoint_t *point1, const rangepoint_t *point2)
static HRESULT WINAPI HTMLTxtRange_pasteHTML(IHTMLTxtRange *iface, BSTR html)
static void range_to_string(HTMLTxtRange *This, wstrbuf_t *buf)
static const IHTMLTxtRangeVtbl HTMLTxtRangeVtbl
static HRESULT WINAPI HTMLTxtRange_moveToElementText(IHTMLTxtRange *iface, IHTMLElement *element)
static void free_rangepoint(rangepoint_t *rangepoint)
static HRESULT WINAPI HTMLTxtRange_execCommandShowHelp(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL *pfRet)
static HRESULT WINAPI HTMLTxtRange_setEndPoint(IHTMLTxtRange *iface, BSTR how, IHTMLTxtRange *SourceRange)
static HRESULT WINAPI HTMLTxtRange_moveToPoint(IHTMLTxtRange *iface, LONG x, LONG y)
static int string_to_nscmptype(LPCWSTR str)
static HRESULT WINAPI HTMLTxtRange_moveStart(IHTMLTxtRange *iface, BSTR Unit, LONG Count, LONG *ActualCount)
static HRESULT WINAPI HTMLTxtRange_get_htmlText(IHTMLTxtRange *iface, BSTR *p)
static HRESULT WINAPI HTMLTxtRange_execCommand(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL showUI, VARIANT value, VARIANT_BOOL *pfRet)
HRESULT HTMLTxtRange_Create(HTMLDocumentNode *doc, nsIDOMRange *nsrange, IHTMLTxtRange **p)
static WCHAR move_prev_char(rangepoint_t *iter)
static void wstrbuf_append_nodetxt(wstrbuf_t *buf, LPCWSTR str, int len)
static HRESULT exec_indent(HTMLTxtRange *This, VARIANT *in, VARIANT *out)
static LONG move_by_words(rangepoint_t *iter, LONG cnt)
static HRESULT WINAPI HTMLTxtRange_expand(IHTMLTxtRange *iface, BSTR Unit, VARIANT_BOOL *Success)
static ULONG WINAPI RangeCommandTarget_Release(IOleCommandTarget *iface)
static HRESULT WINAPI HTMLTxtRange_moveToBookmark(IHTMLTxtRange *iface, BSTR Bookmark, VARIANT_BOOL *Success)
static HRESULT WINAPI HTMLTxtRange_scrollIntoView(IHTMLTxtRange *iface, VARIANT_BOOL fStart)
HRESULT get_node_text(HTMLDOMNode *node, BSTR *ret)
static void get_end_point(HTMLTxtRange *This, rangepoint_t *ret)
static UINT32 get_text_length(nsIDOMNode *node)
static LONG move_by_chars(rangepoint_t *iter, LONG cnt)
static HRESULT WINAPI HTMLTxtRange_collapse(IHTMLTxtRange *iface, VARIANT_BOOL Start)
static ULONG WINAPI HTMLTxtRange_Release(IHTMLTxtRange *iface)
static void set_end_point(HTMLTxtRange *This, const rangepoint_t *end)
static HRESULT WINAPI HTMLTxtRange_GetTypeInfoCount(IHTMLTxtRange *iface, UINT *pctinfo)
static HRESULT WINAPI RangeCommandTarget_QueryStatus(IOleCommandTarget *iface, const GUID *pguidCmdGroup, ULONG cCmds, OLECMD prgCmds[], OLECMDTEXT *pCmdText)
static HRESULT WINAPI HTMLTxtRange_put_text(IHTMLTxtRange *iface, BSTR v)
void detach_ranges(HTMLDocumentNode *This)
static HRESULT WINAPI HTMLTxtRange_queryCommandValue(IHTMLTxtRange *iface, BSTR cmdID, VARIANT *pcmdValue)
static HRESULT WINAPI HTMLTxtRange_getBookmark(IHTMLTxtRange *iface, BSTR *Bookmark)
static dispex_static_data_t HTMLTxtRange_dispex
static void wstrbuf_append_node_rec(wstrbuf_t *buf, nsIDOMNode *node)
static HRESULT WINAPI HTMLTxtRange_findText(IHTMLTxtRange *iface, BSTR String, LONG count, LONG Flags, VARIANT_BOOL *Success)
static BOOL rangepoint_prev_node(rangepoint_t *iter)
static HRESULT WINAPI HTMLTxtRange_compareEndPoints(IHTMLTxtRange *iface, BSTR how, IHTMLTxtRange *SourceRange, LONG *ret)
static const tid_t HTMLTxtRange_iface_tids[]
static void wstrbuf_append_len(wstrbuf_t *buf, LPCWSTR str, int len)
static HRESULT WINAPI HTMLTxtRange_GetIDsOfNames(IHTMLTxtRange *iface, REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId)
static const IOleCommandTargetVtbl OleCommandTargetVtbl
static HRESULT WINAPI HTMLTxtRange_queryCommandSupported(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL *pfRet)
static void get_start_point(HTMLTxtRange *This, rangepoint_t *ret)
static HTMLTxtRange * impl_from_IOleCommandTarget(IOleCommandTarget *iface)
static HRESULT WINAPI RangeCommandTarget_QueryInterface(IOleCommandTarget *iface, REFIID riid, void **ppv)
static HRESULT WINAPI HTMLTxtRange_Invoke(IHTMLTxtRange *iface, DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)
static HRESULT WINAPI HTMLTxtRange_queryCommandEnabled(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL *pfRet)
static ULONG WINAPI RangeCommandTarget_AddRef(IOleCommandTarget *iface)
static UINT32 get_child_count(nsIDOMNode *node)
static HRESULT WINAPI HTMLTxtRange_isEqual(IHTMLTxtRange *iface, IHTMLTxtRange *Range, VARIANT_BOOL *IsEqual)
static BOOL is_elem_tag(nsIDOMNode *node, LPCWSTR istag)
static BOOL rangepoint_next_node(rangepoint_t *iter)
static HRESULT WINAPI HTMLTxtRange_queryCommandText(IHTMLTxtRange *iface, BSTR cmdID, BSTR *pcmdText)
static void init_rangepoint(rangepoint_t *rangepoint, nsIDOMNode *node, UINT32 off)
static LONG find_prev_space(rangepoint_t *iter, BOOL first_space)
static HRESULT WINAPI HTMLTxtRange_duplicate(IHTMLTxtRange *iface, IHTMLTxtRange **Duplicate)
static void set_start_point(HTMLTxtRange *This, const rangepoint_t *start)
static HRESULT WINAPI HTMLTxtRange_inRange(IHTMLTxtRange *iface, IHTMLTxtRange *Range, VARIANT_BOOL *InRange)
static HRESULT WINAPI HTMLTxtRange_GetTypeInfo(IHTMLTxtRange *iface, UINT iTInfo, LCID lcid, ITypeInfo **ppTInfo)
static HRESULT WINAPI HTMLTxtRange_select(IHTMLTxtRange *iface)
static HTMLTxtRange * impl_from_IHTMLTxtRange(IHTMLTxtRange *iface)
static HRESULT WINAPI HTMLTxtRange_QueryInterface(IHTMLTxtRange *iface, REFIID riid, void **ppv)
static HRESULT WINAPI HTMLTxtRange_queryCommandState(IHTMLTxtRange *iface, BSTR cmdID, VARIANT_BOOL *pfRet)
#define CONTAINING_RECORD(address, type, field)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
_In_ DWORD _Out_ _In_ WORD wFlags
_Must_inspect_result_ _In_ ULONG Flags