X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=devel%2Fschemata;h=292f2876868063f4b8a54aae0be33cd46b457cbe;hp=728a46f214ac5a1597c48a62f6d00efbd41ffcd6;hb=1c6195b9e35e511e115f94b45d97aa58ee41b307;hpb=2ee1d8e1c70ce20728bc3faada389a4802636352 diff --git a/devel/schemata b/devel/schemata index 728a46f2..292f2876 100644 --- a/devel/schemata +++ b/devel/schemata @@ -1,5 +1,5 @@ This file describes the schemata used for notmuch's structured output -format (currently JSON). +format (currently JSON and S-Expressions). []'s indicate lists. List items can be marked with a '?', meaning they are optional; or a '*', meaning there can be zero or more of that @@ -8,6 +8,14 @@ values. An object field marked '?' is optional. |'s indicate alternates (e.g., int|string means something can be an int or a string). +For S-Expression output, lists are printed delimited by () instead of +[]. Objects are printed as p-lists, i.e. lists where the keys and values +are interleaved. Keys are printed as keywords (symbols preceded by a +colon), e.g. (:id "123" :time 54321 :from "foobar"). Null is printed as +nil, true as t and false as nil. + +This is version 1 of the structured output format. + Common non-terminals -------------------- @@ -32,13 +40,13 @@ thread = [thread_node*] # A message and its replies (show_messages) thread_node = [ - message?, # present if --entire-thread or matched + message|null, # null if not matched and not --entire-thread [thread_node*] # children of message ] -# A message (show_message) +# A message (format_part_sprinter) message = { - # (format_message_json) + # (format_message_sprinter) id: messageid, match: bool, filename: string, @@ -47,21 +55,16 @@ message = { tags: [string*], headers: headers, - body: [part] + body?: [part] # omitted if --body=false } -# A MIME part (show_message_body) +# A MIME part (format_part_sprinter) part = { - # format_part_start_json id: int|string, # part id (currently DFS part number) - # format_part_encstatus_json encstatus?: encstatus, - - # format_part_sigstatus_json sigstatus?: sigstatus, - # format_part_content_json content-type: string, content-id?: string, # if content-type starts with "multipart/": @@ -77,26 +80,25 @@ part = { content?: string } -# The headers of a message (format_headers_json with raw headers -# and reply = FALSE) or a part (format_headers_message_part_json -# with pretty-printed headers) +# The headers of a message or part (format_headers_sprinter with reply = FALSE) headers = { Subject: string, From: string, To?: string, Cc?: string, Bcc?: string, + Reply-To?: string, Date: string } -# Encryption status (format_part_encstatus_json) +# Encryption status (format_part_sprinter) encstatus = [{status: "good"|"bad"}] -# Signature status (format_part_sigstatus_json) +# Signature status (format_part_sigstatus_sprinter) sigstatus = [signature*] signature = { - # signature_status_to_string + # (signature_status_to_string) status: "none"|"good"|"bad"|"error"|"unknown", # if status is "good": fingerprint?: string, @@ -135,21 +137,22 @@ thread = { total: int, # total messages in thread authors: string, # comma-separated names with | between # matched and unmatched - subject: string + subject: string, + tags: [string*] } notmuch reply schema -------------------- reply = { - # The headers of the constructed reply (format_headers_json with - # raw headers and reply = TRUE) + # The headers of the constructed reply reply-headers: reply_headers, - # As in the show format (format_part_json) + # As in the show format (format_part_sprinter) original: message } +# Reply headers (format_headers_sprinter with reply = TRUE) reply_headers = { Subject: string, From: string,