diff --git a/Records.cs b/Records.cs index 4c72dfc..6ca55c5 100644 --- a/Records.cs +++ b/Records.cs @@ -153,7 +153,6 @@ namespace Txt2Bib.Records { public string Type { get; init; } = "inproceedings"; public string[] Author { get; set; } = Array.Empty(); - public string[] Editor { get; set; } = Array.Empty(); public string Title { get; set; } = ""; public string BookTitle { get; set; } = ""; public ushort Year { get; set; } = 1950; @@ -209,4 +208,68 @@ namespace Txt2Bib.Records "}\n"; } } + + public record class Chapter : ItemType, IBib + { + public string Type { get; init; } = "incollection"; + public string[] Author { get; set; } = Array.Empty(); + public string[] Editor { get; set; } = Array.Empty(); + public string Title { get; set; } = ""; + public string BookTitle { get; set; } = ""; + public ushort Year { get; set; } = 1950; + public string Publisher { get; set; } = ""; + public string Address { get; set; } = ""; + public ushort FirstPage { get; set; } = 1; + public ushort LastPage { get; set; } = 1; + public string Url { get; set; } = ""; + public string Doi { get; set; } = ""; + + public string Convert(string[] entryLines) + { + Author = entryLines[1].Split(',').Select(a => Rearrange(a)).ToArray(); + Year = ushort.Parse(entryLines[2]); + Title = entryLines[3]; + Editor = entryLines[4].Replace("(eds.)", "").Split(',').Select(a => Rearrange(a)).ToArray(); + BookTitle = entryLines[5]; + Address = entryLines[6] != String.Empty ? entryLines[6] : Address; + Publisher = entryLines[7]; + try + { + FirstPage = ushort.Parse(entryLines[8].Split('-')[0]); + LastPage = ushort.Parse(entryLines[8].Split('-')[1].TrimEnd('.')); + } + catch (Exception) + { + throw; + } + + if (entryLines.Length > 9) + { + if (IsDoi(entryLines[9])) Doi = entryLines[9]; + else Url = entryLines[9]; + } + + return ToString(); + } + + public override string ToString() + { + string label = Author[0][..5].Replace(". ", ""); + string authString = $"\tauthor = \"{string.Join(" and ", Author)}\",\n"; + string edsString = $"\teditor = \"{string.Join(" and ", Editor)}\",\n"; + + return $"@{Type}{{{label}_{Year},\n" + + authString + + edsString + + $"\ttitle = {{{Title}}},\n" + + $"\tbooktitle = {{{BookTitle}}},\n" + + $"\tpublisher = \"{Publisher}\",\n" + + $"\taddress = \"{Address}\",\n" + + $"\tyear = \"{Year}\",\n" + + $"\tpages = \"{FirstPage}--{LastPage}\",\n" + + $"\turl = \"{Url}\",\n" + + $"\tdoi = \"{Doi}\",\n" + + "}\n"; + } + } } \ No newline at end of file diff --git a/Text2Bib.cs b/Text2Bib.cs index 9d50eb5..9cb163d 100644 --- a/Text2Bib.cs +++ b/Text2Bib.cs @@ -15,7 +15,7 @@ namespace Txt2Bib /// public class Text2Bib { - private string[] _citTypes = { "J", "B", "C", "P", "I" }; + private string[] _citTypes = { "J", "B", "C", "P" }; /// /// Generate single .bib file from input text files @@ -84,7 +84,7 @@ namespace Txt2Bib { "J" => new Article().Convert(lines), "B" => new Book().Convert(lines), - //"C" => new ChapterBib(), + "C" => new Chapter().Convert(lines), "P" => new Proceedings().Convert(lines), _ => "" };