1ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao#!/usr/bin/env python 2ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 3ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoimport os 4ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoimport re 5ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoimport time 6ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaofrom pprint import pprint 7ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 8ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao### 9ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 10ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoc99URL = 'http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf' 11ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoc99TOC = [('Foreword', 'xi'), 12ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Introduction', 'xiv'), 13ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1. Scope', '1'), 14ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2. Normative references', '2'), 15ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3. Terms, definitions, and symbols', '3'), 16ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4. Conformance', '7'), 17ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5. Environment', '9'), 18ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.1 Conceptual models', '9'), 19ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.1.1 Translation environment', '9'), 20ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.1.2 Execution environments', '11'), 21ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2 Environmental considerations', '17'), 22ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2.1 Character sets', '17'), 23ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2.2 Character display semantics', '19'), 24ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2.3 Signals and interrupts', '20'), 25ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2.4 Environmental limits', '20'), 26ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6. Language', '29'), 27ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.1 Notation', '29'), 28ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2 Concepts', '29'), 29ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.1 Scopes of identifiers', '29'), 30ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.2 Linkages of identifiers', '30'), 31ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.3 Name spaces of identifiers', '31'), 32ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.4 Storage durations of objects', '32'), 33ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.5 Types', '33'), 34ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.6 Representations of types', '37'), 35ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2.7 Compatible type and composite type', '40'), 36ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.3 Conversions', '42'), 37ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.3.1 Arithmetic operands', '42'), 38ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.3.2 Other operands', '46'), 39ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4 Lexical elements', '49'), 40ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.1 Keywords', '50'), 41ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.2 Identifiers', '51'), 42ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.3 Universal character names', '53'), 43ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.4 Constants', '54'), 44ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.5 String literals', '62'), 45ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.6 Punctuators', '63'), 46ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.7 Header names', '64'), 47ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.8 Preprocessing numbers', '65'), 48ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4.9 Comments', '66'), 49ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5 Expressions', '67'), 50ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.1 Primary expressions', '69'), 51ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.2 Postfix operators', '69'), 52ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.3 Unary operators', '78'), 53ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.4 Cast operators', '81'), 54ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.5 Multiplicative operators', '82'), 55ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.6 Additive operators', '82'), 56ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.7 Bitwise shift operators', '84'), 57ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.8 Relational operators', '85'), 58ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.9 Equality operators', '86'), 59ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.10 Bitwise AND operator', '87'), 60ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.11 Bitwise exclusive OR operator', '88'), 61ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.12 Bitwise inclusive OR operator', '88'), 62ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.13 Logical AND operator', '89'), 63ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.14 Logical OR operator', '89'), 64ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.15 Conditional operator', '90'), 65ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.16 Assignment operators', '91'), 66ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5.17 Comma operator', '94'), 67ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.6 Constant expressions', '95'), 68ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7 Declarations', '97'), 69ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.1 Storage-class specifiers', '98'), 70ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.2 Type specifiers', '99'), 71ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.3 Type qualifiers', '108'), 72ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.4 Function specifiers', '112'), 73ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.5 Declarators', '114'), 74ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.6 Type names', '122'), 75ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.7 Type definitions', '123'), 76ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7.8 Initialization', '125'), 77ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8 Statements and blocks', '131'), 78ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.1 Labeled statements', '131'), 79ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.2 Compound statement', '132'), 80ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.3 Expression and null statements', '132'), 81ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.4 Selection statements', '133'), 82ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.5 Iteration statements', '135'), 83ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8.6 Jump statements', '136'), 84ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.9 External definitions', '140'), 85ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.9.1 Function definitions', '141'), 86ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.9.2 External object definitions', '143'), 87ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10 Preprocessing directives', '145'), 88ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.1 Conditional inclusion', '147'), 89ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.2 Source file inclusion', '149'), 90ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.3 Macro replacement', '151'), 91ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.4 Line control', '158'), 92ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.5 Error directive', '159'), 93ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.6 Pragma directive', '159'), 94ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.7 Null directive', '160'), 95ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.8 Predefined macro names', '160'), 96ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.10.9 Pragma operator', '161'), 97ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11 Future language directions', '163'), 98ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.1 Floating types', '163'), 99ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.2 Linkages of identifiers', '163'), 100ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.3 External names', '163'), 101ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.4 Character escape sequences', '163'), 102ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.5 Storage-class specifiers', '163'), 103ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.6 Function declarators', '163'), 104ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.7 Function definitions', '163'), 105ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.8 Pragma directives', '163'), 106ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.11.9 Predefined macro names', '163'), 107ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7. Library', '164'), 108ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1 Introduction', '164'), 109ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1.1 Definitions of terms', '164'), 110ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1.2 Standard headers', '165'), 111ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1.3 Reserved identifiers', '166'), 112ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1.4 Use of library functions', '166'), 113ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.2 Diagnostics <assert.h>', '169'), 114ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.2.1 Program diagnostics', '169'), 115ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3 Complex arithmetic <complex.h>', '170'), 116ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.1 Introduction', '170'), 117ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.2 Conventions', '170'), 118ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.3 Branch cuts', '171'), 119ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.4 The CX_LIMITED_RANGE pragma', '171'), 120ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.5 Trigonometric functions', '172'), 121ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.6 Hyperbolic functions', '174'), 122ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.7 Exponential and logarithmic functions', '176'), 123ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.8 Power and absolute-value functions', '177'), 124ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3.9 Manipulation functions', '178'), 125ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.4 Character handling <ctype.h>', '181'), 126ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.4.1 Character classification functions', '181'), 127ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.4.2 Character case mapping functions', '184'), 128ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.5 Errors <errno.h>', '186'), 129ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.6 Floating-point environment <fenv.h>', '187'), 130ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.6.1 The FENV_ACCESS pragma', '189'), 131ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.6.2 Floating-point exceptions', '190'), 132ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.6.3 Rounding', '193'), 133ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.6.4 Environment', '194'), 134ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.7 Characteristics of floating types <float.h>', '197'), 135ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.8 Format conversion of integer types <inttypes.h>', '198'), 136ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.8.1 Macros for format specifiers', '198'), 137ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.8.2 Functions for greatest-width integer types', '199'), 138ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.9 Alternative spellings <iso646.h>', '202'), 139ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.10 Sizes of integer types <limits.h>', '203'), 140ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.11 Localization <locale.h>', '204'), 141ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.11.1 Locale control', '205'), 142ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.11.2 Numeric formatting convention inquiry', '206'), 143ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12 Mathematics <math.h>', '212'), 144ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.1 Treatment of error conditions', '214'), 145ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.2 The FP_CONTRACT pragma', '215'), 146ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.3 Classification macros', '216'), 147ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.4 Trigonometric functions', '218'), 148ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.5 Hyperbolic functions', '221'), 149ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.6 Exponential and logarithmic functions', '223'), 150ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.7 Power and absolute-value functions', '228'), 151ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.8 Error and gamma functions', '230'), 152ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.9 Nearest integer functions', '231'), 153ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.10 Remainder functions', '235'), 154ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.11 Manipulation functions', '236'), 155ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.12 Maximum, minimum, and positive difference functions', '238'), 156ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.13 Floating multiply-add', '239'), 157ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.12.14 Comparison macros', '240'), 158ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.13 Nonlocal jumps <setjmp.h>', '243'), 159ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.13.1 Save calling environment', '243'), 160ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.13.2 Restore calling environment', '244'), 161ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.14 Signal handling <signal.h>', '246'), 162ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.14.1 Specify signal handling', '247'), 163ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.14.2 Send signal', '248'), 164ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.15 Variable arguments <stdarg.h>', '249'), 165ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.15.1 Variable argument list access macros', '249'), 166ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.16 Boolean type and values <stdbool.h>', '253'), 167ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.17 Common definitions <stddef.h>', '254'), 168ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.18 Integer types <stdint.h>', '255'), 169ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.18.1 Integer types', '255'), 170ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.18.2 Limits of specified-width integer types', '257'), 171ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.18.3 Limits of other integer types', '259'), 172ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.18.4 Macros for integer constants', '260'), 173ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19 Input/output <stdio.h>', '262'), 174ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.1 Introduction', '262'), 175ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.2 Streams', '264'), 176ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.3 Files', '266'), 177ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.4 Operations on files', '268'), 178ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.5 File access functions', '270'), 179ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.6 Formatted input/output functions', '274'), 180ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.7 Character input/output functions', '296'), 181ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.8 Direct input/output functions', '301'), 182ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.9 File positioning functions', '302'), 183ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.19.10 Error-handling functions', '304'), 184ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20 General utilities <stdlib.h>', '306'), 185ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.1 Numeric conversion functions', '307'), 186ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.2 Pseudo-random sequence generation functions', '312'), 187ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.3 Memory management functions', '313'), 188ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.4 Communication with the environment', '315'), 189ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.5 Searching and sorting utilities', '318'), 190ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.6 Integer arithmetic functions', '320'), 191ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.7 Multibyte/wide character conversion functions', '321'), 192ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.20.8 Multibyte/wide string conversion functions', '323'), 193ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21 String handling <string.h>', '325'), 194ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.1 String function conventions', '325'), 195ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.2 Copying functions', '325'), 196ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.3 Concatenation functions', '327'), 197ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.4 Comparison functions', '328'), 198ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.5 Search functions', '330'), 199ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.21.6 Miscellaneous functions', '333'), 200ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.22 Type-generic math <tgmath.h>', '335'), 201ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.23 Date and time <time.h>', '338'), 202ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.23.1 Components of time', '338'), 203ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.23.2 Time manipulation functions', '339'), 204ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.23.3 Time conversion functions', '341'), 205ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24 Extended multibyte and wide character utilities <wchar.h>', '348'), 206ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.1 Introduction', '348'), 207ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.2 Formatted wide character input/output functions', '349'), 208ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.3 Wide character input/output functions', '367'), 209ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.4 General wide string utilities', '371'), 210ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.5 Wide character time conversion functions', '385'), 211ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.24.6 Extended multibyte/wide character conversion utilities', '386'), 212ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.25 Wide character classification and mapping utilities <wctype.h>', 213ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao '393'), 214ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.25.1 Introduction', '393'), 215ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.25.2 Wide character classification utilities', '394'), 216ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.25.3 Wide character case mapping utilities', '399'), 217ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26 Future library directions', '401'), 218ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.1 Complex arithmetic <complex.h>', '401'), 219ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.2 Character handling <ctype.h>', '401'), 220ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.3 Errors <errno.h>', '401'), 221ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.4 Format conversion of integer types <inttypes.h>', '401'), 222ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.5 Localization <locale.h>', '401'), 223ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.6 Signal handling <signal.h>', '401'), 224ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.7 Boolean type and values <stdbool.h>', '401'), 225ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.8 Integer types <stdint.h>', '401'), 226ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.9 Input/output <stdio.h>', '402'), 227ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.10 General utilities <stdlib.h>', '402'), 228ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.26.11 String handling <string.h>', '402'), 229ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('<wchar.h>', '402'), 230ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('<wctype.h>', '402'), 231ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex A (informative) Language syntax summary', '403'), 232ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.1 Lexical grammar', '403'), 233ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.2 Phrase structure grammar', '409'), 234ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.3 Preprocessing directives', '416'), 235ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex B (informative) Library summary', '418'), 236ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.1 Diagnostics <assert.h>', '418'), 237ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.2 Complex <complex.h>', '418'), 238ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.3 Character handling <ctype.h>', '420'), 239ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.4 Errors <errno.h>', '420'), 240ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.5 Floating-point environment <fenv.h>', '420'), 241ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.6 Characteristics of floating types <float.h>', '421'), 242ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.7 Format conversion of integer types <inttypes.h>', '421'), 243ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.8 Alternative spellings <iso646.h>', '422'), 244ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.9 Sizes of integer types <limits.h>', '422'), 245ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.10 Localization <locale.h>', '422'), 246ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.11 Mathematics <math.h>', '422'), 247ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.12 Nonlocal jumps <setjmp.h>', '427'), 248ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.13 Signal handling <signal.h>', '427'), 249ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.14 Variable arguments <stdarg.h>', '427'), 250ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.15 Boolean type and values <stdbool.h>', '427'), 251ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.16 Common definitions <stddef.h>', '428'), 252ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.17 Integer types <stdint.h>', '428'), 253ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.18 Input/output <stdio.h>', '428'), 254ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.19 General utilities <stdlib.h>', '430'), 255ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.20 String handling <string.h>', '432'), 256ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.21 Type-generic math <tgmath.h>', '433'), 257ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.22 Date and time <time.h>', '433'), 258ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.23 Extended multibyte/wide character utilities <wchar.h>', '434'), 259ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B.24 Wide character classification and mapping utilities <wctype.h>', 260ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao '436'), 261ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex C (informative) Sequence points', '438'), 262ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex D (normative) Universal character names for identifiers', '439'), 263ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex E (informative) Implementation limits', '441'), 264ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex F (normative) IEC 60559 floating-point arithmetic', '443'), 265ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.1 Introduction', '443'), 266ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.2 Types', '443'), 267ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.3 Operators and functions', '444'), 268ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.4 Floating to integer conversion', '446'), 269ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.5 Binary-decimal conversion', '446'), 270ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.6 Contracted expressions', '447'), 271ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.7 Floating-point environment', '447'), 272ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.8 Optimization', '450'), 273ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F.9 Mathematics <math.h>', '453'), 274ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex G (informative) IEC 60559-compatible complex arithmetic', '466'), 275ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.1 Introduction', '466'), 276ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.2 Types', '466'), 277ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.3 Conventions', '466'), 278ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.4 Conversions', '467'), 279ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.5 Binary operators', '467'), 280ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.6 Complex arithmetic <complex.h>', '471'), 281ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('G.7 Type-generic math <tgmath.h>', '479'), 282ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex H (informative) Language independent arithmetic', '480'), 283ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('H.1 Introduction', '480'), 284ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('H.2 Types', '480'), 285ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('H.3 Notification', '484'), 286ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex I (informative) Common warnings', '486'), 287ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Annex J (informative) Portability issues', '488'), 288ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('J.1 Unspecified behavior', '488'), 289ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('J.2 Undefined behavior', '491'), 290ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('J.3 Implementation-defined behavior', '504'), 291ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('J.4 Locale-specific behavior', '511'), 292ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('J.5 Common extensions', '512'), 293ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Bibliography', '515'), 294ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Index', '517')] 295ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 296ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaocXXURL = 'http://open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2723.pdf' 297ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaocXXTOC = [('Contents', 'ii'), 298ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('List of Tables', 'ix'), 299ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1 General', '1'), 300ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.1 Scope', '1'), 301ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.2 Normative references', '1'), 302ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.3 Definitions', '2'), 303ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.4 Implementation compliance', '4'), 304ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.5 Structure of this International Standard', '5'), 305ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.6 Syntax notation', '5'), 306ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.7 The C++ memory model', '6'), 307ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.8 The C++ object model', '6'), 308ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.9 Program execution', '7'), 309ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.10 Multi-threaded executions and data races', '10'), 310ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('1.11 Acknowledgments', '13'), 311ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2 Lexical conventions', '15'), 312ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.1 Phases of translation', '15'), 313ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.2 Character sets', '16'), 314ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.3 Trigraph sequences', '17'), 315ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.4 Preprocessing tokens', '17'), 316ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.5 Alternative tokens', '18'), 317ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.6 Tokens', '19'), 318ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.7 Comments', '19'), 319ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.8 Header names', '19'), 320ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.9 Preprocessing numbers', '20'), 321ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.10 Identifiers', '20'), 322ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.11 Keywords', '20'), 323ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.12 Operators and punctuators', '21'), 324ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('2.13 Literals', '21'), 325ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3 Basic concepts', '29'), 326ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.1 Declarations and definitions', '29'), 327ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.2 One definition rule', '31'), 328ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.3 Declarative regions and scopes', '33'), 329ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.4 Name lookup', '38'), 330ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.5 Program and linkage', '51'), 331ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.6 Start and termination', '54'), 332ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.7 Storage duration', '58'), 333ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.8 Object Lifetime', '62'), 334ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.9 Types', '65'), 335ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.10 Lvalues and rvalues', '70'), 336ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('3.11 Alignment', '72'), 337ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4 Standard conversions', '73'), 338ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.1 Lvalue-to-rvalue conversion', '74'), 339ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.2 Array-to-pointer conversion', '74'), 340ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.3 Function-to-pointer conversion', '74'), 341ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.4 Qualification conversions', '74'), 342ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.5 Integral promotions', '75'), 343ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.6 Floating point promotion', '76'), 344ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.7 Integral conversions', '76'), 345ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.8 Floating point conversions', '76'), 346ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.9 Floating-integral conversions', '77'), 347ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.10 Pointer conversions', '77'), 348ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.11 Pointer to member conversions', '77'), 349ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.12 Boolean conversions', '78'), 350ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('4.13 Integer conversion rank', '78'), 351ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5 Expressions', '79'), 352ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.1 Primary expressions', '80'), 353ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.2 Postfix expressions', '85'), 354ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.3 Unary expressions', '96'), 355ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.4 Explicit type conversion (cast notation)', '104'), 356ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.5 Pointer-to-member operators', '105'), 357ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.6 Multiplicative operators', '106'), 358ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.7 Additive operators', '106'), 359ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.8 Shift operators', '107'), 360ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.9 Relational operators', '108'), 361ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.10 Equality operators', '109'), 362ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.11 Bitwise AND operator', '110'), 363ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.12 Bitwise exclusive OR operator', '110'), 364ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.13 Bitwise inclusive OR operator', '110'), 365ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.14 Logical AND operator', '110'), 366ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.15 Logical OR operator', '110'), 367ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.16 Conditional operator', '111'), 368ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.17 Assignment and compound assignment operators', '112'), 369ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.18 Comma operator', '113'), 370ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('5.19 Constant expressions', '113'), 371ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6 Statements', '116'), 372ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.1 Labeled statement', '116'), 373ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.2 Expression statement', '116'), 374ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.3 Compound statement or block', '116'), 375ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.4 Selection statements', '117'), 376ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.5 Iteration statements', '118'), 377ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.6 Jump statements', '121'), 378ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.7 Declaration statement', '122'), 379ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('6.8 Ambiguity resolution', '123'), 380ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7 Declarations', '125'), 381ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.1 Specifiers', '126'), 382ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.2 Enumeration declarations', '140'), 383ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.3 Namespaces', '143'), 384ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.4 The asm declaration', '156'), 385ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('7.5 Linkage specifications', '156'), 386ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8 Declarators', '160'), 387ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8.1 Type names', '161'), 388ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8.2 Ambiguity resolution', '161'), 389ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8.3 Meaning of declarators', '163'), 390ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8.4 Function definitions', '175'), 391ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('8.5 Initializers', '177'), 392ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9 Classes', '191'), 393ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.1 Class names', '193'), 394ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.2 Class members', '194'), 395ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.3 Member functions', '197'), 396ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.4 Static members', '200'), 397ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.5 Unions', '202'), 398ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.6 Bit-fields', '203'), 399ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.7 Nested class declarations', '204'), 400ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.8 Local class declarations', '205'), 401ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('9.9 Nested type names', '206'), 402ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('10 Derived classes', '207'), 403ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('10.1 Multiple base classes', '208'), 404ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('10.2 Member name lookup', '210'), 405ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('10.3 Virtual functions', '213'), 406ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('10.4 Abstract classes', '217'), 407ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11 Member access control', '219'), 408ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.1 Access specifiers', '221'), 409ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.2 Accessibility of base classes and base class members', '222'), 410ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.3 Access declarations', '224'), 411ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.4 Friends', '225'), 412ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.5 Protected member access', '228'), 413ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.6 Access to virtual functions', '229'), 414ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.7 Multiple access', '230'), 415ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('11.8 Nested classes', '230'), 416ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12 Special member functions', '231'), 417ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.1 Constructors', '231'), 418ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.2 Temporary objects', '233'), 419ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.3 Conversions', '235'), 420ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.4 Destructors', '238'), 421ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.5 Free store', '240'), 422ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.6 Initialization', '242'), 423ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.7 Construction and destruction', '247'), 424ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.8 Copying class objects', '250'), 425ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('12.9 Inheriting Constructors', '255'), 426ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13 Overloading', '259'), 427ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.1 Overloadable declarations', '259'), 428ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.2 Declaration matching', '261'), 429ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.3 Overload resolution', '262'), 430ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.4 Address of overloaded function', '281'), 431ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.5 Overloaded operators', '282'), 432ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('13.6 Built-in operators', '286'), 433ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14 Templates', '290'), 434ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.1 Template parameters', '291'), 435ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.2 Names of template specializations', '294'), 436ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.3 Template arguments', '296'), 437ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.4 Type equivalence', '302'), 438ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.5 Template declarations', '303'), 439ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.6 Name resolution', '318'), 440ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.7 Template instantiation and specialization', '331'), 441ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('14.8 Function template specializations', '343'), 442ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15 Exception handling', '363'), 443ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.1 Throwing an exception', '364'), 444ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.2 Constructors and destructors', '366'), 445ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.3 Handling an exception', '366'), 446ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.4 Exception specifications', '368'), 447ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.5 Special functions', '371'), 448ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('15.6 Exceptions and access', '372'), 449ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16 Preprocessing directives', '373'), 450ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.1 Conditional inclusion', '375'), 451ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.2 Source file inclusion', '376'), 452ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.3 Macro replacement', '377'), 453ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.4 Line control', '382'), 454ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.5 Error directive', '383'), 455ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.6 Pragma directive', '383'), 456ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.7 Null directive', '383'), 457ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.8 Predefined macro names', '383'), 458ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('16.9 Pragma operator', '384'), 459ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17 Library introduction', '386'), 460ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.1 General', '386'), 461ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.2 Overview', '386'), 462ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.3 Definitions', '386'), 463ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.4 Additional definitions', '390'), 464ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.5 Method of description (Informative)', '390'), 465ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('17.6 Library-wide requirements', '396'), 466ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18 Language support library', '407'), 467ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.1 Types', '407'), 468ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.2 Implementation properties', '408'), 469ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.3 Integer types', '417'), 470ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.4 Start and termination', '418'), 471ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.5 Dynamic memory management', '420'), 472ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.6 Type identification', '424'), 473ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.7 Exception handling', '427'), 474ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.8 Initializer lists', '432'), 475ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('18.9 Other runtime support', '434'), 476ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('19 Diagnostics library', '435'), 477ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('19.1 Exception classes', '435'), 478ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('19.2 Assertions', '439'), 479ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('19.3 Error numbers', '440'), 480ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('19.4 System error support', '440'), 481ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20 General utilities library', '452'), 482ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.1 Requirements', '452'), 483ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.2 Utility components', '457'), 484ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.3 Compile-time rational arithmetic', '463'), 485ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.4 Tuples', '465'), 486ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.5 Metaprogramming and type traits', '473'), 487ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.6 Function objects', '486'), 488ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.7 Memory', '509'), 489ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.8 Time utilities', '548'), 490ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('20.9 Date and time functions', '562'), 491ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21 Strings library', '563'), 492ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21.1 Character traits', '563'), 493ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21.2 String classes', '569'), 494ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21.3 Class template basic_string', '572'), 495ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21.4 Numeric Conversions', '599'), 496ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('21.5 Null-terminated sequence utilities', '600'), 497ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('22 Localization library', '604'), 498ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('22.1 Locales', '604'), 499ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('22.2 Standard locale categories', '617'), 500ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('22.3 Standard code conversion facets', '657'), 501ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('22.4 C Library Locales', '659'), 502ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('23 Containers library', '660'), 503ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('23.1 Container requirements', '660'), 504ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('23.2 Sequence containers', '681'), 505ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('23.3 Associative containers', '719'), 506ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('23.4 Unordered associative containers', '744'), 507ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24 Iterators library', '759'), 508ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24.1 Iterator requirements', '759'), 509ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24.2 Header <iterator> synopsis', '764'), 510ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24.3 Iterator primitives', '767'), 511ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24.4 Predefined iterators', '770'), 512ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('24.5 Stream iterators', '784'), 513ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('25 Algorithms library', '792'), 514ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('25.1 Non-modifying sequence operations', '802'), 515ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('25.2 Mutating sequence operations', '806'), 516ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('25.3 Sorting and related operations', '815'), 517ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('25.4 C library algorithms', '829'), 518ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26 Numerics library', '831'), 519ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.1 Numeric type requirements', '831'), 520ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.2 The floating-point environment', '832'), 521ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.3 Complex numbers', '833'), 522ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.4 Random number generation', '842'), 523ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.5 Numeric arrays', '884'), 524ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.6 Generalized numeric operations', '904'), 525ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('26.7 C Library', '907'), 526ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27 Input/output library', '912'), 527ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.1 Iostreams requirements', '912'), 528ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.2 Forward declarations', '912'), 529ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.3 Standard iostream objects', '915'), 530ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.4 Iostreams base classes', '916'), 531ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.5 Stream buffers', '934'), 532ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.6 Formatting and manipulators', '944'), 533ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.7 String-based streams', '972'), 534ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('27.8 File-based streams', '984'), 535ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28 Regular expressions library', '1000'), 536ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.1 Definitions', '1000'), 537ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.2 Requirements', '1000'), 538ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.3 Regular expressions summary', '1002'), 539ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.4 Header <regex> synopsis', '1003'), 540ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.5 Namespace std::regex_constants', '1009'), 541ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.6 Class regex_error', '1012'), 542ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.7 Class template regex_traits', '1012'), 543ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.8 Class template basic_regex', '1015'), 544ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.9 Class template sub_match', '1020'), 545ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.10Class template match_results', '1025'), 546ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.11Regular expression algorithms', '1029'), 547ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.12Regular expression Iterators', '1033'), 548ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('28.13Modified ECMAScript regular expression grammar', '1039'), 549ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29 Atomic operations library', '1042'), 550ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29.1 Order and Consistency', '1044'), 551ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29.2 Lock-free Property', '1046'), 552ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29.3 Atomic Types', '1046'), 553ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29.4 Operations on Atomic Types', '1051'), 554ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('29.5 Flag Type and Operations', '1054'), 555ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('30 Thread support library', '1057'), 556ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('30.1 Requirements', '1057'), 557ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('30.2 Threads', '1058'), 558ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('30.3 Mutual exclusion', '1063'), 559ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('30.4 Condition variables', '1077'), 560ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A Grammar summary', '1085'), 561ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.1 Keywords', '1085'), 562ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.2 Lexical conventions', '1085'), 563ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.3 Basic concepts', '1089'), 564ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.4 Expressions', '1090'), 565ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.5 Statements', '1093'), 566ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.6 Declarations', '1094'), 567ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.7 Declarators', '1097'), 568ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.8 Classes', '1098'), 569ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.9 Derived classes', '1099'), 570ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.10 Special member functions', '1099'), 571ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.11 Overloading', '1100'), 572ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.12 Templates', '1100'), 573ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.13 Exception handling', '1101'), 574ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('A.14 Preprocessing directives', '1101'), 575ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('B Implementation quantities', '1103'), 576ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('C Compatibility', '1105'), 577ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('C.1 C++ and ISO C', '1105'), 578ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('C.2 Standard C library', '1114'), 579ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D Compatibility features', '1119'), 580ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.1 Increment operator with bool operand', '1119'), 581ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.2 static keyword', '1119'), 582ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.3 Access declarations', '1119'), 583ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.4 Implicit conversion from const strings', '1119'), 584ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.5 C standard library headers', '1119'), 585ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.6 Old iostreams members', '1120'), 586ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.7 char* streams', '1121'), 587ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.8 Binders', '1130'), 588ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('D.9 auto_ptr', '1132'), 589ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('E Universal-character-names', '1135'), 590ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('F Cross references', '1137'), 591ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao('Index', '1153')] 592ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 593ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaokDocuments = { 594ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 'C99' : (c99URL, c99TOC, 12), 595ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 'C++' : (cXXURL, cXXTOC, 12), 596ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao} 597ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 598ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef findClosestTOCEntry(data, target): 599ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # FIXME: Fix for named spec references 600ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if isinstance(target[0],str): 601ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return ('.'.join(target),'<named>',1) 602ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 603ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao offset = data[2] 604ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao best = None 605ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for (name,page) in data[1]: 606ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if ' ' in name: 607ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section,name = name.split(' ',1) 608ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if section == 'Annex': 609ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section,name = name.split(' ',1) 610ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = 'Annex '+section 611ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 612ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = None 613ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao try: 614ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao page = int(page) + offset 615ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao except: 616ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao page = 1 617ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao try: 618ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao spec = SpecIndex.fromstring(section) 619ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao except: 620ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao spec = None 621ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 622ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Meh, could be better... 623ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if spec is not None: 624ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao dist = spec - target 625ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if best is None or dist < best[0]: 626ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao best = (dist, (section, name, page)) 627ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return best[1] 628ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 629ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao# What a hack. Slow to boot. 630ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaodoxyLineRefRE = re.compile(r"<a name=\"l([0-9]+)\"></a>") 631ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef findClosestLineReference(clangRoot, doxyName, target): 632ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao try: 633ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f = open(os.path.join(clangRoot, 'docs', 'doxygen', 'html', doxyName)) 634ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao except: 635ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return None 636ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 637ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao best = None 638ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for m in doxyLineRefRE.finditer(f.read()): 639ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao line = int(m.group(1), 10) 640ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao dist = abs(line - target) 641ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if best is None or dist < best[0]: 642ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao best = (dist,'l'+m.group(1)) 643ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.close() 644ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if best is not None: 645ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return best[1] 646ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return None 647ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 648ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao### 649ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 650ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaonameAndSpecRefRE = re.compile(r"(C99|C90|C\+\+|H\&S) ((([0-9]+)(\.[0-9]+)*|\[[^]]+\])(p[0-9]+)?)") 651ea285162342df160e7860e26528bc7110bc6c0cdShih-wei LiaoloneSpecRefRE = re.compile(r" (([0-9]+)(\.[0-9]+){2,100}(p[0-9]+)?)") 652ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef scanFile(path, filename): 653ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao try: 654ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f = open(path) 655ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao except IOError: 656ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>sys.stderr,'WARNING: Unable to open:',path 657ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return 658ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 659ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for i,ln in enumerate(f): 660ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao ignore = set() 661ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for m in nameAndSpecRefRE.finditer(ln): 662ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = m.group(2) 663ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao name = m.group(1) 664ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if section.endswith('.'): 665ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = section[:-1] 666ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao yield RefItem(name, section, filename, path, i+1) 667ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao ignore.add(section) 668ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for m in loneSpecRefRE.finditer(ln): 669ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = m.group(1) 670ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if section.endswith('.'): 671ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section = section[:-1] 672ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if section not in ignore: 673ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao yield RefItem(None, section, filename, path, i+1) 674ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 675ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao### 676ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 677ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass SpecIndex: 678ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao @staticmethod 679ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def fromstring(str): 680ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Check for named sections 681ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if str[0] == '[': 682ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao assert ']' in str 683ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao secs = str[1:str.index(']')].split('.') 684ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao tail = str[str.index(']')+1:] 685ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if tail: 686ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao assert tail[0] == 'p' 687ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paragraph = int(tail[1:]) 688ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 689ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paragraph = None 690ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao indices = secs 691ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 692ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao secs = str.split('.') 693ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paragraph = None 694ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if 'p' in secs[-1]: 695ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao secs[-1],p = secs[-1].split('p',1) 696ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paragraph = int(p) 697ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao indices = map(int, secs) 698ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return SpecIndex(indices, paragraph) 699ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 700ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __init__(self, indices, paragraph=None): 701ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao assert len(indices)>0 702ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.indices = tuple(indices) 703ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.paragraph = paragraph 704ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 705ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __str__(self): 706ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao s = '.'.join(map(str,self.indices)) 707ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if self.paragraph is not None: 708ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao s += '.p%d'%(self.paragraph,) 709ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return s 710ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 711ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __repr__(self): 712ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return 'SpecIndex(%s, %s)'%(self.indices, self.paragraph) 713ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 714ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __cmp__(self, b): 715ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return cmp((self.indices,self.paragraph), 716ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (b.indices,b.paragraph)) 717ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 718ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __hash__(self): 719ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return hash((self.indices,self.paragraph)) 720ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 721ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __sub__(self, indices): 722ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def sub(a,b): 723ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao a = a or 0 724ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao b = b or 0 725ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return abs(a-b) 726ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return map(sub,self.indices,indices) 727ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 728ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoclass RefItem: 729ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __init__(self, name, section, filename, path, line): 730ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.name = name 731ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.section = SpecIndex.fromstring(section) 732ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.filename = filename 733ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.path = path 734ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.line = line 735ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 736ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __str__(self): 737ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if self.name is not None: 738ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return '%s %s'%(self.name, self.section) 739ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 740ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return '--- %s'%(self.section,) 741ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 742ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __repr__(self): 743ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return 'RefItem(%s, %r, "%s", "%s", %d)'%(self.name, 744ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.section, 745ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.filename, 746ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.path, 747ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao self.line) 748ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 749ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __cmp__(self, b): 750ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return cmp((self.name,self.section,self.filename,self.path,self.line), 751ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (b.name,b.section,self.filename,self.path,self.line)) 752ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 753ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def __hash__(self): 754ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return hash((self.name,self.section,self.filename,self.path,self.line)) 755ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 756ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao### 757ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 758ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef sorted(l): 759ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao l = list(l) 760ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao l.sort() 761ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return l 762ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 763ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef getRevision(path): 764ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao import subprocess 765ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao p = subprocess.Popen(['svn', 'info', path], 766ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao stdin=open('/dev/null','r'), 767ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao stdout=subprocess.PIPE) 768ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for ln in p.stdout.read(1024).split('\n'): 769ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if ln.startswith('Revision:'): 770ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return ln.split(':',1)[1].strip() 771ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return None 772ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 773ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef buildRefTree(references): 774ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao root = (None, {}, []) 775ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 776ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def getNode(keys): 777ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if not keys: 778ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return root 779ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao key,parent = keys[-1],getNode(keys[:-1]) 780ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao node = parent[1].get(key) 781ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if node is None: 782ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao parent[1][key] = node = (key, {}, []) 783ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return node 784ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 785ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for ref in references: 786ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao n = getNode((ref.name,) + ref.section.indices) 787ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao n[2].append(ref) 788ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 789ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao def flatten((key, children, data)): 790ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao children = sorted(map(flatten,children.values())) 791ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return (key, children, sorted(data)) 792ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 793ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao return flatten(root) 794ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 795ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef preorder(node,parents=(),first=True): 796ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (key,children,data) = node 797ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if first: 798ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao yield parents+(node,) 799ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for c in children: 800ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for item in preorder(c, parents+(node,)): 801ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao yield item 802ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 803ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaodef main(): 804ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao global options 805ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao from optparse import OptionParser 806ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao parser = OptionParser("usage: %prog [options] CLANG_ROOT <output-dir>") 807ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao parser.add_option("", "--debug", dest="debug", 808ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao help="Print extra debugging output", 809ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao action="store_true", 810ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao default=False) 811ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao (opts, args) = parser.parse_args() 812ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 813ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if len(args) != 2: 814ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao parser.error("incorrect number of arguments") 815ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 816ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao references = [] 817ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao root,outputDir = args 818ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if os.path.isdir(root): 819ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for (dirpath, dirnames, filenames) in os.walk(root): 820ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for filename in filenames: 821ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao name,ext = os.path.splitext(filename) 822ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if ext in ('.c', '.cpp', '.h', '.def'): 823ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao fullpath = os.path.join(dirpath, filename) 824ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao references.extend(list(scanFile(fullpath, filename))) 825ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 826ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao references.extend(list(scanFile(root, root))) 827ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 828ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao refTree = buildRefTree(references) 829ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 830ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao specs = {} 831ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for ref in references: 832ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao spec = specs[ref.name] = specs.get(ref.name,{}) 833ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao items = spec[ref.section] = spec.get(ref.section,[]) 834ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao items.append(ref) 835ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 836ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print 'Found %d references.'%(len(references),) 837ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 838ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if opts.debug: 839ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao pprint(refTree) 840ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 841ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao referencesPath = os.path.join(outputDir,'references.html') 842ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print 'Writing: %s'%(referencesPath,) 843ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f = open(referencesPath,'w') 844ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<html><head><title>clang: Specification References</title></head>' 845ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<body>' 846ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t<h2>Specification References</h2>' 847ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for i,node in enumerate(refTree[1]): 848ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao specName = node[0] or 'Unknown' 849ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<a href="#spec%d">%s</a><br>'%(i,specName) 850ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for i,node in enumerate(refTree[1]): 851ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao specName = node[0] or 'Unknown' 852ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<hr>' 853ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<a name="spec%d">'%(i,) 854ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<h3>Document: %s</h3>'%(specName or 'Unknown',) 855ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<table border="1" cellspacing="2" width="80%">' 856ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<tr><th width="20%">Name</th><th>References</th></tr>' 857ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao docData = kDocuments.get(specName) 858ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for path in preorder(node,first=False): 859ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if not path[-1][2]: 860ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao continue 861ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao components = '.'.join([str(p[0]) for p in path[1:]]) 862ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t<tr>' 863ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao tocEntry = None 864ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if docData is not None: 865ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao tocEntry = findClosestTOCEntry(docData, [p[0] for p in path[1:]]) 866ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if tocEntry is not None: 867ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao section,name,page = tocEntry 868ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # If section is exact print the TOC name 869ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if page is not None: 870ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao linkStr = '<a href="%s#page=%d">%s</a> (pg.%d)'%(docData[0],page,components,page) 871ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 872ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao linkStr = components 873ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if section == components: 874ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t\t<td valign=top>%s<br>%s</td>'%(linkStr,name) 875ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 876ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t\t<td valign=top>%s</td>'%(linkStr,) 877ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 878ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t\t<td valign=top>%s</td>'%(components,) 879ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t\t<td valign=top>' 880ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao for item in path[-1][2]: 881ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # XXX total hack 882ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao relativePath = item.path[len(root):] 883ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if relativePath.startswith('/'): 884ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao relativePath = relativePath[1:] 885ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # XXX this is broken, how does doxygen mangle w/ multiple 886ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # refs? Can we just read its map? 887ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao filename = os.path.basename(relativePath) 888ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao doxyName = '%s-source.html'%(filename.replace('.','_8'),) 889ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao # Grrr, why can't doxygen write line number references. 890ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao lineReference = findClosestLineReference(root,doxyName,item.line) 891ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if lineReference is not None: 892ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao linkStr = 'http://clang.llvm.org/doxygen/%s#%s'%(doxyName,lineReference) 893ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 894ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao linkStr = 'http://clang.llvm.org/doxygen/%s'%(doxyName,) 895ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao if item.section.paragraph is not None: 896ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paraText = ' (p%d)'%(item.section.paragraph,) 897ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao else: 898ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao paraText = '' 899ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f,'<a href="%s">%s:%d</a>%s<br>'%(linkStr,relativePath,item.line,paraText) 900ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t\t</td>' 901ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '\t</tr>' 902ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '</table>' 903ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '<hr>' 904ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, 'Generated: %s<br>'%(time.strftime('%Y-%m-%d %H:%M'),) 905ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, 'SVN Revision: %s'%(getRevision(root),) 906ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao print >>f, '</body>' 907ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao f.close() 908ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao 909ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liaoif __name__=='__main__': 910ea285162342df160e7860e26528bc7110bc6c0cdShih-wei Liao main() 911