STM32F769IDiscovery  1.00
uDANTE Audio Networking with STM32F7 DISCO board
CGenerator.cs
Go to the documentation of this file.
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 
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 
68  public void WriteSequence(string value, uint repetitions)
69  {
70  while (repetitions > 0)
71  {
72  this.OutputStream.Write(value);
73  repetitions--;
74  }
75  }
76 
77  public void IndentLine(int level)
78  {
79  while (level > 0)
80  {
82  level--;
83  }
84  }
85 
86  public void WriteNewLine()
87  {
88  this.OutputStream.Write(this.NewLine);
89  }
90 
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 }
CGenerator(System.IO.TextWriter outputStream, string file, uint indentCount, string indentChar, string newLine)
Definition: CGenerator.cs:46
void IndentLine(int level)
Definition: CGenerator.cs:77
void WriteMultilineString(string value, int level=0)
Definition: CGenerator.cs:91
void WriteSequence(string value, uint repetitions)
Definition: CGenerator.cs:68