Blame HACKING

Packit 0ec9dd
Formatting
Packit 0ec9dd
==========
Packit 0ec9dd
Packit 0ec9dd
The Pango formatting style is basically the GNU style of formatting
Packit 0ec9dd
(see http://www.gnu.org/prep/standards.html), with a few additions.
Packit 0ec9dd
In brief overview:
Packit 0ec9dd
Packit 0ec9dd
 - Two character indents are used; braces go on a separate line, and 
Packit 0ec9dd
   get a separate indentation level, so the total indent for an
Packit 0ec9dd
   enclosed block is 4 characters.
Packit 0ec9dd
Packit 0ec9dd
    if (x < foo (y, z))
Packit 0ec9dd
      haha = bar[4] + 5;
Packit 0ec9dd
    else
Packit 0ec9dd
      {
Packit 0ec9dd
	while (z)
Packit 0ec9dd
	  {
Packit 0ec9dd
	    haha += foo (z, z);
Packit 0ec9dd
	    z--;
Packit 0ec9dd
	  }
Packit 0ec9dd
	return abc (haha);
Packit 0ec9dd
      }
Packit 0ec9dd
Packit 0ec9dd
 - Spaces should be present between function name and argument block,
Packit 0ec9dd
   and after commas.
Packit 0ec9dd
Packit 0ec9dd
     foo (z, z)
Packit 0ec9dd
Packit 0ec9dd
 - In pointer types, the '*' is grouped with the variable name,
Packit 0ec9dd
   not with the base type. 
Packit 0ec9dd
Packit 0ec9dd
    int *a;
Packit 0ec9dd
Packit 0ec9dd
   NOT: 'int* a'.
Packit 0ec9dd
Packit 0ec9dd
   In cases where there is no variable name, for instance, return
Packit 0ec9dd
   values, there should be a single space between the base type 
Packit 0ec9dd
   and the '*'.
Packit 0ec9dd
Packit 0ec9dd
 - function and variable names are lower_case_with_underscores
Packit 0ec9dd
   type names are StudlyCaps, macro names are UPPER_CASE_WITH_UNDERSCORES
Packit 0ec9dd
Packit 0ec9dd
Packit 0ec9dd
Documentation comments
Packit 0ec9dd
======================
Packit 0ec9dd
Packit 0ec9dd
All public API functions should have inline documentation headers
Packit 0ec9dd
in the gtk-doc / gnome-doc style. For instance:
Packit 0ec9dd
Packit 0ec9dd
/**
Packit 0ec9dd
 * pango_layout_get_line:
Packit 0ec9dd
 * @layout: a #PangoLayout
Packit 0ec9dd
 * @line: the index of a line, which must be between 0 and
Packit 0ec9dd
 *        pango_layout_get_line_count(layout) - 1, inclusive.
Packit 0ec9dd
 * 
Packit 0ec9dd
 * Retrieves a particular line from a #PangoLayout (or @layout.)
Packit 0ec9dd
 * 
Packit 0ec9dd
 * Return value: the requested #PangoLayoutLine, or %NULL if the
Packit 0ec9dd
 *               index is out of range. This layout line can
Packit 0ec9dd
 *               be ref'ed and retained, but will become invalid
Packit 0ec9dd
 *               if changes are made to the #PangoLayout.
Packit 0ec9dd
 *
Packit 0ec9dd
 * Since: 1.6
Packit 0ec9dd
 **/
Packit 0ec9dd
PangoLayoutLine *
Packit 0ec9dd
pango_layout_get_line (PangoLayout *layout,
Packit 0ec9dd
		       int          line)
Packit 0ec9dd
[...]
Packit 0ec9dd
Packit 0ec9dd
Packit 0ec9dd
Choosing Function Names
Packit 0ec9dd
=======================
Packit 0ec9dd
Packit 0ec9dd
- Don't abbreviate in unexpected ways:
Packit 0ec9dd
Packit 0ec9dd
    pango_layout_get_line_count ()
Packit 0ec9dd
Packit 0ec9dd
  Not:
Packit 0ec9dd
Packit 0ec9dd
    pango_layout_ln_cnt ()
Packit 0ec9dd
Packit 0ec9dd
- function that retrieve a value in a side-effect free fashion, should
Packit 0ec9dd
  include "get" in the name.
Packit 0ec9dd
Packit 0ec9dd
    int pango_layout_get_line_count (PangoLayout *layout)
Packit 0ec9dd
Packit 0ec9dd
  not 
Packit 0ec9dd
Packit 0ec9dd
    pango_layout_line_count ()
Packit 0ec9dd
Packit 0ec9dd
Packit 0ec9dd
- functions that set a single parameter in a side-effect free fashion
Packit 0ec9dd
  should include "set" in the name, for instance:
Packit 0ec9dd
Packit 0ec9dd
  void pango_layout_set_width (PangoLayout    *layout,
Packit 0ec9dd
			       int             width);
Packit 0ec9dd
Packit 0ec9dd
Other comments
Packit 0ec9dd
==============
Packit 0ec9dd
Packit 0ec9dd
- Avoid unsigned values for all but flags fields. This is because
Packit 0ec9dd
  the way C handles unsigned values generates bugs like crazy:
Packit 0ec9dd
Packit 0ec9dd
  If width is unsigned and 10, then:
Packit 0ec9dd
Packit 0ec9dd
   int new_width = MAX (width - 15, 1);
Packit 0ec9dd
Packit 0ec9dd
  produces 4294967291, not 1.
Packit 0ec9dd