Mengubah OPC Calibre ke Format MarkDown
Berikut ini adalah penerjemah OPF Calibre ke MarkDown
pseudocode
Program Opf2Mardown
Metode Utama(args)
Menguraikan argumen dari args ke dalam kamus bernama 'arguments'
Jika kunci 'library-path' dan 'file' tidak ada dalam 'arguments'
Tampilkan pesan kesalahan
Keluar dari program
Akhir Jika
Tetapkan 'libraryPath' dengan nilai dari 'arguments' untuk 'library-path'
Tetapkan 'opfFilePath' dengan nilai dari 'arguments' untuk 'file'
Panggil metode OpfToMarkdown dengan 'opfFilePath' dan simpan hasilnya dalam 'markdownContent'
Cetak 'markdownContent'
Akhir Metode Utama
Metode OpfToMarkdown(opfFilePath)
// Implementasikan logika untuk mengonversi file OPF ke format Markdown
// Kembalikan konten yang telah dikonversi sebagai string
Akhir Metode
Metode ParseArguments(args)
Inisialisasi kamus baru 'parsedArgs'
Untuk setiap 'arg' dalam 'args'
Jika 'arg' dimulai dengan "--"
Pisahkan 'arg' menjadi kunci dan nilai pada '='
Tambahkan kunci (tanpa "--") dan nilai ke 'parsedArgs'
Akhir Jika
Selanjutnya
Kembalikan 'parsedArgs'
Akhir Metode
// Metode tambahan seperti ExtractText dan FormatIndonesianDate dapat dijelaskan di sini
Akhir Program
C Sharp
using System;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Xml.Linq;
class Program
{
static void Main(string[] args)
{
var arguments = ParseArguments(args);
if (!arguments.ContainsKey("library-path") || !arguments.ContainsKey("file"))
{
Console.WriteLine("Both --library-path and --file arguments are required.");
return;
}
string libraryPath = arguments["library-path"];
string opfFilePath = arguments["file"];
// Rest of your logic here
// For example, you can now use opfFilePath for your OpfToMarkdown method
string markdownContent = OpfToMarkdown(opfFilePath);
Console.WriteLine(markdownContent);
}
static Dictionary < string, string> ParseArguments(string[] args)
{
var parsedArgs = new Dictionary < string, string>();
foreach (var arg in args)
{
if (arg.StartsWith("--"))
{
var split = arg.Split(new[] { '=' }, 2);
if (split.Length == 2)
{
parsedArgs.Add(split[0].Substring(2), split[1]);
}
}
}
return parsedArgs;
}
static string OpfToMarkdown(string opfFilePath)
{
XDocument doc = XDocument.Load(opfFilePath);
XNamespace dc = "http://purl.org/dc/elements/1.1/";
var title = ExtractText(doc.Descendants(dc + "title").FirstOrDefault(), "No Title Found");
var author = ExtractText(doc.Descendants(dc + "creator").FirstOrDefault(), "No Author Found");
var publisher = ExtractText(doc.Descendants(dc + "publisher").FirstOrDefault(), "No Publisher Found");
var description = ExtractText(doc.Descendants(dc + "description").FirstOrDefault(), "No Description Found");
var isbn = doc.Descendants(dc + "identifier").Where(e => (string)e.Attribute("scheme") == "ISBN").Select(e => e.Value).FirstOrDefault();
var timestampElement = doc.Descendants().FirstOrDefault(e => e.Name.LocalName == "meta" && e.Attribute("name")?.Value == "calibre:timestamp");
var timestamp = timestampElement != null ? FormatIndonesianDate(timestampElement.Attribute("content")?.Value) : "No Timestamp Found";
StringBuilder markdown = new StringBuilder();
markdown.AppendLine($"# {title}");
markdown.AppendLine($"## Author\n{author}");
markdown.AppendLine($"## Publisher\n{publisher}");
markdown.AppendLine($"## ISBN\n{isbn ?? "No ISBN Found"}");
markdown.AppendLine($"## Calibre Timestamp\n{timestamp}");
markdown.AppendLine($"## Description\n{description}");
markdown.AppendLine($"[](https://elexmedia.id/produk/id/{isbn})");
return markdown.ToString();
}
static string ExtractText(XElement element, string defaultValue)
{
return element != null ? element.Value : defaultValue;
}
static string FormatIndonesianDate(string dateStr)
{
string[] months = { "Januari", "Februari", "Maret", "April", "Mei", "Juni", "Juli", "Agustus", "September", "Oktober", "November", "Desember" };
if (DateTime.TryParseExact(dateStr, "yyyy-MM-ddTHH:mm:sszzz", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out DateTime date))
{
return $"{date.Day} {months[date.Month - 1]} {date.Year}";
}
return "Invalid Date Format";
}
}