Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
2d80fb33
Commit
2d80fb33
authored
Feb 13, 2014
by
Nikolay Sivov
Committed by
Alexandre Julliard
Feb 13, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
msxml3: Implement addParameter() for XSLProcessor.
parent
e5fba2d5
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
103 additions
and
2 deletions
+103
-2
stylesheet.c
dlls/msxml3/stylesheet.c
+103
-2
No files found.
dlls/msxml3/stylesheet.c
View file @
2d80fb33
...
...
@@ -37,6 +37,7 @@
#include "msxml_private.h"
#include "wine/debug.h"
#include "wine/list.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
msxml
);
...
...
@@ -49,6 +50,19 @@ typedef struct
IXMLDOMNode
*
node
;
}
xsltemplate
;
struct
xslprocessor_par
{
struct
list
entry
;
BSTR
name
;
BSTR
value
;
};
struct
xslprocessor_params
{
struct
list
list
;
unsigned
int
count
;
};
typedef
struct
{
DispatchEx
dispex
;
...
...
@@ -60,6 +74,8 @@ typedef struct
IStream
*
output
;
BSTR
outstr
;
struct
xslprocessor_params
params
;
}
xslprocessor
;
static
HRESULT
XSLProcessor_create
(
xsltemplate
*
,
IXSLProcessor
**
);
...
...
@@ -74,6 +90,15 @@ static inline xslprocessor *impl_from_IXSLProcessor( IXSLProcessor *iface )
return
CONTAINING_RECORD
(
iface
,
xslprocessor
,
IXSLProcessor_iface
);
}
static
void
xslprocessor_par_free
(
struct
xslprocessor_params
*
params
,
struct
xslprocessor_par
*
par
)
{
params
->
count
--
;
list_remove
(
&
par
->
entry
);
SysFreeString
(
par
->
name
);
SysFreeString
(
par
->
value
);
heap_free
(
par
);
}
static
void
xsltemplate_set_node
(
xsltemplate
*
This
,
IXMLDOMNode
*
node
)
{
if
(
This
->
node
)
IXMLDOMNode_Release
(
This
->
node
);
...
...
@@ -305,9 +330,15 @@ static ULONG WINAPI xslprocessor_Release( IXSLProcessor *iface )
TRACE
(
"(%p)->(%d)
\n
"
,
This
,
ref
);
if
(
ref
==
0
)
{
struct
xslprocessor_par
*
par
,
*
par2
;
if
(
This
->
input
)
IXMLDOMNode_Release
(
This
->
input
);
if
(
This
->
output
)
IStream_Release
(
This
->
output
);
SysFreeString
(
This
->
outstr
);
LIST_FOR_EACH_ENTRY_SAFE
(
par
,
par2
,
&
This
->
params
.
list
,
struct
xslprocessor_par
,
entry
)
xslprocessor_par_free
(
&
This
->
params
,
par
);
IXSLTemplate_Release
(
&
This
->
stylesheet
->
IXSLTemplate_iface
);
release_dispex
(
&
This
->
dispex
);
heap_free
(
This
);
...
...
@@ -547,6 +578,26 @@ static HRESULT WINAPI xslprocessor_get_readyState(
return
E_NOTIMPL
;
}
static
HRESULT
xslprocessor_set_parvalue
(
const
VARIANT
*
var
,
struct
xslprocessor_par
*
par
)
{
HRESULT
hr
=
S_OK
;
switch
(
V_VT
(
var
))
{
case
VT_BSTR
:
{
par
->
value
=
SysAllocString
(
V_BSTR
(
var
));
if
(
!
par
->
value
)
hr
=
E_OUTOFMEMORY
;
break
;
}
default:
FIXME
(
"value type %d not handled
\n
"
,
V_VT
(
var
));
hr
=
E_NOTIMPL
;
}
return
hr
;
}
static
HRESULT
WINAPI
xslprocessor_addParameter
(
IXSLProcessor
*
iface
,
BSTR
p
,
...
...
@@ -554,10 +605,58 @@ static HRESULT WINAPI xslprocessor_addParameter(
BSTR
uri
)
{
xslprocessor
*
This
=
impl_from_IXSLProcessor
(
iface
);
struct
xslprocessor_par
*
cur
,
*
par
=
NULL
;
HRESULT
hr
;
FIXME
(
"(%p)->(%s %s %s): stub
\n
"
,
This
,
debugstr_w
(
p
),
debugstr_variant
(
&
var
),
TRACE
(
"(%p)->(%s %s %s)
\n
"
,
This
,
debugstr_w
(
p
),
debugstr_variant
(
&
var
),
debugstr_w
(
uri
));
return
E_NOTIMPL
;
if
(
uri
&&
*
uri
)
FIXME
(
"namespace uri is not supported
\n
"
);
/* search for existing parameter first */
LIST_FOR_EACH_ENTRY
(
cur
,
&
This
->
params
.
list
,
struct
xslprocessor_par
,
entry
)
{
if
(
!
strcmpW
(
cur
->
name
,
p
))
{
par
=
cur
;
break
;
}
}
/* override with new value or add new parameter */
if
(
par
)
{
if
(
V_VT
(
&
var
)
==
VT_NULL
||
V_VT
(
&
var
)
==
VT_EMPTY
)
{
/* remove parameter */
xslprocessor_par_free
(
&
This
->
params
,
par
);
return
S_OK
;
}
SysFreeString
(
par
->
value
);
par
->
value
=
NULL
;
}
else
{
/* new parameter */
par
=
heap_alloc
(
sizeof
(
struct
xslprocessor_par
));
if
(
!
par
)
return
E_OUTOFMEMORY
;
par
->
name
=
SysAllocString
(
p
);
if
(
!
par
->
name
)
{
heap_free
(
par
);
return
E_OUTOFMEMORY
;
}
list_add_tail
(
&
This
->
params
.
list
,
&
par
->
entry
);
This
->
params
.
count
++
;
}
hr
=
xslprocessor_set_parvalue
(
&
var
,
par
);
if
(
FAILED
(
hr
))
xslprocessor_par_free
(
&
This
->
params
,
par
);
return
hr
;
}
static
HRESULT
WINAPI
xslprocessor_addObject
(
...
...
@@ -633,6 +732,8 @@ HRESULT XSLProcessor_create(xsltemplate *template, IXSLProcessor **ppObj)
This
->
input
=
NULL
;
This
->
output
=
NULL
;
This
->
outstr
=
NULL
;
list_init
(
&
This
->
params
.
list
);
This
->
params
.
count
=
0
;
This
->
stylesheet
=
template
;
IXSLTemplate_AddRef
(
&
template
->
IXSLTemplate_iface
);
init_dispex
(
&
This
->
dispex
,
(
IUnknown
*
)
&
This
->
IXSLProcessor_iface
,
&
xslprocessor_dispex
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment