Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
GraphVizCodec.cs
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Threading.Tasks;
6
8{
13 {
18 {
19 }
20
24 public const string DefaultContentType = "text/vnd.graphviz";
25
29 public static readonly string[] GraphVizContentTypes = new string[]
30 {
32 };
33
37 public static readonly string[] GraphVizFileExtensions = new string[]
38 {
39 "gv", "dot", "neato", "fdp", "sfdp", "twopi", "circo"
40 };
41
46
51
58 public bool Decodes(string ContentType, out Grade Grade)
59 {
60 if (Array.IndexOf(GraphVizContentTypes, ContentType) >= 0)
61 {
62 Grade = Grade.Barely;
63 return true;
64 }
65 else
66 {
67 Grade = Grade.NotAtAll;
68 return false;
69 }
70 }
71
82 public Task<object> DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair<string, string>[] Fields, Uri BaseUri)
83 {
84 string GraphViz = CommonTypes.GetString(Data, Encoding);
85 return Task.FromResult<object>(new GraphVizDocument(GraphViz));
86 }
87
94 public bool TryGetContentType(string FileExtension, out string ContentType)
95 {
96 switch (FileExtension.ToLower())
97 {
98 case "gv":
99 case "dot":
100 case "neato":
101 case "fdp":
102 case "sfdp":
103 case "twopi":
104 case "circo":
105 ContentType = GraphVizContentTypes[0];
106 return true;
107
108 default:
109 ContentType = string.Empty;
110 return false;
111 }
112 }
113
120 public bool TryGetFileExtension(string ContentType, out string FileExtension)
121 {
122 switch (ContentType.ToLower())
123 {
125 FileExtension = GraphVizFileExtensions[0];
126 return true;
127
128 default:
129 FileExtension = string.Empty;
130 return false;
131 }
132 }
133
141 public bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
142 {
143 if (Object is GraphVizDocument)
144 {
145 if (InternetContent.IsAccepted(GraphVizContentTypes, AcceptedContentTypes))
146 {
147 Grade = Grade.Barely;
148 return true;
149 }
150 }
151
152 Grade = Grade.NotAtAll;
153 return false;
154 }
155
164 public Task<KeyValuePair<byte[], string>> EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
165 {
166 if (!InternetContent.IsAccepted(GraphVizContentTypes, out string ContentType, AcceptedContentTypes))
167 throw new ArgumentException("Unable to encode object, or content type not accepted.", nameof(Object));
168
169 string s;
170
171 if (Object is GraphVizDocument GraphVizDoc)
172 s = GraphVizDoc.GraphDescription;
173 else
174 s = Object.ToString();
175
176 if (Encoding is null)
177 {
178 ContentType += "; charset=utf-8";
179 Encoding = Encoding.UTF8;
180 }
181 else
182 ContentType += "; charset=" + Encoding.WebName;
183
184 return Task.FromResult(new KeyValuePair<byte[], string>(Encoding.GetBytes(s), ContentType));
185 }
186 }
187}
Helps with parsing of commong data types.
Definition: CommonTypes.cs:13
static string GetString(byte[] Data, Encoding DefaultEncoding)
Gets a string from its binary representation, taking any Byte Order Mark (BOM) into account.
Static class managing encoding and decoding of internet content.
static bool IsAccepted(string ContentType, params string[] AcceptedContentTypes)
Checks if a given content type is acceptable.
string[] ContentTypes
Supported content types.
const string DefaultContentType
text/vnd.graphviz
bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
If the encoder encodes a given object.
static readonly string[] GraphVizContentTypes
GraphViz content types.
Task< KeyValuePair< byte[], string > > EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
Encodes an object.
Task< object > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri)
Decodes an object.
GraphVizCodec()
GraphViz encoder/decoder.
bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of an item, given its file extension.
string[] FileExtensions
Supported file extensions.
static readonly string[] GraphVizFileExtensions
Plain text file extensions.
bool TryGetFileExtension(string ContentType, out string FileExtension)
Tries to get the file extension of an item, given its Content-Type.
bool Decodes(string ContentType, out Grade Grade)
If the decoder decodes an object with a given content type.
Class managing GraphViz integration into Markdown documents.
Definition: GraphViz.cs:47
Basic interface for Internet Content decoders. A class implementing this interface and having a defau...
Basic interface for Internet Content encoders. A class implementing this interface and having a defau...
Grade
Grade enumeration
Definition: Grade.cs:7