আপনি কীভাবে মার্কডাউন পার্সিং সম্পর্কে যাবেন? [বন্ধ]


126

সম্পাদনা: আমি সম্প্রতি কমনমার্ক নামে একটি প্রকল্প সম্পর্কে জেনেছি, যা মূল মার্কডাউন স্পেসিফিকেশনে অস্পষ্টতাকে সঠিকভাবে চিহ্নিত করে এবং ডিল করে। http://commonmark.org/ এর দুর্দান্ত সি # লাইব্রেরি সমর্থন রয়েছে।

আপনি এখানে সিনট্যাক্সটি খুঁজে পেতে পারেন ।

ডাউনলোডটি অনুসরণ করে উত্সটি পার্লে লেখা হয়েছে , যা সম্মানের কোনও উদ্দেশ্য আমার নেই। এটি নিয়মিত প্রকাশের সাথে ছাঁটাই হয়ে থাকে এবং এটি নির্দিষ্ট অক্ষরগুলি থেকে বাঁচতে MD5 হ্যাশের উপর নির্ভর করে । কিছু ঠিক যে সম্পর্কে ভুল!

আমি হার্ড কোড জন্য একটি পার্সার সম্পর্কে আছি Markdown । এর সাথে অভিজ্ঞতা কী?

মার্কডাউনের প্রকৃত বিশ্লেষণ সম্পর্কে যদি আপনার কাছে অর্থপূর্ণ কিছু না থাকে তবে আমাকে সময়টি বাদ দিন। (এটি কঠোর মনে হতে পারে, তবে হ্যাঁ, আমি অন্তর্দৃষ্টি খুঁজছি, কোনও সমাধান নয়, তৃতীয় পক্ষের লাইব্রেরি)।

উত্তরগুলির সাথে কিছুটা সহায়তা করার জন্য, নিয়মিত প্রকাশগুলি নিদর্শনগুলি চিহ্নিত করা বোঝায় ! একটি সম্পূর্ণ ব্যাকরণ বিশ্লেষণ না। লোকেরা এটি করা ফুবারকে বিবেচনা করে।

  • আপনি যদি মার্কডাউন সম্পর্কে চিন্তা করেন তবে এটি মূলত অনুচ্ছেদের ধারণার চারপাশে।
  • এই হিসাবে, যুক্তিসঙ্গত পন্থাটি অনুচ্ছেদগুলিতে ইনপুট বিভক্ত করা হতে পারে।
  • এখানে অনেক ধরণের অনুচ্ছেদ রয়েছে, উদাহরণস্বরূপ, শিরোনাম, পাঠ্য, তালিকা, ব্লককোট এবং কোড।
  • চ্যালেঞ্জটি হ'ল এই অনুচ্ছেদগুলি এবং কোন প্রসঙ্গে সেগুলি সনাক্ত করা যায় তা চিহ্নিত করা।

আমি সমাধানের সাথে ফিরে আসব, একবার আমি এটি ভাগ করে নেওয়ার যোগ্য বলে মনে করি।


2
@ ক্লেটাস মার্কডাউন পার্সার লিখছেন, দেখুন সিফারকোডিং
অ্যালেক্স অ্যাঙ্গাস

আমি একই কাজ শেষ। যাইহোক, আমি মার্কডাউনটি পার্স করার চেষ্টা করছি না যেন এটি একটি প্রথাগত ব্যাকরণ, কারণ এটি স্পষ্ট নয়। আমি পুনরাবৃত্তিমূলকভাবে বিভিন্ন নিয়মিত এক্সপ্রেশন প্রয়োগ করেছি। এবং কয়েকটি পাসে। এটি খুব ভাল কাজ করেছে।
জন লিডেগ্রেন

@ জনলিডগ্রেন, অন্য কৌতূহলী ব্যবহারকারীরা যেমন আমার মতো মার্কডাউন পার্সিংয়ের ক্ষেত্রে আপনার প্রয়াস দেখতে পাবে?
jMLopez

