Every style is produced from a single intermediate: the input is split into a list of words, then joined back with the punctuation and capitalisation that style calls for. The alternative — converting camelCase to snake_case directly — needs one rule for each pair of styles, and ten styles would mean ninety rules that slowly drift apart. Splitting once means there is exactly one place where "what counts as a word" is decided, and every style agrees with every other by construction.
The interesting part is the splitting. Underscores, hyphens, dots and spaces are obvious separators, but a capital letter is a boundary too, and a run of capitals is where most converters go wrong. parseHTTPResponse is three words, not two: the boundary is found by looking for a run of capitals followed by a capital and then a lowercase letter, which is the point where the acronym stops and the next word starts. The same rule keeps XMLHttpRequest from collapsing into one undifferentiated blob. A digit followed by a capital splits too, so utf8Encode is handled, while a trailing digit stays attached and address2 remains one word.
Lines are converted independently and the line breaks are preserved exactly, CRLF included. Pasting a column of column names out of a schema is the common case, and treating the whole block as a single sentence would fuse it into one unusable identifier. Apostrophes are kept inside words for the prose styles, so "customer's order" becomes "Customer's Order" in Title Case, and dropped for the identifier styles, because no language allows an apostrophe in a name.