[video output=day513 member=cmuratori stream_platform=twitch stream_username=handmade_hero project=code title="Adding Raw Tokens and Alignment Point Parsing" vod_platform=youtube id=Rw0K9spDLrY annotator=Miblo]
[0:01][Recap and set the stage for the day getting our asset tagging file :parsing working][:"asset system" :speech]
[2:24][Demo our asset selection and alignment point editing :UI][:"asset system" :run]
[5:41][On the need to generate .hht files corresponding to .hha files][:"asset system" :run]
[9:08][Rebuilding .hht files][:"asset system" :speech]
[15:06][Parsing and rewriting out a consistently merged file][:parsing :speech]
[17:28][Writing out a new file while parsing in the original][:parsing :speech]
[19:46][Custom emoticons][:speech :trivia]
[22:24][Respecify GetToken() as GetTokenRaw(), preserving the ordinarily omitted whitespace and comments][:parsing]
[34:37][Newline[ref
    site=Wikipedia
    page=Newline
    url=https://en.wikipedia.org/wiki/Newline]][:research]
[39:48][Enable GetTokenRaw() to handle all end-of-line variants][:parsing]
[43:10][Introduce a new GetToken() which ignores spacing, end-of-line and comments, and make GetTokenRaw() preserve quotation marks around strings][:parsing]
[50:48][Add line and column numbers to the tokenizer's error messages, introducing PeekTokenRaw()][:"error handling" :parsing]
[1:06:30][Set up to copy already-tokenized input to a new file][:parsing]
[1:10:38][Add an "Align" identifier to the .hht format][:"asset system" :"file format" :parsing]
[1:23:51][Distinguish between rewriting .hht files and importing them for merging into an .hha files][:"asset system" :parsing]
[1:31:38][Augment the "Align" identifier definition syntax, and make ParseTopLevelBlock() store up alignment points][:"asset system" :"file format" :parsing]
[1:42:34][Improve the :"error handling" of ParseTopLevelBlock(), introducing RequireIntegerRange()][:"asset system" :parsing]
[1:48:14][Fix compile errors][:"asset system" :parsing]
[1:53:50][Q&A][:speech]
[1:54:52][@read_my_code][Q: How would you print an enum tag as a string in C?][:language]
[1:57:00][@said6289][Q: Is there a reason you don't (as far as I've seen) write bail out style functions to avoid too much nesting of if-else blocks?]
[1:58:41][@read_my_code][Q: Would you be willing to use :metaprogramming and templates to do that job? Just because you absolutely have to]
[1:59:07][@centhusiast][Q: Can the difference between the pointers have undefined behavior? I guess we use it for the count variable][:language]
[2:02:44][@cultofrig][Q: How do you feel about guidelines encouraging coupling enums with guards and label arrays (e.g. static assertions on min and max enum values and macros to establish enums creating corresponding label arrays)][:language]
[2:03:12][@Miblo][Q: If I understand right, @insobot only really echos stuff from HMN IRC to twitch IRC. However, the mapping between HMN/#hero and twitch/#handmade_hero is, I believe, hardcoded, so maybe it could readily be mapped the other way]
[2:03:26][@desuused][Q: Regarding enum strings, would you be happy if you could write procedural macros to solve this problem?][:language]
[2:04:12][@blamebauer][Q: As a student who is being taught C++ in college, can you explain to me why you think it is a terrible :language?]
[2:07:18][@programgamer][Q: Off-topic, but what is your stance on compile-time code generation like in D?][:language]
[2:07:34][@cultofrig][Q: About label arrays: arrays of the same size of the enum with strings corresponding to the label of each enum item (for contiguous enums) or couples of label and offset (for sparse valued enums)][:language]
[2:08:34][Wrap it up][:speech]
[/video]
