artikel / mengubah opc calibre ke format markdown

Mengubah OPC Calibre ke Format MarkDown

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" &amp;&amp; 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($"[![{title}]({isbn}.jpg)](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";
    }
}

Selayang pandang proyek Perpustakaan Nirkabel

Perpustakaan Nirkabel (wireless library) is a 12-year-old project bringing digital technology to remote areas in Indonesia, empowering basic education and bridging the gap in education. It enables students in remote areas to access knowledge and resources previously out of reach. Witness the tech enthusiasts' brainchild with a heart for education.

detail