Commit a531418964d8f3116f5c7d5f7a7966e963e75a70

Authored by Jay Berkenbilt
1 parent 78ad4ad1

TODO: more planning

Showing 1 changed file with 33 additions and 17 deletions
@@ -2,15 +2,14 @@ @@ -2,15 +2,14 @@
2 Next 2 Next
3 ==== 3 ====
4 4
5 -Priorities (could be for 10.x) 5 +In order:
  6 +* PointerHolder -> shared_ptr
6 * code formatting 7 * code formatting
  8 +* cmake
  9 +* ABI including --json default is latest
7 * json v2 10 * json v2
8 11
9 -Priorities for 11:  
10 -* cmake  
11 -* PointerHolder -> shared_ptr  
12 -* ABI  
13 -* --json default is latest 12 +Other (do in any order):
14 13
15 Misc 14 Misc
16 * Get rid of "ugly switch statements" in QUtil.cc -- replace with 15 * Get rid of "ugly switch statements" in QUtil.cc -- replace with
@@ -41,18 +40,19 @@ big commit to bring everything up to spec. Things to keep in mind: @@ -41,18 +40,19 @@ big commit to bring everything up to spec. Things to keep in mind:
41 40
42 * clang-format looks promising but is a bit of a moving target; need 41 * clang-format looks promising but is a bit of a moving target; need
43 to see if its output has been stable over the past few releases 42 to see if its output has been stable over the past few releases
44 - since the first one that can produce code the way I like it 43 + since the first one that can produce code the way I like it. I may
  44 + have to require a minimum clang-format version.
45 45
46 -* Try to match closely to what I have. At a minimum: 46 +* Ideas here aim for something similar to rust's defaults but with
  47 + adjustments to meet my existing style and preferences:
47 48
48 * 80 columns 49 * 80 columns
49 50
50 * 4-space indent (no tabs) 51 * 4-space indent (no tabs)
51 52
52 - * Probably want to stick with braces on separate lines to minimize  
53 - impact, but might consider braces on separate lines for classes  
54 - and functions with compact braces for flow control and exception  
55 - handling since that seems to be more popular these days 53 + * Compact braces. While this is a big departure from the past and
  54 + will create many changes, I have become accustomed to this style
  55 + and use it across my projects in other languages these days.
56 56
57 * No "bin packing" -- if arguments (constructor initializers, 57 * No "bin packing" -- if arguments (constructor initializers,
58 function arguments, etc.) don't fit on one line, do one argument 58 function arguments, etc.) don't fit on one line, do one argument
@@ -124,11 +124,27 @@ messes up searching for things. @@ -124,11 +124,27 @@ messes up searching for things.
124 For json v2: 124 For json v2:
125 125
126 * Make sure it is possible to serialize and deserializes a PDF to JSON 126 * Make sure it is possible to serialize and deserializes a PDF to JSON
127 - without loading the whole thing into memory. This is substantial. It  
128 - means we need sax-style parsing and handling so we can  
129 - handle/generate objects as we go. We'll have to be able to keep  
130 - track of keys for dictionary error checking. May want to add json to  
131 - large file tests. 127 + without loading the whole thing into memory.
  128 +
  129 + * As with a regular PDF, we can load everything into memory at once
  130 + except stream data.
  131 +
  132 + * I think we can do this by having the concept of generated values,
  133 + which we can make just be strings. We would have a JSON subclass
  134 + whose value is a lambda that gets called to generate output. When
  135 + we construct the JSON the stream values would be lambda functions
  136 + that generate the stream data.
  137 +
  138 + * When we parse the file, we'll have to have a way for the parser to
  139 + know that it should create a lambda that reads the data from the
  140 + file. I think this means we want something that parses JSON from
  141 + an input source. It would have to keep track of the offset and
  142 + length of a value from the input source and have a (probably a
  143 + lambda that it can call with a path) that would indicate whether
  144 + to store the value or whether to create a lambda that retrieves
  145 + it. We would have to keep a std::shared_ptr<InputSource> around.
  146 +
  147 + * Add json to the large file tests.
132 148
133 * Resolve differences between information shown in the json format vs. 149 * Resolve differences between information shown in the json format vs.
134 information shown with options like --check, --list-attachments, 150 information shown with options like --check, --list-attachments,