// Copyright (C) 2022-2023 Luke Shumaker // // SPDX-License-Identifier: GPL-2.0-or-later package lowmemjson import ( "git.lukeshu.com/go/lowmemjson/internal/jsonparse" ) type reEncodeForceNL struct { out reEncoderModule // state skipNL bool } var _ reEncoderModule = (*reEncodeForceNL)(nil) func (enc *reEncodeForceNL) PopWriteBarrier() { enc.out.PopWriteBarrier() } func (enc *reEncodeForceNL) HandleRune(c rune, t jsonparse.RuneType, escape BackslashEscapeMode, stackSize int) error { switch { case t == jsonparse.RuneTypeEOF: if err := enc.out.HandleRune('\n', jsonparse.RuneTypeSpace, 0, stackSize); err != nil { return err } enc.skipNL = true return enc.out.HandleRune(c, t, escape, stackSize) case c == '\n' && t == jsonparse.RuneTypeSpace && enc.skipNL: enc.skipNL = false return nil default: enc.skipNL = false return enc.out.HandleRune(c, t, escape, stackSize) } }