383 Commits

Author SHA1 Message Date
Dustin Oprea
04631a36c3 ifd_builder: Wrote encoding and allocation logic.
- All of the major design considerations have been covered (unless we
  overlooked something).

- Completely untested.
2018-04-24 05:12:30 -04:00
Dustin Oprea
d035d20098 ifd_builder: value is now guaranteed to be a byte-slice or child-IFD.
- Using an interface{} required us to validate the encapsulated type or
  risk forgetting to.

- AddTagsFromExisting now just copies the bytes verbatim if no value-
  resolver provided.
2018-04-23 23:58:37 -04:00
Dustin Oprea
098862d2f9 ifd_builder: Added NewIfdBuilderWithExistingIfd test. 2018-04-23 22:07:13 -04:00
Dustin Oprea
1107496d3c ifd_builder: AddChildIb now validates not previously added. 2018-04-23 21:59:42 -04:00
Dustin Oprea
4bea09dc78 ifd_builder: Can now build a complete chain from existing EXIF.
- ifd_builder:
  - We now validate that `builderTag` instances are either a byte array
    or a child Ifd before allowing to add.
  - Renamed `builderTag.valueBytes` to `builderTag.value` (it's not
    necessarily bytes).
  - `builderTag` now gets the child IFD name if representing a child
    IFD.
  - Added ability to dump structure to string slice.
  - Added NewIfdBuilderFromExistingChain to reconstruct whole chain
    from a read IFD chain (collection).
  - Wrote IB dumper.
  - Added structural tests.
  - Moved ifd_tag_entry types to separate file.

- tags_unknown: Unknown-type tags can now satisfy the `UnknownTagValue`
interface to return `[]byte`.
  - `IfdTagEntry.ValueBytes` automatically uses this. Else, error if not
    `[]byte` or `string`.

- ifd_enumerate
  - Now embed `ByteOrder` in `Ifd` (we otherwise require it to be passed
    a bit too often).

- Renamed some occurences of "IFD" to "IB" where an actual IB in order
  to not be confusing.
2018-04-23 04:53:51 -04:00
Dustin Oprea
50eafa98d6 ifd_enumerate: Added tests.
- Refactored (IfdTagEntry).ValueBytes() to handle managed undefined
  values.
2018-04-22 02:35:33 -04:00
Dustin Oprea
f1f23dca82 General intuitivity refactor. Imp'd (IfdTagEntry).ValueBytes().
- Added some assertions and constants. Renamed from variable so it'd be easy to
  tell if the byte-arrays, even though they come directly from the EXIF, which
  specific offsets they start at (so no remove for confusion during enumeration
  and building).
2018-04-21 20:54:56 -04:00
Dustin Oprea
ff7cfacd60 type_decode: Attempted and commented decoding MakerNote as EXIF. 2018-04-21 11:32:27 -04:00
Dustin Oprea
67a5e1f548 tags: Now read types.
- Required as the source-of-truth for writing.
2018-04-21 11:17:34 -04:00
Dustin Oprea
a909226514 type_decode: Implemented immediate remaining 'unknown'-type tags.
- Except for MakerNote. We're just going to have to skip that when
  writing, for now.
2018-04-21 03:40:33 -04:00
Dustin Oprea
00a5a5ad5b ifd_builder: Fixed so will compile. 2018-04-21 00:24:54 -04:00
Dustin Oprea
83c4834547 ifd_builder: Renamings. 2018-04-20 11:54:42 -04:00
Dustin Oprea
d4740ae5b5 Added TODOs. 2018-04-20 11:52:06 -04:00
Dustin Oprea
88333d9088 ifd_builder: Added main flow and allocation.
- We still need to implement the size calculations and tag encoding.
2018-04-20 11:45:32 -04:00
Dustin Oprea
f9267550eb ifd_builder: Added renaming tests. 2018-04-20 04:16:48 -04:00
Dustin Oprea
b5299427bc ifd_builder: Added tests for creating and adding. 2018-04-19 04:04:19 -04:00
Dustin Oprea
f99faad160 builder: Added full IFD-building functionality.
- There are still some placeholders for things that we need to figure
  out.

- Still needs tests.
2018-04-19 02:43:17 -04:00
Dustin Oprea
52dafd070a collect: Added a massive test for collected structure. 2018-04-19 01:02:03 -04:00
Dustin Oprea
679ea19d6c ifd_enumerate. The IFD tree and content can now be collected.
- Collected into a static structure in addition to scanned (which is
- only a visitor pattern).
- Test still has be finished.
2018-04-18 07:58:05 -04:00
Dustin Oprea
acbda6d1e1 ifd_enumerate: Refactored for reusability from a collector loop. 2018-04-18 06:28:12 -04:00
Dustin Oprea
33e3f2e4eb ifd: Renamed Ifd to IfdEnumerate. 2018-04-17 07:51:34 -04:00
Dustin Oprea
917e288adf Refactored byte-ordering to use standard binary.ByteOrder .
- ..rather than unnecessary custom implementation.
2018-04-17 06:18:31 -04:00
Dustin Oprea
53f74d18a1 type: Added encoding and complete encode/parse tests. 2018-04-17 06:06:51 -04:00
Dustin Oprea
5864c10c03 Added TODO items with writing objectives. 2018-04-16 03:40:30 -04:00
Dustin Oprea
f1521d4bac documentation: Added documentation and reader-tool for testing. 2018-04-16 01:57:30 -04:00
Dustin Oprea
42e678f6c2 type: Implemented workflow for undefined-type tags.
- Implemented for the straightforward tags. Noted what had to be done
  for the rest.
2018-04-16 00:30:39 -04:00
Dustin Oprea
172013e0f0 ifd: Implemented recursion. Refactored IFD seeking.
- tags.yaml: Uncommented previously-unhandleable tags.
2018-04-15 23:13:25 -04:00
Dustin Oprea
34fb63841d tags: Now use iterative YAML parser. 2018-04-15 20:16:32 -04:00
Dustin Oprea
a7bf17d299 assets: Updated tags.
- Wrote tool to produce complete knowledge of tags.
2018-04-15 13:40:24 -04:00
Dustin Oprea
1511788a4e ifd: Implemented several layers of value processing. Done.
- It's going to be laborious to write unit-tests for, though.
2018-04-15 01:25:30 -04:00
Dustin Oprea
315ca60f03 ifd: Formalized visitor implementation. 2018-04-14 20:32:02 -04:00
Dustin Oprea
05fe72f929 Added tag lookup. Only a minimal number of tags are currently known. 2018-04-14 20:04:35 -04:00
Dustin Oprea
685d801489 Initial commit.
- Parsing works.
- Not yet resolving values.
- Not yet resolving the actual IDs.
- Not yet able to make changes.
2018-04-14 14:38:35 -04:00