@jMLopez দুঃখিত, আমার আর সেই উত্সটিতে অ্যাক্সেস নেই, আপনার যদি মার্কডাউন পার্সারের প্রয়োজন হয় তবে একটি নুগেট প্যাকেজ উপলব্ধ রয়েছে যা ব্যবহার করা যেতে পারে। ধারণাটি যথেষ্ট সহজ যদিও, কেবল পাসগুলিতে নিয়মিত প্রকাশের ধারাবাহিক প্রয়োগ করুন, অনুচ্ছেদে ইনপুটটি বিভাজন করে শুরু করুন এবং এটি কী ধরণের অনুচ্ছেদে রয়েছে তা সনাক্ত করার চেষ্টা করুন and অবশেষে, অনুচ্ছেদগুলির মধ্যে লিঙ্কগুলি এবং চরিত্রের শৈলীর বিশ্লেষণ করুন themselves
জন লিডেগ্রেন

2
আপনার পার্সাউনটাউনের দিকে নজর দেওয়া উচিত । এটি পাঠ্যগুলিকে লাইনে বিভক্ত করে। তারপরে এটি দেখায় যে এই লাইনগুলি একে অপরের সাথে কীভাবে শুরু হয়।
ইমানুয়েল রুসেভ

উত্তর:


69

শুধুমাত্র markdown বাস্তবায়ন আমি জানি, একটি প্রকৃত পার্সার ব্যবহার করে, হয় জন MacFarleane এর গোঁজ-markdownতার পার্সার একটি উপর ভিত্তি করে তৈরি পার্সিং এক্সপ্রেশন ব্যাকরণ পার্সার নামক জেনারেটরের গোঁজ


সম্পাদনা: মৌরিসিও ফার্নান্দেজ সম্প্রতি তাঁর সিম্পল মার্কআপ মার্কডাউন পার্সার প্রকাশ করেছেন , যা তিনি তাঁর অসসি ব্লগ ওয়েবলগ ইঞ্জিনের অংশ হিসাবে লিখেছিলেন । কারণ পার্সার লেখা আছে OCaml , এটা অত্যন্ত সহজ এবং সংক্ষিপ্ত (জন্য 268 SLOC পার্সার , জন্য 43 SLOC এইচটিএমএল বিকিরণকারী ), এখনো blazingly ফাস্ট (20% তুলনায় দ্রুততর ছাড় (হাতে অপ্টিমাইজ সি লিখিত) এবং sixhundred গুণ দ্রুত ব্লু ক্লথের চেয়ে ( রুবি))), এটি এখনও পারফরম্যান্সের জন্য অনুকূলিত হয়নি। কারণ এটি শুধুমাত্র নিজের ওয়েবলগের জন্য মরিসিওর অভ্যন্তরীণ ব্যবহারের উদ্দেশ্যে, তাই মার্কাডাউন অফিশিয়াল স্পেসিফিকেশন থেকে কয়েকটি বিচ্যুতি রয়েছে , তবে মৌরিসিও একটি শাখা তৈরি করেছে যা বেশিরভাগ পরিবর্তনগুলিকে ফিরিয়ে দেয় ।


1
মজাদার. সম্ভবত আমি এটিকে একটি # প্রকল্প হিসাবে রূপান্তরিত করার চেষ্টা করব
ShuggyCoUk

@ বেনজল একই পুরাতন গল্প: সময় নেই: /
ShuggyCoUk

