yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
7e51180ed
master
1#include "slang-pretty-writer.h" 2 3#include "../core/slang-string-escape-util.h" 4 5namespace Slang 6{ 7 8void PrettyWriter ::writeRaw (char const * begin ,char const * end ) 9{ 10SLANG_ASSERT (end >=begin ); 11writeRaw (UnownedStringSlice (begin ,end )); 12} 13 14void PrettyWriter ::adjust () 15{ 16// Only indent if at start of a line 17if (m_startOfLine ) 18 { 19// Output current indentation 20m_builder .appendRepeatedChar (' ' ,m_indent * 4 ); 21m_startOfLine = false; 22 } 23} 24 25void PrettyWriter ::dedent () 26{ 27SLANG_ASSERT (m_indent > 0 ); 28m_indent -- ; 29} 30 31void PrettyWriter ::write (const UnownedStringSlice & slice ) 32{ 33const auto end = slice .end (); 34auto start = slice .begin (); 35 36while (start < end ) 37 { 38const char * cur = start ; 39 40// Search for \n if there is one 41while (cur < end && * cur != '\n' ) 42cur ++ ; 43 44// If there were some chars, adjust and write 45if (cur > start ) 46 { 47adjust (); 48writeRaw (UnownedStringSlice (start ,cur )); 49 } 50 51if (cur < end && * cur == '\n' ) 52 { 53writeRawChar ('\n' ); 54// Skip the CR 55cur ++ ; 56// Mark we are at the start of a line 57m_startOfLine = true; 58 } 59 60start = cur ; 61 } 62} 63 64void PrettyWriter ::writeEscapedString (const UnownedStringSlice & slice ) 65{ 66adjust (); 67auto handler = StringEscapeUtil ::getHandler (StringEscapeUtil ::Style ::Cpp ); 68StringEscapeUtil ::appendQuoted (handler ,slice ,m_builder ); 69} 70 71void PrettyWriter ::maybeComma () 72{ 73if (auto state = m_commaState ) 74 { 75if (!state -> needComma ) 76 { 77state -> needComma = true; 78return ; 79 } 80 } 81 82write (toSlice (",\n" )); 83} 84 85}// namespace Slang