def _short_string_handler_factory():
    """Generates the short string (double quoted) handler."""
    def before(c, ctx, is_field_name, is_clob):
        assert not (is_clob and is_field_name)
        is_string = not is_clob and not is_field_name
        if is_string:
            ctx.set_ion_type(IonType.STRING)
        val = ctx.value
        if is_field_name:
            assert not val
            ctx.set_pending_symbol()
            val = ctx.pending_symbol
        return val, is_string

    def on_close(ctx):
        ctx.set_self_delimiting(True)
        return ctx.event_transition(IonEvent, IonEventType.SCALAR, ctx.ion_type, ctx.value.as_text())

    def after(c, ctx, is_field_name):
        ctx.set_quoted_text(False).set_self_delimiting(True)
        return ctx.immediate_transition(
            ctx.whence if is_field_name else _clob_end_handler(c, ctx),
        )

    return _quoted_text_handler_factory(_DOUBLE_QUOTE, lambda c: c == _DOUBLE_QUOTE, before, after, append_first=False,
                                        on_close=on_close)
Generates the short string (double quoted) handler.