Changeset 5951


Ignore:
Timestamp:
Apr 9, 2014, 9:13:46 AM (8 years ago)
Author:
krauss
Message:

First upload of LaTeX generator for component documentation

Location:
trunk
Files:
2 added
10 edited
3 moved

Legend:

Unmodified
Added
Removed
  • trunk/CrypWin/MainWindow.xaml.cs

    r5941 r5951  
    298298                    generatingDocWindow.Show();
    299299                    var docGenerator = new OnlineDocumentationGenerator.DocGenerator();
    300                     docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator("de", noIcons, showAuthors));
    301                     docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator("en", noIcons, showAuthors));
    302                     //docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator(noIcons, showAuthors));
     300                    //docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator("de", noIcons, showAuthors));
     301                    //docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator("en", noIcons, showAuthors));
     302                    docGenerator.Generate(DirectoryHelper.BaseDirectory, new LaTeXGenerator(noIcons, showAuthors));
    303303                    generatingDocWindow.Close();                   
    304304                }
  • trunk/OnlineDocumentationGenerator/Generators/HtmlGenerator/HtmlGenerator.cs

    r5068 r5951  
    240240                    {
    241241                        case ComponentCategory.CiphersClassic:
    242                             categoryName = Properties.Resources.Classic_Ciphers;
     242                            categoryName = Properties.Resources.Category_Classic_Ciphers;
    243243                            break;
    244244                        case ComponentCategory.CiphersModernSymmetric:
    245                             categoryName = Properties.Resources.CiphersModernSymmetric;
     245                            categoryName = Properties.Resources.Category_CiphersModernSymmetric;
    246246                            break;
    247247                        case ComponentCategory.CiphersModernAsymmetric:
    248                             categoryName = Properties.Resources.CiphersModernAsymmetric;
     248                            categoryName = Properties.Resources.Category_CiphersModernAsymmetric;
    249249                            break;
    250250                        case ComponentCategory.Steganography:
    251                             categoryName = Properties.Resources.Steganography;
     251                            categoryName = Properties.Resources.Category_Steganography;
    252252                            break;
    253253                        case ComponentCategory.HashFunctions:
    254                             categoryName = Properties.Resources.HashFunctions;
     254                            categoryName = Properties.Resources.Category_HashFunctions;
    255255                            break;
    256256                        case ComponentCategory.CryptanalysisSpecific:
    257                             categoryName = Properties.Resources.CryptanalysisSpecific;
     257                            categoryName = Properties.Resources.Category_CryptanalysisSpecific;
    258258                            break;
    259259                        case ComponentCategory.CryptanalysisGeneric:
    260                             categoryName = Properties.Resources.CryptanalysisGeneric;
     260                            categoryName = Properties.Resources.Category_CryptanalysisGeneric;
    261261                            break;
    262262                        case ComponentCategory.Protocols:
    263                             categoryName = Properties.Resources.Protocols;
     263                            categoryName = Properties.Resources.Category_Protocols;
    264264                            break;
    265265                        case ComponentCategory.ToolsBoolean:
    266                             categoryName = Properties.Resources.ToolsBoolean;
     266                            categoryName = Properties.Resources.Category_ToolsBoolean;
    267267                            break;
    268268                        case ComponentCategory.ToolsDataflow:
    269                             categoryName = Properties.Resources.ToolsDataflow;
     269                            categoryName = Properties.Resources.Category_ToolsDataflow;
    270270                            break;
    271271                        case ComponentCategory.ToolsDataInputOutput:
    272                             categoryName = Properties.Resources.ToolsDataInputOutput;
     272                            categoryName = Properties.Resources.Category_ToolsDataInputOutput;
    273273                            break;
    274274                        case ComponentCategory.ToolsMisc:
    275                             categoryName = Properties.Resources.ToolsMisc;
     275                            categoryName = Properties.Resources.Category_ToolsMisc;
    276276                            break;
    277277                        case ComponentCategory.ToolsP2P:
    278                             categoryName = Properties.Resources.ToolsP2P;
     278                            categoryName = Properties.Resources.Category_ToolsP2P;
    279279                            break;
    280280                        default:
    281                             categoryName = Properties.Resources.Unknown_Category;
     281                            categoryName = Properties.Resources.Category_Unknown;
    282282                            break;
    283283                    }
  • trunk/OnlineDocumentationGenerator/Generators/LaTeXGenerator/Helper.cs

    r5488 r5951  
    1313            var sb = new StringBuilder(value);
    1414
    15             sb.Replace("\\", "\\textbackslash").Replace("&", "\\&").Replace("%", "\\%")
    16                 .Replace("#", "\\#").Replace("_", "\\_")
     15            sb.Replace("\\", "$\\textbackslash$")
    1716                .Replace("{", "\\{").Replace("}", "\\}")
    1817                .Replace("[", "{[}").Replace("]", "{]}")
    19                 .Replace("~", "\\textasciitilde").Replace("^", "\\textasciicircum")
    20                 .Replace("`", "\\glq ").Replace("´", "\\grq ")
    21                 .Replace("\"", "{\\textquotedblright}").Replace("“", "\"'").Replace("„", "\"`");
     18                .Replace("#", "{\\#}").Replace("_", "{\\_}")
     19                .Replace("&", "\\&").Replace("%", "\\%")
     20                .Replace("~", "{\\textasciitilde}").Replace("^", "{\\textasciicircum}")
     21                .Replace("`", "{\\glq}").Replace("´", "{\\grq}")
     22                .Replace("\"", "{\\textquotedblright}").Replace("“", "\"'").Replace("„", "\"`")
     23                .Replace("∈", "$\\in$")
     24                .Replace("∨", "$\\vee$")
     25                .Replace("∧", "$\\wedge$")
     26                .Replace("¬", "$\\lnot$")
     27                .Replace("<", "{\\textless}")
     28                .Replace(">", "{\\textgreater}");
    2229
    2330            var greekLetters = new Dictionary<char, string>() {
     
    4047                , {'ʁ', "{\\textinvscr}"}
    4148                , {'ˌ', "{\\textsecstress}"}
    42             };
     49            }; 
    4350           
    4451            int c = sb.Length - 1;
  • trunk/OnlineDocumentationGenerator/Generators/LaTeXGenerator/LaTeXGenerator.cs

    r5741 r5951  
    77using System.Linq;
    88using System.Text.RegularExpressions;
     9using Cryptool.PluginBase;
    910using Cryptool.PluginBase.Attributes;
    1011using Cryptool.PluginBase.Miscellaneous;
     
    2021        private ObjectConverter _objectConverter;
    2122        private TemplateDirectory _templatesDir;
    22         private readonly string _lang;
    2323        private readonly bool _noIcons;
    2424        private readonly bool _showAuthors;
    2525
    26         public LaTeXGenerator(string lang, bool noIcons, bool showAuthors)
    27         {
    28             _lang = lang;
     26        public LaTeXGenerator(bool noIcons, bool showAuthors)
     27        {
    2928            _noIcons = noIcons;
    3029            _showAuthors = showAuthors;
     
    3332        public override void Generate(TemplateDirectory templatesDir)
    3433        {
    35             var cultureInfo = new CultureInfo(_lang);
    36             Thread.CurrentThread.CurrentCulture = cultureInfo;
    37             Thread.CurrentThread.CurrentUICulture = cultureInfo;
    38 
    39             _templatesDir = templatesDir;
    40             _objectConverter = new ObjectConverter(DocPages, OutputDir);
    41             var tableCode = GenerateTemplateOverviewTableCode(_lang);
    42             var descriptionCode = GenerateTemplateDescriptionCode(_lang);
    43             var versionString = GetVersion();
    44 
    45             // write template description file
    46             var latexCode = Properties.Resources.LaTeXTemplate.Replace("$CONTENT$", tableCode + "\n" + descriptionCode);
    47             latexCode = latexCode.Replace("$VERSION$", versionString);
    48             StoreLaTeX(latexCode, "templates-"+_lang+".tex");
    49 
    50             // write appendix for CT2 script
    51             latexCode = Properties.Resources.LaTeXAppendix.Replace("$CONTENT$", tableCode);
    52             StoreLaTeX(latexCode, "appendix-" + _lang + ".tex");
    53 
    54             //var componentDoc = GenerateComponentIndexPages();
    55             //StoreLaTeX(componentDoc, "components-" + _lang + ".tex");
     34            foreach (var lang in AvailableLanguages)
     35            {
     36                var cultureInfo = new CultureInfo(lang);
     37                Thread.CurrentThread.CurrentCulture = cultureInfo;
     38                Thread.CurrentThread.CurrentUICulture = cultureInfo;
     39
     40                _templatesDir = templatesDir;
     41                _objectConverter = new ObjectConverter(DocPages, OutputDir);
     42
     43                //
     44                // create LaTeX description of templates
     45                //
     46                var tableCode = GenerateTemplateOverviewTableCode(lang);
     47                var descriptionCode = GenerateTemplateDescriptionCode(lang);
     48                var versionString = GetVersion();
     49
     50                // write template description file
     51                var latexCode = Properties.Resources.LaTeXTmpl_Templates.Replace("$CONTENT$", tableCode + "\n" + descriptionCode);
     52                latexCode = latexCode.Replace("$VERSION$", versionString);
     53                StoreLaTeX(latexCode, "templates-" + lang + ".tex");
     54
     55                // write appendix for CT2 script
     56                latexCode = Properties.Resources.LaTeXTmpl_Appendix.Replace("$CONTENT$", tableCode);
     57                StoreLaTeX(latexCode, "appendix-" + lang + ".tex");
     58
     59                //
     60                // create LaTeX description of components
     61                //
     62                var componentDoc = GenerateComponentIndexPages(lang);
     63                latexCode = Properties.Resources.LaTeXTmpl_Components.Replace("$CONTENT$", componentDoc);
     64                latexCode = latexCode.Replace("$VERSION$", versionString);
     65                StoreLaTeX(latexCode, "components-" + lang + ".tex");
     66            }
     67        }
     68
     69        private string GenerateComponentIndexPages(string lang)
     70        {
     71            var components = DocPages.FindAll(x => x is ComponentDocumentationPage).Select(x => (ComponentDocumentationPage)x);
     72            var componentListCode = GenerateComponentTreeCode(components, lang);
     73            return componentListCode;
     74        }
     75
     76        private static string GenerateComponentListCode(IEnumerable<ComponentDocumentationPage> componentDocumentationPages, string lang)
     77        {
     78            var stringBuilder = new StringBuilder();
     79            stringBuilder.AppendLine("<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\" class=\"filterable\">");
     80
     81            var anchorBuilder = new StringBuilder();
     82            anchorBuilder.Append("<p>");
     83
     84            var query = from pages in componentDocumentationPages
     85                        orderby pages.Localizations[pages.Localizations.ContainsKey(lang) ? lang : "en"].Name
     86                        select pages;
     87
     88            char actualIndexCharacter = ' ';
     89
     90            foreach (var page in query)
     91            {
     92                var linkedLang = page.Localizations.ContainsKey(lang) ? lang : "en";
     93                var pp = (LocalizedComponentDocumentationPage)page.Localizations[linkedLang];
     94
     95                if (actualIndexCharacter != pp.Name[0])
     96                {
     97                    //actualIndexCharacter = pp.Name.ToUpper()[0];
     98                    //stringBuilder.AppendLine(string.Format("<tr><td><h2 id=\"{0}\">{0}</h1></td><td></td></tr>", actualIndexCharacter));
     99                    //anchorBuilder.AppendLine(string.Format("<a href=\"#{0}\"><b>{0}</b><a>&nbsp;", actualIndexCharacter));
     100                    anchorBuilder.AppendLine(pp.Name);
     101                    if (pp.Introduction != null) anchorBuilder.AppendLine(pp.Introduction.Value);
     102                    //anchorBuilder.AppendLine(pp.Manual.Value);
     103                }
     104                //stringBuilder.AppendLine(string.Format("<tr><td><a href=\"{0}\">{1}</a></td><td>{2}</td></tr>",
     105                //    OnlineHelp.GetPluginDocFilename(pp.PluginType, linkedLang), pp.Name, pp.ToolTip));
     106            }
     107
     108            //stringBuilder.AppendLine("</table>");
     109            //stringBuilder.AppendLine("<script type=\"text/javascript\" src=\"filterTable.js\"></script>");
     110
     111            //anchorBuilder.Append("</p>");
     112            //anchorBuilder.Append(stringBuilder);
     113            return anchorBuilder.ToString();
     114        }
     115
     116        private string GenerateComponentTreeCode(IEnumerable<PluginDocumentationPage> componentDocumentationPages, string lang)
     117        {
     118            var stringBuilder = new StringBuilder();
     119
     120            var query = from pages in componentDocumentationPages
     121                        orderby pages.Category
     122                        select pages;
     123
     124            ComponentCategory actualCategory = ComponentCategory.Undefined;
     125
     126            foreach (var page in query)
     127            {
     128                var linkedLang = page.Localizations.ContainsKey(lang) ? lang : "en";
     129                var pp = (LocalizedComponentDocumentationPage)page.Localizations[linkedLang];
     130
     131                if (actualCategory != page.Category)
     132                {
     133                    actualCategory = page.Category;
     134                    stringBuilder.AppendLine(@"\chapter{" + Helper.EscapeLaTeX( GetComponentCategory(page.Category) ) + "}");
     135                }
     136
     137                stringBuilder.AppendLine(@"\section{" + Helper.EscapeLaTeX(pp.Name) + "}");
     138                stringBuilder.AppendLine("Tooltip:" + Helper.EscapeLaTeX(pp.ToolTip) + @"\\");
     139
     140                StringBuilder text = new StringBuilder();
     141                text.AppendLine(@"\subsection*{" + Properties.Resources.ComponentTemplate_Introduction + "}\n" + _objectConverter.Convert(pp.Introduction, page));
     142                text.AppendLine(@"\subsection*{" + Properties.Resources.ComponentTemplate_Usage + "}\n" + _objectConverter.Convert(pp.Manual, page));
     143                text.AppendLine(@"\subsection*{" + Properties.Resources.ComponentTemplate_Presentation + "}\n" + _objectConverter.Convert(pp.Presentation, page));
     144
     145                var connectors = pp.GetType().GetProperty("Connectors").GetValue(pp, null);
     146                text.AppendLine(@"\subsection*{" + Properties.Resources.ComponentTemplate_Connections + "}\n" + _objectConverter.Convert(connectors, page));
     147
     148                var settings = pp.GetType().GetProperty("Settings").GetValue(pp, null);
     149                text.AppendLine(@"\subsection*{" + Properties.Resources.ComponentTemplate_Settings + "}\n" + _objectConverter.Convert(settings, page));
     150
     151                //stringBuilder.AppendLine("</table>");
     152                //anchorBuilder.Append("</p>");
     153                string s = text.ToString();
     154                //s = Regex.Replace(s, @"\\\\[\r\n\t ]+\\\\", '\\' + "\n" + '\\');
     155                s = Regex.Replace(s, "\r\n", "\n");
     156                s = Regex.Replace(s, "\r", "\n");
     157                //s = Regex.Replace(s, "\n", " ");
     158                s = Regex.Replace(s, "\n{2,}", "\n\n");
     159                //s = Regex.Replace(s, "\\\\\\\\", "\n");
     160                s = Regex.Replace(s, "[\t ]+\n", "\n");
     161                //s = Regex.Replace(s, "\\\\\\\\", "\n");
     162                //s = Regex.Replace(s, @"\n[\t ]+", "\n");
     163                //s = Regex.Replace(s, "\n{2,}", "\n");
     164                //s = Regex.Replace(s, @"\n[\t ]+\\\\", "\n" + @"\\");
     165                //s = Regex.Replace(s, @"\n+\\\\", @" \\");
     166
     167                stringBuilder.AppendLine(s);
     168            }
     169
     170            return stringBuilder.ToString();
     171        }
     172
     173        private string GenerateTemplateOverviewTableCode(string lang)
     174        {
     175            var stringBuilder = new StringBuilder();
     176            stringBuilder.AppendLine("\\chapter*{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterTitle + "}");
     177            stringBuilder.AppendLine("\\addcontentsline{toc}{chapter}{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterTitle + "}");
     178            stringBuilder.AppendLine("\\renewcommand{\\arraystretch}{2}");
     179            stringBuilder.AppendLine("\\begin{longtable}{lp{0.6\\textwidth}}");
     180           
     181            foreach (var dir in _templatesDir.SubDirectories)
     182            {
     183                GenerateTemplateOverviewTableSection(dir, stringBuilder, 0, lang);
     184            }
     185
     186            stringBuilder.AppendLine("\\end{longtable}");
     187            return stringBuilder.ToString();
     188        }
     189
     190        private void GenerateTemplateOverviewTableSection(TemplateDirectory templatesDir, StringBuilder stringBuilder, int depth, string lang)
     191        {
     192            const string hspace = "\\hspace{2mm} ";
     193            var spaces = (depth>0) ? String.Format("\\hspace{{{0}mm}} ", depth*4) : "";
     194
     195            stringBuilder.AppendLine("\\multicolumn{2}{l}{" + spaces + " \\textbf{" + Helper.EscapeLaTeX(templatesDir.GetName(lang)) + "}} \\\\");
     196
     197            Boolean itemadded = false;
     198
     199            foreach (var templateDocumentationPage in templatesDir.ContainingTemplateDocPages)
     200            {
     201                var locTemplate = templateDocumentationPage.CurrentLocalization;
     202
     203                // get icon
     204                String includeIcon = (locTemplate.Icon != null)
     205                    ? "\\includegraphics[width=16pt, height=16pt]{" + _objectConverter.GetImagePath(locTemplate.Icon, templateDocumentationPage.Name) + "}"
     206                    : "\\hspace{16pt}";
     207                includeIcon = "\\begin{minipage}[c]{16pt}" + includeIcon + "\\end{minipage}";
     208
     209                // get templateName
     210                String templateName = Helper.EscapeLaTeX(templateDocumentationPage.CurrentLocalization.Name);
     211                templateName = "\\begin{flushleft}" + templateName + "\\end{flushleft}";
     212                templateName = "\\begin{minipage}[t]{0.4\\textwidth}" + templateName + "\\end{minipage}";
     213
     214                // get summary
     215                String summary = _objectConverter.Convert(locTemplate.Summary, templateDocumentationPage);
     216                summary = "\\begin{flushleft}" + summary + "\\end{flushleft}";
     217                summary = "\\begin{minipage}[t]{0.6\\textwidth}" + summary + "\\end{minipage}";
     218
     219                stringBuilder.AppendLine(String.Format("{0} {1} {2} & {3} \\\\", spaces + hspace, includeIcon, templateName, summary));
     220
     221                itemadded = true;
     222            }
     223
     224            if( itemadded ) stringBuilder.AppendLine("\\\\");
     225
     226            foreach (var dir in templatesDir.SubDirectories)
     227            {
     228                GenerateTemplateOverviewTableSection(dir, stringBuilder, depth + 1, lang);
     229            }
     230        }
     231
     232        private string SectionFromDepth(int depth)
     233        {
     234            if (depth == 0)
     235                return @"\chapter";
     236
     237            if (depth < 4)
     238                return @"\" + string.Join("", Enumerable.Repeat("sub", depth-1)) + "section";
     239
     240            return @"\paragraph";
     241        }
     242
     243        private void GenerateTemplateDescriptionSection(TemplateDirectory templatesDir, StringBuilder stringBuilder, int depth, string lang)
     244        {
     245            stringBuilder.AppendLine(string.Format("{0}{{{1}}}", SectionFromDepth(depth), Helper.EscapeLaTeX(templatesDir.GetName(lang))));
     246
     247            foreach (var templateDocumentationPage in templatesDir.ContainingTemplateDocPages)
     248            {
     249                var locTemplate = templateDocumentationPage.CurrentLocalization;
     250
     251                var description = _objectConverter.Convert(locTemplate.Description, templateDocumentationPage);
     252                description = Regex.Replace(description, "[\r\n]+", "\n");
     253
     254                var templateName = Helper.EscapeLaTeX(templateDocumentationPage.CurrentLocalization.Name);
     255                stringBuilder.AppendLine(string.Format("{0}{{{1}}}", SectionFromDepth(depth+1), templateName));
     256                stringBuilder.AppendLine(description);
     257
     258                if (_showAuthors)
     259                {
     260                    var author = _objectConverter.Convert(locTemplate.AuthorName, templateDocumentationPage);
     261                    stringBuilder.AppendLine("");
     262                    stringBuilder.AppendLine("Author: " + author);
     263                    stringBuilder.AppendLine("");
     264                }
     265
     266                if (!_noIcons && locTemplate.Icon != null)
     267                {
     268                    var icon = _objectConverter.Convert(locTemplate.Icon, templateDocumentationPage);
     269                    stringBuilder.AppendLine(icon);
     270                }
     271            }
     272
     273            foreach (var dir in templatesDir.SubDirectories)
     274            {
     275                GenerateTemplateDescriptionSection(dir, stringBuilder, depth + 1,lang);
     276            }
     277        }
     278
     279        private string GenerateTemplateDescriptionCode(string lang)
     280        {
     281            var stringBuilder = new StringBuilder();
     282            //stringBuilder.AppendLine("\\chapter{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterSubTitle + "}");
     283            bool first = true;
     284            foreach (var dir in _templatesDir.SubDirectories)
     285            {
     286                stringBuilder.AppendLine("\\newpage");
     287                if (first) stringBuilder.AppendLine("\\label{part2}");
     288                first = false;
     289                GenerateTemplateDescriptionSection(dir, stringBuilder, 0, lang);
     290            }
     291            return stringBuilder.ToString();
    56292        }
    57293
     
    72308        }
    73309
    74         private string GenerateComponentIndexPages()
    75         {
    76             var componentListCode = GenerateComponentListCode(DocPages.FindAll(x => x is ComponentDocumentationPage).Select(x => (ComponentDocumentationPage)x), _lang);
    77             return componentListCode;
    78         }
    79 
    80         private static string GenerateComponentListCode(IEnumerable<ComponentDocumentationPage> componentDocumentationPages, string lang)
    81         {
    82             var stringBuilder = new StringBuilder();
    83             stringBuilder.AppendLine("<table width=\"100%\" border=\"0\" cellspacing=\"3\" cellpadding=\"3\" class=\"filterable\">");
    84 
    85             var anchorBuilder = new StringBuilder();
    86             anchorBuilder.Append("<p>");
    87 
    88             var query = from pages in componentDocumentationPages
    89                         orderby pages.Localizations[pages.Localizations.ContainsKey(lang) ? lang : "en"].Name
    90                         select pages;
    91 
    92             char actualIndexCharacter = ' ';
    93             foreach (var page in query)
    94             {
    95                 var linkedLang = page.Localizations.ContainsKey(lang) ? lang : "en";
    96                 var pp = (LocalizedComponentDocumentationPage)page.Localizations[linkedLang];
    97                 if (actualIndexCharacter != pp.Name[0])
    98                 {
    99                     //actualIndexCharacter = pp.Name.ToUpper()[0];
    100                     //stringBuilder.AppendLine(string.Format("<tr><td><h2 id=\"{0}\">{0}</h1></td><td></td></tr>", actualIndexCharacter));
    101                     //anchorBuilder.AppendLine(string.Format("<a href=\"#{0}\"><b>{0}</b><a>&nbsp;", actualIndexCharacter));
    102                     anchorBuilder.AppendLine(pp.Name);
    103                     anchorBuilder.AppendLine(pp.Introduction.Value);
    104                     //anchorBuilder.AppendLine(pp.Manual.Value);
    105                 }
    106                 //stringBuilder.AppendLine(string.Format("<tr><td><a href=\"{0}\">{1}</a></td><td>{2}</td></tr>",
    107                 //    OnlineHelp.GetPluginDocFilename(pp.PluginType, linkedLang), pp.Name, pp.ToolTip));
    108             }
    109 
    110             //stringBuilder.AppendLine("</table>");
    111             //stringBuilder.AppendLine("<script type=\"text/javascript\" src=\"filterTable.js\"></script>");
    112 
    113             //anchorBuilder.Append("</p>");
    114             //anchorBuilder.Append(stringBuilder);
    115             return anchorBuilder.ToString();
    116         }
    117 
    118         private string GenerateTemplateOverviewTableCode(string lang)
    119         {
    120             var stringBuilder = new StringBuilder();
    121             stringBuilder.AppendLine("\\chapter*{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterTitle + "}");
    122             stringBuilder.AppendLine("\\addcontentsline{toc}{chapter}{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterTitle + "}");
    123             stringBuilder.AppendLine("\\renewcommand{\\arraystretch}{2}");
    124             stringBuilder.AppendLine("\\begin{longtable}{lp{0.6\\textwidth}}");
    125            
    126             foreach (var dir in _templatesDir.SubDirectories)
    127             {
    128                 GenerateTemplateOverviewTableSection(dir, stringBuilder, 0, lang);
    129             }
    130 
    131             stringBuilder.AppendLine("\\end{longtable}");
    132             return stringBuilder.ToString();
    133         }
    134 
    135         private void GenerateTemplateOverviewTableSection(TemplateDirectory templatesDir, StringBuilder stringBuilder, int depth, string lang)
    136         {
    137             const string hspace = "\\hspace{2mm} ";
    138             var spaces = (depth>0) ? String.Format("\\hspace{{{0}mm}} ", depth*4) : "";
    139 
    140             stringBuilder.AppendLine("\\multicolumn{2}{l}{" + spaces + " \\textbf{" + Helper.EscapeLaTeX(templatesDir.GetName(lang)) + "}} \\\\");
    141 
    142             Boolean itemadded = false;
    143 
    144             foreach (var templateDocumentationPage in templatesDir.ContainingTemplateDocPages)
    145             {
    146                 var locTemplate = templateDocumentationPage.CurrentLocalization;
    147 
    148                 // get icon
    149                 String includeIcon = (locTemplate.Icon != null)
    150                     ? "\\includegraphics[width=16pt, height=16pt]{" + _objectConverter.GetImagePath(locTemplate.Icon, templateDocumentationPage.Name) + "}"
    151                     : "\\hspace{16pt}";
    152                 includeIcon = "\\begin{minipage}[c]{16pt}" + includeIcon + "\\end{minipage}";
    153 
    154                 // get templateName
    155                 String templateName = Helper.EscapeLaTeX(templateDocumentationPage.CurrentLocalization.Name);
    156                 templateName = "\\begin{flushleft}" + templateName + "\\end{flushleft}";
    157                 templateName = "\\begin{minipage}[t]{0.4\\textwidth}" + templateName + "\\end{minipage}";
    158 
    159                 // get summary
    160                 String summary = _objectConverter.Convert(locTemplate.Summary, templateDocumentationPage);
    161                 summary = "\\begin{flushleft}" + summary + "\\end{flushleft}";
    162                 summary = "\\begin{minipage}[t]{0.6\\textwidth}" + summary + "\\end{minipage}";
    163 
    164                 stringBuilder.AppendLine(String.Format("{0} {1} {2} & {3} \\\\", spaces + hspace, includeIcon, templateName, summary));
    165 
    166                 itemadded = true;
    167             }
    168 
    169             if( itemadded ) stringBuilder.AppendLine("\\\\");
    170 
    171             foreach (var dir in templatesDir.SubDirectories)
    172             {
    173                 GenerateTemplateOverviewTableSection(dir, stringBuilder, depth + 1, lang);
    174             }
    175         }
    176 
    177         private string SectionFromDepth(int depth)
    178         {
    179             if (depth == 0)
    180                 return "\\chapter";
    181 
    182             if (depth < 4)
    183                 return "\\" + string.Join("", Enumerable.Repeat("sub", depth-1)) + "section";
    184 
    185             return "\\paragraph";
    186         }
    187 
    188         private void GenerateTemplateDescriptionSection(TemplateDirectory templatesDir, StringBuilder stringBuilder, int depth, string lang)
    189         {
    190             stringBuilder.AppendLine(string.Format("{0}{{{1}}}", SectionFromDepth(depth), Helper.EscapeLaTeX(templatesDir.GetName(lang))));
    191 
    192             foreach (var templateDocumentationPage in templatesDir.ContainingTemplateDocPages)
    193             {
    194                 var locTemplate = templateDocumentationPage.CurrentLocalization;
    195 
    196                 var description = _objectConverter.Convert(locTemplate.Description, templateDocumentationPage);
    197                 description = Regex.Replace(description, "[\r\n]+", "\n");
    198 
    199                 var templateName = Helper.EscapeLaTeX(templateDocumentationPage.CurrentLocalization.Name);
    200                 stringBuilder.AppendLine(string.Format("{0}{{{1}}}", SectionFromDepth(depth+1), templateName));
    201                 stringBuilder.AppendLine(description);
    202 
    203                 if (_showAuthors)
    204                 {
    205                     var author = _objectConverter.Convert(locTemplate.AuthorName, templateDocumentationPage);
    206                     stringBuilder.AppendLine("");
    207                     stringBuilder.AppendLine("Author: " + author);
    208                     stringBuilder.AppendLine("");
    209                 }
    210 
    211                 if (!_noIcons && locTemplate.Icon != null)
    212                 {
    213                     var icon = _objectConverter.Convert(locTemplate.Icon, templateDocumentationPage);
    214                     stringBuilder.AppendLine(icon);
    215                 }
    216             }
    217 
    218             foreach (var dir in templatesDir.SubDirectories)
    219             {
    220                 GenerateTemplateDescriptionSection(dir, stringBuilder, depth + 1,lang);
    221             }
    222         }
    223 
    224         private string GenerateTemplateDescriptionCode(string lang)
    225         {
    226             var stringBuilder = new StringBuilder();
    227             //stringBuilder.AppendLine("\\chapter{" + OnlineDocumentationGenerator.Properties.Resources.LatexGenerator_ChapterSubTitle + "}");
    228             bool first = true;
    229             foreach (var dir in _templatesDir.SubDirectories)
    230             {
    231                 stringBuilder.AppendLine("\\newpage");
    232                 if (first) stringBuilder.AppendLine("\\label{part2}");
    233                 first = false;
    234                 GenerateTemplateDescriptionSection(dir, stringBuilder, 0, lang);
    235             }
    236             return stringBuilder.ToString();
    237         }
    238        
     310        private static string GetComponentCategory(ComponentCategory category)
     311        {
     312            switch (category)
     313            {
     314                case ComponentCategory.CiphersClassic:
     315                    return Properties.Resources.Category_Classic_Ciphers;
     316                case ComponentCategory.CiphersModernSymmetric:
     317                    return Properties.Resources.Category_CiphersModernSymmetric;
     318                case ComponentCategory.CiphersModernAsymmetric:
     319                    return Properties.Resources.Category_CiphersModernAsymmetric;
     320                case ComponentCategory.Steganography:
     321                    return Properties.Resources.Category_Steganography;
     322                case ComponentCategory.HashFunctions:
     323                    return Properties.Resources.Category_HashFunctions;
     324                case ComponentCategory.CryptanalysisSpecific:
     325                    return Properties.Resources.Category_CryptanalysisSpecific;
     326                case ComponentCategory.CryptanalysisGeneric:
     327                    return Properties.Resources.Category_CryptanalysisGeneric;
     328                case ComponentCategory.Protocols:
     329                    return Properties.Resources.Category_Protocols;
     330                case ComponentCategory.ToolsBoolean:
     331                    return Properties.Resources.Category_ToolsBoolean;
     332                case ComponentCategory.ToolsDataflow:
     333                    return Properties.Resources.Category_ToolsDataflow;
     334                case ComponentCategory.ToolsDataInputOutput:
     335                    return Properties.Resources.Category_ToolsDataInputOutput;
     336                case ComponentCategory.ToolsMisc:
     337                    return Properties.Resources.Category_ToolsMisc;
     338                case ComponentCategory.ToolsP2P:
     339                    return Properties.Resources.Category_ToolsP2P;
     340                default:
     341                    return Properties.Resources.Category_Unknown;
     342            }
     343        }
     344
    239345        private void StoreLaTeX(string content, string filename)
    240346        {
  • trunk/OnlineDocumentationGenerator/Generators/LaTeXGenerator/LaTeXTmpl-Templates-de.tex

    r5834 r5951  
    4747\newpage
    4848\large
    49 Dieses Dokument gibt eine Übersicht über die in {\bf CrypTool v2} enthaltenen Vorlagen (Templates).\\\\
    50 Der erste Teil dieses Dokumentes (``Übersicht über die Vorlagen’’) besteht aus einer kompakten Auflistung aller Vorlagen. Zu jeder Vorlage werden Ikone, Titel und eine kurze Zusammenfassung (Summary) aufgeführt. Die Auflistung der Vorlagen erfolgt in derselben Reihenfolge, wie sie im Startcenter von CT2 gruppiert sind.\\\\
    51 Ab Seite \pageref{part2} wird zusätzlich zu jeder Vorlage der im Programm verwendete Balloontext, der eine längere Beschreibung der Vorlage enthält, aufgeführt.
     49Dieses Dokument gibt eine Übersicht ÃŒber die in {\bf CrypTool v2} enthaltenen Vorlagen (Templates).\\\\
     50Der erste Teil dieses Dokumentes (``Übersicht ÃŒber die Vorlagen’’) besteht aus einer kompakten Auflistung aller Vorlagen. Zu jeder Vorlage werden Ikone, Titel und eine kurze Zusammenfassung (Summary) aufgefÃŒhrt. Die Auflistung der Vorlagen erfolgt in derselben Reihenfolge, wie sie im Startcenter von CT2 gruppiert sind.\\\\
     51Ab Seite \pageref{part2} wird zusÀtzlich zu jeder Vorlage der im Programm verwendete Balloontext, der eine lÀngere Beschreibung der Vorlage enthÀlt, aufgefÃŒhrt.
    5252\newpage
    5353\end{titlepage}
  • trunk/OnlineDocumentationGenerator/Generators/LaTeXGenerator/ObjectConverter.cs

    r5733 r5951  
    1818{
    1919    /// <summary>
    20     /// Class for converting an object to an LaTeX representation.
     20    /// Class for converting an object to LaTeX representation.
    2121    /// </summary>
    2222    class ObjectConverter
     
    5757            if (theObject is Reference.ReferenceList)
    5858            {
    59                 return ((Reference.ReferenceList)theObject).ToHTML(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
     59                return ((Reference.ReferenceList)theObject).ToLaTeX(Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
    6060            }
    6161            if (theObject is PropertyInfoAttribute[])
     
    7676            {
    7777                var codeBuilder = new StringBuilder();
    78                 codeBuilder.AppendLine("<table width=\"100%\"  border=\"1\">");
    79                 codeBuilder.AppendLine(string.Format("<tr> <th>{0}</th> <th>{1}</th> <th>{2}</th> </tr>",
    80                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Name,
    81                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Description,
    82                                                      Resources.HtmlGenerator_GenerateSettingsListCode_Type));
     78
     79                codeBuilder.AppendLine(@"\begin{tabular}{ | p{5cm} | p{7cm} | l | }");
     80                codeBuilder.AppendLine(@"\hline");
     81                codeBuilder.AppendLine(string.Format(@" {0} & {1} & {2} \\ \hline\hline",
     82                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Name) + "}",
     83                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Description) + "}",
     84                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateSettingsListCode_Type) + "}"));
    8385
    8486                foreach (var setting in settings)
    8587                {
    86                     codeBuilder.AppendLine(string.Format("<tr> <td>{0}</td> <td>{1}</td> <td>{2}</td> </tr>",
    87                                                          HttpUtility.HtmlEncode(setting.Caption), HttpUtility.HtmlEncode(setting.ToolTip),
    88                                                          GetControlTypeString(setting.ControlType)));
    89                 }
    90 
    91                 codeBuilder.AppendLine("</table>");
     88                    codeBuilder.AppendLine(
     89                        string.Format(@" {0} & {1} & {2} \\ \hline",
     90                                      Helper.EscapeLaTeX(setting.Caption),
     91                                      Helper.EscapeLaTeX(setting.ToolTip),
     92                                      GetControlTypeString(setting.ControlType)));
     93                }
     94
     95                codeBuilder.AppendLine(@"\end{tabular}");
     96
    9297                return codeBuilder.ToString();
    9398            }
     
    135140            {
    136141                var codeBuilder = new StringBuilder();
    137                 codeBuilder.AppendLine("<table width=\"100%\"  border=\"1\">");
    138                 codeBuilder.AppendLine(string.Format("<tr> <th>{0}</th> <th>{1}</th> <th>{2}</th> <th>{3}</th> </tr>",
    139                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Name,
    140                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Description,
    141                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Direction,
    142                                                      Resources.HtmlGenerator_GenerateConnectorListCode_Type));
     142
     143                codeBuilder.AppendLine(@"\begin{tabular}{ | p{3cm} | p{6cm} | l | l | }");
     144                codeBuilder.AppendLine(@"\hline");
     145                codeBuilder.AppendLine(string.Format(@" {0} & {1} & {2} & {3} \\ \hline\hline",
     146                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Name) + "}",
     147                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Description) + "}",
     148                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Direction) + "}",
     149                                                     @"\textbf{" + Helper.EscapeLaTeX(Resources.HtmlGenerator_GenerateConnectorListCode_Type) + "}"));
    143150               
    144151                foreach (var connector in connectors)
    145152                {
    146                     var type = connector.PropertyInfo.PropertyType.Name;
    147                     var color = ColorHelper.GetLineColor(connector.PropertyInfo.PropertyType);
    148153                    codeBuilder.AppendLine(
    149                         string.Format("<tr> <td bgcolor=\"#{0}{1}{2}\">{3}</td> <td bgcolor=\"#{0}{1}{2}\">{4}</td> <td bgcolor=\"#{0}{1}{2}\" nowrap>{5}</td> <td bgcolor=\"#{0}{1}{2}\">{6}</td> </tr>", color.R.ToString("x"), color.G.ToString("x"), color.B.ToString("x"),
    150                                       HttpUtility.HtmlEncode(connector.Caption),
    151                                       HttpUtility.HtmlEncode(connector.ToolTip),
     154                        string.Format(@" {0} & {1} & {2} & {3} \\ \hline",
     155                                      Helper.EscapeLaTeX(connector.Caption),
     156                                      Helper.EscapeLaTeX(connector.ToolTip),
    152157                                      GetDirectionString(connector.Direction),
    153                                       type));
    154                 }
    155 
    156                 codeBuilder.AppendLine("</table>");
     158                                      Helper.EscapeLaTeX(connector.PropertyInfo.PropertyType.Name)));
     159                }
     160
     161                codeBuilder.AppendLine(@"\end{tabular}");
     162
    157163                return codeBuilder.ToString();
    158164            }
     
    165171            {
    166172                case Direction.InputData:
    167                     return string.Format("◄ {0}", Resources.Input_data);
     173                    return string.Format(@"$\blacktriangleleft$ {0}", Resources.Input_data);
    168174                case Direction.OutputData:
    169                     return string.Format("► {0}", Resources.Output_data);
     175                    return string.Format(@"$\blacktriangleright$ {0}", Resources.Output_data);
    170176                case Direction.ControlSlave:
    171                     return string.Format("▲ {0}", Resources.Control_slave);
     177                    return string.Format(@"$\blacktriangle$ {0}", Resources.Control_slave);
    172178                case Direction.ControlMaster:
    173                     return string.Format("▼ {0}", Resources.Control_master);
     179                    return string.Format(@"$\blacktriangledown$ {0}", Resources.Control_master);
    174180                default:
    175181                    throw new ArgumentOutOfRangeException("direction");
     
    212218            var imagePath = GetImagePath(imageSource, filename);
    213219            var sb = new StringBuilder();
    214             sb.AppendLine("\\begin{figure}[!ht]");
    215             sb.AppendLine("\\begin{center}");
    216             sb.AppendLine("\\includegraphics[width=32pt, height=32pt]{" + imagePath + "}");
    217             sb.AppendLine("\\end{center}");
    218             sb.AppendLine("\\caption{" + Helper.EscapeLaTeX(caption) + "}");
    219             sb.AppendLine("\\end{figure}");
     220            sb.AppendLine(@"\begin{figure}[!ht]");
     221            sb.AppendLine(@"\begin{center}");
     222            //sb.AppendLine("@\includegraphics[width=32pt, height=32pt]{" + imagePath + "}");
     223            sb.AppendLine(@"\includegraphics[max height=5cm,max width=\textwidth]{" + imagePath + "}");
     224            sb.AppendLine(@"\end{center}");
     225            sb.AppendLine(@"\caption{" + Helper.EscapeLaTeX(caption) + "}");
     226            sb.AppendLine(@"\end{figure}");
    220227            return sb.ToString();
    221228        }
     
    261268                    string text = ((XText)node).Value;
    262269                    text = Regex.Replace(text, "[\r\n]+", "\n");
     270                    text = Regex.Replace(text, "[\t ]+\n", "\n");
     271                    text = Regex.Replace(text, "[\t ]+\\\\\n", "\\\\\n");
    263272                    result.Append(Helper.EscapeLaTeX(text));
    264273                }
     
    271280                        case "i":
    272281                        case "u":
    273                             var fontDict = new Dictionary<string, string> {{"b", "\\textbf"}, {"i", "\\textit"}, {"u", "\\textbf"}};
     282                            var fontDict = new Dictionary<string, string> {{"b", "\\textbf"}, {"i", "\\textit"}, {"u", "\\underline"}};
    274283                            var nodeRep = ConvertXElement((XElement)node, entityDocumentationPage);
    275284                            result.Append(fontDict[nodeName] + "{" + nodeRep + "}");
     
    298307                                    srcAtt.Value.Substring(0, sIndex), srcAtt.Value.Substring(sIndex + 1))));
    299308                                var filename = string.Format("{0}_{1}", entityDocumentationPage.Name, Path.GetFileNameWithoutExtension(srcAtt.Value));
    300                                 result.Append(ConvertImageSource(image, filename, Path.GetFileNameWithoutExtension(srcAtt.Value)));
     309                                var captionAtt = ((XElement)node).Attribute("caption");
     310                                var caption = (captionAtt != null) ? captionAtt.Value : Path.GetFileNameWithoutExtension(srcAtt.Value);
     311                                result.Append(ConvertImageSource(image, filename, caption));
    301312                            }
    302313                            break;
    303314                        case "newline":
    304                             result.AppendLine("\\\\\n");
     315                            result.Append("\\\\\n");
    305316                            break;
    306317                        case "section":
  • trunk/OnlineDocumentationGenerator/OnlineDocumentationGenerator.csproj

    r5741 r5951  
    118118  </ItemGroup>
    119119  <ItemGroup>
     120    <None Include="Generators\LaTeXGenerator\LaTeXTmpl-Appendix.tex" />
     121    <None Include="Generators\LaTeXGenerator\LaTeXTmpl-Components-de.tex" />
     122    <None Include="Generators\LaTeXGenerator\LaTeXTmpl-Components-en.tex" />
     123    <None Include="Generators\LaTeXGenerator\LaTeXTmpl-Templates-de.tex" />
     124    <None Include="Generators\LaTeXGenerator\LaTeXTmpl-Templates-en.tex" />
    120125    <None Include="Resources\LaTeXAppendix.txt" />
    121126    <Resource Include="StaticDocs\Images\CT2-Paillier.png" />
     
    167172    <Resource Include="Generators\HtmlGenerator\MathJax.zip" />
    168173  </ItemGroup>
    169   <ItemGroup>
    170     <Resource Include="Generators\LaTeXGenerator\LaTeXTemplate.tex" />
    171   </ItemGroup>
    172   <ItemGroup>
    173     <None Include="Generators\LaTeXGenerator\LaTeXTemplate-en.tex" />
    174     <Resource Include="Generators\LaTeXGenerator\LaTeXAppendix.tex" />
    175   </ItemGroup>
    176174  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
    177175  <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
  • trunk/OnlineDocumentationGenerator/Properties/Resources.Designer.cs

    r5741 r5951  
    22// <auto-generated>
    33//     Dieser Code wurde von einem Tool generiert.
    4 //     Laufzeitversion:4.0.30319.1008
     4//     Laufzeitversion:4.0.30319.1022
    55//
    66//     Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
     
    8888       
    8989        /// <summary>
     90        ///   Sucht eine lokalisierte Zeichenfolge, die Modern asymmetric ciphers ähnelt.
     91        /// </summary>
     92        public static string Category_CiphersModernAsymmetric {
     93            get {
     94                return ResourceManager.GetString("Category_CiphersModernAsymmetric", resourceCulture);
     95            }
     96        }
     97       
     98        /// <summary>
     99        ///   Sucht eine lokalisierte Zeichenfolge, die Modern symmetric ciphers ähnelt.
     100        /// </summary>
     101        public static string Category_CiphersModernSymmetric {
     102            get {
     103                return ResourceManager.GetString("Category_CiphersModernSymmetric", resourceCulture);
     104            }
     105        }
     106       
     107        /// <summary>
     108        ///   Sucht eine lokalisierte Zeichenfolge, die Classic ciphers ähnelt.
     109        /// </summary>
     110        public static string Category_Classic_Ciphers {
     111            get {
     112                return ResourceManager.GetString("Category_Classic_Ciphers", resourceCulture);
     113            }
     114        }
     115       
     116        /// <summary>
     117        ///   Sucht eine lokalisierte Zeichenfolge, die Cryptanalysis - Generic ähnelt.
     118        /// </summary>
     119        public static string Category_CryptanalysisGeneric {
     120            get {
     121                return ResourceManager.GetString("Category_CryptanalysisGeneric", resourceCulture);
     122            }
     123        }
     124       
     125        /// <summary>
     126        ///   Sucht eine lokalisierte Zeichenfolge, die Cryptanalysis - Specific ähnelt.
     127        /// </summary>
     128        public static string Category_CryptanalysisSpecific {
     129            get {
     130                return ResourceManager.GetString("Category_CryptanalysisSpecific", resourceCulture);
     131            }
     132        }
     133       
     134        /// <summary>
     135        ///   Sucht eine lokalisierte Zeichenfolge, die Hash functions ähnelt.
     136        /// </summary>
     137        public static string Category_HashFunctions {
     138            get {
     139                return ResourceManager.GetString("Category_HashFunctions", resourceCulture);
     140            }
     141        }
     142       
     143        /// <summary>
     144        ///   Sucht eine lokalisierte Zeichenfolge, die Protocols ähnelt.
     145        /// </summary>
     146        public static string Category_Protocols {
     147            get {
     148                return ResourceManager.GetString("Category_Protocols", resourceCulture);
     149            }
     150        }
     151       
     152        /// <summary>
     153        ///   Sucht eine lokalisierte Zeichenfolge, die Steganography ähnelt.
     154        /// </summary>
     155        public static string Category_Steganography {
     156            get {
     157                return ResourceManager.GetString("Category_Steganography", resourceCulture);
     158            }
     159        }
     160       
     161        /// <summary>
     162        ///   Sucht eine lokalisierte Zeichenfolge, die Tools - Boolean ähnelt.
     163        /// </summary>
     164        public static string Category_ToolsBoolean {
     165            get {
     166                return ResourceManager.GetString("Category_ToolsBoolean", resourceCulture);
     167            }
     168        }
     169       
     170        /// <summary>
     171        ///   Sucht eine lokalisierte Zeichenfolge, die Tools - Dataflow ähnelt.
     172        /// </summary>
     173        public static string Category_ToolsDataflow {
     174            get {
     175                return ResourceManager.GetString("Category_ToolsDataflow", resourceCulture);
     176            }
     177        }
     178       
     179        /// <summary>
     180        ///   Sucht eine lokalisierte Zeichenfolge, die Tools - Data input and output ähnelt.
     181        /// </summary>
     182        public static string Category_ToolsDataInputOutput {
     183            get {
     184                return ResourceManager.GetString("Category_ToolsDataInputOutput", resourceCulture);
     185            }
     186        }
     187       
     188        /// <summary>
     189        ///   Sucht eine lokalisierte Zeichenfolge, die Tools - Miscellaneous ähnelt.
     190        /// </summary>
     191        public static string Category_ToolsMisc {
     192            get {
     193                return ResourceManager.GetString("Category_ToolsMisc", resourceCulture);
     194            }
     195        }
     196       
     197        /// <summary>
     198        ///   Sucht eine lokalisierte Zeichenfolge, die Tools - Peer2Peer ähnelt.
     199        /// </summary>
     200        public static string Category_ToolsP2P {
     201            get {
     202                return ResourceManager.GetString("Category_ToolsP2P", resourceCulture);
     203            }
     204        }
     205       
     206        /// <summary>
     207        ///   Sucht eine lokalisierte Zeichenfolge, die Others ähnelt.
     208        /// </summary>
     209        public static string Category_Unknown {
     210            get {
     211                return ResourceManager.GetString("Category_Unknown", resourceCulture);
     212            }
     213        }
     214       
     215        /// <summary>
    90216        ///   Sucht eine lokalisierte Zeichenfolge, die Check box ähnelt.
    91217        /// </summary>
     
    97223       
    98224        /// <summary>
    99         ///   Sucht eine lokalisierte Zeichenfolge, die Modern asymmetric ciphers ähnelt.
    100         /// </summary>
    101         public static string CiphersModernAsymmetric {
    102             get {
    103                 return ResourceManager.GetString("CiphersModernAsymmetric", resourceCulture);
    104             }
    105         }
    106        
    107         /// <summary>
    108         ///   Sucht eine lokalisierte Zeichenfolge, die Modern symmetric ciphers ähnelt.
    109         /// </summary>
    110         public static string CiphersModernSymmetric {
    111             get {
    112                 return ResourceManager.GetString("CiphersModernSymmetric", resourceCulture);
    113             }
    114         }
    115        
    116         /// <summary>
    117         ///   Sucht eine lokalisierte Zeichenfolge, die Classic ciphers ähnelt.
    118         /// </summary>
    119         public static string Classic_Ciphers {
    120             get {
    121                 return ResourceManager.GetString("Classic_Ciphers", resourceCulture);
    122             }
    123         }
    124        
    125         /// <summary>
    126225        ///   Sucht eine lokalisierte Zeichenfolge, die Combo box ähnelt.
    127226        /// </summary>
     
    133232       
    134233        /// <summary>
     234        ///   Sucht eine lokalisierte Zeichenfolge, die Connections ähnelt.
     235        /// </summary>
     236        public static string ComponentTemplate_Connections {
     237            get {
     238                return ResourceManager.GetString("ComponentTemplate_Connections", resourceCulture);
     239            }
     240        }
     241       
     242        /// <summary>
     243        ///   Sucht eine lokalisierte Zeichenfolge, die Introduction ähnelt.
     244        /// </summary>
     245        public static string ComponentTemplate_Introduction {
     246            get {
     247                return ResourceManager.GetString("ComponentTemplate_Introduction", resourceCulture);
     248            }
     249        }
     250       
     251        /// <summary>
     252        ///   Sucht eine lokalisierte Zeichenfolge, die Presentation ähnelt.
     253        /// </summary>
     254        public static string ComponentTemplate_Presentation {
     255            get {
     256                return ResourceManager.GetString("ComponentTemplate_Presentation", resourceCulture);
     257            }
     258        }
     259       
     260        /// <summary>
     261        ///   Sucht eine lokalisierte Zeichenfolge, die Settings ähnelt.
     262        /// </summary>
     263        public static string ComponentTemplate_Settings {
     264            get {
     265                return ResourceManager.GetString("ComponentTemplate_Settings", resourceCulture);
     266            }
     267        }
     268       
     269        /// <summary>
     270        ///   Sucht eine lokalisierte Zeichenfolge, die Usage ähnelt.
     271        /// </summary>
     272        public static string ComponentTemplate_Usage {
     273            get {
     274                return ResourceManager.GetString("ComponentTemplate_Usage", resourceCulture);
     275            }
     276        }
     277       
     278        /// <summary>
    135279        ///   Sucht eine lokalisierte Zeichenfolge, die Control master ähnelt.
    136280        /// </summary>
     
    151295       
    152296        /// <summary>
    153         ///   Sucht eine lokalisierte Zeichenfolge, die Cryptanalysis generic ähnelt.
    154         /// </summary>
    155         public static string CryptanalysisGeneric {
    156             get {
    157                 return ResourceManager.GetString("CryptanalysisGeneric", resourceCulture);
    158             }
    159         }
    160        
    161         /// <summary>
    162         ///   Sucht eine lokalisierte Zeichenfolge, die Cryptanalysis specific ähnelt.
    163         /// </summary>
    164         public static string CryptanalysisSpecific {
    165             get {
    166                 return ResourceManager.GetString("CryptanalysisSpecific", resourceCulture);
    167             }
    168         }
    169        
    170         /// <summary>
    171297        ///   Sucht eine lokalisierte Zeichenfolge, die Description ähnelt.
    172298        /// </summary>
     
    192318            get {
    193319                return ResourceManager.GetString("File", resourceCulture);
    194             }
    195         }
    196        
    197         /// <summary>
    198         ///   Sucht eine lokalisierte Zeichenfolge, die Hash functions ähnelt.
    199         /// </summary>
    200         public static string HashFunctions {
    201             get {
    202                 return ResourceManager.GetString("HashFunctions", resourceCulture);
    203320            }
    204321        }
     
    282399            get {
    283400                return ResourceManager.GetString("Key_text_box", resourceCulture);
     401            }
     402        }
     403       
     404        /// <summary>
     405        ///   Sucht eine lokalisierte Zeichenfolge, die The Templates ähnelt.
     406        /// </summary>
     407        public static string LatexGenerator_ChapterSubTitle {
     408            get {
     409                return ResourceManager.GetString("LatexGenerator_ChapterSubTitle", resourceCulture);
     410            }
     411        }
     412       
     413        /// <summary>
     414        ///   Sucht eine lokalisierte Zeichenfolge, die Overview over the Templates ähnelt.
     415        /// </summary>
     416        public static string LatexGenerator_ChapterTitle {
     417            get {
     418                return ResourceManager.GetString("LatexGenerator_ChapterTitle", resourceCulture);
    284419            }
    285420        }
     
    312447        /// ähnelt.
    313448        /// </summary>
    314         public static string LaTeXAppendix {
    315             get {
    316                 return ResourceManager.GetString("LaTeXAppendix", resourceCulture);
    317             }
    318         }
    319        
    320         /// <summary>
    321         ///   Sucht eine lokalisierte Zeichenfolge, die The Templates ähnelt.
    322         /// </summary>
    323         public static string LatexGenerator_ChapterSubTitle {
    324             get {
    325                 return ResourceManager.GetString("LatexGenerator_ChapterSubTitle", resourceCulture);
    326             }
    327         }
    328        
    329         /// <summary>
    330         ///   Sucht eine lokalisierte Zeichenfolge, die Overview over the Templates ähnelt.
    331         /// </summary>
    332         public static string LatexGenerator_ChapterTitle {
    333             get {
    334                 return ResourceManager.GetString("LatexGenerator_ChapterTitle", resourceCulture);
     449        public static string LaTeXTmpl_Appendix {
     450            get {
     451                return ResourceManager.GetString("LaTeXTmpl_Appendix", resourceCulture);
     452            }
     453        }
     454       
     455        /// <summary>
     456        ///   Sucht eine lokalisierte Zeichenfolge, die \documentclass[10pt,a4paper]{scrreprt}
     457        ///\usepackage[utf8]{inputenc}
     458        ///\usepackage{amsmath}
     459        ///\usepackage{tipa}
     460        ///\usepackage{amsfonts}
     461        ///\usepackage[english]{babel}
     462        ///\usepackage{graphicx}
     463        ///\usepackage{amssymb}
     464        ///\usepackage{parskip}
     465        ///\usepackage{german,longtable}
     466        ///\usepackage[export]{adjustbox}
     467        ///\setcounter{tocdepth}{4}
     468        ///\setcounter{secnumdepth}{4}
     469        ///
     470        ///\makeatletter \setlength\@fptop{0\p@}
     471        ///\makeatother
     472        ///
     473        ///\title{Documentation of the Components in CrypTool v2 (CT2)}
     474        ///\author{The CrypTool 2 Team}
     475        ///
     476        ///\newcommand{\HRule}{\rule{\linewid [Rest der Zeichenfolge wurde abgeschnitten]&quot;; ähnelt.
     477        /// </summary>
     478        public static string LaTeXTmpl_Components {
     479            get {
     480                return ResourceManager.GetString("LaTeXTmpl_Components", resourceCulture);
    335481            }
    336482        }
     
    359505        /// [Rest der Zeichenfolge wurde abgeschnitten]&quot;; ähnelt.
    360506        /// </summary>
    361         public static string LaTeXTemplate {
    362             get {
    363                 return ResourceManager.GetString("LaTeXTemplate", resourceCulture);
     507        public static string LaTeXTmpl_Templates {
     508            get {
     509                return ResourceManager.GetString("LaTeXTmpl_Templates", resourceCulture);
    364510            }
    365511        }
     
    420566       
    421567        /// <summary>
    422         ///   Sucht eine lokalisierte Zeichenfolge, die Protocols ähnelt.
    423         /// </summary>
    424         public static string Protocols {
    425             get {
    426                 return ResourceManager.GetString("Protocols", resourceCulture);
    427             }
    428         }
    429        
    430         /// <summary>
    431568        ///   Sucht eine lokalisierte Zeichenfolge, die Radio button ähnelt.
    432569        /// </summary>
     
    452589            get {
    453590                return ResourceManager.GetString("Slider", resourceCulture);
    454             }
    455         }
    456        
    457         /// <summary>
    458         ///   Sucht eine lokalisierte Zeichenfolge, die Steganography ähnelt.
    459         /// </summary>
    460         public static string Steganography {
    461             get {
    462                 return ResourceManager.GetString("Steganography", resourceCulture);
    463591            }
    464592        }
     
    671799            }
    672800        }
    673        
    674         /// <summary>
    675         ///   Sucht eine lokalisierte Zeichenfolge, die Tools boolean ähnelt.
    676         /// </summary>
    677         public static string ToolsBoolean {
    678             get {
    679                 return ResourceManager.GetString("ToolsBoolean", resourceCulture);
    680             }
    681         }
    682        
    683         /// <summary>
    684         ///   Sucht eine lokalisierte Zeichenfolge, die Tools dataflow ähnelt.
    685         /// </summary>
    686         public static string ToolsDataflow {
    687             get {
    688                 return ResourceManager.GetString("ToolsDataflow", resourceCulture);
    689             }
    690         }
    691        
    692         /// <summary>
    693         ///   Sucht eine lokalisierte Zeichenfolge, die Tools data input output ähnelt.
    694         /// </summary>
    695         public static string ToolsDataInputOutput {
    696             get {
    697                 return ResourceManager.GetString("ToolsDataInputOutput", resourceCulture);
    698             }
    699         }
    700        
    701         /// <summary>
    702         ///   Sucht eine lokalisierte Zeichenfolge, die Tools misc ähnelt.
    703         /// </summary>
    704         public static string ToolsMisc {
    705             get {
    706                 return ResourceManager.GetString("ToolsMisc", resourceCulture);
    707             }
    708         }
    709        
    710         /// <summary>
    711         ///   Sucht eine lokalisierte Zeichenfolge, die Tools Peer2Peer ähnelt.
    712         /// </summary>
    713         public static string ToolsP2P {
    714             get {
    715                 return ResourceManager.GetString("ToolsP2P", resourceCulture);
    716             }
    717         }
    718        
    719         /// <summary>
    720         ///   Sucht eine lokalisierte Zeichenfolge, die Others ähnelt.
    721         /// </summary>
    722         public static string Unknown_Category {
    723             get {
    724                 return ResourceManager.GetString("Unknown_Category", resourceCulture);
    725             }
    726         }
    727801    }
    728802}
  • trunk/OnlineDocumentationGenerator/Properties/Resources.de.resx

    r5280 r5951  
    193193    <value>Kontroll-Meister</value>
    194194  </data>
    195   <data name="CiphersModernAsymmetric" xml:space="preserve">
     195  <data name="Category_CiphersModernAsymmetric" xml:space="preserve">
    196196    <value>Moderne asymmetrische Verfahren</value>
    197197  </data>
    198   <data name="CiphersModernSymmetric" xml:space="preserve">
     198  <data name="Category_CiphersModernSymmetric" xml:space="preserve">
    199199    <value>Moderne symmetrische Verfahren</value>
    200200  </data>
    201   <data name="Classic_Ciphers" xml:space="preserve">
     201  <data name="Category_Classic_Ciphers" xml:space="preserve">
    202202    <value>Klassische Verfahren</value>
    203203  </data>
    204   <data name="CryptanalysisGeneric" xml:space="preserve">
     204  <data name="Category_CryptanalysisGeneric" xml:space="preserve">
    205205    <value>Generische Kryptoanalyse</value>
    206206  </data>
    207   <data name="CryptanalysisSpecific" xml:space="preserve">
     207  <data name="Category_CryptanalysisSpecific" xml:space="preserve">
    208208    <value>Spezifische Kryptoanalyse</value>
    209209  </data>
    210   <data name="HashFunctions" xml:space="preserve">
     210  <data name="Category_HashFunctions" xml:space="preserve">
    211211    <value>Hash-Funktionen</value>
    212212  </data>
    213   <data name="Protocols" xml:space="preserve">
     213  <data name="Category_Protocols" xml:space="preserve">
    214214    <value>Protokolle</value>
    215215  </data>
    216   <data name="Steganography" xml:space="preserve">
     216  <data name="Category_Steganography" xml:space="preserve">
    217217    <value>Steganographie</value>
    218218  </data>
    219   <data name="ToolsBoolean" xml:space="preserve">
    220     <value>Werkzeuge Boolean</value>
    221   </data>
    222   <data name="ToolsDataflow" xml:space="preserve">
    223     <value>Werkzeuge Dataflow</value>
    224   </data>
    225   <data name="ToolsDataInputOutput" xml:space="preserve">
    226     <value>Werkzeuge Daten-Input/Daten-Output</value>
    227   </data>
    228   <data name="ToolsMisc" xml:space="preserve">
    229     <value>Werkzeuge diverse</value>
    230   </data>
    231   <data name="ToolsP2P" xml:space="preserve">
    232     <value>Werkzeuge Peer2Peer</value>
    233   </data>
    234   <data name="Unknown_Category" xml:space="preserve">
     219  <data name="Category_ToolsBoolean" xml:space="preserve">
     220    <value>Werkzeuge - Boolean</value>
     221  </data>
     222  <data name="Category_ToolsDataflow" xml:space="preserve">
     223    <value>Werkzeuge - Dataflow</value>
     224  </data>
     225  <data name="Category_ToolsDataInputOutput" xml:space="preserve">
     226    <value>Werkzeuge - Daten-Ein- und Ausgabe</value>
     227  </data>
     228  <data name="Category_ToolsMisc" xml:space="preserve">
     229    <value>Werkzeuge - Diverse</value>
     230  </data>
     231  <data name="Category_ToolsP2P" xml:space="preserve">
     232    <value>Werkzeuge - Peer2Peer</value>
     233  </data>
     234  <data name="Category_Unknown" xml:space="preserve">
    235235    <value>Andere</value>
    236236  </data>
     
    241241    <value>Übersicht über die Vorlagen</value>
    242242  </data>
     243  <data name="ComponentTemplate_Introduction" xml:space="preserve">
     244    <value>Einleitung</value>
     245  </data>
     246  <data name="ComponentTemplate_Presentation" xml:space="preserve">
     247    <value>Präsentation</value>
     248  </data>
     249  <data name="ComponentTemplate_Usage" xml:space="preserve">
     250    <value>Benutzung</value>
     251  </data>
     252  <data name="HtmlGenerator_GenerateConnectorListCode_Name" xml:space="preserve">
     253    <value>Name</value>
     254  </data>
     255  <data name="Key_text_box" xml:space="preserve">
     256    <value>Key text box</value>
     257  </data>
    243258  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    244   <data name="LaTeXTemplate" type="System.Resources.ResXFileRef, System.Windows.Forms">
    245     <value>..\Generators\LaTeXGenerator\LaTeXTemplate.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
     259  <data name="LaTeXTmpl_Appendix" type="System.Resources.ResXFileRef, System.Windows.Forms">
     260    <value>..\generators\latexgenerator\latextmpl-appendix.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     261  </data>
     262  <data name="LaTeXTmpl_Components" type="System.Resources.ResXFileRef, System.Windows.Forms">
     263    <value>..\generators\latexgenerator\latextmpl-components-de.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     264  </data>
     265  <data name="LaTeXTmpl_Templates" type="System.Resources.ResXFileRef, System.Windows.Forms">
     266    <value>..\generators\latexgenerator\latextmpl-templates-de.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     267  </data>
     268  <data name="Null" xml:space="preserve">
     269    <value>Null</value>
     270  </data>
     271  <data name="ComponentTemplate_Connections" xml:space="preserve">
     272    <value>Konnektoren</value>
     273  </data>
     274  <data name="ComponentTemplate_Settings" xml:space="preserve">
     275    <value>Einstellungen</value>
    246276  </data>
    247277</root>
  • trunk/OnlineDocumentationGenerator/Properties/Resources.resx

    r5741 r5951  
    209209    <value>Control master</value>
    210210  </data>
    211   <data name="CiphersModernAsymmetric" xml:space="preserve">
     211  <data name="Category_CiphersModernAsymmetric" xml:space="preserve">
    212212    <value>Modern asymmetric ciphers</value>
    213213  </data>
    214   <data name="CiphersModernSymmetric" xml:space="preserve">
     214  <data name="Category_CiphersModernSymmetric" xml:space="preserve">
    215215    <value>Modern symmetric ciphers</value>
    216216  </data>
    217   <data name="Classic_Ciphers" xml:space="preserve">
     217  <data name="Category_Classic_Ciphers" xml:space="preserve">
    218218    <value>Classic ciphers</value>
    219219  </data>
    220   <data name="CryptanalysisGeneric" xml:space="preserve">
    221     <value>Cryptanalysis generic</value>
    222   </data>
    223   <data name="CryptanalysisSpecific" xml:space="preserve">
    224     <value>Cryptanalysis specific</value>
    225   </data>
    226   <data name="HashFunctions" xml:space="preserve">
     220  <data name="Category_CryptanalysisGeneric" xml:space="preserve">
     221    <value>Cryptanalysis - Generic</value>
     222  </data>
     223  <data name="Category_CryptanalysisSpecific" xml:space="preserve">
     224    <value>Cryptanalysis - Specific</value>
     225  </data>
     226  <data name="Category_HashFunctions" xml:space="preserve">
    227227    <value>Hash functions</value>
    228228  </data>
    229   <data name="Protocols" xml:space="preserve">
     229  <data name="Category_Protocols" xml:space="preserve">
    230230    <value>Protocols</value>
    231231  </data>
    232   <data name="Steganography" xml:space="preserve">
     232  <data name="Category_Steganography" xml:space="preserve">
    233233    <value>Steganography</value>
    234234  </data>
    235   <data name="ToolsBoolean" xml:space="preserve">
    236     <value>Tools boolean</value>
    237   </data>
    238   <data name="ToolsDataflow" xml:space="preserve">
    239     <value>Tools dataflow</value>
    240   </data>
    241   <data name="ToolsDataInputOutput" xml:space="preserve">
    242     <value>Tools data input output</value>
    243   </data>
    244   <data name="ToolsMisc" xml:space="preserve">
    245     <value>Tools misc</value>
    246   </data>
    247   <data name="ToolsP2P" xml:space="preserve">
    248     <value>Tools Peer2Peer</value>
    249   </data>
    250   <data name="Unknown_Category" xml:space="preserve">
     235  <data name="Category_ToolsBoolean" xml:space="preserve">
     236    <value>Tools - Boolean</value>
     237  </data>
     238  <data name="Category_ToolsDataflow" xml:space="preserve">
     239    <value>Tools - Dataflow</value>
     240  </data>
     241  <data name="Category_ToolsDataInputOutput" xml:space="preserve">
     242    <value>Tools - Data input and output</value>
     243  </data>
     244  <data name="Category_ToolsMisc" xml:space="preserve">
     245    <value>Tools - Miscellaneous</value>
     246  </data>
     247  <data name="Category_ToolsP2P" xml:space="preserve">
     248    <value>Tools - Peer2Peer</value>
     249  </data>
     250  <data name="Category_Unknown" xml:space="preserve">
    251251    <value>Others</value>
    252252  </data>
     
    275275    <value>..\generators\htmlgenerator\templateeditorindex.html;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
    276276  </data>
    277   <data name="LaTeXTemplate" type="System.Resources.ResXFileRef, System.Windows.Forms">
    278     <value>..\generators\latexgenerator\latextemplate-en.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
    279   </data>
    280277  <data name="LatexGenerator_ChapterSubTitle" xml:space="preserve">
    281278    <value>The Templates</value>
     
    284281    <value>Overview over the Templates</value>
    285282  </data>
    286   <data name="LaTeXAppendix" type="System.Resources.ResXFileRef, System.Windows.Forms">
    287     <value>..\generators\latexgenerator\latexappendix.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
     283  <data name="ComponentTemplate_Introduction" xml:space="preserve">
     284    <value>Introduction</value>
     285  </data>
     286  <data name="ComponentTemplate_Presentation" xml:space="preserve">
     287    <value>Presentation</value>
     288  </data>
     289  <data name="ComponentTemplate_Usage" xml:space="preserve">
     290    <value>Usage</value>
     291  </data>
     292  <data name="LaTeXTmpl_Appendix" type="System.Resources.ResXFileRef, System.Windows.Forms">
     293    <value>..\generators\latexgenerator\latextmpl-appendix.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     294  </data>
     295  <data name="LaTeXTmpl_Components" type="System.Resources.ResXFileRef, System.Windows.Forms">
     296    <value>..\generators\latexgenerator\latextmpl-components-en.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     297  </data>
     298  <data name="LaTeXTmpl_Templates" type="System.Resources.ResXFileRef, System.Windows.Forms">
     299    <value>..\generators\latexgenerator\latextmpl-templates-en.tex;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;utf-8</value>
     300  </data>
     301  <data name="ComponentTemplate_Connections" xml:space="preserve">
     302    <value>Connections</value>
     303  </data>
     304  <data name="ComponentTemplate_Settings" xml:space="preserve">
     305    <value>Settings</value>
    288306  </data>
    289307</root>
  • trunk/OnlineDocumentationGenerator/Reference/ReferenceList.cs

    r5245 r5951  
    5858            return builder.ToString();
    5959        }
     60
     61        public string ToLaTeX(string lang)
     62        {
     63            if (_references.Count == 0)
     64            {
     65                return Resources.NoContent;
     66            }
     67
     68            var builder = new StringBuilder();
     69            builder.AppendLine("<p><table border=\"0\" width=\"90%\">");
     70
     71            int no = 1;
     72            foreach (var reference in _references)
     73            {
     74                if (reference.ID != null)
     75                {
     76                    builder.AppendLine(string.Format("<tr><td align=\"right\" valign=\"top\"><div id=\"{0}\">[{1}]</div></td><td valign=\"top\">{2}</td></tr>", reference.ID, no, reference.ToHTML(lang)));
     77                }
     78                else
     79                {
     80                    builder.AppendLine(string.Format("<tr><td align=\"right\" valign=\"top\"><div>[{0}]</div></td><td valign=\"top\">{1}</td></tr>", no, reference.ToHTML(lang)));
     81                }
     82                builder.AppendLine();
     83                no++;
     84            }
     85
     86            builder.AppendLine("</table></p>");
     87            return builder.ToString();
     88        }
    6089    }
    6190}
Note: See TracChangeset for help on using the changeset viewer.