1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199
|
Pixman coding style.
====================
The pixman coding style is close to cairo's with one exception: braces
go on their own line, rather than on the line of the if/while/for:
if (condition)
{
do_something();
do_something_else();
}
not
if (condition) {
do_something();
do_something_else();
}
Indentation
===========
Each new level is indented four spaces:
if (condition)
do_something();
This may be achieved with space characters or with a combination of
tab characters and space characters. Tab characters are interpreted as
Advance to the next column which is a multiple of 8.
Names
=====
In all names, words are separated with underscores. Do not use
CamelCase for any names.
Macros have ALL_CAPITAL_NAMES
Type names are in lower case and end with "_t". For example
pixman_image_t.
Labels, functions and variables have lower case names.
Braces
======
Braces always go on their own line:
if (condition)
{
do_this ();
do_that ();
}
else
{
do_the_other ();
}
Rules for braces and substatements of if/while/for/do:
* If a substatement spans multiple lines, then there must be braces
around it.
* If the condition of an if/while/for spans multiple lines, then
braces must be used for the substatements.
* If one substatement of an if statement has braces, then the other
must too.
* Otherwise, don't add braces.
Comments
========
For comments either like this:
/* One line comment */
or like this:
/* This is a multi-line comment
*
* It extends over multiple lines
*/
Generally comments should say things that aren't clear from the code
itself. If too many comments say obvious things, then people will just
stop reading all comments, including the good ones.
Whitespace
==========
* Put a single space after commas
* Put spaces around arithmetic operators such a +, -, *, /:
y * stride + x
x / unit_x
* Do not put spaces after the address-of operator, the * when used as
a pointer derefernce or the ! and ~ operators:
&foo;
~0x00000000
!condition
*result = 100
* Break up long lines (> ~80 characters) and use whitespace to align
things nicely. This is one way:
some_very_long_function name (
implementation, op, src, mask, dest,
src_x, src_y, mask_x, mask_y, dest_x, dest_y,
width, height);
This is another:
some_very_long_function_name (implementation, op,
src, mask, dest,
src_x, src_y,
mask_x, mask_y,
dest_x, dest_y,
width, height);
* Separate logically distinct chunks with a single newline. This
obviously applies between functions, but also applies within a
function or block or structure definition.
* Use a newline after a block of variable declarations.
* Use a single space before a left parenthesis, except where the
standard will not allow it, (eg. when defining a parameterized macro).
* Don't eliminate newlines just because things would still fit on one
line. This breaks the expected visual structure of the code making
it much harder to read and understand:
if (condition) foo (); else bar (); /* Yuck! */
Function Definitions
====================
Function definitions should take the following form:
void
my_function (int argument)
{
do_my_things ();
}
If all the parameters to a function fit naturally on one line, format
them that way. Otherwise, put one argument on each line, adding
whitespace so that the parameter names are aligned with each other.
I.e., do either this:
void
short_arguments (const char *str, int x, int y, int z)
{
}
or this:
void
long_arguments (const char *char_star_arg,
int int_arg,
double *double_star_arg,
double double_arg)
{
}
Mode lines
==========
Given the rules above, what is the best way to simplify one's life as
a code monkey? Get your editor to do most of the tedious work of
beautifying your code!
As a reward for reading this far, here are some mode lines for the more
popular editors:
/*
* vim:sw=4:sts=4:ts=8:tw=78:fo=tcroq:cindent:cino=\:0,(0
* vim:isk=a-z,A-Z,48-57,_,.,-,>
*/
|