1# Change Log
2
3## [Unreleased][unreleased]
4
5### Thanks
6
7### Changed
8
9## 7.1.0 - 2021-11-04
10
11### Thanks
12
13- @nickelc
14- @Stargateur
15- @NilsIrl
16- @clonejo
17- @Strytyp
18- @schubart
19- @jihchi
20- @nipunn1313
21- @Gungy2
22- @Drumato
23- @Alexhuszagh
24- @Aehmlo
25- @homersimpsons
26- @dne
27- @epage
28- @saiintbrisson
29- @pymongo
30
31### Changed
32
33- documentation fixes
34- Ci fixes
35- the move to minimal-lexical for float parsing introduced bugs that cannot be resolved right now, so this version moves back to using the standard lib' parser. *This is a performance regression**. If you have specific requirements around float parsing, you are strongly encouraged to use [recognize_float](https://docs.rs/nom/latest/nom/number/complete/fn.recognize_float.html) and another library to convert to a f32 or f64
36
37### Added
38
39- alt now works with 1 elment tuples
40
41## 7.0.0 - 2021-08-21
42
43This release fixes dependency compilation issues and strengthen the minimum supported Rust version (MSRV) policy. This is also the first release without the macros that were used since nom's beginning.
44
45### Thanks
46
47- @djc
48- @homersimpsons
49- @lo48576
50- @myrrlyn
51- @RalXYZ
52- @nickelc
53- @cenodis
54
55### Added
56
57- `take_until1` combinator
58- more `to_owned` implementations
59- `fail`: a parser that always fail, useful as default condition in other combinators
60- text to number parsers: in the `character::streaming` and `character::complete` modules, there are parsers named `i8, u16, u32, u64, u128` and `u8 ,u16, u32, u64, u128` that recognize decimal digits and directly convert to a number in the target size (checking for max int size)
61
62### Removed
63
64- now that function combinators are the main way to write parsers, the old macro combinators are confusing newcomers. THey have been removed
65- the `BitSlice` input type from bitvec has been moved into the [nom-bitvec](https://crates.io/crates/nom-bitvec) crate. nom does not depend on bitvec now
66- regex parsers have been moved into the [nom-regex](https://crates.io/crates/nom-regex) crate. nom does not depend on regex now
67- `ErrorKind::PArseTo` was not needed anymore
68
69### Changed
70
71- relax trait bounds
72- some performance fixes
73- `split_at_position*` functions should now be guaranteed panic free
74- the `lexical-core` crate used for float parsing has now been replaced with `minimal-lexical`: the new crate is faster to compile, faster to parse, and has no dependencies
75
76### Fixed
77
78- infinite loop in `escaped` combinator
79- `many_m_n` now fails if min > max
80
81
82## 6.2.1 - 2021-06-23
83
84### Thanks
85
86This release was done thanks to the hard work of (by order of appearance in the commit list):
87
88- @homersimpsons
89
90### Fixed
91
92- fix documentation building
93
94## 6.2.0 - 2021-02-15
95
96### Thanks
97
98This release was done thanks to the hard work of (by order of appearance in the commit list):
99
100- @DavidKorczynski
101- @homersimpsons
102- @kornelski
103- @lf-
104- @lewisbelcher
105- @ronan-d
106- @weirane
107- @heymind
108- @marcianx
109- @Nukesor
110
111### Added
112
113- nom is now regularly fuzzed through the OSSFuzz project
114
115### Changed
116
117- lots of documentation fixes
118- relax trait bounds
119- workarounds for dependency issues with bitvec and memchr
120
121## 6.1.2 - 2021-02-15
122
123### Changed
124
125- Fix cargo feature usage in previous release
126
127## 6.1.1 - 2021-02-15
128
129### Thanks
130
131This release was done thanks to the hard work of (by order of appearance in the commit list):
132
133- @nickelc
134
135### Changed
136
137- Fix dependenciy incompatibilities: Restrict the bitvec->funty dependency to <=1.1
138
139## 6.1.0 - 2021-01-23
140
141### Thanks
142
143This release was done thanks to the hard work of (by order of appearance in the commit list):
144
145- @sachaarbonel
146- @vallentin
147- @Lucretiel
148- @meiomorphism
149- @jufajardini
150- @neithernut
151- @drwilco
152
153### Changed
154
155- readme and documentation fixes
156- rewrite of fold_many_m_n
157- relax trait bounds on some parsers
158- implement `std::error::Error` on `VerboseError`
159
160
161## 6.0.1 - 2020-11-24
162
163### Thanks
164
165This release was done thanks to the hard work of (by order of appearance in the commit list):
166
167- @Leonqn
168- @nickelc
169- @toshokan
170- @juchiast
171- @shssoichiro
172- @jlkiri
173- @chifflier
174- @fkloiber
175- @Kaoet
176- @Matthew Plant
177
178### Added
179
180- `ErrorConvert` implementation for `VerboseError`
181
182### Changed
183
184- CI fixes
185- `fold_many*` now accept `FnMut` for the accumulation function
186- relaxed input bounds on `length_count`
187
188# Fixed
189
190- documentation fixes
191- the `#[deprecated]` attribute was removed from traits because it does not compile anymore on nightly
192- bits and bytes combinators from the bits modules are now converted to use `FnMut`
193
194## 6.0.0 - 2020-10-31
195
196### Thanks
197
198This release was done thanks to the hard work of (by order of appearance in the commit list):
199- @chifflier
200- @shepmaster
201- @amerelo
202- @razican
203- @Palladinium
204- @0ndorio
205- Sebastian Zivota
206- @keruspe
207- @devonhollowood
208- @parasyte
209- @nnt0
210- @AntoineCezar
211- @GuillaumeGomez
212- @eijebong
213- @stadelmanma
214- @sphynx
215- @snawaz
216- @fosskers
217- @JamesHarrison
218- @calebsander
219- @jthornber
220- @ahmedcharles
221- @rljacobson
222- @benkay86
223- @georgeclaghorn
224- @TianyiShi2001
225- @shnewto
226- @alfriadox
227- @resistor
228- @myrrlyn
229- @chipsenkbeil
230- @ruza-net
231- @fanf2
232- @jameysharp
233- @FallenWarrior2k
234- @jmg-duarte
235- @ericseppanen
236- @hbina
237- Andreas Molzer
238- @nickelc
239- @bgourlie
240
241## Notable changes
242
243This release is a more polished version of nom 5, that came with a focus on
244function parsers, by relaxing the requirements: combinators will return a
245`impl FnMut` instead of `impl Fn`, allowing closures that change their context,
246and parsers can be any type now, as long as they implement the new `Parser` trait.
247That parser trait also comes with a few helper methods.
248
249Error management was often a pain point, so a lot of work went into making it easier.
250Now it integrates with `std:error::Error`, the `IResult::finish()` method allows you
251to convert to a more usable type, the `into` combinator can convert the error type
252if there's a `From` implementation, and there are more specific error traits like
253`ContextError` for the `context` combinator, and `FromExternalError` for `map_res`.
254While the `VerboseError` type and its `convert_error` function saw some changes,
255not many features ill be added to it, instead you are encouraged to build the error
256type that corresponds to your needs if you are building a language parser.
257
258This version also integrates with the excellent [bitvec](https://crates.io/crates/bitvec)
259crate for better bit level parsing. This part of nom was not great and a bit of a hack,
260so this will give better options for those parsers.
261
262At last, documentation! There are now more code examples, functions and macros that require
263specific cargo features are now clearly indicated, and there's a new `recipes` module
264containing example patterns.
265
266### Breaking changes
267
268- the minimal Rust version is now 1.44 (1.37 if building without the `alloc` or `std` features)
269- streaming parsers return the number of additional bytes they need, not the total. This was supposed to be the case everywhere, but some parsers were forgotten
270- removed the `regexp_macros` cargo feature
271- the `context` combinator is not linked to `ParseError` anymore, instead it come with its own `ContextError` trait
272- `Needed::Size` now contains a `NonZeroUsize`, so we can reduce the structure's size by 8 bytes. When upgrading, `Needed::Size(number)` can be replaced with `Needed::new(number)`
273- there is now a more general `Parser` trait, so parsers can be something else than a function. This trait also comes with combinator methods like `map`, `flat_map`, `or`. Since it is implemented on `Fn*` traits, it should not affect existing code too much
274- combinators that returned a `impl Fn` now return a `impl FnMut` to allow parser closures that capture some mutable value from the context
275- `separated_list` is now `separated_list0`
276- removed the deprecated `methods` module
277- removed the deprecated `whitespace` module
278- the default error type is now a struct (`nom::error::Error`) instead of a tuple
279- the `FromExternalError` allows wrapping the error returned by the function in the `map_res` combinator
280- renamed the `dbg!` macro to avoid conflicts with `std::dbg!`
281- `separated_list` now allows empty elements
282
283
284### Added
285
286- function version of regex parsers
287- `fill`: attempts to fill the output slice passed as argument
288- `success`: returns a value without consuming the input
289- `satisfy`: checks a predicate over the next character
290- `eof` function combinator
291- `consumed`: returns the produced value and the consumed input
292- `length_count` function combinator
293- `into`: converts a parser's output and error values if `From` implementations are available
294- `IResult::finish()`: converts a parser's result to `Result<(I, O), E>` by removing the distinction between `Error` and `Failure` and panicking on `Incomplete`
295- non macro versions of `u16`, `i32`, etc, with configurable endianness
296- `is_newline` function
297- `std::error::Error` implementation for nom's error types
298- recipes section of the documentation, outlining common patterns in nom
299- custom errors example
300- bitstream parsing with the `BitSlice` type from the bitvec crate
301- native endianness parsers
302- github actions for CI
303
304### Changed
305
306- allows lexical-core 0.7
307- number parsers are now generic over the input type
308- stabilized the `alloc` feature
309- `convert_error` accepts a type that derefs to `&str`
310- the JSON example now follows the spec better
311
312### Fixed
313- use `fold_many0c` in the `fold_many0` macro
314
315## 5.1.1 - 2020-02-24
316
317### Thanks
318
319- @Alexhuszagh for float fixes
320- @AlexanderEkdahl, @JoshOrndorff, @akitsu-sanae for docs fixes
321- @ignatenkobrain: dependency update
322- @derekdreery: `map` implementation for errors
323- @Lucretiel for docs fixes and compilation fixes
324- adytzu2007: warning fixes
325- @lo48576: error management fixes
326
327### Fixed
328
329- C symbols compilation errors due to old lexical-core version
330
331### Added
332
333- `Err` now has a `map` function
334
335### Changed
336
337- Make `error::context()` available without `alloc` feature
338
339## 5.1.0 - 2020-01-07
340
341### Thanks
342
343- @Hywan, @nickmooney, @jplatte, @ngortheone, @ejmg, @SirWindfield, @demurgos, @spazm, @nyarly, @guedou, @adamnemecek, for docs fixes
344- @Alxandr for error management bugfixes
345- @Lucretiel for example fixes and optimizations
346- @adytzu2007 for optimizations
347- @audunhalland for utf8 fixes
348
349### Fixed
350
351- panic in `convert_error`
352- `compile_error` macro usage
353
354### Added
355
356- `std::error::Error`, `std::fmt::Display`, `Eq`, `ToOwned` implementations for errors
357- inline attribute for  `ToUsize`
358
359### Changed
360
361- `convert_error` optimization
362- `alt` optimization
363
364## 5.0.1 - 2019-08-22
365
366### Thanks
367
368- @waywardmonkeys, @phaazon, @dalance for docs fixes
369- @kali for `many0_m_n` fixes
370- @ia0 for macros fixes
371
372### Fixed
373
374- `many0_m_n` now supports the n=1 case
375- relaxed trait requirements in `cut`
376- `peek!` macro reimplementation
377- type inference in `value!`
378
379## 5.0.0 - 2019-06-24
380
381This version comes with a complete rewrite of nom internals to use functions as a base
382for parsers, instead of macros. Macros have been updated to use functions under
383the hood, so that most existing parsers will work directly or require minimal changes.
384
385The `CompleteByteSlice` and `CompleteStr` input types were removed. To get different
386behaviour related to streaming or complete input, there are different versions of some
387parsers in different submodules, like `nom::character::streaming::alpha0` and
388`nom::character::complete::alpha0`.
389
390The `verbose-errors` feature is gone, now the error type is decided through a generic
391bound. To get equivalent behaviour to `verbose-errors`, check out `nom::error::VerboseError`
392
393### Thanks
394
395- @lowenheim helped in refactoring and error management
396- @Keruspe helped in refactoring and fixing tests
397- @pingiun, @Songbird0, @jeremystucki, @BeatButton, @NamsooCho, @Waelwindows, @rbtcollins, @MarkMcCaskey for a lot of help in rewriting the documentation and adding code examples
398- @GuillaumeGomez for documentation rewriting and checking
399- @iosmanthus for bug fixes
400- @lo48576 for error management fixes
401- @vaffeine for macros visibility fixes
402- @webholik and @Havvy for `escaped` and `escaped_transform` fixes
403- @proman21 for help on porting bits parsers
404
405### Added
406
407- the `VerboseError` type accumulates position info and error codes, and can generate a trace with span information
408- the `lexical-core` crate is now used by default (through the `lexical` compilation feature) to parse floats from text
409- documentation and code examples for all functions and macros
410
411### Changed
412
413- nom now uses functions instead of macros to generate parsers
414- macros now use the functions under the hood
415- the minimal Rust version is now 1.31
416- the verify combinator's condition function now takes its argument by reference
417- `cond` will now return the error of the parser instead of None
418- `alpha*`, `digit*`, `hex_digit*`, `alphanumeric*` now recognize only ASCII characters
419
420### Removed
421
422- deprecated string parsers (with the `_s` suffix), the normal version can be used instead
423- `verbose-errors` is not needed anymore, now the error type can be decided when writing the parsers, and parsers provided by nom are generic over the error type
424- `AtEof`, `CompleteByteSlice` and `CompleteStr` are gone, instead some parsers are specialized to work on streaming or complete input, and provided in different modules
425- character parsers that were aliases to their `*1` version: eol, alpha, digit, hex_digit, oct_digit, alphanumeric, space, multispace
426- `count_fixed` macro
427- `whitespace::sp` can be replaced by `character::complete::multispace0`
428- method combinators are now in the nom-methods crate
429- `take_until_either`, `take_until_either1`, `take_until_either_and_consume` and `take_until_either_and_consume1`: they can be replaced with `is_not` (possibly combined with something else)
430- `take_until_and_consume`, `take_until_and_consume1`: they can be replaced with `take_until` combined with `take`
431- `sized_buffer` and `length_bytes!`: they can be replaced with the `length_data` function
432- `non_empty`, `begin` and `rest_s` function
433- `cond_reduce!`, `cond_with_error!`, `closure!`, `apply`, `map_res_err!`, `expr_opt!`, `expr_res!`
434- `alt_complete`, `separated_list_complete`, `separated_nonempty_list_complete`
435
436## 4.2.3 - 2019-03-23
437
438### Fixed
439
440- add missing `build.rs` file to the package
441- fix code comparison links in changelog
442
443## 4.2.2 - 2019-03-04
444
445### Fixed
446
447- regression in do_parse macro import for edition 2018
448
449## 4.2.1 - 2019-02-27
450
451### Fixed
452
453- macro expansion error in `do_parse` due to `compile_error` macro usage
454
455## 4.2.0 - 2019-01-29
456
457### Thanks
458
459- @JoshMcguigan for unit test fixes
460- @oza for documentation fixes
461- @wackywendell for better error conversion
462- @Zebradil for documentation fixes
463- @tsraom for new combinators
464- @hcpl for minimum Rust version tests
465- @KellerFuchs for removing some unsafe uses in float parsing
466
467### Changed
468
469- macro import in edition 2018 code should work without importing internal macros now
470- the regex parsers do not require the calling code to have imported the regex crate anymore
471- error conversions are more ergonomic
472- method combinators are now deprecated. They might be moved to a separate crate
473- nom now specifies Rust 1.24.1 as minimum version. This was already the case before, now it is made explicit
474
475### Added
476
477- `many0_count` and `many1_count` to count applications of a parser instead of
478accumulating its results in a `Vec`
479
480### Fixed
481
482- overflow in the byte wrapper for bit level parsers
483- `f64` parsing does not use `transmute` anymore
484
485## 4.1.1 - 2018-10-14
486
487### Fixed
488
489- compilation issue in verbose-errors mode for `add_return_error`
490
491## 4.1.0 - 2018-10-06
492
493### Thanks
494
495- @xfix for fixing warnings, simplifying examples and performance fixes
496- @dvberkel for documentation fixes
497- @chifflier for fixing warnings
498- @myrrlyn for dead code elimination
499- @petrochenkov for removing redundant test macros
500- @tbelaire for documentation fixes
501- @khernyo for fixing warnings
502- @linkmauve for documentation fixes
503- @ProgVal for documentation fixes, warning fixes and error management
504- @Nemo157 for compilation fixes
505- @RReverser for documentation fixes
506- @xpayn for fixing warnings
507- Blas Rodriguez Irizar for documentation fixes
508- @badboy for documentation fixes
509- @kyrias for compilation fixes
510- @kurnevsky for the `rest_len` parser
511- @hjr3 for new documentation examples
512- @fengalin for error management
513- @ithinuel for the pcap example project
514- @phaazon for documentation fixes
515- @juchiast for documentation fixes
516- @jrakow for the `u128` and `i128` parsers
517- @smarnach for documentation fixes
518- @derekdreery for `pub(crate)` support
519- @YaLTeR for `map_res_err!`
520
521### Added
522
523- `rest_len` parser, returns the length of the remaining input
524- `parse_to` has its own error code now
525- `u128` and `i128` parsers in big and little endian modes
526- support for `pub(crate)` syntax
527- `map_res_err!` combinator that appends the error of its argument function in verbose errors mode
528
529### Fixed
530
531- lots of unused imports warnings were removed
532- the `bytes` combinator was not compiling in some cases
533- the big and little endian combinators now work without external imports
534- CI is now faster and uses less cache
535- in `add_return_error`, the provided error code is now evaluated only once
536
537### Changed
538
539- `fold_many1` will now transmit a `Failure` instead of transforming it to an `Error`
540- `float` and `double` now work on all of nom's input types (`&[u8]`, `&str`, `CompleteByteSlice`, `CompleteStr` and any type that implements the required traits). `float_s` and `double_s` got the same modification, but are now deprecated
541- `CompleteByteSlice` and `CompleteStr` get a small optimization by inlining some functions
542
543
544## 4.0.0 - 2018-05-14
545
546### Thanks
547
548- @jsgf for the new `AtEof` trait
549- @tmccombs for fixes on `escaped*` combinators
550- @s3bk for fixes around non Copy input types and documentation help
551- @kamarkiewicz for fixes to no_std and CI
552- @bheisler for documentation and examples
553- @target-san for simplifying the `InputIter` trait for `&[u8]`
554- @willmurphyscode for documentation and examples
555- @Chaitanya1416 for typo fixes
556- @fflorent for `input_len()` usage fixes
557- @dbrgn for typo fixes
558- @iBelieve for no_std fixes
559- @kpp for warning fixes and clippy fixes
560- @keruspe for fixes on FindToken
561- @dtrebbien for fixes on take_until_and_consume1
562- @Henning-K for typo fixes
563- @vthriller for documentation fixes
564- @federicomenaquintero and @veprbl for their help fixing the float parsers
565- @vmchale for new named_args versions
566- @hywan for documentation fixes
567- @fbenkstein for typo fixes
568- @CAD97 for catching missing trait implementations
569- @goldenlentils for &str optimizations
570- @passy for typo fixes
571- @ayrat555 for typo fixes
572- @GuillaumeGomez for documentation fixes
573- @jrakow for documentation fixes and fixes for `switch!`
574- @phlosioneer for documentation fixes
575- @creativcoder for typo fixes
576- @derekdreery for typo fixes
577- @lucasem for implementing `Deref` on `CompleteStr` and `CompleteByteSlice`
578- @lowenheim for `parse_to!` fixes
579- @myrrlyn for trait fixes around `CompleteStr` and `CompleteByteSlice`
580- @NotBad4U for fixing code coverage analysis
581- @murarth for code formatting
582- @glandium for fixing build in no_std
583- @csharad for regex compatibility with `CompleteStr`
584- @FauxFaux for implementing `AsRef<str>` on `CompleteStr`
585- @jaje for implementing `std::Error` on `nom:Err`
586- @fengalin for warning fixes
587- @@khernyo for doc formatting
588
589Special thanks to @corkami for the logo :)
590
591### Breaking changes
592
593- the `IResult` type now becomes a `Result` from the standard library
594- `Incomplete` now returns the additional data size needed, not the total data size needed
595- verbose-errors is now a superset of basic errors
596- all the errors now include  the related input slice
597- the arguments from `error_position` and other such macros were swapped to be more consistent with the rest of nom
598- automatic error conversion: to fix error type inference issues, a custom error type must now implement `std::convert::From<u32>`
599- the `not!` combinator returns unit `()`
600- FindToken's calling convention was swapped
601- the `take_*` combinators are now more coherent and stricter, see commit 484f6724ea3ccb for more information
602- `many0` and other related parsers will now return `Incomplete` if the reach the end of input without an error of the child parser. They will also return `Incomplete` on an empty input
603- the `sep!` combinator for whitespace only consumes whitespace in the prefix, while the `ws!` combinator takes care of consuming the remaining whitespace
604
605### Added
606
607- the `AtEof` trait for input type: indicate if we can get more input data later (related to streaming parsers and `Incomplete` handling)
608- the `escaped*` parsers now support the `&str`input type
609- the `Failure` error variant represents an unrecoverable error, for which `alt` and other combinators will not try other branches. This error means we got in the right part of the code (like, a prefix was checked correctly), but there was an error in the following parts
610- the `CompleteByteSlice` and `CompleteStr` input types consider there will be no more refill of the input. They fixed the `Incomplete` related issues when we have all of the data
611- the `exact!()` combinator will fail if we did not consume the whole input
612- the `take_while_m_n!` combinator will match a specified number of characters
613- `ErrorKind::TakeUntilAndConsume1`
614- the `recognize_float` parser will match a float number's characters, but will not transform to a `f32` or `f64`
615- `alpha` and other basic parsers are now much stricter about partial inputs. We also introduce the  `*0` and `*1` versions of those parsers
616- `named_args` can now specify the input type as well
617- `HexDisplay` is now implemented for `&str`
618- `alloc` feature
619- the `InputTakeAtposition` trait allows specialized implementations of parsers like `take_while!`
620
621### Removed
622
623- the producers and consumers were removed
624- the `error_code` and `error_node` macros are not used anymore
625
626### Fixed
627
628- `anychar!` now works correctly with multibyte characters
629- `take_until_and_consume1!` no longer results in "no method named \`find_substring\`" and "no method named \`slice\`" compilation errors
630- `take_until_and_consume1!` returns the correct Incomplete(Needed) amount
631- `no_std` compiles properly, and nom can work with `alloc` too
632- `parse_to!` now consumes its input
633
634### Changed
635
636- `alt` and other combinators will now clone the input if necessary. If the input is already `Copy` there is no performance impact
637- the `rest` parser now works on various input types
638- `InputIter::Item` for `&[u8]` is now a `u8` directly, not a reference
639- we now use the `compile_error` macro to return a compile time error if there was a syntax issue
640- the permutation combinator now supports optional child parsers
641- the float numbers parsers have been refactored to use one common implementation that is nearly 2 times faster than the previous one
642- the float number parsers now accept more variants
643
644
645## 3.2.1 - 2017-10-27
646
647### Thanks
648
649- @ordian for `alt_complete` fixes
650- @friedm for documentation fixes
651- @kali for improving error management
652
653### Fixed
654
655- there were cases where `alt_complete` could return `Incomplete`
656
657### Added
658
659- an `into_error_kind` method can be used to transform any error to a common value. This helps when the library is included multiple times as dependency with different feature sets
660
661
662## 3.2.0 - 2017-07-24
663
664### Thanks
665
666- @jedireza for documentation fixes
667- @gmorenz for the `bytes` combinator
668- @meh for character combinator fixes for UTF-8
669- @jethrogb for avoiding move issues in `separated_list`
670
671### Changed
672
673- new layout for the main page of documentation
674- `anychar` can now work on any input type
675- `length_bytes` is now an alias for `length_data`
676
677### Fixed
678
679- `one_of`, `none_of` and `char` will now index correctly UTF-8 characters
680- the `compiler_error` macro is now correctly exported
681
682
683### Added
684
685- the `bytes` combinator transforms a bit stream back to a byte slice for child parsers
686
687## 3.1.0 - 2017-06-16
688
689### Thanks
690
691- @sdroege: implementing be_i24 and le_i24
692- @Hywan: integrating faster substring search using memchr
693- @nizox: fixing type issues in bit stream parsing
694- @grissiom: documentation fixes
695- @doomrobo: implementing separated_list_complete and separated_nonempty_list_complete
696- @CWood1: fixing memchr integration in no_std
697- @lu_zero: integrating the compiler_error crate
698- @dtolnay: helping debug a type inference issue in map
699
700### Changed
701
702- memchr is used for substring search if possible
703- if building on nightly, some common syntax errors will display a specific error message. If building no stable, display the documentation to activate those messages
704- `count` no longer preallocates its vector
705
706### Fixed
707
708- better type inference in alt_complete
709- `alt` should now work with whitespace parsing
710- `map` should not make type inference errors anymore
711
712### Added
713
714- be_i24 and le_i24, parsing big endian and little endian signed 24 bit integers
715- `separated_list_complete` and `separated_nonempty_list_complete` will treat incomplete from sub parsers as error
716
717## 3.0.0 - 2017-05-12
718
719### Thanks
720
721- Chris Pick for some `Incomplete` related refactors
722- @dbrgn for documentation fixes
723- @valarauca for adding `be_u24`
724- @ithinuel for usability fixes
725- @evuez for README readability fixes and improvements to `IResult`
726- @s3bk for allowing non-`Copy` types as input
727- @keruspe for documentation fixes
728- @0xd34d10cc for trait fixes on `InputIter`
729- @sdleffler for lifetime shenanigans on `named_args`
730- @chengsun for type inference fixes in `alt`
731- @iBelieve for adding str to no_std
732- @Hywan for simplifying code in input traits
733- @azerupi for extensive documentation of `alt` and `alt_complete`
734
735### Breaking Changes
736
737- `escaped`, `separated_list` and `separated_nonempty_list` can now return `Incomplete` when necessary
738- `InputIter` does not require `AsChar` on its `Item` type anymore
739- the `core` feature that was putting nom in `no_std` mode has been removed. There is now a `std` feature, activated by default. If it is not activated, nom is in `no_std`
740- in `verbose-errors` mode, the error list is now stored in a `Vec` instead of a box based linked list
741- `chain!` has finally been removed
742
743### Changed
744
745- `Endianness` now implements `Debug`, `PartialEq`, `Eq`, `Clone` and `Copy`
746- custom input types can now be cloned if they're not `Copy`
747- the infamous 'Cannot infer type for E' error should happen less often now
748- `str` is now available in `no_std` mode
749
750### Fixed
751
752- `FileProducer` will be marked as `Eof` on full buffer
753- `named_args!` now has lifetimes that cannot conflict with the lifetimes from other arguments
754
755### Added
756
757- `be_u24`: big endian 24 bit unsigned integer parsing
758- `IResult` now has a `unwrap_or` method
759
760
761## 2.2.1 - 2017-04-03
762
763### Thanks
764
765- @Victor-Savu for formatting fixes in the README
766- @chifflier for detecting and fixing integer overflows
767- @utkarshkukreti for some performance improvements in benchmarks
768
769### Changed
770
771- when calculating how much data is needed in `IResult::Incomplete`, the addition could overflow (it is stored as a usize). This would apparently not result in any security vulnerability on release code
772
773## 2.2.0 - 2017-03-20
774
775### Thanks
776
777- @seppo0010 for fixing `named_args`
778- @keruspe for implementing or() on `IResult`, adding the option of default cases in `switch!`, adding support for `cargo-travis`
779- @timlyo for documentation fixes
780- @JayKickliter for extending `hex_u32`
781- @1011X for fixing regex integration
782- @Kerollmops for actually marking `chain!` as deprecated
783- @joliss for documentation fixes
784- @utkarshkukreti for tests refactoring and performance improvement
785- @tmccombs for documentation fixes
786
787### Added
788
789- `IResult` gets an `or()` method
790- `take_until1`, `take_until_and_consume1`, `take_till1!` and `take_till1_s!` require at least 1 character
791
792### Changed
793
794- `hex_u32` accepts uppercase digits as well
795- the character based combinators leverage the input traits
796- the whitespace parsers now work on &str and other types
797- `take_while1` returns `Incomplete` on empty input
798- `switch!` can now take a default case
799
800### Fixed
801
802- `named_args!` now imports `IResult` directly
803- the upgrade to regex 0.2 broke the regex combinators, they work now
804
805## 2.1.0 - 2017-01-27
806
807### Thanks
808
809- @nickbabcock for documentation fixes
810- @derekdreery for documentation fixes
811- @DirkyJerky for documentation fixes
812- @saschagrunert for documentation fixes
813- @lucab for documentation fixes
814- @hyone for documentation fixes
815- @tstorch for factoring `Slice`
816- @shepmaster for adding crate categories
817- @antoyo for adding `named_args!`
818
819### Added
820
821- `verify!` uses a first parser, then applies a function to check that its result satisfies some conditions
822- `named_args!` creates a parser function that can accept other arguments along with the input
823- `parse_to!` will use the `parse` method from `FromStr` to parse a value. It will automatically translate the input to a string if necessary
824- `float`, `float_s`, `double`, `double_s` can recognize floating point numbers in text
825
826### Changed
827
828- `escaped!` will now return `Incomplete` if needed
829- `permutation!` supports up to 20 child parsers
830
831## 2.0.1 - 2016-12-10
832
833Bugfix release
834
835*Warning*: there is a small breaking change, `add_error!` is renamed to `add_return_error!`. This was planned for the 2.0 release but was forgotten. This is a small change in a feature that not many people use, for a release that is not yet widely in use, so there will be no 3.0 release for that change.
836
837### Thanks
838
839- @nickbabcock for catching and fixing the `add_error!` mixup
840- @lucab for documentation fixes
841- @jtdowney for noticing that `tag_no_case!` was not working at all for byte slices
842
843### Fixed
844
845- `add_error!` has been renamed to `add_return_error!`
846- the `not!` combinator now accepts functions
847- `tag_no_case!` is now working as accepted (before, it accepted everything)
848
849
850## 2.0 - 2016-11-25
851
852The 2.0 release is one of the biggest yet. It was a good opportunity to clean up some badly named combinators and fix invalid behaviours.
853
854Since this version introduces a few breaking changes, an [upgrade documentation](https://github.com/Geal/nom/blob/master/doc/upgrading_to_nom_2.md) is available, detailing the steps to fix the most common migration issues. After testing on a set of 30 crates, most of them will build directly, a large part will just need to activate the "verbose-errors" compilation feature. The remaining fixes are documented.
855
856This version also adds a lot of interesting features, like the permutation combinator or whitespace separated formats support.
857
858### Thanks
859
860- @lu-zero for license help
861- @adamgreig for type inference fixes
862- @keruspe for documentation and example fixes, for the `IResult => Result` conversion work, making `AsChar`'s method more consistent, and adding `many_till!`
863- @jdeeny for implementing `Offset` on `&str`
864- @vickenty for documentation fixes and his refactoring of `length_value!` and `length_bytes!`
865- @overdrivenpotato for refactoring some combinators
866- @taralx for documentation fixes
867- @keeperofdakeys for fixing eol behaviour, writing documentation and adding `named_attr!`
868- @jturner314 for writing documentation
869- @bozaro for fixing compilation errors
870- @uniphil for adding a `crates.io` badge
871- @badboy for documentation fixes
872- @jugglerchris for fixing `take_s!`
873- @AndyShiue for implementing `Error` and `Display` on `ErrorKind` and detecting incorrect UTF-8 string indexing
874
875### Added
876
877- the "simple" error management system does not accumulates errors when backtracking. This is a big perf gain, and is activated by default in nom 2.0
878- nom can now work on any type that implement the traits defined in `src/traits.rs`: `InputLength`, `InputIter`, `InputTake`, `Compare`, `FindToken`, `FindSubstring`, `Slice`
879- the documentation from Github's wiki has been moved to the `doc/` directory. They are markdown files that you can build with [cargo-external-doc](https://crates.io/crates/cargo-external-doc)
880- whitespace separated format support: with the `ws!` combinator, you can automatically introduce whitespace parsers between all parsers and combinators
881- the `permutation!` combinator applies its child parsers in any order, as long as they all succeed once, and return a tuple of the results
882- `do_parse!` is a simpler alternative to `chain!`, which is now deprecated
883- you can now transform an `IResult` in a `std::result::Result`
884- `length_data!` parses a length, and returns a subslice of that length
885- `tag_no_case!` provides case independent comparison. It works nicely, without any allocation, for ASCII strings, but for UTF-8 strings, it defaults to an unsatisfying (and incorrect) comparison by lowercasing both strings
886- `named_attr!` creates functions like `named!` but can add attributes like documentation
887- `many_till!` applies repeatedly its first child parser until the second succeeds
888
889### Changed
890
891- the "verbose" error management that was available in previous versions is now activated by the "verbose-errors" compilation feature
892- code reorganization: most of the parsers were moved in separate files to make the source easier to navigate
893- most of the combinators are now independent from the input type
894- the `eof` function was replaced with the `eof!` macro
895- `error!` and `add_error!` were replaced with `return_error!` and `add_return_error!` to fix the name conflict with the log crate
896- the `offset()` method is now in the `Offset` trait
897- `length_value!` has been renamed to `length_count!`. The new `length_value!` selects a slice and applies the second parser once on that slice
898- `AsChar::is_0_to_9` is now `AsChar::is_dec_digit`
899- the combinators with configurable endianness now take an enum instead of a boolean as parameter
900
901### Fixed
902- the `count!`, `count_fixed!` and `length_*!` combinator calculate incomplete data needs correctly
903- `eol`, `line_ending` and `not_line_ending` now have a consistent behaviour that works correctly with incomplete data
904- `take_s!` didn't correctly handle the case when the slice is exactly the right length
905
906## 1.2.4 - 2016-07-20
907
908### Thanks
909- @Phlosioneer for documentation fixes
910- @sourrust for fixing offsets in `take_bits!`
911- @ChrisMacNaughton for the XFS crate
912- @pwoolcoc for `rest_s`
913- @fitzgen for more `IResult` methods
914- @gtors for the negative lookahead feature
915- @frk1 and @jeandudey for little endian float parsing
916- @jethrogb for fixing input usage in `many1`
917- @acatton for beating me at nom golf :D
918
919### Added
920- the `rest_s` method on `IResult` returns the remaining `&str` input
921- `unwrap_err` and `unwrap_inc` methods on `IResult`
922- `not!` will peek at the input and return `Done` if the underlying parser returned `Error` or `Incomplete`, without consuming the input
923- `le_f32` and `le_f64` parse little endian floating point numbers (IEEE 754)
924-
925
926### Fixed
927- documentation fixes
928- `take_bits!` is now more precise
929- `many1` inccorectly used the `len` function instead of `input_len`
930- the INI parser is simpler
931- `recognize!` had an early `return` that is removed now
932
933## 1.2.3 - 2016-05-10
934
935### Thanks
936- @lu-zero for the contribution guidelines
937- @GuillaumeGomez for fixes on `length_bytes` and some documentation
938- @Hywan for documentation and test fixes
939- @Xirdus for correct trait import issues
940- @mspiegel for the new AST example
941- @cholcombe973 for adding the `cond_with_error!` combinator
942- @tstorch for refactoring `many0!`
943- @panicbit for the folding combinators
944- @evestera for `separated_list!` fixes
945- @DanielKeep for correcting some enum imports
946
947### Added
948- Regular expression combinators starting with `re_bytes_` work on byte slices
949- example parsing arithmetic expressions to an AST
950- `cond_with_error!` works like `cond!` but will return `None` if the condition is false, and `Some(value)` if the underlying parser succeeded
951- `fold_many0!`, `fold_many1!` and `fold_many_m_n!` will take a parser, an initial value and a combining function, and fold over the successful applications of the parser
952
953### Fixed
954- `length_bytes!` converts the result of its child parser to usize
955- `take_till!` now imports `InputLength` instead of assuming it's in scope
956- `separated_list!` and `separated_nonempty_list!` will not consume the separator if there's no following successfully parsed value
957- no more warnings on build
958
959### Changed
960- simpler implementation of `many0!`
961
962## 1.2.2 - 2016-03-09
963
964### Thanks
965- @conradev for fixing `take_until_s!`
966- @GuillaumeGomez for some documentation fixes
967- @frewsxcv for some documentation fixes
968- @tstorch for some test refactorings
969
970### Added
971- `nom::Err` now implements `std::error::Error`
972
973### Fixed
974- `hex_u32` does not parses more than 8 chars now
975- `take_while!` and `take_while1!` will not perturb the behaviour of `recognize!` anymore
976
977## 1.2.1 - 2016-02-23
978
979### Thanks
980- @sourrust for adding methods to `IResult`
981- @tstorch for the test refactoring, and for adding methods to `IResult` and `Needed`
982- @joelself for fixing the method system
983
984### Added
985
986- mapping methods over `IResult` and `Needed`
987
988### Changed
989
990- `apply_rf` is renamed to `apply_m`. This will not warrant a major version, since it is part missing from the methods feture added in the 1.2.0 release
991- the `regexp_macros` feature that used `regex!` to precompile regular expressions has been replaced by the normal regex engine combined with `lazy_static`
992
993### Fixed
994
995- when a parser or combinator was returning an empty buffer as remaining part, it was generating one from a static empty string. This was messing with buffer offset calculation. Now, that empty slice is taken like this: `&input[input.len()..]`.
996- The `regexp_macros` and `no_std` feature build again and are now tested with Travis CI
997
998## 1.2.0 - 2016-02-08
999
1000### Thanks
1001- @zentner-kyle for type inference fixes
1002- @joelself for his work on `&str` parsing and method parsers
1003- @GuillaumeGomez for implementing methods on `IResult`
1004- @dirk for the `alt_complete!` combinator
1005- @tstorch for a lot of refactoring work and unit tests additions
1006- @jansegre for the hex digit parsers
1007- @belgum for some documentation fixes
1008- @lwandrebeck for some documentation fixes and code fixes in `hex_digit`
1009
1010### Added
1011- `take_until_and_consume_s!` for consumption of string data until a tag
1012- more function patterns in `named!`. The error type can now be specified
1013- `alt_complete!` works like the `alt!` combinator, but tries the next branch if the current one returned `Incomplete`, instead of returning directly
1014- more unit tests for a lot of combinators
1015- hexadecimal digit parsers
1016- the `tuple!` combinator takes a list of parsers as argument, and applies them serially on the input. If all of them are successful, it willr eturn a tuple accumulating all the values. This combinator will (hopefully) replace most uses of `chain!`
1017- parsers can now be implemented as a method for a struct thanks to the `method!`, `call_m!` and `apply_rf!` combinators
1018
1019### Fixed
1020- there were type inference issues in a few combinators. They will now be easier to compile
1021- `peek!` compilation with bare functions
1022- `&str` parsers were splitting data at the byte level, not at the char level, which can result in inconsistencies in parsing UTF-8 characters. They now use character indexes
1023- some method implementations were missing on `IResult<I,O,E>` (with specified error type instead of implicit)
1024
1025## 1.1.0 - 2016-01-01
1026
1027This release adds a lot of features related to `&str` parsing. The previous versions
1028were focused on `&[u8]` and bit streams parsing, but there's a need for more text
1029parsing with nom. The parsing functions like `alpha`, `digit` and others will now
1030accept either a `&[u8]` or a `&str`, so there is no breaking change on that part.
1031
1032There are also a few performance improvements and documentation fixes.
1033
1034### Thanks
1035- @Binero for pushing the work on `&str` parsing
1036- @meh for fixing `Option` and `Vec` imports
1037- @hoodie for a documentation fix
1038- @joelself for some documentation fixes
1039- @vberger for his traits magic making nom functions more generic
1040
1041### Added
1042
1043- string related parsers: `tag_s!`, `take_s!`, `is_a_s!`, `is_not_s!`, `take_while_s!`, `take_while1_s!`, `take_till_s!`
1044- `value!` is a combinator that always returns the same value. If a child parser is passed as second argument, that value is returned when the child parser succeeds
1045
1046### Changed
1047
1048- `tag!` will now compare even on partial input. If it expects "abcd" but receives "ef", it will now return an `Error` instead of `Incomplete`
1049- `many0!` and others will preallocate a larger vector to avoid some copies and reallocations
1050- `alpha`, `digit`, `alphanumeric`, `space` and `multispace` now accept as input a `&[u8]` or a `&str`. Additionally, they return an error if they receive an empty input
1051- `take_while!`, `take_while1!`, `take_while_s!`, `take_while1_s!` wilreturn an error on empty input
1052
1053### Fixed
1054
1055- if the child parser of `many0!` or `many1!` returns `Incomplete`, it will return `Incomplete` too, possibly updating the needed size
1056- `Option,` `Some`, `None` and `Vec` are now used with full path imports
1057
1058## 1.0.1 - 2015-11-22
1059
1060This releases makes the 1.0 version compatible with Rust 1.2 and 1.3
1061
1062### Thanks
1063- @steveklabnik for fixing lifetime issues in Producers and Consumers
1064
1065## 1.0.0 - 2015-11-16
1066
1067Stable release for nom. A lot of new features, a few breaking changes
1068
1069### Thanks
1070- @ahenry for macro fixes
1071- @bluss for fixing documentation
1072- @sourrust for cleaning code and debugging the new streaming utilities
1073- @meh for inline optimizations
1074- @ccmtaylor for fixing function imports
1075- @soro for improvements to the streaming utilities
1076- @breard-r for catching my typos
1077- @nelsonjchen for catching my typos too
1078- @divarvel for hex string parsers
1079- @mrordinaire for the `length_bytes!` combinator
1080
1081### Breaking changes
1082- `IResult::Error` can now use custom error types, and is generic over the input type
1083- Producers and consumers have been replaced. The new implementation uses less memory and integrates more with parsers
1084- `nom::ErrorCode` is now `nom::ErrorKind`
1085- `filter!` has been renamed to `take_while!`
1086- `chain!` will count how much data is consumed and use that number to calculate how much data is needed if a parser returned `Incomplete`
1087- `alt!` returns `Incomplete` if a child parser returned `Incomplete`, instead of skipping to the next parser
1088- `IResult` does not require a lifetime tag anymore, yay!
1089
1090### Added
1091
1092- `complete!` will return an error if the child parser returned `Incomplete`
1093- `add_error!` will wrap an error, but allow backtracking
1094- `hex_u32` parser
1095
1096### Fixed
1097- the behaviour around `Incomplete` is better for most parsers now
1098
1099## 0.5.0 - 2015-10-16
1100
1101This release fixes a few issues and stabilizes the code.
1102
1103### Thanks
1104- @nox for documentation fixes
1105- @daboross for linting fixes
1106- @ahenry for fixing `tap!` and extending `dbg!` and `dbg_dmp!`
1107- @bluss for tracking down and fixing issues with unsafe code
1108- @meh for inlining parser functions
1109- @ccmtaylor for fixing import of `str::from_utf8`
1110
1111### Fixed
1112- `tap!`, `dbg!` and `dbg_dmp!` now accept function parameters
1113
1114### Changed
1115- the type used in `count_fixed!` must be `Copy`
1116- `chain!` calculates how much data is needed if one of the parsers returns `Incomplete
1117- optional parsers in `chain!` can return `Incomplete`
1118
1119## 0.4.0 - 2015-09-08
1120
1121Considering the number of changes since the last release, this version can contain breaking changes, so the version number becomes 0.4.0. A lot of new features and performance improvements!
1122
1123### Thanks
1124- @frewsxcv for documentation fixes
1125- @ngrewe for his work on producers and consumers
1126- @meh for fixes on `chain!` and for the `rest` parser
1127- @daboross for refactoring `many0!` and `many1!`
1128- @aleksander for the `switch!` combinator idea
1129- @TechnoMancer for his help with bit level parsing
1130- @sxeraverx for pointing out a bug in `is_a!`
1131
1132### Fixed
1133- `count_fixed!` must take an explicit type as argument to generate the fixed-size array
1134- optional parsing behaviour in `chain!`
1135- `count!` can take 0 elements
1136- `is_a!` and `is_not!` can now consume the whole input
1137
1138### Added
1139- it is now possible to seek to the end of a `MemProducer`
1140- `opt!` returns `Done(input, None)` if `the child parser returned `Incomplete`
1141- `rest` will return the remaining input
1142- consumers can now seek to and from the end of input
1143- `switch!` applies a first parser then matches on its result to choose the next parser
1144- bit-level parsers
1145- character-level parsers
1146- regular expression parsers
1147- implementation of `take_till!`, `take_while!` and `take_while1!`
1148
1149### Changed
1150- `alt!` can return `Incomplete`
1151- the error analysis functions will now take references to functions instead of moving them
1152- performance improvements on producers
1153- performance improvement for `filter!`
1154- performance improvement for `count!`: a `Vec` of the right size is directly allocated
1155
1156## 0.3.11 - 2015-08-04
1157
1158### Thanks
1159- @bluss for remarking that the crate included random junk lying non committed in my local repository
1160
1161### Fixed
1162- cleanup of my local repository will ship less files in the crates, resulting in a smaller download
1163
1164## 0.3.10 - 2015-08-03
1165
1166### Added
1167
1168- `bits!` for bit level parsing. It indicates that all child parsers will take a `(&[u8], usize)`as input, with the second parameter indicating the bit offset in the first byte. This allows viewing a byte slice as a bit stream. Most combinators can be used directly under `bits!`
1169- `take_bits!` takes an integer type and a number of bits, consumes that number of bits and updates the offset, possibly by crossing byte boundaries
1170- bit level parsers are all written in `src/bits.rs`
1171
1172### Changed
1173
1174- Parsers that specifically handle bytes have been moved to src/bytes.rs`. This applies to `tag!`, `is_not!`, `is_a!`, `filter!`, `take!`, `take_str!`, `take_until_and_consume!`, `take_until!`, `take_until_either_and_consume!`, `take_until_either!`
1175
1176## 0.3.9 - 2015-07-20
1177
1178### Thanks
1179- @badboy for fixing `filter!`
1180- @idmit for some documentation fixes
1181
1182### Added
1183- `opt_res!` applies a parser and transform its result in a Result. This parser never fails
1184- `cond_reduce!` takes an expression as parameter, applies the parser if the expression is true, and returns an error if the expression is false
1185- `tap!` pass the result of a parser to a block to manipulate it, but do not affect the parser's result
1186- `AccReader` is a Read+BufRead that supports data accumulation and partial consumption. The `consume` method must be called afterwardsto indicate how much was consumed
1187- Arithmetic expression evaluation and parsing example
1188- `u16!`, `u32!`, `u64!`, `i16!`, `i32!`, `i64!` take an expression as parameter, if the expression is true, apply the big endian integer parser, if false, the little endian version
1189- type information for combinators. This will make the documentation a bit easier to navigate
1190
1191### Fixed
1192- `map_opt!` and `map_res!` had issues with argument order due to bad macros
1193- `delimited!` did not compile for certain combinations of arguments
1194- `filter!` did not return a byte slice but a fixed array
1195
1196## 0.3.8 - 2015-07-03
1197
1198### Added
1199- code coverage is now calculated automatically on Travis CI
1200- `Stepper`: wrap a `Producer`, and call the method `step` with a parser. This method will buffer data if there is not enough, apply the parser if there is, and keep the rest of the input in memory for the next call
1201- `ReadProducer`: takes something implementing `Read`, and makes a `Producer` out of it
1202
1203### Fixed
1204- the combinators `separated_pair!` and `delimited!` did not work because an implementation macro was not exported
1205- if a `MemProducer` reached its end, it should always return `Eof`
1206- `map!` had issues with argument matching
1207
1208## 0.3.7 - 2015-06-24
1209
1210### Added
1211- `expr_res!` and `expr_opt!` evaluate an expression returning a Result or Opt and convert it to IResult
1212- `AsBytes` is implemented for fixed size arrays. This allows `tag!([41u8, 42u8])`
1213
1214### Fixed
1215- `count_fixed!` argument parsing works again
1216
1217## 0.3.6 - 2015-06-15
1218
1219### Added
1220- documentation for a few functions
1221- the consumer trait now requires the `failed(&self, error_code)` method in case of parsing error
1222- `named!` now handles the alternative `named!(pub fun_name<OutputType>, ...)`
1223
1224### Fixed
1225- `filter!` now returns the whole input if the filter function never returned false
1226- `take!` casts its argument as usize, so it can accepts any integer type now
1227
1228## 0.3.5 - 2015-06-10
1229
1230### Thanks
1231- @cmr for some documentation fixes
1232
1233### Added
1234- `count_fixed!` returns a fixed array
1235
1236### Fixed
1237- `count!` is back to the previous behaviour, returning a `Vec` for sizes known at runtime
1238
1239### Changed
1240- functions and traits exported from `nom::util` are now directly in `nom::`
1241
1242## 0.3.4 - 2015-06-09
1243
1244### Thanks
1245- @andrew-d for fixes on `cond!`
1246- @keruspe for features in `chain!`
1247
1248### Added
1249- `chain!` can now have mutable fields
1250
1251### Fixed
1252- `cond!` had an infinite macro recursion
1253
1254### Changed
1255- `chain!` generates less code now. No apprent compilation time improvement
1256
1257## 0.3.3 - 2015-06-09
1258
1259### Thanks
1260- @andrew-d for the little endian signed integer parsers
1261- @keruspe for fixes on `count!`
1262
1263### Added
1264- `le_i8`, `le_i16`, `le_i32`, `le_i64`: little endian signed integer parsers
1265
1266### Changed
1267- the `alt!` parser compiles much faster, even with more than 8 branches
1268- `count!` can now return a fixed size array instead of a growable vector
1269
1270## 0.3.2 - 2015-05-31
1271
1272### Thanks
1273- @keruspe for the `take_str` parser and the function application combinator
1274
1275### Added
1276- `take_str!`: takes the specified number of bytes and return a UTF-8 string
1277- `apply!`: do partial application on the parameters of a function
1278
1279### Changed
1280- `Needed::Size` now contains a `usize` instead of a `u32`
1281
1282## 0.3.1 - 2015-05-21
1283
1284### Thanks
1285- @divarvel for the big endian signed integer parsers
1286
1287### Added
1288- `be_i8`, `be_i16`, `be_i32`, `be_i64`: big endian signed integer parsers
1289- the `core` feature can be passed to cargo to build with `no_std`
1290- colored hexdump can be generated from error chains
1291
1292## 0.3.0 - 2015-05-07
1293
1294### Thanks
1295- @filipegoncalves for some documentation and the new eof parser
1296- @CrimsonVoid for putting fully qualified types in the macros
1297- @lu_zero for some documentation fixes
1298
1299### Added
1300- new error types that can contain an error code, an input slice, and a list of following errors
1301- `error!` will cut backtracking and return directly from the parser, with a specified error code
1302- `eof` parser, successful if there is no more input
1303- specific error codes for the parsers provided by nom
1304
1305### Changed
1306- fully qualified types in macros. A lot of imports are not needed anymore
1307
1308### Removed
1309- `FlatMap`, `FlatpMapOpt` and `Functor` traits (replaced by `map!`, `map_opt!` and `map_res!`)
1310
1311## 0.2.2 - 2015-04-12
1312
1313### Thanks
1314- @filipegoncalves and @thehydroimpulse for debugging an infinite loop in many0 and many1
1315- @thehydroimpulse for suggesting public named parsers
1316- @skade for removing the dependency on the collections gate
1317
1318### Added
1319- `named!` can now declare public functions like this: `named!(pub tst, tag!("abcd"));`
1320- `pair!(X,Y)` returns a tuple `(x, y)`
1321- `separated_pair!(X, sep, Y)` returns a tuple `(x, y)`
1322- `preceded!(opening, X)` returns `x`
1323- `terminated!(X, closing)` returns `x`
1324- `delimited(opening, X, closing)` returns `x`
1325- `separated_list(sep, X)` returns a `Vec<X>`
1326- `separated_nonempty_list(sep, X)` returns a `Vec<X>` of at list one element
1327
1328### Changed
1329- `many0!` and `many1!` forbid parsers that do not consume input
1330- `is_a!`, `is_not!`, `alpha`, `digit`, `space`, `multispace` will now return an error if they do not consume at least one byte
1331
1332## 0.2.1 - 2015-04-04
1333
1334### Thanks
1335- @mtsr for catching the remaining debug println!
1336- @jag426 who killed a lot of warnings
1337- @skade for removing the dependency on the core feature gate
1338
1339
1340### Added
1341- little endian unsigned int parsers le_u8, le_u16, le_u32, le_u64
1342- `count!` to apply a parser a specified number of times
1343- `cond!` applies a parser if the condition is met
1344- more parser development tools in `util::*`
1345
1346### Fixed
1347- in one case, `opt!` would not compile
1348
1349### Removed
1350- most of the feature gates are now removed. The only one still needed is `collections`
1351
1352## 0.2.0 - 2015-03-24
1353*works with `rustc 1.0.0-dev (81e2396c7 2015-03-19) (built 2015-03-19)`*
1354
1355### Thanks
1356- Ryman for the AsBytes implementation
1357- jag426 and jaredly for documentation fixes
1358- eternaleye on #rust IRC for his help on the new macro syntax
1359
1360### Changed
1361- the AsBytes trait improves readability, no more b"...", but "..." instead
1362- Incomplete will now hold either Needed;;Unknown, or Needed::Size(u32). Matching on Incomplete without caring for the value is done with `Incomplete(_)`, but if more granularity is mandatory, `Needed` can be matched too
1363- `alt!` can pass the result of the parser to a closure
1364- the `take_*` macros changed behaviour, the default case is now not to consume the separator. The macros have been renamed as follows: `take_until!` -> `take_until_and_consume!`, `take_until_and_leave!` -> `take_until!`, `take_until_either_and_leave!` -> `take_until_either!`, `take_until_either!` -> `take_until_either_and_consume!`
1365
1366### Added
1367- `peek!` macro: matches the future input but does not consume it
1368- `length_value!` macro: the first argument is a parser returning a `n` that can cast to usize, then applies the second parser `n` times. The macro has a variant with a third argument indicating the expected input size for the second parser
1369- benchmarks are available at https://github.com/Geal/nom_benchmarks
1370- more documentation
1371- **Unnamed parser syntax**: warning, this is a breaking change. With this new syntax, the macro combinators do not generate functions anymore, they create blocks. That way, they can be nested, for better readability. The `named!` macro is provided to create functions from parsers. Please be aware that nesting parsers comes with a small cost of compilation time, negligible in most cases, but can quickly get to the minutes scale if not careful. If this happens, separate your parsers in multiple subfunctions.
1372- `named!`, `closure!` and `call!` macros used to support the unnamed syntax
1373- `map!`, `map_opt!` and `map_res!` to combine a parser with a normal function, transforming the input directly, or returning an `Option` or `Result`
1374
1375### Fixed
1376- `is_a!` is now working properly
1377
1378### Removed
1379- the `o!` macro does less than `chain!`, so it has been removed
1380- the `fold0!` and `fold1!` macros were too complex and awkward to use, the `many*` combinators will be useful for most uses for now
1381
1382## 0.1.6 - 2015-02-24
1383### Changed
1384- consumers must have an end method that will be called after parsing
1385
1386### Added
1387- big endian unsigned int and float parsers: be_u8, be_u16, be_u32, be_u64, be_f32, be_f64
1388- producers can seek
1389- function and macros documentation
1390- README documentation
1391### Fixed
1392- lifetime declarations
1393- tag! can return Incomplete
1394
1395## 0.1.5 - 2015-02-17
1396### Changed
1397- traits were renamed: FlatMapper -> FlatMap, Mapper -> FlatMapOpt, Mapper2 -> Functor
1398
1399### Fixed
1400- woeks with rustc f1bb6c2f4
1401
1402## 0.1.4 - 2015-02-17
1403### Changed
1404- the chaining macro can take optional arguments with '?'
1405
1406## 0.1.3 - 2015-02-16
1407### Changed
1408- the chaining macro now takes the closure at the end of the argument list
1409
1410## 0.1.2 - 2015-02-16
1411### Added
1412- flat_map implementation for <&[u8], &[u8]>
1413- chaining macro
1414- partial MP4 parser example
1415
1416
1417## 0.1.1 - 2015-02-06
1418### Fixed
1419- closure syntax change
1420
1421## Compare code
1422
1423* [unreleased](https://github.com/Geal/nom/compare/7.0.0...HEAD)
1424* [7.0.0](https://github.com/Geal/nom/compare/6.2.1...7.0.0)
1425* [6.2.1](https://github.com/Geal/nom/compare/6.2.0...6.2.1)
1426* [6.2.0](https://github.com/Geal/nom/compare/6.1.2...6.2.0)
1427* [6.1.2](https://github.com/Geal/nom/compare/6.1.1...6.1.2)
1428* [6.1.1](https://github.com/Geal/nom/compare/6.1.0...6.1.1)
1429* [6.1.0](https://github.com/Geal/nom/compare/6.0.1...6.1.0)
1430* [6.0.1](https://github.com/Geal/nom/compare/6.0.0...6.0.1)
1431* [6.0.0](https://github.com/Geal/nom/compare/5.1.1...6.0.0)
1432* [5.1.1](https://github.com/Geal/nom/compare/5.1.0...5.1.1)
1433* [5.1.0](https://github.com/Geal/nom/compare/5.0.1...5.1.0)
1434* [5.0.1](https://github.com/Geal/nom/compare/5.0.0...5.0.1)
1435* [5.0.0](https://github.com/Geal/nom/compare/4.2.3...5.0.0)
1436* [4.2.3](https://github.com/Geal/nom/compare/4.2.2...4.2.3)
1437* [4.2.2](https://github.com/Geal/nom/compare/4.2.1...4.2.2)
1438* [4.2.1](https://github.com/Geal/nom/compare/4.2.0...4.2.1)
1439* [4.2.0](https://github.com/Geal/nom/compare/4.1.1...4.2.0)
1440* [4.1.1](https://github.com/Geal/nom/compare/4.1.0...4.1.1)
1441* [4.1.0](https://github.com/Geal/nom/compare/4.0.0...4.1.0)
1442* [4.0.0](https://github.com/Geal/nom/compare/3.2.1...4.0.0)
1443* [3.2.1](https://github.com/Geal/nom/compare/3.2.0...3.2.1)
1444* [3.2.0](https://github.com/Geal/nom/compare/3.1.0...3.2.0)
1445* [3.1.0](https://github.com/Geal/nom/compare/3.0.0...3.1.0)
1446* [3.0.0](https://github.com/Geal/nom/compare/2.2.1...3.0.0)
1447* [2.2.1](https://github.com/Geal/nom/compare/2.2.0...2.2.1)
1448* [2.2.0](https://github.com/Geal/nom/compare/2.1.0...2.2.0)
1449* [2.1.0](https://github.com/Geal/nom/compare/2.0.1...2.1.0)
1450* [2.0.1](https://github.com/Geal/nom/compare/2.0.0...2.0.1)
1451* [2.0.0](https://github.com/Geal/nom/compare/1.2.4...2.0.0)
1452* [1.2.4](https://github.com/Geal/nom/compare/1.2.3...1.2.4)
1453* [1.2.3](https://github.com/Geal/nom/compare/1.2.2...1.2.3)
1454* [1.2.2](https://github.com/Geal/nom/compare/1.2.1...1.2.2)
1455* [1.2.1](https://github.com/Geal/nom/compare/1.2.0...1.2.1)
1456* [1.2.0](https://github.com/Geal/nom/compare/1.1.0...1.2.0)
1457* [1.1.0](https://github.com/Geal/nom/compare/1.0.1...1.1.0)
1458* [1.0.1](https://github.com/Geal/nom/compare/1.0.0...1.0.1)
1459* [1.0.0](https://github.com/Geal/nom/compare/0.5.0...1.0.0)
1460* [0.5.0](https://github.com/geal/nom/compare/0.4.0...0.5.0)
1461* [0.4.0](https://github.com/geal/nom/compare/0.3.11...0.4.0)
1462* [0.3.11](https://github.com/geal/nom/compare/0.3.10...0.3.11)
1463* [0.3.10](https://github.com/geal/nom/compare/0.3.9...0.3.10)
1464* [0.3.9](https://github.com/geal/nom/compare/0.3.8...0.3.9)
1465* [0.3.8](https://github.com/Geal/nom/compare/0.3.7...0.3.8)
1466* [0.3.7](https://github.com/Geal/nom/compare/0.3.6...0.3.7)
1467* [0.3.6](https://github.com/Geal/nom/compare/0.3.5...0.3.6)
1468* [0.3.5](https://github.com/Geal/nom/compare/0.3.4...0.3.5)
1469* [0.3.4](https://github.com/Geal/nom/compare/0.3.3...0.3.4)
1470* [0.3.3](https://github.com/Geal/nom/compare/0.3.2...0.3.3)
1471* [0.3.2](https://github.com/Geal/nom/compare/0.3.1...0.3.2)
1472* [0.3.1](https://github.com/Geal/nom/compare/0.3.0...0.3.1)
1473* [0.3.0](https://github.com/Geal/nom/compare/0.2.2...0.3.0)
1474* [0.2.2](https://github.com/Geal/nom/compare/0.2.1...0.2.2)
1475* [0.2.1](https://github.com/Geal/nom/compare/0.2.0...0.2.1)
1476* [0.2.0](https://github.com/Geal/nom/compare/0.1.6...0.2.0)
1477* [0.1.6](https://github.com/Geal/nom/compare/0.1.5...0.1.6)
1478* [0.1.5](https://github.com/Geal/nom/compare/0.1.4...0.1.5)
1479* [0.1.4](https://github.com/Geal/nom/compare/0.1.3...0.1.4)
1480* [0.1.3](https://github.com/Geal/nom/compare/0.1.2...0.1.3)
1481* [0.1.2](https://github.com/Geal/nom/compare/0.1.1...0.1.2)
1482* [0.1.1](https://github.com/Geal/nom/compare/0.1.0...0.1.1)
1483