diff options
| author | Nick White <arch@njw.me.uk> | 2007-05-03 00:31:22 +0000 | 
|---|---|---|
| committer | Nick White <arch@njw.me.uk> | 2007-05-03 00:31:22 +0000 | 
| commit | f811c2d4823f95d7e90f25e0e7a98e5c5abcf3e2 (patch) | |
| tree | 190283d4cf1efdd3ae5ba8ecaa0b6c5b5837bec9 /tocxml.c | |
| parent | 1edf37e3b0ad7b0556ba0902b5880044933ced66 (diff) | |
Added Autotools, changed dir structure, added docs
Added (perhaps somewhat shaky) autotools support
Added tagging rules to junkify files generated by autotools
Added a directory structure
Updated README & INSTALL files to reflect changes
Wrote a man page
Changed version numbers in preparation for a release
git-archimport-id: getht@sv.gnu.org/getht--mainline--0.1--patch-23
Diffstat (limited to 'tocxml.c')
| -rw-r--r-- | tocxml.c | 264 | 
1 files changed, 0 insertions, 264 deletions
| diff --git a/tocxml.c b/tocxml.c deleted file mode 100644 index 3740326..0000000 --- a/tocxml.c +++ /dev/null @@ -1,264 +0,0 @@ -/* - * Copyright 2006 Nick White - * - * This file is part of GetHT - *  - * GetHT is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * GetHT is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GetHT; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA - * - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <libxml/xmlmemory.h> -#include <libxml/parser.h> - -#include "issue.h" -#include "getht.h" - -iss ** parsetoc(char *filepath, int * iss_no, int * latest); -int parseissue(xmlDocPtr file, xmlNodePtr node, iss * cur_issue, int * latest); -void parsesection(xmlDocPtr file, xmlNodePtr node, sec * cur_section); - -void tokenise_hyphons(char to_token[10], int * first, int * last); - -int no_of_issues; - -iss ** parsetoc(char *filepath, int * iss_no, int * latest) -/*	starts parsing of xml to issue structure	*/ -{ -	xmlDocPtr file; -	xmlNodePtr node; - -	if(ready_xml(filepath, "issues", &file, &node)) -		return NULL; - -	*node = *node->xmlChildrenNode; - -	no_of_issues = -1; - -	iss ** issue = NULL; - -	int year; - -	xmlNodePtr cnode; - -	while(node != NULL) -	{ -		if(!xmlStrncmp(node->name,(char *) "year",4)) -		{ -			cnode = node->children; -			while(cnode != NULL) -			{ -    				if(!xmlStrncmp(cnode->name,(char *) "issue",5)) -				{ -					/* assign memory for the new issue */ -					issue = assignnew_iss(issue, &no_of_issues); - -					/* setup issue globals */ -					issue[no_of_issues]->no_of_media = -1; -					issue[no_of_issues]->no_of_sections = -1; -					issue[no_of_issues]->date.year = -						atoi( (const char *)(xmlStrsub(node->name,5,4)) ); -					tokenise_hyphons( -							xmlStrsub(cnode->name,6,5), -							&(issue[no_of_issues]->date.firstmonth), -							&(issue[no_of_issues]->date.lastmonth)); - -					/* parse the issue */ -					parseissue(file, cnode, issue[no_of_issues], latest); -				} -				cnode = cnode->next; -			} -		} -		node = node->next; -	} - -	xmlFreeDoc(file); - -	*iss_no = no_of_issues; - -	issuesort(issue, no_of_issues); - -	return issue; -} - -int parseissue(xmlDocPtr file, xmlNodePtr node, iss * cur_issue, int * latest) -/*	parses issue from xml, saving in cur_issue structure	*/ -{ -	strncpy(cur_issue->title, (char *) xmlGetProp(node, "title"), STR_MAX); -	strncpy(cur_issue->preview_uri, (char *) xmlGetProp(node, "coverlink"), STR_MAX); - -	if(xmlGetProp(node, "current") && *latest==-1) -		*latest = no_of_issues; - -	node = node->xmlChildrenNode; - -	while(node != NULL){ -		if(!xmlStrncmp(node->name, (char *) "section",7) || -			!xmlStrcmp(node->name, (const xmlChar *) "cover")) -		{ -			/* assign memory for new section */ -			cur_issue->section =  -				assignnew_sec(cur_issue->section, &(cur_issue->no_of_sections)); - -			/* setup section globals */ -			cur_issue->section[cur_issue->no_of_sections]->no_of_items = -1; - -			/* parse the section */ -			parsesection(file, node, cur_issue->section[cur_issue->no_of_sections]); -		} -		node = node->next; -	} - -	return 0; -} - -void parsesection(xmlDocPtr file, xmlNodePtr node, sec * cur_section) -/*	parses section xml, filling cur_section structure */ -{ -	it * cur_item = NULL; - -	strncpy(cur_section->uri, (char *) xmlGetProp(node, "pdflink"), STR_MAX); -	strncpy(cur_section->title, (char *) xmlGetProp(node, "title"), STR_MAX); - -	if(!xmlStrcmp(node->name, (const xmlChar *) "cover")) -		cur_section->number = 0; -	else -		cur_section->number = atoi( (const char *)(xmlStrsub(node->name,8,1)) ); - -	node = node->xmlChildrenNode; - -	char * pagenums; - -	it ** tmp = NULL; - -	while(node != NULL) -	{ -		if(!xmlStrcmp(node->name, (const xmlChar *) "item")) -		{ -			if(xmlNodeListGetString(file, node->xmlChildrenNode, 1) != NULL) -			/* ignore items without titles */ -			{ -				/* assign memory for new item */ -				cur_section->item = -					assignnew_it( cur_section->item, &(cur_section->no_of_items)); - -				cur_item = cur_section->item[cur_section->no_of_items]; - -				/* parse item */ -				cur_item->title = xmlNodeListGetString(file, node->xmlChildrenNode, 1); -				if(pagenums = (char *) xmlGetProp(node, "pages")) -					tokenise_hyphons(pagenums, &(cur_item->firstpage), &(cur_item->lastpage)); -				else -				{ -					cur_item->firstpage = 0; -					cur_item->lastpage = 0; -				} -			} -		} -	node = node->next;	 -	} -} - -void tokenise_hyphons(char to_token[10], int * first, int * last) -/*	splits string to_token, filling positions passed */ -{ -	char token[10]; -	char * tmp; - -	tmp = token; - -	while(*to_token != '-' && *to_token) -	{ -		*tmp = *to_token; -		to_token++; tmp++; -	} - -	*first = atoi(token); - -	if(!*to_token) -		*last = *first; -	else -	{ -		to_token++; /* advance past '-' */ -		tmp = token; /* reset tmp */ -		while(*to_token) -		{ -			*tmp = *to_token; -			tmp++; to_token++; -		} -		*last = atoi(token); -	} -} - -int cur_identifiers(char * filepath, char * title, issdates * date) -/*	parses xml file to ascertain current issue title and date */ -{ -	xmlDocPtr file; - -	if((file = xmlParseFile(filepath)) == NULL) -	{ -		return 1; -	} - -	xmlNodePtr node,cnode; - -	node = xmlDocGetRootElement(file); - -	if(node == NULL) -	{ -		fprintf(stderr,"Error: xml file %s has no root element",filepath); -		xmlFreeDoc(file); -		return 1; -	} - -	if(xmlStrcmp(node->name, (const xmlChar *) "issues")) -	{ -		fprintf(stderr,"Document of the wrong type, root node is '%s' (expected 'issues').\n",(char *) node->name); -		fprintf(stderr,"Continuing regardless...\n"); -	} - -	/* Now that's all sorted, let's do some work */ - -	node = node->xmlChildrenNode; - -	xmlChar *temp; -	while(node != NULL) -	{ -		if(!xmlStrncmp(node->name,(char *) "year",4)) -		{ -			cnode = node->children; -			while(cnode != NULL) -			{ -	   		    if(!xmlStrncmp(cnode->name,(char *) "issue",5)) -				{ -					temp = xmlGetProp(cnode, "current"); -        			if(temp) -        			{ -        			    strncpy(title, (char *) xmlGetProp(cnode, "title"), STR_MAX); -						date->year = atoi( (const char *)(xmlStrsub(node->name,5,4)) ); -						tokenise_hyphons(xmlStrsub(cnode->name,6,5), &(date->firstmonth), &(date->lastmonth)); -						return 0; -        			} -				} -				cnode = cnode->next; -			} -		} -		node = node->next; -	} - -	return 0; -} | 
