[w3m-dev 03610] Re: news:<newsgroup>

* anchor.c (_put_anchor_news): check '<'
	(reAnchorNewsheader): added
* file.c (loadSomething): Subject: as buffername
	(checkHeader): check buf->document_header
	(loadGeneralFile): reAnchorNewsheader
* html.h (SCM_NNTP_GROUP): added
* main.c (main): delete USE_NNTP in switch (newbuf->real_scheme)
	(chkNMIDBuffer): lowercase in url_like_pat
* news.c (add_news_message): add scheme, group as arg
	(openNewsStream): check SCM_NNTP_GROUP
			check current_news.host
	(readNewsgroup): rewrite to support nntp:,news: extension
* proto.h (reAnchorNewsheader): added
* url.c (DefaultPort): add 119 for nntp group
	(parseURL2): rewrite to support nntp:,news: extension
	(_parsedURL2Str): add for SCM_NNTP_GROUP
	(openURL): rewrite to support nntp:,news: extension
From: Hironori SAKAMOTO <hsaka@mth.biglobe.ne.jp>
This commit is contained in:
Fumitoshi UKAI
2003-01-06 15:36:56 +00:00
parent ee18da17df
commit ff20968c8c
8 changed files with 251 additions and 98 deletions

View File

@@ -1,4 +1,4 @@
/* $Id: anchor.c,v 1.17 2002/12/24 17:24:33 ukai Exp $ */
/* $Id: anchor.c,v 1.18 2003/01/06 15:36:57 ukai Exp $ */
#include "fm.h"
#include "myctype.h"
#include "regex.h"
@@ -193,9 +193,11 @@ _put_anchor_news(Buffer *buf, char *p1, char *p2, int line, int pos)
{
Str tmp;
p1++;
if (*(p2 - 1) == '>')
p2--;
if (*p1 == '<') {
p1++;
if (*(p2 - 1) == '>')
p2--;
}
tmp = Strnew_charp_n(p1, p2 - p1);
#ifdef JP_CHARSET
tmp = conv_str(tmp, InnerCode, buf->document_code);
@@ -366,6 +368,61 @@ reAnchorNews(Buffer *buf, char *re)
{
return reAnchorAny(buf, re, _put_anchor_news);
}
char *
reAnchorNewsheader(Buffer *buf)
{
Line *l;
char *p, *p1, *p2;
static char *header_mid[] = {
"Message-Id:", "References:", "In-Reply-To:", NULL
};
static char *header_group[] = {
"Newsgroups:", NULL
};
char **header, **q;
int i, search = FALSE;
if (!buf || !buf->firstLine)
return NULL;
for (i = 0; i <= 1; i++) {
if (i == 0) {
regexCompile("<[!-;=?-~]+@[a-zA-Z0-9\\.\\-_]+>", 1);
header = header_mid;
}
else {
regexCompile("[a-zA-Z0-9\\.\\-_]+", 1);
header = header_group;
}
for (l = buf->firstLine; l != NULL && l->real_linenumber == 0;
l = l->next) {
p = l->lineBuf;
if (!IS_SPACE(*p)) {
search = FALSE;
for (q = header; *q; q++) {
if (!strncasecmp(p, *q, sizeof(*q) - 1)) {
search = TRUE;
p = strchr(p, ':') + 1;
break;
}
}
}
if (!search)
continue;
for (;;) {
if (regexMatch(p, &l->lineBuf[l->len] - p, p == l->lineBuf)
== 1) {
matchedPosition(&p1, &p2);
p = reAnchorPos(buf, l, p1, p2, _put_anchor_news);
}
else
break;
}
}
}
reseq_anchor(buf);
return NULL;
}
#endif /* USE_NNTP */
#define FIRST_MARKER_SIZE 30