1
টেরেন্স পারর ( এএনটিএলআরের
ক্রিস এস

17

আমি গত সপ্তাহে একটি নতুন পার্সার ভিত্তিক মার্কডাউন জাভা বাস্তবায়ন প্রকাশ করেছি , যার নাম পেগডাউন । পেগডাউন প্রথমে একটি বিমূর্ত সিনট্যাক্স ট্রি তৈরি করতে একটি পিইজি পার্সার ব্যবহার করে, যা পরবর্তীকালে এইচটিএমএলে লেখা হয়। যেমনটি একটি রিজেক্স ভিত্তিক পদ্ধতির চেয়ে পড়া, রক্ষণাবেক্ষণ এবং প্রসারিত করা বেশ পরিষ্কার এবং সহজ। পিইজি ব্যাকরণটি জন ম্যাকফার্লানস সি প্রয়োগের "পেগ-মার্কডাউন" এর উপর ভিত্তি করে।

আপনার আগ্রহের কিছু হতে পারে ...


1
এটি এখন আনুষ্ঠানিকভাবে
অবহিত করা

7

যদি আমি মার্কডাউন (এবং এটির এক্সটেনশন মার্কডাউন অতিরিক্ত ) পার্স করার চেষ্টা করতাম তবে আমি মনে করি যে আমি একটি রাষ্ট্রীয় মেশিন ব্যবহার করার চেষ্টা করব এবং একবারে এটি একটি চরকে পার্স করার চেষ্টা করবো, একবারে কিছুটা অভ্যন্তরীণ কাঠামোকে সংযুক্ত করে পাঠ্যের বিটের প্রতিনিধিত্ব করতাম, একবার সমস্ত পার্স করা হয়, সমস্ত একসাথে স্ট্রিংযুক্ত বস্তুগুলি থেকে আউটপুট উত্পন্ন করে।

মূলত, ইনপুট ফাইলটি পড়ার সাথে সাথে আমি একটি মিনি-ডোম-জাতীয় গাছ তৈরি করব।
একটি আউটপুট উত্পন্ন করতে, আমি কেবল গাছ এবং আউটপুট এইচটিএমএল বা অন্য কিছু আউট করব (পিএস, ল্যাটেক্স, আরটিএফ, ...)

জটিলতা বাড়াতে পারে এমন জিনিসগুলি:

  • আপনি এইচটিএমএল এবং মার্কডাউন মিশ্রিত করতে পারেন, যদিও এই নিয়মটি কার্যকর করা সহজ হতে পারে: কেবলমাত্র দুটি ভারসাম্য ট্যাগ এবং আউটপুট এটির ভারব্যাটমের মধ্যে যে কোনও কিছু উপেক্ষা করুন।

  • ইউআরএল এবং নোটগুলির লেখার নীচে তাদের রেফারেন্স থাকতে পারে। হাইপারলিঙ্কগুলির জন্য ডেটা স্ট্রাকচারগুলি ব্যবহার করা সহজভাবে কিছু রেকর্ড করতে পারে:

    [my text to a link][linkkey]
    results in a structure like: 
        URLStructure: 
        |  InnerText : "my text to a link"
        |  Key       : "linkkey"
        |  URL       : <null>
    
  • শিরোনামগুলিকে একটি আন্ডারলাইন দিয়ে সংজ্ঞায়িত করা যেতে পারে যা আমাদের জেনেরিক অনুচ্ছেদের জন্য একটি সাধারণ ডেটা স্ট্রাকচার ব্যবহার করতে এবং ফাইলটি পড়ার সাথে সাথে এর বৈশিষ্ট্যগুলি সংশোধন করতে বাধ্য করতে পারে:

    ParagraphStructure:
    |  InnerText    : the current paragraph text 
    |                 (beginning of line until end of line).
    |  HeadingLevel : <null> or 1-4 when we can assess 
    |                 that paragraph heading level, if any.
    

যাইহোক, কিছু চিন্তা।

আমি নিশ্চিত যে যত্ন নেওয়ার জন্য অনেক ছোট ছোট বিবরণ রয়েছে এবং আমি খুব নিশ্চিত যে এই প্রক্রিয়া চলাকালীন রেজেক্সেস সহজেই কাজে লাগতে পারে।
সর্বোপরি, তারা বোঝানো হয়েছে পাঠ্য প্রক্রিয়াজাতকরণ।


3

আমি সম্ভবত এটির জন্য সিনট্যাক্সের স্পেসিফিকেশন পর্যাপ্ত সময় পড়তে পারি এবং কীভাবে এটি পার্স করতে হয় তার জন্য একটি অনুভূতি পেতে পারি।

বিদ্যমান পার্সার কোডটি পড়া অবশ্যই উজ্জ্বল, উভয়ই জটিলতার মূল উত্স বলে মনে হচ্ছে এবং কোনও বিশেষ চৌকস কৌশল ব্যবহার করা হচ্ছে কিনা তা উভয়ই দেখতে। MD5 চেকসামিংয়ের ব্যবহারটি কিছুটা অদ্ভুত বলে মনে হচ্ছে, তবে এটি কেন করা হচ্ছে তা বুঝতে আমি কোডটি পর্যাপ্তভাবে অধ্যয়ন করি নি। রুটিন নামক একটি রুটে একটি মন্তব্য _EscapeSpecialChars()বলে:

আমরা এরকম প্রতিটি চরিত্রকে এর সাথে সম্পর্কিত MD5 চেকসাম মান দিয়ে প্রতিস্থাপন করছি; এটি সম্ভবত অত্যধিক কিল, তবে এটি আমাদের দুর্ঘটনাক্রমে পালানোর মানগুলির সাথে সংঘর্ষ হওয়া থেকে বিরত থাকতে হবে।

সম্পূর্ণ এমডি 5 দ্বারা একটি একক চরিত্রের প্রতিস্থাপন অযৌক্তিক বলে মনে হয়, তবে সম্ভবত এটি সত্যিই অর্থবোধ করে।

অবশ্যই, রেগেক্স বগ থেকে বেরিয়ে আসার জন্য ফ্লেক্সের মতো কোনও সরঞ্জামের জন্য "সত্য" সিনট্যাক্স তৈরির বিষয়টি বিবেচনা করা চতুর হবে ।


এই MD5 জিনিসটি এখনও আমাকে বিরক্ত করে, অতিরিক্ত স্ট্রিং ম্যানিপুলেশন আপনি নিজেরাই লিখতে পারেন এমন কোনও প্রকৃত শালীন পার্সারের চেয়ে ধীর হতে হবে।
জন লিডেগ্রেন

2
ফ্লেক্সটি আসলে অর্ধেক পার্সার; একবার আপনি ইনপুট টোকানাইজড হয়ে গেলে, টোকেনগুলির অর্থ কী তা আপনাকে নির্ধারণ করতে হবে। এটি একটি পার্সার জেনারেটরের জন্য। তাদের প্রচুর আছে। ( "পার্সার combinator", "রিকার্সিভ-বংশদ্ভুত" এবং "LALR (1)" মূল শব্দ জন্য Google এর কাছে আছে।)
jrockway

1
@ জারকওয়ে: অবশ্যই এটি সত্য, আমি অনুমান করি আমি সরে এসেছি এবং চিন্তা করেছি "তবে যদি তিনি ফ্লেক্সটি পড়েন তবে তিনি বাইসানকে স্বয়ংক্রিয়ভাবে খুঁজে পাবেন"। :) ধন্যবাদ।
বিনোদন



1

আপনি যদি এমন একটি প্রোগ্রামিং ভাষা ব্যবহার করেন যা আরও তিনজনের বেশি ব্যবহারকারী থাকে তবে আপনার জন্য এটি একটি বিশ্লেষণ করার জন্য একটি লাইব্রেরি খুঁজে পাওয়া উচিত। একটি দ্রুত গুগল-ইনিং সিএল, হাস্কেল, পাইথন, জাভাস্ক্রিপ্ট, রুবি এবং আরও কিছু জন্য লাইব্রেরি প্রকাশ করে। আপনার এই চাকাটি পুনরায় উদ্ভাবন করতে হবে এমনটি খুব কমই।

আপনার যদি সত্যিই এটি স্ক্র্যাচ থেকে লিখতে হয় তবে আমি একটি যথাযথ পার্সার লেখার পরামর্শ দিই। এই কৌশলটি দিয়ে আপনাকে এমডি 5 হ্যাশ দিয়ে জিনিসগুলি এড়াতে হবে না। (আমি একমত যে আপনার যদি এমন কিছু করতে হয় তবে আপনার নকশাকে পুনর্বিবেচনা করার সময় এসেছে))


আমি চ্যালেঞ্জের পক্ষে রয়েছি। আমি গ্রন্থাগারগুলিতে তাকালাম তবে সেগুলি কেবল ভয়াবহ। কুরুচিপূর্ণ এবং বোকা। আমি এফ # তে পার্সার লেখার কথা বিবেচনা করছি কারণ আমার এফ # প্রকল্পের প্রয়োজন তবে আমি সম্ভবত এটি সি # তে শেষ করব।
জন Leidegren

আশা করি এফ # এর পার্সেকের মতো একটি লাইব্রেরি রয়েছে; যদি তা হয় তবে এটি একটি মজাদার প্রকল্প হবে;)
jrockway

0

পিএইচপি, রুবি, জাভা, সি #, জাভাস্ক্রিপ্ট সহ বেশ কয়েকটি ভাষায় গ্রন্থাগার রয়েছে। আমি ধারণাগুলির জন্য এগুলির কয়েকটি দেখার পরামর্শ দিই।

এটি আপনি কোন ভাষাটি ব্যবহার করতে চান তার উপর নির্ভর করে, এটি কার্যকর করার সর্বোত্তম পদ্ধতির জন্য, এটি করার জন্য মূর্তিবিহীন এবং অহঙ্কারী উপায় থাকবে।

রেজেক্সেস পার্লে কাজ করে, কারণ পার্ল এবং রেজেক্স সবচেয়ে ভাল বন্ধু।


1
রেজেক্স এবং পার্ল সেরা বন্ধু কারণ কেউ কেউ তাই বলেছিল। Factতিহাসিক পূর্বপুরুষের চেয়ে সত্যের আর কোনও সত্য নেই, যে এটি ব্যবহার করা হয়েছিল। পার্লের মতো কোনও কিছুর জন্য আমার কোনও ব্যবহার নেই।
জন Leidegren

7
তাহলে এটি ব্যবহার করবেন না .. এছাড়াও, বিড়ম্বনা শিখুন।
গারো

0

মার্কডাউন একটি জেএডাব্লুএল (কেবলমাত্র অন্য উইকের ভাষা)

ওপেন সোর্স উইকির প্রচুর পরিমাণ আছে যা আপনি পার্সারের কোড পরীক্ষা করতে পারবেন। বেশিরভাগ REGEX ব্যবহার করুন

স্ক্রুথার উইকি দেখুন, এর একটি আকর্ষণীয় মাল্টি পাস ফর্ম্যাটর পাইপলাইন রয়েছে, খুব সুন্দর একটি কৌশল - দেখুন / কোর্ট / ফরমেটার.সি এবং / কোর / ফরমেটার পাইপলাইন.সি

কোনও বিদ্যমান প্রকল্পের ব্যবহার / যোগদান করা সবচেয়ে ভাল, এই ধরণের জিনিসগুলি প্রদর্শিত হওয়ার চেয়ে সবসময়ই আরও শক্ত


0

এখানে আপনি মার্কডাউনের একটি জাভাস্ক্রিপ্ট-বাস্তবায়ন পেতে পারেন। এটি নিয়মিত প্রকাশের উপরও প্রচুর পরিমাণে নির্ভর করে, কারণ পাঠ্যটি বিশ্লেষণ করার এটি কেবল দ্রুত এবং সহজ উপায়।

তবে এটি এমডি 5 অংশটি ছাড়ায়।

আমি পার্সিংয়ের কোডিংয়ে সরাসরি সাহায্য করতে পারি না তবে সম্ভবত এই লিঙ্কটি আপনাকে এক উপায় বা অন্য কোনওভাবে সহায়তা করতে পারে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.