diff options
Diffstat (limited to 'docs/coding-style.html')
-rw-r--r-- | docs/coding-style.html | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/docs/coding-style.html b/docs/coding-style.html new file mode 100644 index 00000000..d9a1602d --- /dev/null +++ b/docs/coding-style.html @@ -0,0 +1,127 @@ +<!DOCTYPE html> +<html> +<head> +<title>MuPDF Coding Style</title> +<link rel="stylesheet" href="style.css" type="text/css"> +<meta name="viewport" content="width=device-width, initial-scale=1"> +</head> + +<body> + +<header> +<h1>MuPDF Coding Style</h1> +</header> + +<nav> +<a href="http://mupdf.com/index.html">ABOUT</a> +<a href="http://mupdf.com/news.html">NEWS</a> +<a href="index.html">DOCUMENTATION</a> +<a href="http://mupdf.com/downloads/">DOWNLOAD</a> +<a href="http://git.ghostscript.com/?p=mupdf.git;a=summary">SOURCE</a> +<a href="https://bugs.ghostscript.com/">BUGS</a> +</nav> + +<article> + +<h2>Names</h2> + +<p> +Functions should be named according to one of the following schemes: + +<ul> +<li> verb_noun +<li> verb_noun_with_noun +<li> noun_attribute +<li> set_noun_attribute +<li> noun_from_noun -- convert from one type to another (avoid noun_to_noun) +</ul> + +<p> +Prefixes are mandatory for exported functions, macros, enums, globals and types. + +<ul> +<li> fz for common code +<li> pdf, xps, etc., for interpreter specific code +</ul> + +<p> +Prefixes are optional (but encouraged) for private functions and types. + +<p> +Avoid using 'get' as this is a meaningless and redundant filler word. + +<p> +These words are reserved for reference counting schemes: + +<ul> +<li> new, find, load, open, keep -- return objects that you are responsible for freeing. + +<li> drop -- relinquish ownership of the object passed in. +</ul> + +<p> +When searching for an object or value, the name used depends on whether +returning the value is passing ownership: + +<ul> +<li> lookup -- return a value or borrowed pointer +<li> find -- return an object that the caller is responsible for freeing +</ul> + +<h2>Types</h2> + +<p> +Various different integer types are used throughout MuPDF. + +<p> +In general: + +<ul> +<li> int is assumed to be 32bit at least. +<li> short is assumed to be exactly 16 bits. +<li> char is assumed to be exactly 8 bits. +<li> array sizes, string lengths, and allocations are measured using size_t. + size_t is 32bit in 32bit builds, and 64bit on all 64bit builds. +<li> buffers of data use unsigned chars (or uint8_t). +<li> Offsets within files/streams are represented using fz_off_t. + fz_off_t is 64bits in 64bit builds, or in 32bit builds with FZ_LARGEFILE defined. + Otherwise it is a native int (so 32bit in 32bit builds). +</ul> + +<p> +In addition, we use floats (and avoid doubles when possible), assumed to be IEEE compliant. + +<h2>Reference counting</h2> + +<p> +Reference counting uses special words in functions to make it easy to remember +and follow the rules. + +<p> +Words that take ownership: new, find, load, open, keep. + +<p> +Words that release ownership: drop. + +<p> +If an object is returned by a function with one of the special words that take +ownership, you are responsible for freeing it by calling "drop" or "free", or +"close" before you return. You may pass ownership of an owned object by return +it only if you name the function using one of the special words. + +<p> +Any objects returned by functions that do not have any of these special words, +are borrowed and have a limited life time. Do not hold on to them past the +duration of the current function, or stow them away inside structs. If you need +to keep the object for longer than that, you have to either "keep" it or make +your own copy. + +</article> + +<footer> +<a href="http://artifex.com"><img src="artifex-logo.png" align="right"></a> +Copyright © 2006-2017 Artifex Software Inc. +</footer> + +</body> +</html> |