parse_glycoct(), parse_kcf(), parse_linucs(), parse_pglyco_struc(), parse_strucgp_struc(), and parse_wurcs() always validate parsed structures. Their validate argument is deprecated and warns when supplied; remove it from calls.options(glyparse.threads = 1L) for serial decoding or choose up to 64 workers; see ?glyparse_options. (#55)auto_parse() processes each detected format in a batch while preserving input order, names, missing values, and failure handling. (#54)parse_glycoct() and parse_wurcs() parse large batches faster and report repeated non-root alditol warnings once per batch. (#55)auto_parse() paths now show parsing progress during structure construction when progress = TRUE. (#56)validate argument to skip graph validation for trusted inputs. (#36)parse_glycoct() now supports floating glycan substructures represented by UND sections, uses implicit floating parts when every main-tree node is a candidate parent, and excludes explicit candidates whose acceptor positions are already occupied. (#40)parse_gwb() parses GlycoWorkbench (GWB/GWS) sequences, including branches, substituents, furanose and configured residues, reducing-end alditols, and uncertain antennae. auto_parse() now detects these sequences. (#48)parse_wurcs() now supports floating monosaccharides and subtrees, including implicit all-main attachment domains and filtered explicit candidate parents. It also recognizes generic nonulosonic acids and sialic acids with unknown ring closure. (#40)glyrepr monosaccharide names such as Galf, GlcfNAc, and Neuf5Ac across IUPAC, GlyCAM IUPAC, GlycoCT, WURCS, LINUCS, Linear Code, and KCF inputs. (#41)glyrepr names such as D-Fuc, L-Gul, and D-Fucf, while unprefixed names retain their natural configurations. (#43, #44)auto_parse() and all format-specific parsers now preserve generic and concrete residues mixed within a glycan and across parsed vectors. (#50)parse_glycoct() and parse_wurcs() now preserve declared floating candidate-parent domains in global floating-parent structures: GlycoCT UND parents remain restricted to the main graph, while WURCS parents may target other floating components.parse_glycoct() and parse_wurcs() now preserve floating substituents with unresolved parent residues, including their chemistry, carbon positions, and candidate parents. (#45)parse_glycoct() and parse_wurcs() now recognize the xylHex encoding of fucose.parse_glycoct(), parse_wurcs(), parse_iupac_compact(), parse_iupac_condensed(), parse_linucs(), and auto_parse() now preserve alditol reducing ends in parsed structures. (#46)parse_glycoct() now normalizes symmetric Man-ol acceptor positions so equivalent GlycoCT linkages parse consistently.parse_glycoct() now preserves repeated and alternative-position substituents, distinguishes N-acetyl and N-glycolyl from acetyl, maps generic HexA and HexN residues, and rejects unrepresentable non-alditol open-chain residues explicitly. (#47)parse_iupac_extended() now accepts abbreviated generic reducing ends such as ?-Hex, ?-HexNAc, and ?-HexN, as well as slash-ambiguous acceptor positions such as 4/?.parse_wurcs() now accepts direct phosphate and alternative-position substituent encodings, preserves generic-root anomer positions, and orients ambiguous linkages using alditol-aware donor semantics. (#47)parse_glycam_iupac() now parses large input vectors about five times faster. (#49)parse_glycoct() and parse_wurcs() now reuse indexed residue matching and cached classification to improve parsing performance. (#37)glyrepr's public structure constructor, preventing tidyverse joins on parsed structures from failing with glyrepr 0.13.0. (#33)auto_parse() now detects GlyCAM IUPAC, IUPAC-compact, KCF, and LINUCS structures and routes them to the corresponding parser (#26, #28, #30, #31).progress argument for opt-in progress bars when parsing large inputs (#29).parse_glycam_iupac() parses GlyCAM IUPAC structures (#25, #27).parse_iupac_compact() parses IUPAC-compact structures (#28).parse_kcf() parses KCF structures (#30).parse_linucs() parses LINUCS structures (#31).parse_glycoct() now accepts space-separated GlycoCT records, such as records stored in CSV exports (#24).parse_glycoct() now parses GlycoCT alditol residues as regular reducing-end glycans with unknown anomer configurations (#22).parse_glycoct() now supports generic GlycoCT HEX, N-acetylated HEX, deoxy-HEX, and sialic acid descriptors, including direct n-sulfate substituents on amino sugars (#24).parse_wurcs() now parses WURCS alditol residues as regular reducing-end glycans with unknown anomer configurations (#21).parse_wurcs() now supports additional generic residue descriptors, ambiguous sialic acid descriptors, and uppercase residue IDs for large structures (#23).parse_wurcs() now supports ambiguous u residues and unknown ring closure residues (? ring position).parse_wurcs() now correctly handles WURCS N-sulfate substituent codes (*NSO/3=O/3=O).parse_glycoct() now preserves unknown reducing-end ring positions and matches amino sugars with unknown ring bounds.on_failure parameter to all parser functions. When on_failure = "error", the parser will throw an error when it encounters an unparsable string. When on_failure = "na", the parser will return NA for unparsable strings. The default is "error", for backwards compatibility.parse_iupac_extended() now accepts input with plain text equivalents ("alpha", "beta", "->"). (#10)dplyr::case_match() with dplyr::recode_values() in parsers to prevent warnings.parse_iupac_extended() and parse_iupac_short() now support generic monosaccharides, e.g. "Hex", "HexNAc", "HexN".parse_linear_code() to parse Linear Code strings.auto_parse() now supports Linear Code strings.parse_iupac_extended().parse_wurcs().parse_iupac_short().parse_glycoct().glyrepr v0.7.0.parse_iupac_condensed() and parse_iupac_short() now require the reducing-end monosaccharide to have anomer information. For example, "Neu5Ac(a2-" and "Neu5Aca-" are valid, but "Neu5Ac" is not.parse_pglyco_struc() now support "aH" and "pH" monosaccharides.auto_parse() to automatically detect and parse different glycan structure string formats.Better error messages. Before:
> parse_iupac_condensed("bad_glycan")
Error in `purrr::map()` at glyparse/R/struc-parser-wrapper.R:13:3:
ℹ In index: 1.
Caused by error in `value[[3L]]()`:
! Could not parse IUPAC-condensed string: {.val {x}}
ℹ Invalid characters or format in IUPAC-condensed string
Run `rlang::last_trace()` to see where the error occurred.
Now:
> parse_iupac_condensed("bad_glycan")
Error in `parse_iupac_condensed()`:
! Can't parse: "bad_glycan"
Run `rlang::last_trace()` to see where the error occurred.
parse_glycoct() to parse glycans in GlycoCT format.parse_iupac_short(), parse_iupac_extended(), parse_iupac_condensed(),
parse_wurcs() now support multiple substituents on the same monosaccharide,
to align with the updates in glyrepr v0.5.0.