\input texinfo

@setfilename gnus-coding.info
@settitle Gnus Coding Style and Maintenance Guide
@include docstyle.texi
@syncodeindex fn cp
@syncodeindex vr cp
@syncodeindex pg cp

@copying
Copyright @copyright{} 2004--2005, 2007--2021 Free Software Foundation,
Inc.

@quotation
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, with the Front-Cover Texts being ``A GNU Manual'',
and with the Back-Cover Texts as in (a) below.  A copy of the license
is included in the section entitled ``GNU Free Documentation License''.

(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
modify this GNU manual.''
@end quotation
@end copying


@titlepage
@title Gnus Coding Style and Maintenance Guide

@author by Reiner Steib  <Reiner.Steib@@gmx.de>

@insertcopying
@end titlepage

@c Obviously this is only a very rudimentary draft.  We put it in the
@c repository anyway hoping that it might annoy someone enough to fix
@c it.  ;-) Fixing only a paragraph also is appreciated.

@ifnottex
@node Top
@top Gnus Coding Style and Maintenance Guide
This manual describes @dots{}

@insertcopying
@end ifnottex

@menu
* Gnus Coding Style:: Gnus Coding Style
* Gnus Maintenance Guide:: Gnus Maintenance Guide
* GNU Free Documentation License::  The license for this documentation.
@end menu

@c @ref{Gnus Reference Guide, ,Gnus Reference Guide, gnus, The Gnus Newsreader}

@node Gnus Coding Style
@chapter Gnus Coding Style
@section Dependencies

The Gnus distribution contains a lot of libraries that have been written
for Gnus and used intensively for Gnus.  But many of those libraries are
useful on their own.  E.g., other Emacs Lisp packages might use the
@acronym{MIME} library @xref{Top, ,Top, emacs-mime, The Emacs MIME
Manual}.

@subsection General purpose libraries

@table @file

@item netrc.el
@file{.netrc} parsing functionality.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item format-spec.el
Functions for formatting arbitrary formatting strings.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item hex-util.el
Functions to encode/decode hexadecimal string.
@c As of 2007-08-25...
There are no Gnus dependencies in these files.
@end table

@subsection Encryption and security

@table @file
@item encrypt.el
File encryption routines
@c As of 2005-10-25...
There are no Gnus dependencies in this file.

@item password.el
Read passwords from user, possibly using a password cache.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item sha1.el
SHA1 Secure Hash Algorithm.
@c As of 2007-08-25...
There are no Gnus dependencies in these files.
@end table

@subsection Networking

@table @file
@item dig.el
Domain Name System dig interface.
@c As of 2005-10-21...
There are no serious Gnus dependencies in this file.  Uses
@code{gnus-run-mode-hooks} (a wrapper function).

@item dns.el, dns-mode.el
Domain Name Service lookups.
@c As of 2005-10-21...
There are no Gnus dependencies in these files.
@end table

@subsection Mail and News related RFCs

@table @file
@item pop3.el
Post Office Protocol (RFC 1460) interface.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item imap.el
@acronym{IMAP} library.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item ietf-drums.el
Functions for parsing RFC 2822 headers.
@c As of 2005-10-21...
There are no Gnus dependencies in this file.

@item rfc1843.el
HZ (rfc1843) decoding.  HZ is a data format for exchanging files of
arbitrarily mixed Chinese and @acronym{ASCII} characters.
@c As of 2005-10-21...
@code{rfc1843-gnus-setup} seem to be useful only for Gnus.  Maybe this
function should be relocated to remove dependencies on Gnus.  Other
minor dependencies: @code{gnus-newsgroup-name} could be eliminated by
using an optional argument to @code{rfc1843-decode-article-body}.

@item rfc2045.el
Functions for decoding rfc2045 headers
@c As of 2007-08-25...
There are no Gnus dependencies in these files.

@item rfc2047.el
Functions for encoding and decoding rfc2047 messages
@c As of 2007-08-25...
There are no Gnus dependencies in these files.
@c
Only a couple of tests for gnusy symbols.

@item rfc2104.el
RFC2104 Hashed Message Authentication Codes
@c As of 2007-08-25...
There are no Gnus dependencies in these files.

@item rfc2231.el
Functions for decoding rfc2231 headers
@c As of 2007-08-25...
There are no Gnus dependencies in these files.

@item flow-fill.el
Interpret RFC2646 "flowed" text.
@c As of 2005-10-27...
There are no Gnus dependencies in this file.

@item uudecode.el
Elisp native uudecode.
@c As of 2005-12-06...
There are no Gnus dependencies in this file.
@c ... but the custom group is gnus-extract.

@item canlock.el
Functions for Cancel-Lock feature
@c Cf. draft-ietf-usefor-cancel-lock-01.txt
@c Although this draft has expired, Canlock-Lock revived in 2007 when
@c major news providers (e.g., news.individual.org) started to use it.
@c As of 2007-08-25...
There are no Gnus dependencies in these files.

@end table

@subsection message

All message composition from Gnus (both mail and news) takes place in
Message mode buffers.  Message mode is intended to be a replacement for
Emacs mail mode.  There should be no Gnus dependencies in
@file{message.el}.  Alas it is not anymore.  Patches and suggestions to
remove the dependencies are welcome.

@c message.el requires nnheader which requires gnus-util.

@subsection Emacs @acronym{MIME}

The files @file{mml*.el} and @file{mm-*.el} provide @acronym{MIME}
functionality for Emacs.

@acronym{MML} (@acronym{MIME} Meta Language) is supposed to be
independent from Gnus.  Alas it is not anymore.  Patches and suggestions
to remove the dependencies are welcome.

@subsection Gnus backends

The files @file{nn*.el} provide functionality for accessing NNTP
(@file{nntp.el}), IMAP (@file{nnimap.el}) and several other Mail back
ends (probably @file{nnml.el}, @file{nnfolder.el} and
@file{nnmaildir.el} are the most widely used mail back ends).

@c mm-uu requires nnheader which requires gnus-util.  message.el also
@c requires nnheader.


@node GNU Free Documentation License
@appendix GNU Free Documentation License
@include doclicense.texi

@c Local Variables:
@c mode: texinfo
@c coding: utf-8
@c End:
