Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/libjpeg/coderules.txt @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 IJG JPEG LIBRARY: CODING RULES | |
| 2 | |
| 3 Copyright (C) 1991-1996, Thomas G. Lane. | |
| 4 This file is part of the Independent JPEG Group's software. | |
| 5 For conditions of distribution and use, see the accompanying README file. | |
| 6 | |
| 7 | |
| 8 Since numerous people will be contributing code and bug fixes, it's important | |
| 9 to establish a common coding style. The goal of using similar coding styles | |
| 10 is much more important than the details of just what that style is. | |
| 11 | |
| 12 In general we follow the recommendations of "Recommended C Style and Coding | |
| 13 Standards" revision 6.1 (Cannon et al. as modified by Spencer, Keppel and | |
| 14 Brader). This document is available in the IJG FTP archive (see | |
| 15 jpeg/doc/cstyle.ms.tbl.Z, or cstyle.txt.Z for those without nroff/tbl). | |
| 16 | |
| 17 Block comments should be laid out thusly: | |
| 18 | |
| 19 /* | |
| 20 * Block comments in this style. | |
| 21 */ | |
| 22 | |
| 23 We indent statements in K&R style, e.g., | |
| 24 if (test) { | |
| 25 then-part; | |
| 26 } else { | |
| 27 else-part; | |
| 28 } | |
| 29 with two spaces per indentation level. (This indentation convention is | |
| 30 handled automatically by GNU Emacs and many other text editors.) | |
| 31 | |
| 32 Multi-word names should be written in lower case with underscores, e.g., | |
| 33 multi_word_name (not multiWordName). Preprocessor symbols and enum constants | |
| 34 are similar but upper case (MULTI_WORD_NAME). Names should be unique within | |
| 35 the first fifteen characters. (On some older systems, global names must be | |
| 36 unique within six characters. We accommodate this without cluttering the | |
| 37 source code by using macros to substitute shorter names.) | |
| 38 | |
| 39 We use function prototypes everywhere; we rely on automatic source code | |
| 40 transformation to feed prototype-less C compilers. Transformation is done | |
| 41 by the simple and portable tool 'ansi2knr.c' (courtesy of Ghostscript). | |
| 42 ansi2knr is not very bright, so it imposes a format requirement on function | |
| 43 declarations: the function name MUST BEGIN IN COLUMN 1. Thus all functions | |
| 44 should be written in the following style: | |
| 45 | |
| 46 LOCAL(int *) | |
| 47 function_name (int a, char *b) | |
| 48 { | |
| 49 code... | |
| 50 } | |
| 51 | |
| 52 Note that each function definition must begin with GLOBAL(type), LOCAL(type), | |
| 53 or METHODDEF(type). These macros expand to "static type" or just "type" as | |
| 54 appropriate. They provide a readable indication of the routine's usage and | |
| 55 can readily be changed for special needs. (For instance, special linkage | |
| 56 keywords can be inserted for use in Windows DLLs.) | |
| 57 | |
| 58 ansi2knr does not transform method declarations (function pointers in | |
| 59 structs). We handle these with a macro JMETHOD, defined as | |
| 60 #ifdef HAVE_PROTOTYPES | |
| 61 #define JMETHOD(type,methodname,arglist) type (*methodname) arglist | |
| 62 #else | |
| 63 #define JMETHOD(type,methodname,arglist) type (*methodname) () | |
| 64 #endif | |
| 65 which is used like this: | |
| 66 struct function_pointers { | |
| 67 JMETHOD(void, init_entropy_encoder, (int somearg, jparms *jp)); | |
| 68 JMETHOD(void, term_entropy_encoder, (void)); | |
| 69 }; | |
| 70 Note the set of parentheses surrounding the parameter list. | |
| 71 | |
| 72 A similar solution is used for forward and external function declarations | |
| 73 (see the EXTERN and JPP macros). | |
| 74 | |
| 75 If the code is to work on non-ANSI compilers, we cannot rely on a prototype | |
| 76 declaration to coerce actual parameters into the right types. Therefore, use | |
| 77 explicit casts on actual parameters whenever the actual parameter type is not | |
| 78 identical to the formal parameter. Beware of implicit conversions to "int". | |
| 79 | |
| 80 It seems there are some non-ANSI compilers in which the sizeof() operator | |
| 81 is defined to return int, yet size_t is defined as long. Needless to say, | |
| 82 this is brain-damaged. Always use the SIZEOF() macro in place of sizeof(), | |
| 83 so that the result is guaranteed to be of type size_t. | |
| 84 | |
| 85 | |
| 86 The JPEG library is intended to be used within larger programs. Furthermore, | |
| 87 we want it to be reentrant so that it can be used by applications that process | |
| 88 multiple images concurrently. The following rules support these requirements: | |
| 89 | |
| 90 1. Avoid direct use of file I/O, "malloc", error report printouts, etc; | |
| 91 pass these through the common routines provided. | |
| 92 | |
| 93 2. Minimize global namespace pollution. Functions should be declared static | |
| 94 wherever possible. (Note that our method-based calling conventions help this | |
| 95 a lot: in many modules only the initialization function will ever need to be | |
| 96 called directly, so only that function need be externally visible.) All | |
| 97 global function names should begin with "jpeg_", and should have an | |
| 98 abbreviated name (unique in the first six characters) substituted by macro | |
| 99 when NEED_SHORT_EXTERNAL_NAMES is set. | |
| 100 | |
| 101 3. Don't use global variables; anything that must be used in another module | |
| 102 should be in the common data structures. | |
| 103 | |
| 104 4. Don't use static variables except for read-only constant tables. Variables | |
| 105 that should be private to a module can be placed into private structures (see | |
| 106 the system architecture document, structure.txt). | |
| 107 | |
| 108 5. Source file names should begin with "j" for files that are part of the | |
| 109 library proper; source files that are not part of the library, such as cjpeg.c | |
| 110 and djpeg.c, do not begin with "j". Keep source file names to eight | |
| 111 characters (plus ".c" or ".h", etc) to make life easy for MS-DOSers. Keep | |
| 112 compression and decompression code in separate source files --- some | |
| 113 applications may want only one half of the library. | |
| 114 | |
| 115 Note: these rules (particularly #4) are not followed religiously in the | |
| 116 modules that are used in cjpeg/djpeg but are not part of the JPEG library | |
| 117 proper. Those modules are not really intended to be used in other | |
| 118 applications. |
