1 /* 2 * Copyright (c) 2001-2004 Swedish Institute of Computer Science. 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without modification, 6 * are permitted provided that the following conditions are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright notice, 9 * this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright notice, 11 * this list of conditions and the following disclaimer in the documentation 12 * and/or other materials provided with the distribution. 13 * 3. The name of the author may not be used to endorse or promote products 14 * derived from this software without specific prior written permission. 15 * 16 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED 17 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 19 * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT 21 * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 24 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY 25 * OF SUCH DAMAGE. 26 * 27 * This file is part of the lwIP TCP/IP stack. 28 * 29 * Author: Martin Hentschel <info@cl-soft.de> 30 * 31 */ 32 33 using System; 34 using System.IO; 35 36 namespace CCodeGeneration 37 { 38 public class CGenerator 39 { 40 public TextWriter OutputStream { get; private set; } 41 public string File { get; private set; } 42 public uint IndentCount { get; private set; } 43 public string IndentChar { get; private set; } 44 public string NewLine { get; private set; } 45 CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine)46 public CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine) 47 { 48 this.OutputStream = outputStream; 49 this.File = file; 50 this.IndentCount = indentCount; 51 this.IndentChar = indentChar; 52 this.NewLine = newLine; 53 } 54 55 public string FileName 56 { 57 get 58 { 59 if (!String.IsNullOrWhiteSpace(this.File)) 60 { 61 return Path.GetFileName(this.File); 62 } 63 64 return null; 65 } 66 } 67 WriteSequence(string value, uint repetitions)68 public void WriteSequence(string value, uint repetitions) 69 { 70 while (repetitions > 0) 71 { 72 this.OutputStream.Write(value); 73 repetitions--; 74 } 75 } 76 IndentLine(int level)77 public void IndentLine(int level) 78 { 79 while (level > 0) 80 { 81 WriteSequence(this.IndentChar, this.IndentCount); 82 level--; 83 } 84 } 85 WriteNewLine()86 public void WriteNewLine() 87 { 88 this.OutputStream.Write(this.NewLine); 89 } 90 WriteMultilineString(string value, int level = 0)91 public void WriteMultilineString(string value, int level = 0) 92 { 93 if (String.IsNullOrEmpty(value)) 94 { 95 return; 96 } 97 98 // only \n and \r\n are recognized as linebreaks 99 string[] lines = value.Split(new char[] { '\n' }, StringSplitOptions.None); 100 101 for (int l = 0; l < (lines.Length - 1); l++) 102 { 103 if (lines[l].EndsWith("\r")) 104 { 105 this.OutputStream.Write(lines[l].Substring(0, lines[l].Length-1)); 106 } 107 else 108 { 109 this.OutputStream.Write(lines[l]); 110 } 111 112 this.WriteNewLine(); 113 this.IndentLine(level); 114 } 115 116 this.OutputStream.Write(lines[lines.Length - 1]); 117 } 118 } 119 } 120