* [WIP] SYNOPSIS indentation
@ 2010-06-26 13:47 Ingo Schwarze
2010-06-26 14:01 ` Kristaps Dzonsons
2010-06-30 23:24 ` [PATCH] .Nm indentation in the SYNOPSIS Ingo Schwarze
0 siblings, 2 replies; 6+ messages in thread
From: Ingo Schwarze @ 2010-06-26 13:47 UTC (permalink / raw)
To: tech
Hi,
here is the other patch i hacked up on the plane.
It is still work in progress, there are few bugs in
horizontal spacing still, but it mostly does the job
and certainly shows the spirit.
Again, this is based on OpenBSD-current, and needs to
be rebased on bsd.lv HEAD.
This is best used together with the .Bk patch just sent,
but does not depend on it.
Yours,
Ingo
Index: mdoc_macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
retrieving revision 1.46
diff -u -p -r1.46 mdoc_macro.c
--- mdoc_macro.c 6 Jun 2010 20:30:08 -0000 1.46
+++ mdoc_macro.c 26 Jun 2010 13:41:03 -0000
@@ -93,7 +93,7 @@ const struct mdoc_macro __mdoc_macros[MD
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Li */
{ blk_full, 0 }, /* Nd */
- { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */
+ { ctx_synopsis, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Op */
{ obsolete, 0 }, /* Ot */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Pa */
@@ -422,6 +422,8 @@ rew_dohalt(enum mdoct tok, enum mdoc_typ
break;
case (MDOC_Nd):
/* FALLTHROUGH */
+ case (MDOC_Nm):
+ /* FALLTHROUGH */
case (MDOC_Ss):
assert(MDOC_TAIL != type);
if (type == p->type && tok == p->tok)
@@ -528,11 +530,15 @@ rew_dobreak(enum mdoct tok, const struct
return(MDOC_It == p->tok);
case (MDOC_Nd):
return(MDOC_Nd == p->tok);
+ case (MDOC_Nm):
+ return(MDOC_Nm == p->tok);
case (MDOC_Ss):
return(MDOC_Ss == p->tok);
case (MDOC_Sh):
if (MDOC_Nd == p->tok)
return(1);
+ if (MDOC_Nm == p->tok)
+ return(1);
if (MDOC_Ss == p->tok)
return(1);
return(MDOC_Sh == p->tok);
@@ -1612,7 +1618,9 @@ ctx_synopsis(MACRO_PROT_ARGS)
* up formatting the block scope, then child nodes will inherit
* the formatting. Be careful.
*/
-
+ if (MDOC_Nm == tok)
+ return(blk_full(m, tok, line, ppos, pos, buf));
+ assert(MDOC_Vt == tok);
return(blk_part_imp(m, tok, line, ppos, pos, buf));
}
Index: mdoc_term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
retrieving revision 1.87
diff -u -p -r1.87 mdoc_term.c
--- mdoc_term.c 10 Jun 2010 22:50:10 -0000 1.87
+++ mdoc_term.c 26 Jun 2010 13:41:05 -0000
@@ -82,6 +83,7 @@ static void termp_fo_post(DECL_ARGS);
static void termp_in_post(DECL_ARGS);
static void termp_it_post(DECL_ARGS);
static void termp_lb_post(DECL_ARGS);
+static void termp_nm_post(DECL_ARGS);
static void termp_op_post(DECL_ARGS);
static void termp_pf_post(DECL_ARGS);
static void termp_pq_post(DECL_ARGS);
@@ -166,7 +169,7 @@ static const struct termact termacts[MDO
{ termp_in_pre, termp_in_post }, /* In */
{ termp_li_pre, NULL }, /* Li */
{ termp_nd_pre, NULL }, /* Nd */
- { termp_nm_pre, NULL }, /* Nm */
+ { termp_nm_pre, termp_nm_post }, /* Nm */
{ termp_op_pre, termp_op_post }, /* Op */
{ NULL, NULL }, /* Ot */
{ termp_under_pre, NULL }, /* Pa */
@@ -1053,6 +1056,24 @@ termp_it_post(DECL_ARGS)
static int
termp_nm_pre(DECL_ARGS)
{
+ size_t offset;
+
+ switch (n->type) {
+ case (MDOC_BLOCK):
+ return(1);
+ case (MDOC_HEAD):
+ p->flags |= TERMP_NOBREAK | TERMP_HANG;
+ offset = n->child ? 6 : strlen(m->name)+1;
+ p->rmargin = p->offset + offset;
+ break;
+ case (MDOC_BODY):
+ p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
+ offset = n->prev->child ? 6 : strlen(m->name)+1;
+ p->offset += offset;
+ return(1);
+ default:
+ break;
+ }
if (NULL == n->child && NULL == m->name)
return(1);
@@ -1062,11 +1083,33 @@ termp_nm_pre(DECL_ARGS)
term_fontpush(p, TERMFONT_BOLD);
if (NULL == n->child)
term_word(p, m->name);
+
return(1);
}
/* ARGSUSED */
+static void
+termp_nm_post(DECL_ARGS)
+{
+
+ switch (n->type) {
+ case (MDOC_HEAD):
+ term_flushln(p);
+ p->flags &= ~(TERMP_NOBREAK | TERMP_HANG);
+ break;
+ case (MDOC_BODY):
+ term_flushln(p);
+ p->flags &= ~TERMP_NOLPAD;
+ break;
+ default:
+ break;
+ }
+ return;
+}
+
+
+/* ARGSUSED */
static int
termp_fl_pre(DECL_ARGS)
{
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [WIP] SYNOPSIS indentation
2010-06-26 13:47 [WIP] SYNOPSIS indentation Ingo Schwarze
@ 2010-06-26 14:01 ` Kristaps Dzonsons
2010-06-30 23:24 ` [PATCH] .Nm indentation in the SYNOPSIS Ingo Schwarze
1 sibling, 0 replies; 6+ messages in thread
From: Kristaps Dzonsons @ 2010-06-26 14:01 UTC (permalink / raw)
To: tech
> here is the other patch i hacked up on the plane.
> It is still work in progress, there are few bugs in
> horizontal spacing still, but it mostly does the job
> and certainly shows the spirit.
> Again, this is based on OpenBSD-current, and needs to
> be rebased on bsd.lv HEAD.
>
> This is best used together with the .Bk patch just sent,
> but does not depend on it.
I'm quite pleased with the simplicity of this one. Nice! It needs to
be brought up to speed with term_strlen() and term_len(), but that's a
four-second operation (I noted the parts in-line).
Also, you'll need to modify mdoc.7 and mdoc.3 to note that `Nm' can be
two different types of variable.
Do make sure this doesn't break any assumptions of MDOC_ELEM in the
actioner/validator. I didn't double-check these.
Kristaps
> + switch (n->type) {
> + case (MDOC_BLOCK):
> + return(1);
> + case (MDOC_HEAD):
> + p->flags |= TERMP_NOBREAK | TERMP_HANG;
> + offset = n->child ? 6 : strlen(m->name)+1;
This'll be term_len(p, 6) and term_strlen(m->name) + term_len(p, 1).
> + p->rmargin = p->offset + offset;
> + break;
> + case (MDOC_BODY):
> + p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
> + offset = n->prev->child ? 6 : strlen(m->name)+1;
Same as above...
> + p->offset += offset;
> + return(1);
> + default:
> + break;
> + }
>
> if (NULL == n->child && NULL == m->name)
> return(1);
> @@ -1062,11 +1083,33 @@ termp_nm_pre(DECL_ARGS)
> term_fontpush(p, TERMFONT_BOLD);
> if (NULL == n->child)
> term_word(p, m->name);
> +
> return(1);
> }
>
>
> /* ARGSUSED */
> +static void
> +termp_nm_post(DECL_ARGS)
> +{
> +
> + switch (n->type) {
> + case (MDOC_HEAD):
> + term_flushln(p);
> + p->flags &= ~(TERMP_NOBREAK | TERMP_HANG);
> + break;
> + case (MDOC_BODY):
> + term_flushln(p);
> + p->flags &= ~TERMP_NOLPAD;
> + break;
> + default:
> + break;
> + }
> + return;
> +}
> +
> +
> +/* ARGSUSED */
> static int
> termp_fl_pre(DECL_ARGS)
> {
> --
> To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
>
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH] .Nm indentation in the SYNOPSIS
2010-06-26 13:47 [WIP] SYNOPSIS indentation Ingo Schwarze
2010-06-26 14:01 ` Kristaps Dzonsons
@ 2010-06-30 23:24 ` Ingo Schwarze
2010-07-01 9:38 ` Kristaps Dzonsons
1 sibling, 1 reply; 6+ messages in thread
From: Ingo Schwarze @ 2010-06-30 23:24 UTC (permalink / raw)
To: tech
Hi,
after much preliminary work and bug fixing,
support for proper .Nm indentation in the SYNOPSIS
is now finished.
Here is the final diff: OK?
The diff contains:
* switching .Nm from in_line to ctx_synopsis
* special .Nm handling in rewinding rules and blk_exp_close
* a bit of related block scoping error message cleanup
* termp_nm_pre and termp_nm_post output handlers
Yours,
Ingo
Index: main.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/main.c,v
retrieving revision 1.40
diff -u -p -r1.40 main.c
--- main.c 30 Jun 2010 20:29:44 -0000 1.40
+++ main.c 30 Jun 2010 22:58:21 -0000
@@ -109,6 +109,7 @@ static const char * const mandocerrs[MAN
"unknown manual section",
"section not in conventional manual section",
"end of line whitespace",
+ "blocks badly nested",
"scope open on exit",
"generic error",
@@ -132,7 +133,6 @@ static const char * const mandocerrs[MAN
"bad comment style",
"unknown macro will be lost",
"line scope broken",
- "scope broken",
"argument count wrong",
"request scope close w/none open",
"scope already open",
@@ -151,7 +151,8 @@ static const char * const mandocerrs[MAN
"missing font type",
"displays may not be nested",
"unsupported display type",
- "no scope to rewind: syntax violated",
+ "blocks badly nested",
+ "no such block is open",
"scope broken, syntax violated",
"line scope broken, syntax violated",
"argument count wrong, violates syntax",
Index: mandoc.h
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mandoc.h,v
retrieving revision 1.8
diff -u -p -r1.8 mandoc.h
--- mandoc.h 30 Jun 2010 20:29:44 -0000 1.8
+++ mandoc.h 30 Jun 2010 22:58:21 -0000
@@ -47,6 +47,7 @@ enum mandocerr {
MANDOCERR_BADMSEC, /* unknown manual section */
MANDOCERR_SECMSEC, /* section not in conventional manual section */
MANDOCERR_EOLNSPACE, /* end of line whitespace */
+ MANDOCERR_SCOPENEST, /* blocks badly nested */
MANDOCERR_SCOPEEXIT, /* scope open on exit */
MANDOCERR_ERROR, /* ===== end of errors ===== */
@@ -70,9 +71,8 @@ enum mandocerr {
MANDOCERR_BADCOMMENT, /* bad comment style */
MANDOCERR_MACRO, /* unknown macro will be lost */
MANDOCERR_LINESCOPE, /* line scope broken */
- MANDOCERR_SCOPE, /* scope broken */
MANDOCERR_ARGCOUNT, /* argument count wrong */
- MANDOCERR_NOSCOPE, /* request scope close w/none open */
+ MANDOCERR_NOSCOPE, /* no such block is open */
MANDOCERR_SCOPEREP, /* scope already open */
/* FIXME: merge following with MANDOCERR_ARGCOUNT */
MANDOCERR_NOARGS, /* macro requires line argument(s) */
@@ -92,6 +92,7 @@ enum mandocerr {
/* FIXME: this should be a MANDOCERR_ERROR */
MANDOCERR_NESTEDDISP, /* displays may not be nested */
MANDOCERR_BADDISP, /* unsupported display type */
+ MANDOCERR_SCOPEFATAL, /* blocks badly nested */
MANDOCERR_SYNTNOSCOPE, /* no scope to rewind: syntax violated */
MANDOCERR_SYNTSCOPE, /* scope broken, syntax violated */
MANDOCERR_SYNTLINESCOPE, /* line scope broken, syntax violated */
Index: mdoc_macro.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_macro.c,v
retrieving revision 1.50
diff -u -p -r1.50 mdoc_macro.c
--- mdoc_macro.c 30 Jun 2010 03:57:49 -0000 1.50
+++ mdoc_macro.c 30 Jun 2010 22:58:22 -0000
@@ -93,7 +93,7 @@ const struct mdoc_macro __mdoc_macros[MD
{ in_line_argn, MDOC_CALLABLE | MDOC_PARSED }, /* In */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Li */
{ blk_full, 0 }, /* Nd */
- { in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */
+ { ctx_synopsis, MDOC_CALLABLE | MDOC_PARSED }, /* Nm */
{ blk_part_imp, MDOC_CALLABLE | MDOC_PARSED }, /* Op */
{ obsolete, 0 }, /* Ot */
{ in_line, MDOC_CALLABLE | MDOC_PARSED }, /* Pa */
@@ -388,6 +388,8 @@ rew_dohalt(enum mdoct tok, enum mdoc_typ
if (MDOC_Op == p->tok)
return(REWIND_MORE);
break;
+ case (MDOC_Nm):
+ return(REWIND_NONE);
case (MDOC_Nd):
/* FALLTHROUGH */
case (MDOC_Ss):
@@ -405,9 +407,11 @@ rew_dohalt(enum mdoct tok, enum mdoc_typ
/*
* Default block rewinding rules.
- * In particular, always skip block end markers.
+ * In particular, always skip block end markers,
+ * and let all blocks rewind Nm children.
*/
- if (p->end || (MDOC_BLOCK == p->type &&
+ if (p->end || MDOC_Nm == p->tok ||
+ (MDOC_BLOCK == p->type &&
! (MDOC_EXPLICIT & mdoc_macros[tok].flags)))
return(REWIND_MORE);
@@ -503,8 +507,9 @@ make_pending(struct mdoc_node *broken, e
taker->pending = broken->pending;
}
broken->pending = breaker;
- mdoc_vmsg(m, MANDOCERR_SCOPE, line, ppos, "%s breaks %s",
- mdoc_macronames[tok], mdoc_macronames[broken->tok]);
+ mdoc_vmsg(m, MANDOCERR_SCOPENEST, line, ppos,
+ "%s breaks %s", mdoc_macronames[tok],
+ mdoc_macronames[broken->tok]);
return(1);
}
@@ -538,7 +543,9 @@ rew_sub(enum mdoc_type t, struct mdoc *m
return(make_pending(n, tok, m, line, ppos));
case (REWIND_ERROR):
/* XXX Make this non-fatal. */
- mdoc_pmsg(m, line, ppos, MANDOCERR_SYNTNOSCOPE);
+ mdoc_vmsg(m, MANDOCERR_SCOPEFATAL, line, ppos,
+ "%s cannot break %s", mdoc_macronames[tok],
+ mdoc_macronames[n->tok]);
return 0;
}
break;
@@ -648,7 +655,7 @@ blk_exp_close(MACRO_PROT_ARGS)
continue;
}
- if (MDOC_BLOCK != n->type)
+ if (MDOC_BLOCK != n->type || MDOC_Nm == n->tok)
continue;
if (atok == n->tok) {
assert(body);
@@ -1284,8 +1291,8 @@ blk_part_imp(MACRO_PROT_ARGS)
* is ugly behaviour nodding its head to OpenBSD's overwhelming
* crufty use of `Op' breakage.
*/
- if (n != body && ! mdoc_vmsg(m, MANDOCERR_SCOPE, line, ppos,
- "%s broken", mdoc_macronames[tok]))
+ if (n != body && ! mdoc_vmsg(m, MANDOCERR_SCOPENEST,
+ line, ppos, "%s broken", mdoc_macronames[tok]))
return(0);
if (n && ! rew_sub(MDOC_BODY, m, tok, line, ppos))
@@ -1638,7 +1645,9 @@ ctx_synopsis(MACRO_PROT_ARGS)
* up formatting the block scope, then child nodes will inherit
* the formatting. Be careful.
*/
-
+ if (MDOC_Nm == tok)
+ return(blk_full(m, tok, line, ppos, pos, buf));
+ assert(MDOC_Vt == tok);
return(blk_part_imp(m, tok, line, ppos, pos, buf));
}
Index: mdoc_term.c
===================================================================
RCS file: /cvs/src/usr.bin/mandoc/mdoc_term.c,v
retrieving revision 1.93
diff -u -p -r1.93 mdoc_term.c
--- mdoc_term.c 29 Jun 2010 17:10:30 -0000 1.93
+++ mdoc_term.c 30 Jun 2010 22:58:22 -0000
@@ -81,6 +81,7 @@ static void termp_fo_post(DECL_ARGS);
static void termp_in_post(DECL_ARGS);
static void termp_it_post(DECL_ARGS);
static void termp_lb_post(DECL_ARGS);
+static void termp_nm_post(DECL_ARGS);
static void termp_op_post(DECL_ARGS);
static void termp_pf_post(DECL_ARGS);
static void termp_pq_post(DECL_ARGS);
@@ -166,7 +167,7 @@ static const struct termact termacts[MDO
{ termp_in_pre, termp_in_post }, /* In */
{ termp_li_pre, NULL }, /* Li */
{ termp_nd_pre, NULL }, /* Nd */
- { termp_nm_pre, NULL }, /* Nm */
+ { termp_nm_pre, termp_nm_post }, /* Nm */
{ termp_op_pre, termp_op_post }, /* Op */
{ NULL, NULL }, /* Ot */
{ termp_under_pre, NULL }, /* Pa */
@@ -1021,11 +1022,35 @@ static int
termp_nm_pre(DECL_ARGS)
{
- if (NULL == n->child && NULL == m->name)
+ if (MDOC_BLOCK == n->type)
+ return(1);
+
+ if (MDOC_BODY == n->type) {
+ if (NULL == n->child)
+ return(0);
+ p->flags |= TERMP_NOLPAD | TERMP_NOSPACE;
+ p->offset += term_len(p, 1) +
+ (NULL == n->prev->child ? term_strlen(p, m->name) :
+ MDOC_TEXT == n->prev->child->type ?
+ term_strlen(p, n->prev->child->string) :
+ term_len(p, 5));
return(1);
+ }
+
+ if (NULL == n->child && NULL == m->name)
+ return(0);
synopsis_pre(p, n);
+ if (MDOC_HEAD == n->type && n->next->child) {
+ p->flags |= TERMP_NOSPACE | TERMP_NOBREAK | TERMP_HANG;
+ p->rmargin = p->offset + term_len(p, 1) +
+ (NULL == n->child ? term_strlen(p, m->name) :
+ MDOC_TEXT == n->child->type ?
+ term_strlen(p, n->child->string) :
+ term_len(p, 5));
+ }
+
term_fontpush(p, TERMFONT_BOLD);
if (NULL == n->child)
term_word(p, m->name);
@@ -1033,6 +1058,21 @@ termp_nm_pre(DECL_ARGS)
}
+/* ARGSUSED */
+static void
+termp_nm_post(DECL_ARGS)
+{
+
+ if (MDOC_HEAD == n->type && n->next->child) {
+ term_flushln(p);
+ p->flags &= ~(TERMP_NOBREAK | TERMP_HANG);
+ } else if (MDOC_BODY == n->type && n->child) {
+ term_flushln(p);
+ p->flags &= ~TERMP_NOLPAD;
+ }
+}
+
+
/* ARGSUSED */
static int
termp_fl_pre(DECL_ARGS)
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] .Nm indentation in the SYNOPSIS
2010-06-30 23:24 ` [PATCH] .Nm indentation in the SYNOPSIS Ingo Schwarze
@ 2010-07-01 9:38 ` Kristaps Dzonsons
2010-07-01 12:59 ` Ingo Schwarze
0 siblings, 1 reply; 6+ messages in thread
From: Kristaps Dzonsons @ 2010-07-01 9:38 UTC (permalink / raw)
To: tech
This patch is clear (1/3-ok). It needs bits in mdoc.7, as with `Vt',
stating its effects (pending 1/3). Furthermore, the existing code in
mdoc_html.c handling `Nm' needs to be thrown out and replaced by this
(last 1/3). I can take care of the last part if you don't want to
navigate mdoc_html.c.
jmc will love you for this, Ingo! :-)
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] .Nm indentation in the SYNOPSIS
2010-07-01 9:38 ` Kristaps Dzonsons
@ 2010-07-01 12:59 ` Ingo Schwarze
2010-07-01 13:15 ` Kristaps Dzonsons
0 siblings, 1 reply; 6+ messages in thread
From: Ingo Schwarze @ 2010-07-01 12:59 UTC (permalink / raw)
To: tech
Hi Kristaps,
Kristaps Dzonsons schrieb am Thu, Jul 01, 2010 at 11:38:51AM +0200:
> This patch is clear (1/3-ok).
Thanks for checking!
> It needs bits in mdoc.7, as with `Vt',
> stating its effects (pending 1/3).
So i shall write that and commit.
> Furthermore, the existing code in mdoc_html.c handling `Nm' needs
> to be thrown out and replaced by this (last 1/3).
> I can take care of the last part if
> you don't want to navigate mdoc_html.c.
Yes, please! That would be nice.
> jmc will love you for this, Ingo! :-)
Sobrado@ already does.
Yours,
Ingo
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH] .Nm indentation in the SYNOPSIS
2010-07-01 12:59 ` Ingo Schwarze
@ 2010-07-01 13:15 ` Kristaps Dzonsons
0 siblings, 0 replies; 6+ messages in thread
From: Kristaps Dzonsons @ 2010-07-01 13:15 UTC (permalink / raw)
To: tech
>> This patch is clear (1/3-ok).
>
> Thanks for checking!
>
>> It needs bits in mdoc.7, as with `Vt',
>> stating its effects (pending 1/3).
>
> So i shall write that and commit.
Slap it in and I'll worry about the HTML bits once it's in place.
>> Furthermore, the existing code in mdoc_html.c handling `Nm' needs
>> to be thrown out and replaced by this (last 1/3).
>> I can take care of the last part if
>> you don't want to navigate mdoc_html.c.
>
> Yes, please! That would be nice.
>
>> jmc will love you for this, Ingo! :-)
>
> Sobrado@ already does.
Well, you know what they say: what happens at the hackathon, stays at
the hackathon. :-)
--
To unsubscribe send an email to tech+unsubscribe@mdocml.bsd.lv
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2010-07-01 13:05 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-06-26 13:47 [WIP] SYNOPSIS indentation Ingo Schwarze
2010-06-26 14:01 ` Kristaps Dzonsons
2010-06-30 23:24 ` [PATCH] .Nm indentation in the SYNOPSIS Ingo Schwarze
2010-07-01 9:38 ` Kristaps Dzonsons
2010-07-01 12:59 ` Ingo Schwarze
2010-07-01 13:15 ` Kristaps Dzonsons
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).