[PATCH] configure: add --without-api-docs option
[notmuch-archives.git] / d4 / 219cd3cafde20efb76008df5621309b489940c
1 Return-Path: <dmitry.kurochkin@gmail.com>\r
2 X-Original-To: notmuch@notmuchmail.org\r
3 Delivered-To: notmuch@notmuchmail.org\r
4 Received: from localhost (localhost [127.0.0.1])\r
5         by olra.theworths.org (Postfix) with ESMTP id 3DF07429E34\r
6         for <notmuch@notmuchmail.org>; Mon, 30 Jan 2012 15:28:11 -0800 (PST)\r
7 X-Virus-Scanned: Debian amavisd-new at olra.theworths.org\r
8 X-Spam-Flag: NO\r
9 X-Spam-Score: -0.799\r
10 X-Spam-Level: \r
11 X-Spam-Status: No, score=-0.799 tagged_above=-999 required=5\r
12         tests=[DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1,\r
13         FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled\r
14 Received: from olra.theworths.org ([127.0.0.1])\r
15         by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024)\r
16         with ESMTP id Yq5nCQxu66Wg for <notmuch@notmuchmail.org>;\r
17         Mon, 30 Jan 2012 15:28:10 -0800 (PST)\r
18 Received: from mail-bk0-f53.google.com (mail-bk0-f53.google.com\r
19         [209.85.214.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits))\r
20         (No client certificate requested)\r
21         by olra.theworths.org (Postfix) with ESMTPS id E34C7431FBC\r
22         for <notmuch@notmuchmail.org>; Mon, 30 Jan 2012 15:28:09 -0800 (PST)\r
23 Received: by bke11 with SMTP id 11so1966603bke.26\r
24         for <notmuch@notmuchmail.org>; Mon, 30 Jan 2012 15:28:07 -0800 (PST)\r
25 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma;\r
26         h=from:to:cc:subject:in-reply-to:references:user-agent:date\r
27         :message-id:mime-version:content-type;\r
28         bh=mbuQw/B0PnznXEEAcLjDBTe2kUEH0KGJLabzDP30axw=;\r
29         b=Y3igghs0VUe0Ro0hIdH4m3BZApEqZc2g0mc/CrcxTjaxbIQqjgS51CHgdBHGLEybLg\r
30         IomGJMtRh/efYlgUBRZ8iJkDeNg+gKCCvGmehjXLjnPYxWVaiGn2vwhprPYW/cLporTo\r
31         9x1NQ3Q9SVif+HEct0O/zeigPVI+WeGeLgfSw=\r
32 Received: by 10.204.10.86 with SMTP id o22mr915819bko.111.1327966087053;\r
33         Mon, 30 Jan 2012 15:28:07 -0800 (PST)\r
34 Received: from localhost ([91.144.186.21]) by mx.google.com with ESMTPS id\r
35         fg16sm40860977bkb.16.2012.01.30.15.28.04\r
36         (version=TLSv1/SSLv3 cipher=OTHER);\r
37         Mon, 30 Jan 2012 15:28:05 -0800 (PST)\r
38 From: Dmitry Kurochkin <dmitry.kurochkin@gmail.com>\r
39 To: Austin Clements <amdragon@MIT.EDU>, notmuch@notmuchmail.org\r
40 Subject: Re: [PATCH 1/2] show: Convert text format to the new self-recursive\r
41         style\r
42 In-Reply-To: <1327560926-22401-2-git-send-email-amdragon@mit.edu>\r
43 References: <1327560926-22401-1-git-send-email-amdragon@mit.edu>\r
44         <1327560926-22401-2-git-send-email-amdragon@mit.edu>\r
45 User-Agent: Notmuch/0.11+139~gd9b7cab (http://notmuchmail.org) Emacs/23.3.1\r
46         (x86_64-pc-linux-gnu)\r
47 Date: Tue, 31 Jan 2012 03:26:54 +0400\r
48 Message-ID: <87obtkojpd.fsf@gmail.com>\r
49 MIME-Version: 1.0\r
50 Content-Type: text/plain; charset=us-ascii\r
51 Cc: tomi.ollila@iki.fi\r
52 X-BeenThere: notmuch@notmuchmail.org\r
53 X-Mailman-Version: 2.1.13\r
54 Precedence: list\r
55 List-Id: "Use and development of the notmuch mail system."\r
56         <notmuch.notmuchmail.org>\r
57 List-Unsubscribe: <http://notmuchmail.org/mailman/options/notmuch>,\r
58         <mailto:notmuch-request@notmuchmail.org?subject=unsubscribe>\r
59 List-Archive: <http://notmuchmail.org/pipermail/notmuch>\r
60 List-Post: <mailto:notmuch@notmuchmail.org>\r
61 List-Help: <mailto:notmuch-request@notmuchmail.org?subject=help>\r
62 List-Subscribe: <http://notmuchmail.org/mailman/listinfo/notmuch>,\r
63         <mailto:notmuch-request@notmuchmail.org?subject=subscribe>\r
64 X-List-Received-Date: Mon, 30 Jan 2012 23:28:11 -0000\r
65 \r
66 On Thu, 26 Jan 2012 01:55:25 -0500, Austin Clements <amdragon@MIT.EDU> wrote:\r
67 > This is all code movement and a smidgen of glue.  This moves the\r
68 > existing text formatter code into one self-recursive function, but\r
69 > doesn't change any of the logic.  The next patch will actually take\r
70 > advantage of what the new structure has to offer.\r
71\r
72 > Note that this patch retains format_headers_message_part_text because\r
73 > it is also used by the raw format.\r
74 > ---\r
75 >  notmuch-show.c |  270 +++++++++++++++++++++++++++++---------------------------\r
76 >  1 files changed, 139 insertions(+), 131 deletions(-)\r
77\r
78 > diff --git a/notmuch-show.c b/notmuch-show.c\r
79 > index dec799c..6a890b2 100644\r
80 > --- a/notmuch-show.c\r
81 > +++ b/notmuch-show.c\r
82 > @@ -21,40 +21,17 @@\r
83 >  #include "notmuch-client.h"\r
84 >  \r
85 >  static void\r
86 > -format_message_text (unused (const void *ctx),\r
87 > -                  notmuch_message_t *message,\r
88 > -                  int indent);\r
89 > -static void\r
90 > -format_headers_text (const void *ctx,\r
91 > -                  notmuch_message_t *message);\r
92 > -\r
93 > -static void\r
94 >  format_headers_message_part_text (GMimeMessage *message);\r
95 >  \r
96 >  static void\r
97 > -format_part_start_text (GMimeObject *part,\r
98 > -                     int *part_count);\r
99 > -\r
100 > -static void\r
101 > -format_part_content_text (GMimeObject *part);\r
102 > -\r
103 > -static void\r
104 > -format_part_end_text (GMimeObject *part);\r
105 > +format_part_text (const void *ctx, mime_node_t *node,\r
106 > +               int indent, const notmuch_show_params_t *params);\r
107 >  \r
108 >  static const notmuch_show_format_t format_text = {\r
109 > -    "", NULL,\r
110 > -     "\fmessage{ ", format_message_text,\r
111 > -         "\fheader{\n", format_headers_text, format_headers_message_part_text, "\fheader}\n",\r
112 > -         "\fbody{\n",\r
113 > -             format_part_start_text,\r
114 > -             NULL,\r
115 > -             NULL,\r
116 > -             format_part_content_text,\r
117 > -             format_part_end_text,\r
118 > -             "",\r
119 > -         "\fbody}\n",\r
120 > -     "\fmessage}\n", "",\r
121 > -    ""\r
122 > +    .message_set_start = "",\r
123 > +    .part = format_part_text,\r
124 > +    .message_set_sep = "",\r
125 > +    .message_set_end = ""\r
126 \r
127 I guess I missed this during the first review.  I think we should\r
128 support NULL values for message_set_* members (in a separate patch, I\r
129 guess).  This would allow us to explicitly initialize only part member\r
130 in the above code.\r
131 \r
132 Looks good otherwise.\r
133 \r
134 Regards,\r
135   Dmitry\r
136 \r
137 >  };\r
138 >  \r
139 >  static void\r
140 > @@ -191,16 +168,6 @@ _get_one_line_summary (const void *ctx, notmuch_message_t *message)\r
141 >  }\r
142 >  \r
143 >  static void\r
144 > -format_message_text (unused (const void *ctx), notmuch_message_t *message, int indent)\r
145 > -{\r
146 > -    printf ("id:%s depth:%d match:%d filename:%s\n",\r
147 > -         notmuch_message_get_message_id (message),\r
148 > -         indent,\r
149 > -         notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH),\r
150 > -         notmuch_message_get_filename (message));\r
151 > -}\r
152 > -\r
153 > -static void\r
154 >  format_message_json (const void *ctx, notmuch_message_t *message, unused (int indent))\r
155 >  {\r
156 >      notmuch_tags_t *tags;\r
157 > @@ -338,26 +305,6 @@ format_message_mbox (const void *ctx,\r
158 >      fclose (file);\r
159 >  }\r
160 >  \r
161 > -\r
162 > -static void\r
163 > -format_headers_text (const void *ctx, notmuch_message_t *message)\r
164 > -{\r
165 > -    const char *headers[] = {\r
166 > -     "Subject", "From", "To", "Cc", "Bcc", "Date"\r
167 > -    };\r
168 > -    const char *name, *value;\r
169 > -    unsigned int i;\r
170 > -\r
171 > -    printf ("%s\n", _get_one_line_summary (ctx, message));\r
172 > -\r
173 > -    for (i = 0; i < ARRAY_SIZE (headers); i++) {\r
174 > -     name = headers[i];\r
175 > -     value = notmuch_message_get_header (message, name);\r
176 > -     if (value && strlen (value))\r
177 > -         printf ("%s: %s\n", name, value);\r
178 > -    }\r
179 > -}\r
180 > -\r
181 >  static void\r
182 >  format_headers_message_part_text (GMimeMessage *message)\r
183 >  {\r
184 > @@ -523,78 +470,6 @@ signer_status_to_string (GMimeSignerStatus x)\r
185 >  #endif\r
186 >  \r
187 >  static void\r
188 > -format_part_start_text (GMimeObject *part, int *part_count)\r
189 > -{\r
190 > -    GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (part);\r
191 > -\r
192 > -    if (disposition &&\r
193 > -     strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
194 > -    {\r
195 > -     printf ("\fattachment{ ID: %d", *part_count);\r
196 > -\r
197 > -    } else {\r
198 > -\r
199 > -     printf ("\fpart{ ID: %d", *part_count);\r
200 > -    }\r
201 > -}\r
202 > -\r
203 > -static void\r
204 > -format_part_content_text (GMimeObject *part)\r
205 > -{\r
206 > -    const char *cid = g_mime_object_get_content_id (part);\r
207 > -    GMimeContentType *content_type = g_mime_object_get_content_type (GMIME_OBJECT (part));\r
208 > -\r
209 > -    if (GMIME_IS_PART (part))\r
210 > -    {\r
211 > -     const char *filename = g_mime_part_get_filename (GMIME_PART (part));\r
212 > -     if (filename)\r
213 > -         printf (", Filename: %s", filename);\r
214 > -    }\r
215 > -\r
216 > -    if (cid)\r
217 > -     printf (", Content-id: %s", cid);\r
218 > -\r
219 > -    printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));\r
220 > -\r
221 > -    if (g_mime_content_type_is_type (content_type, "text", "*") &&\r
222 > -     !g_mime_content_type_is_type (content_type, "text", "html"))\r
223 > -    {\r
224 > -     GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);\r
225 > -     g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
226 > -     show_text_part_content (part, stream_stdout);\r
227 > -     g_object_unref(stream_stdout);\r
228 > -    }\r
229 > -    else if (g_mime_content_type_is_type (content_type, "multipart", "*") ||\r
230 > -          g_mime_content_type_is_type (content_type, "message", "rfc822"))\r
231 > -    {\r
232 > -     /* Do nothing for multipart since its content will be printed\r
233 > -      * when recursing. */\r
234 > -    }\r
235 > -    else\r
236 > -    {\r
237 > -     printf ("Non-text part: %s\n",\r
238 > -             g_mime_content_type_to_string (content_type));\r
239 > -    }\r
240 > -}\r
241 > -\r
242 > -static void\r
243 > -format_part_end_text (GMimeObject *part)\r
244 > -{\r
245 > -    GMimeContentDisposition *disposition;\r
246 > -\r
247 > -    disposition = g_mime_object_get_content_disposition (part);\r
248 > -    if (disposition &&\r
249 > -     strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
250 > -    {\r
251 > -     printf ("\fattachment}\n");\r
252 > -    }\r
253 > -    else\r
254 > -    {\r
255 > -     printf ("\fpart}\n");\r
256 > -    }\r
257 > -}\r
258 > -\r
259 > -static void\r
260 >  format_part_start_json (unused (GMimeObject *part), int *part_count)\r
261 >  {\r
262 >      printf ("{\"id\": %d", *part_count);\r
263 > @@ -844,6 +719,139 @@ format_part_content_raw (GMimeObject *part)\r
264 >  }\r
265 >  \r
266 >  static void\r
267 > +format_part_text (const void *ctx, mime_node_t *node,\r
268 > +               int indent, const notmuch_show_params_t *params)\r
269 > +{\r
270 > +    /* The disposition and content-type metadata are associated with\r
271 > +     * the envelope for message parts */\r
272 > +    GMimeObject *meta = node->envelope_part ?\r
273 > +     GMIME_OBJECT (node->envelope_part) : node->part;\r
274 > +    GMimeContentType *content_type = g_mime_object_get_content_type (meta);\r
275 > +    int i;\r
276 > +\r
277 > +    if (node->envelope_file) {\r
278 > +     notmuch_message_t *message = node->envelope_file;\r
279 > +     const char *headers[] = {\r
280 > +         "Subject", "From", "To", "Cc", "Bcc", "Date"\r
281 > +     };\r
282 > +     const char *name, *value;\r
283 > +     unsigned int i;\r
284 > +\r
285 > +     printf ("\fmessage{ ");\r
286 > +     printf ("id:%s depth:%d match:%d filename:%s\n",\r
287 > +             notmuch_message_get_message_id (message),\r
288 > +             indent,\r
289 > +             notmuch_message_get_flag (message, NOTMUCH_MESSAGE_FLAG_MATCH),\r
290 > +             notmuch_message_get_filename (message));\r
291 > +\r
292 > +     printf ("\fheader{\n");\r
293 > +\r
294 > +     printf ("%s\n", _get_one_line_summary (ctx, message));\r
295 > +\r
296 > +     for (i = 0; i < ARRAY_SIZE (headers); i++) {\r
297 > +         name = headers[i];\r
298 > +         value = notmuch_message_get_header (message, name);\r
299 > +         if (value && strlen (value))\r
300 > +             printf ("%s: %s\n", name, value);\r
301 > +     }\r
302 > +     printf ("\fheader}\n");\r
303 > +    } else {\r
304 > +     GMimeContentDisposition *disposition = g_mime_object_get_content_disposition (meta);\r
305 > +     const char *cid = g_mime_object_get_content_id (meta);\r
306 > +\r
307 > +     if (disposition &&\r
308 > +         strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
309 > +     {\r
310 > +         printf ("\fattachment{ ID: %d", node->part_num);\r
311 > +\r
312 > +     } else {\r
313 > +\r
314 > +         printf ("\fpart{ ID: %d", node->part_num);\r
315 > +     }\r
316 > +\r
317 > +     if (GMIME_IS_PART (node->part))\r
318 > +     {\r
319 > +         const char *filename = g_mime_part_get_filename (GMIME_PART (node->part));\r
320 > +         if (filename)\r
321 > +             printf (", Filename: %s", filename);\r
322 > +     }\r
323 > +\r
324 > +     if (cid)\r
325 > +         printf (", Content-id: %s", cid);\r
326 > +\r
327 > +     printf (", Content-type: %s\n", g_mime_content_type_to_string (content_type));\r
328 > +    }\r
329 > +\r
330 > +    if (node->envelope_part) {\r
331 > +     GMimeMessage *message = GMIME_MESSAGE (node->part);\r
332 > +     InternetAddressList *recipients;\r
333 > +     const char *recipients_string;\r
334 > +\r
335 > +     printf ("\fheader{\n");\r
336 > +     printf ("Subject: %s\n", g_mime_message_get_subject (message));\r
337 > +     printf ("From: %s\n", g_mime_message_get_sender (message));\r
338 > +     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_TO);\r
339 > +     recipients_string = internet_address_list_to_string (recipients, 0);\r
340 > +     if (recipients_string)\r
341 > +         printf ("To: %s\n", recipients_string);\r
342 > +     recipients = g_mime_message_get_recipients (message, GMIME_RECIPIENT_TYPE_CC);\r
343 > +     recipients_string = internet_address_list_to_string (recipients, 0);\r
344 > +     if (recipients_string)\r
345 > +         printf ("Cc: %s\n", recipients_string);\r
346 > +     printf ("Date: %s\n", g_mime_message_get_date_as_string (message));\r
347 > +     printf ("\fheader}\n");\r
348 > +    }\r
349 > +\r
350 > +    if (!node->envelope_file) {\r
351 > +     if (g_mime_content_type_is_type (content_type, "text", "*") &&\r
352 > +         !g_mime_content_type_is_type (content_type, "text", "html"))\r
353 > +     {\r
354 > +         GMimeStream *stream_stdout = g_mime_stream_file_new (stdout);\r
355 > +         g_mime_stream_file_set_owner (GMIME_STREAM_FILE (stream_stdout), FALSE);\r
356 > +         show_text_part_content (node->part, stream_stdout);\r
357 > +         g_object_unref(stream_stdout);\r
358 > +     }\r
359 > +     else if (g_mime_content_type_is_type (content_type, "multipart", "*") ||\r
360 > +              g_mime_content_type_is_type (content_type, "message", "rfc822"))\r
361 > +     {\r
362 > +         /* Do nothing for multipart since its content will be printed\r
363 > +          * when recursing. */\r
364 > +     }\r
365 > +     else\r
366 > +     {\r
367 > +         printf ("Non-text part: %s\n",\r
368 > +                 g_mime_content_type_to_string (content_type));\r
369 > +     }\r
370 > +    }\r
371 > +\r
372 > +    if (GMIME_IS_MESSAGE (node->part))\r
373 > +     printf ("\fbody{\n");\r
374 > +\r
375 > +    for (i = 0; i < node->nchildren; i++)\r
376 > +     format_part_text (ctx, mime_node_child (node, i), indent, params);\r
377 > +\r
378 > +    if (GMIME_IS_MESSAGE (node->part))\r
379 > +     printf ("\fbody}\n");\r
380 > +\r
381 > +    if (node->envelope_file) {\r
382 > +     printf ("\fmessage}\n");\r
383 > +    } else {\r
384 > +     GMimeContentDisposition *disposition;\r
385 > +\r
386 > +     disposition = g_mime_object_get_content_disposition (meta);\r
387 > +     if (disposition &&\r
388 > +         strcmp (disposition->disposition, GMIME_DISPOSITION_ATTACHMENT) == 0)\r
389 > +     {\r
390 > +         printf ("\fattachment}\n");\r
391 > +     }\r
392 > +     else\r
393 > +     {\r
394 > +         printf ("\fpart}\n");\r
395 > +     }\r
396 > +    }\r
397 > +}\r
398 > +\r
399 > +static void\r
400 >  show_message (void *ctx,\r
401 >             const notmuch_show_format_t *format,\r
402 >             notmuch_message_t *message,\r
403 > -- \r
404 > 1.7.7.3\r
405\r