hhctrl.ocx: Fix parsing of some TOC topics that reference other files.
This commit is contained in:
parent
0872572a6d
commit
98f0be8dc3
|
@ -50,11 +50,21 @@ static void free_content_item(ContentItem *item)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void store_param(LPWSTR *param, const char *value, int len)
|
||||||
|
{
|
||||||
|
int wlen;
|
||||||
|
|
||||||
|
wlen = MultiByteToWideChar(CP_ACP, 0, value, len, NULL, 0);
|
||||||
|
*param = heap_alloc((wlen+1)*sizeof(WCHAR));
|
||||||
|
MultiByteToWideChar(CP_ACP, 0, value, len, *param, wlen);
|
||||||
|
(*param)[wlen] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const char *text)
|
static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const char *text)
|
||||||
{
|
{
|
||||||
const char *ptr;
|
const char *ptr;
|
||||||
LPWSTR *param, merge;
|
LPWSTR *param, merge;
|
||||||
int len, wlen;
|
int len;
|
||||||
|
|
||||||
ptr = get_attr(text, "name", &len);
|
ptr = get_attr(text, "name", &len);
|
||||||
if(!ptr) {
|
if(!ptr) {
|
||||||
|
@ -79,10 +89,21 @@ static void parse_obj_node_param(ContentItem *item, ContentItem *hhc_root, const
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
wlen = MultiByteToWideChar(CP_ACP, 0, ptr, len, NULL, 0);
|
/*
|
||||||
*param = heap_alloc((wlen+1)*sizeof(WCHAR));
|
* "merge" parameter data (referencing another CHM file) can be incorporated into the "local" parameter
|
||||||
MultiByteToWideChar(CP_ACP, 0, ptr, len, *param, wlen);
|
* by specifying the filename in the format:
|
||||||
(*param)[wlen] = 0;
|
* MS-ITS:file.chm::/local_path.htm
|
||||||
|
*/
|
||||||
|
if(param == &item->local && strstr(ptr, "::"))
|
||||||
|
{
|
||||||
|
const char *local = strstr(ptr, "::")+2;
|
||||||
|
int local_len = len-(local-ptr);
|
||||||
|
|
||||||
|
store_param(&item->local, local, local_len);
|
||||||
|
param = &merge;
|
||||||
|
}
|
||||||
|
|
||||||
|
store_param(param, ptr, len);
|
||||||
|
|
||||||
if(param == &merge) {
|
if(param == &merge) {
|
||||||
SetChmPath(&item->merge, hhc_root->merge.chm_file, merge);
|
SetChmPath(&item->merge, hhc_root->merge.chm_file, merge);
|
||||||
|
|
Loading…
Reference in New Issue