เอกสารนี้จัดเตรียมภาพรวมที่ครอบคลุมของ flexmark-java ซึ่งเป็นการนำ Java ประสิทธิภาพสูงไปใช้งานของตัวแยกวิเคราะห์ CommonMark Markdown โดยให้รายละเอียดคุณสมบัติต่างๆ รวมถึงความเร็ว ความสามารถในการขยาย และการติดตามตำแหน่งแหล่งที่มาโดยละเอียด พร้อมด้วยคำแนะนำสำหรับการเริ่มต้นอย่างรวดเร็ว ส่วนขยายที่ใช้ได้ และการโยกย้ายจาก pegdown เอกสารนี้ยังครอบคลุมถึงแนวทางการพัฒนาและการสนับสนุนอย่างต่อเนื่อง
เฟล็กมาร์ก-java
flexmark-java เป็นการใช้งาน Java ของตัวแยกวิเคราะห์ CommonMark (spec 0.28) โดยใช้
บล็อกก่อน อินไลน์หลังจากสถาปัตยกรรมการแยกวิเคราะห์ Markdown
จุดแข็งคือความเร็ว ความยืดหยุ่น องค์ประกอบแหล่งที่มา Markdown อิง AST พร้อมรายละเอียดของ
ตำแหน่งต้นทางลงไปที่อักขระแต่ละตัวของคำศัพท์ที่ประกอบขึ้นเป็นองค์ประกอบและ
ความสามารถในการขยาย
API ช่วยให้สามารถควบคุมกระบวนการแยกวิเคราะห์ได้อย่างละเอียดและได้รับการปรับให้เหมาะสมสำหรับการแยกวิเคราะห์ขนาดใหญ่
จำนวนส่วนขยายที่ติดตั้ง ตัวแยกวิเคราะห์และส่วนขยายมาพร้อมกับตัวเลือกมากมายสำหรับตัวแยกวิเคราะห์
พฤติกรรมและรูปแบบการแสดงผล HTML เป้าหมายสุดท้ายคือการให้ parser และ renderer สามารถ
เพื่อเลียนแบบ parsers อื่น ๆ ด้วยความแม่นยำระดับสูง ขณะนี้เสร็จสมบูรณ์บางส่วนแล้วด้วย
การใช้งานการจำลองตัวประมวลผล Markdown
แรงจูงใจสำหรับโปรเจ็กต์นี้คือความจำเป็นในการเปลี่ยนตัวแยกวิเคราะห์ pegdown ใน Markdown Navigator ของฉัน
ปลั๊กอินสำหรับ JetBrains IDE Pegdown มีชุดฟีเจอร์ที่ยอดเยี่ยม แต่โดยทั่วไปความเร็วจะน้อยกว่า
มากกว่าอุดมคติและสำหรับการป้อนข้อมูลทางพยาธิวิทยาอาจแฮงค์หรือแฮงค์จริงในระหว่างการแยกวิเคราะห์
️เวอร์ชัน 0.60.0 มีการเปลี่ยนแปลงครั้งใหญ่เนื่องจากการจัดระเบียบใหม่ การเปลี่ยนชื่อ การล้างข้อมูล และ
การเพิ่มประสิทธิภาพของคลาสการใช้งาน รายละเอียดการเปลี่ยนแปลงมีอยู่ใน
เวอร์ชัน-0.60.0-การเปลี่ยนแปลง
ล่าสุด
ความต้องการ
สำหรับเวอร์ชัน 0.62.2 หรือต่ำกว่า, Java 8 หรือสูงกว่า, รองรับ Java 9+ สำหรับเวอร์ชัน 0.64.0 หรือ
สูงกว่า, Java 11 ขึ้นไป
โครงการอยู่บน Maven: com.vladsch.flexmark
แกนไม่มีการขึ้นต่อกันอื่นใดนอกจาก org.jetbrains:annotations:24.0.1 สำหรับส่วนขยาย โปรดดูที่
คำอธิบายส่วนขยายด้านล่าง
API ยังคงพัฒนาเพื่อรองรับส่วนขยายและฟังก์ชันใหม่ๆ
เริ่มต้นอย่างรวดเร็ว
สำหรับ Maven ให้เพิ่ม flexmark-all เป็นการพึ่งพาซึ่งรวมถึง core และโมดูลทั้งหมดลงใน
ตัวอย่างต่อไปนี้:
แหล่งที่มา:
BasicSample.java
การสร้างผ่าน Gradle
สร้างด้วย Android Studio
การตั้งค่าเพิ่มเติมเนื่องจากไฟล์ที่ซ้ำกัน:
ข้อมูลเพิ่มเติมสามารถพบได้ในเอกสารประกอบ:
ตัวอย่างการใช้วิกิหน้าแรก
รายละเอียดส่วนขยาย
การเขียนส่วนขยาย
ตัวช่วยการโยกย้าย Pegdown
ระดับ PegdownOptionsAdapter จะแปลงค่าสถานะ pegdown Extensions.* เป็นตัวเลือก flexmark และ
รายการส่วนขยาย Pegdown Extensions.java รวมอยู่เพื่อความสะดวกและไม่พบตัวเลือกใหม่
ในเพ็กดาวน์ 1.6.0 สิ่งเหล่านี้อยู่ในโมดูล flexmark-profile-pegdown แต่คุณสามารถคว้าได้
แหล่งที่มาจาก repo นี้: PegdownOptionsAdapter.java, Extensions.java และสร้างของคุณเอง
เวอร์ชันที่ปรับเปลี่ยนตามความต้องการของโครงการของคุณ
คุณสามารถส่งแฟล็กส่วนขยายของคุณไปที่ PegdownOptionsAdapter.flexmarkOptions(int) แบบคงที่หรือคุณก็ได้
สามารถสร้างอินสแตนซ์ PegdownOptionsAdapter และใช้วิธีการอำนวยความสะดวกในการตั้งค่า เพิ่ม และลบได้
ธงส่วนขยาย PegdownOptionsAdapter.getFlexmarkOptions() จะส่งคืนสำเนาใหม่ของ
DataHolder ทุกครั้งพร้อมตัวเลือกที่สะท้อนถึงการตั้งค่าสถานะส่วนขยาย Pegdown
การจำลอง pegdown ของ flexmark-java เริ่มต้นใช้การแยกวิเคราะห์บล็อก HTML ที่เข้มงวดน้อยกว่าซึ่งจะขัดจังหวะ
บล็อก HTML บนบรรทัดว่าง Pegdown จะขัดจังหวะบล็อก HTML ในบรรทัดว่างเท่านั้นหากแท็กทั้งหมดอยู่ในนั้น
บล็อก HTML ถูกปิด
หากต้องการเข้าใกล้พฤติกรรมการแยกวิเคราะห์บล็อก pegdown HTML ดั้งเดิมมากขึ้น ให้ใช้วิธีการที่ใช้
อาร์กิวเมนต์บูลีน strictHtml:
นอกจากนี้ยังมีตัวอย่างที่มีตัวแก้ไขลิงก์แบบกำหนดเอง ซึ่งรวมถึงตัวแก้ไขลิงก์ด้วย
การเปลี่ยน URL หรือคุณลักษณะของลิงก์และตัวเรนเดอร์โหนดที่กำหนดเอง หากคุณต้องการแทนที่
สร้างลิงก์ HTML
flexmark-java มีส่วนขยายและตัวเลือกการกำหนดค่ามากกว่า
pegdown นอกเหนือจากส่วนขยายที่มีอยู่ใน pegdown 1.6.0
ส่วนขยายที่ใช้ได้ผ่าน PegdownOptionsAdapter
เพิ่มเติมและการเปลี่ยนแปลงล่าสุด
การปรับโครงสร้างองค์กรครั้งใหญ่และการล้างโค้ดการใช้งานในเวอร์ชัน 0.60.0 ดู
เวอร์ชัน-0.60.0-มีการเปลี่ยนแปลง ขอบคุณผลงานดีๆจาก
Alex Karezin คุณสามารถรับภาพรวมของการพึ่งพาโมดูลได้
ด้วยความสามารถในการเจาะลึกถึงแพ็คเกจและคลาส
ผสาน API เพื่อรวมเอกสาร Markdown หลายฉบับเป็นเอกสารเดียว
เอกสาร.
ส่วนขยาย Docx Renderer:
การจัดการโหนดแอตทริบิวต์ที่จำกัด
โมดูล HTML ที่ขยายเป็น Markdown Converter:
flexmark-html2md-ตัวแปลง ตัวอย่าง:
HtmlToMarkdownCustomizedSample.java
ความเข้ากันได้ของโมดูล Java9+
การอ้างอิงแจกแจงแบบผสม
ส่วนขยายการอ้างอิงแจกแจงสำหรับการสร้าง
การกำหนดหมายเลขตามกฎหมายสำหรับองค์ประกอบและส่วนหัว
ส่วนขยายมาโครเพื่ออนุญาตให้มีเนื้อหามาร์กดาวน์ตามอำเภอใจ
แทรกเป็นองค์ประกอบบล็อกหรืออินไลน์ ทำให้สามารถใช้องค์ประกอบบล็อกได้เฉพาะในบรรทัดเท่านั้น
องค์ประกอบได้รับอนุญาตตามไวยากรณ์
GitLab Flavoured Markdown สำหรับการแยกวิเคราะห์และ
กำลังเรนเดอร์ส่วนขยาย markdown ของ GitLab
โมดูล OSGi ได้รับความอนุเคราะห์จาก Dan Klco (GitHub @klcodanr)
สื่อแท็ก ความอนุเคราะห์ส่วนขยายหม้อแปลงลิงค์สื่อ
Cornelia Schultz (GitHub @CorneliaXaos) แปลงลิงก์
ใช้คำนำหน้าที่กำหนดเองสำหรับแท็กเสียง ฝัง รูปภาพ และวิดีโอ HTML5
Translation Helper API เพื่อทำการแปลมาร์คดาวน์
เอกสารได้ง่ายขึ้น
คำเตือน ในการสร้างเนื้อหาด้านข้างแบบบล็อก สำหรับ
เอกสารฉบับสมบูรณ์ โปรดดูส่วนขยายการตักเตือน วัสดุสำหรับ MkDocs
เอกสารประกอบ
การอ้างอิงแจกแจงเพื่อสร้างแจกแจง
การอ้างอิงสำหรับตัวเลข ตาราง และองค์ประกอบมาร์กดาวน์อื่นๆ
แอ็ตทริบิวต์เพื่อแยกวิเคราะห์แอ็ตทริบิวต์ของฟอร์ม {name name=value name='value' name="value" #id .class-name} แอ็ตทริบิวต์
หม้อแปลงลิงก์แบบฝังของ YouTube
ขอบคุณ Vyacheslav N. Boyko (GitHub @ bvn13) แปลงลิงก์ง่ายๆ ไปยังวิดีโอ youtube เป็น
วิดีโอ iframe HTML แบบฝัง
Docx Converter โดยใช้ไลบรารี docx4j วิธีใช้:
ตัวอย่าง DocxConverter วิธีปรับแต่ง:
การปรับแต่งการเรนเดอร์ Docx
การพัฒนาโมดูลนี้ได้รับการสนับสนุนจาก
จอห์นเนอร์ สถาบัน GmbH
อัปเดตไลบรารีให้เป็นไปตามมาตรฐาน CommonMark (spec 0.28) และเพิ่ม
ParserEmulationProfile.COMMONMARK027 และ ParserEmulationProfile.COMMONMARK028 เพื่ออนุญาต
การเลือกตัวเลือกเวอร์ชันข้อมูลจำเพาะเฉพาะ
API การเรนเดอร์โหนดแบบกำหนดเองที่มีความสามารถในการเรียกใช้การเรนเดอร์มาตรฐานสำหรับโหนดที่ถูกแทนที่
อนุญาตการเรนเดอร์โหนดแบบกำหนดเองที่จัดการเฉพาะกรณีพิเศษและปล่อยให้ส่วนที่เหลือถูกเรนเดอร์เป็น
ตามปกติ. ตัวแก้ไขลิงก์แบบกำหนดเอง
Gfm-ปัญหาและ
ส่วนขยาย Gfm-Users สำหรับการแยกวิเคราะห์และการเรนเดอร์ #123 และ
@ชื่อผู้ใช้ ตามลำดับ
ตัวเลือกการแยกวิเคราะห์บล็อก HTML แบบลึกเพื่อการจัดการแท็กข้อความดิบที่อยู่หลังแท็กอื่นได้ดียิ่งขึ้น
และสำหรับความเข้ากันได้ของการแยกวิเคราะห์บล็อก pegdown HTML
โมดูล flexmark ทั้งหมดที่มี: คอร์, ส่วนขยายทั้งหมด, ฟอร์แมตเตอร์, JIRA และ YouTrack
ตัวแปลง โมดูลโปรไฟล์ pegdown และการแปลง HTML เป็น Markdown
โมดูลเอาท์พุต PDF
เอาต์พุต PDF โดยใช้ Open HTML To PDF
มีการใช้ตัวอักษรแล้ว
ส่วนขยายมาโคร XWiki
เจคิลล์ แท็ก
Html ถึงมาร์กดาวน์
ปลั๊กอินตัวสร้างหน้า Maven Markdown
โมดูล Markdown Formatter เพื่อส่งออก AST เป็น markdown ด้วย
ตัวเลือกการจัดรูปแบบ
ตารางสำหรับตัวจัดรูปแบบ Markdown
ด้วยความกว้างของคอลัมน์และการจัดตำแหน่งของตารางมาร์กดาวน์:
การเผยแพร่ การแก้ไขข้อบกพร่อง การปรับปรุง และการสนับสนุน
ฉันใช้ flexmark-java เป็นตัวแยกวิเคราะห์สำหรับปลั๊กอิน Markdown Navigator สำหรับ JetBrains IDE ฉันมักจะ
ใช้เวอร์ชันล่าสุดที่ยังไม่ได้เผยแพร่เพื่อแก้ไขข้อบกพร่องหรือรับการปรับปรุง ดังนั้นหากคุณพบจุดบกพร่องนั่นคือ
แสดงตัวหยุดสำหรับโครงการของคุณหรือดูข้อบกพร่องในหน้าปัญหา GitHub ที่ทำเครื่องหมายไว้ว่าได้รับการแก้ไขแล้วสำหรับรุ่นถัดไปที่ส่งผลกระทบต่อโครงการของคุณ โปรดแจ้งให้เราทราบและฉันอาจจะสามารถดำเนินการได้ทันที
สร้างรุ่นใหม่เพื่อแก้ไขปัญหาของคุณ มิฉะนั้น ฉันจะปล่อยให้มีการแก้ไขข้อบกพร่องและการปรับปรุง
สะสมคิดว่าไม่มีใครได้รับผลกระทบจากสิ่งที่แก้ไขแล้ว
จุดขยายใน API มีมากมายและมากมาย
มีตัวเลือกส่วนขยายมากมายใน API ตามวัตถุประสงค์การใช้งาน การสตาร์ทแบบนุ่มนวลที่ดีคือ
โมดูล flexmark-java-samples ซึ่งมีตัวอย่างง่ายๆ สำหรับการขอ
ส่วนขยาย ตำแหน่งที่ดีที่สุดถัดไปคือแหล่งที่มาของส่วนขยายที่มีอยู่ซึ่งมีไวยากรณ์คล้ายกัน
ให้กับสิ่งที่คุณต้องการเพิ่ม
หากส่วนขยายของคุณสอดคล้องกับ API ที่ถูกต้อง งานมักจะสั้นและไพเราะมาก ถ้าคุณ
ส่วนขยายใช้ API ในลักษณะที่ไม่ได้ตั้งใจหรือไม่เป็นไปตามการดูแลทำความสะอาดที่คาดหวัง
โปรโตคอล คุณอาจพบว่ามันเป็นการต่อสู้ที่ยากลำบากกับรังของหนูที่ต้องจัดการตามเงื่อนไขและ
การแก้ไขข้อบกพร่องหนึ่งเพียงนำไปสู่การสร้างอีกจุดหนึ่งเท่านั้น
โดยทั่วไป หากต้องใช้เวลามากกว่าสองสามบรรทัดในการเพิ่มส่วนขยายแบบง่าย คุณก็เช่นกัน
กำลังดำเนินการผิดพลาดหรือ API ขาดจุดส่วนขยาย ถ้ามองทั้งหมด.
ส่วนขยายที่ใช้งาน คุณจะเห็นว่าส่วนใหญ่เป็นโค้ดสองสามบรรทัดนอกเหนือจากแผ่นหม้อน้ำ
กำหนดโดย API นั่นคือเป้าหมายสำหรับไลบรารีนี้: จัดเตรียมแกนหลักที่ขยายได้
การเขียนส่วนขยายเป็นเรื่องง่าย
ส่วนขยายที่ใหญ่กว่าคือ flexmark-ext-tables และ flexmark-ext-spec-example เนื้อของ
ทั้งสองมีโค้ดประมาณ 200 บรรทัด คุณสามารถใช้มันเป็นโพสต์แนะนำในการประมาณขนาดของคุณ
ส่วนขยาย.
ประสบการณ์ของฉันในการเพิ่มส่วนขยายแสดงให้เห็นว่าบางครั้งส่วนขยายประเภทใหม่ก็ดีที่สุด
แก้ไขด้วยการปรับปรุง API เพื่อให้การใช้งานราบรื่นหรือโดยการแก้ไขข้อบกพร่องนั้น
ไม่สามารถมองเห็นได้ก่อนที่ส่วนขยายจะเน้น API ด้วยวิธีที่ถูกต้อง ความตั้งใจของคุณ
การขยายเวลาอาจเป็นเพียงสิ่งหนึ่งที่ต้องการแนวทางดังกล่าว
อย่าลังเลที่จะเปิดประเด็นหากคุณไม่สามารถหาคำตอบได้
ประเด็นสำคัญคือ: หากคุณต้องการใช้ส่วนขยายหรือฟีเจอร์ โปรดอย่าลังเลที่จะดำเนินการ
เปิดปัญหาแล้วฉันจะให้คำแนะนำเกี่ยวกับวิธีที่ดีที่สุดในการดำเนินการ อาจช่วยคุณประหยัดได้มาก
ของเวลาโดยให้ฉันปรับปรุง API เพื่อตอบสนองความต้องการของส่วนขยายของคุณก่อนที่คุณจะทุ่มเทไปมาก
ความพยายามที่ไร้ผลกับมัน
ฉันขอให้คุณตระหนักว่าฉันเป็นหัวหน้าพ่อครัวและคนล้างขวดในโครงการนี้ โดยไม่ต้องมี
ส่วนเล็กๆ น้อยๆ ของทักษะการหลอมรวมจิตใจของวัลแคน ฉันขอให้คุณอธิบายสิ่งที่คุณต้องการนำไปใช้
เพราะฉันไม่สามารถอ่านใจคุณได้ โปรดทำงานเบื้องหลังการลาดตระเวนรอบๆ แหล่งที่มา
รหัสและเอกสารประกอบ เนื่องจากฉันไม่สามารถถ่ายโอนสิ่งที่ฉันรู้ไปให้คุณโดยที่คุณไม่เต็มใจ
ความพยายาม.
มีบริการให้คำปรึกษา
หากคุณมีใบสมัครเชิงพาณิชย์และไม่ต้องการเขียนส่วนขยายด้วยตนเองหรือต้องการ
เพื่อลดเวลาและความพยายามในการใช้ส่วนขยายและบูรณาการ flexmark-java, feel
อิสระที่จะติดต่อฉัน ฉันพร้อมให้คำปรึกษา/ทำสัญญา
การจำลองโปรเซสเซอร์ Markdown
แม้จะมีชื่อ แต่เครื่องหมายทั่วไปก็ไม่ใช่ทั้งซุปเปอร์เซ็ตหรือเซตย่อยของรสชาติที่ลดราคาอื่นๆ
แต่เสนอข้อกำหนดทางไวยากรณ์ที่เป็นมาตรฐานและไม่คลุมเครือสำหรับต้นฉบับ "คอร์"
Markdown จึงแนะนำรสชาติอื่นได้อย่างมีประสิทธิภาพ ในขณะที่ flexmark เป็นค่าเริ่มต้น
เป็นไปตามมาตรฐานทั่วไป parser สามารถปรับแต่งได้หลายวิธี ชุดของการปรับแต่งที่จำเป็นในการ
จำลองตัวแยกวิเคราะห์มาร์กดาวน์ที่ใช้บ่อยที่สุดที่มีอยู่ใน flexmark เช่น
ParserEmulationโปรไฟล์
ตามที่ชื่อ ParserEmulationProfile บอกเป็นนัย มีเพียง parser เท่านั้นที่ถูกปรับเป็น
รสชาติมาร์กดาวน์ที่เฉพาะเจาะจง การใช้โปรไฟล์ไม่ได้เพิ่มคุณสมบัตินอกเหนือจากที่มีอยู่ใน
เครื่องหมายทั่วไป หากคุณต้องการใช้ flexmark เพื่อจำลองพฤติกรรมของโปรเซสเซอร์ markdown อื่นอย่างสมบูรณ์
คุณต้องปรับ parser และกำหนดค่าส่วนขยาย flexmark ที่ให้ข้อมูลเพิ่มเติม
คุณลักษณะที่มีอยู่ใน parser ที่คุณต้องการจำลอง
การเขียนรายการ parser ใหม่เพื่อควบคุมการจำลองตัวประมวลผล markdown อื่นๆ ได้ดียิ่งขึ้น
การจำลองโปรเซสเซอร์ Markdown เสร็จสมบูรณ์ นอกเหนือจาก
โปรเซสเซอร์ที่ตั้งไว้ล่วงหน้าเพื่อเลียนแบบพฤติกรรมการประมวลผลมาร์กดาวน์เฉพาะของตัวแยกวิเคราะห์เหล่านี้เปิดอยู่
รายการสิ่งที่ต้องทำสั้น ๆ
ตระกูลการจำลองบางตระกูลสามารถเลียนแบบเป้าหมายได้ดีกว่าตระกูลอื่น ๆ ส่วนใหญ่
ความพยายามมุ่งเป้าไปที่การเลียนแบบวิธีที่โปรเซสเซอร์เหล่านี้แยกวิเคราะห์ Markdown และรายการมาตรฐาน
การแยกวิเคราะห์ที่เกี่ยวข้องโดยเฉพาะ สำหรับโปรเซสเซอร์ที่ขยาย Markdown ดั้งเดิม คุณจะต้องเพิ่ม
ส่วนขยายเหล่านั้นที่ใช้งานแล้วใน flexmark-java ไปยังตัวสร้าง Parser/Renderer
ตัวเลือก
ส่วนขยายจะได้รับการแก้ไขเพื่อรวมค่าที่ตั้งล่วงหน้าของตนเองสำหรับการจำลองโปรเซสเซอร์เฉพาะ (หาก)
โปรเซสเซอร์นั้นมีส่วนขยายที่เทียบเท่ากัน
หากคุณพบความคลาดเคลื่อน โปรดเปิดปัญหาเพื่อให้สามารถแก้ไขได้
ตระกูลโปรเซสเซอร์หลักๆ ได้รับการนำไปใช้และสมาชิกครอบครัวบางคนยัง:
โปรไฟล์เพื่อสรุปรายละเอียดการกำหนดค่าสำหรับตัวแปรภายใน
ครอบครัวถูกเพิ่มเข้ามาใน 0.11.0:
ประวัติศาสตร์และแรงจูงใจ
flexmark-java เป็นทางแยกของโปรเจ็กต์ commonmark-java ซึ่งได้รับการแก้ไขเพื่อสร้าง AST ซึ่ง
สะท้อนถึงองค์ประกอบทั้งหมดในแหล่งที่มาดั้งเดิม การติดตามตำแหน่งแหล่งที่มาอย่างเต็มรูปแบบสำหรับองค์ประกอบทั้งหมด
ใน AST และการสร้าง PsiTree JetBrains Open API ที่ง่ายขึ้น
API ได้รับการเปลี่ยนแปลงเพื่อให้สามารถควบคุมกระบวนการแยกวิเคราะห์ได้ละเอียดยิ่งขึ้นและได้รับการปรับให้เหมาะสม
แยกวิเคราะห์ด้วยส่วนขยายที่ติดตั้งจำนวนมาก ตัวแยกวิเคราะห์และส่วนขยายมีมากมาย
การปรับแต่งตัวเลือกสำหรับพฤติกรรมตัวแยกวิเคราะห์และรูปแบบการแสดงผล HTML เป้าหมายสุดท้ายคือการมี
parser และ renderer สามารถเลียนแบบ parsers อื่น ๆ ได้อย่างแม่นยำ
แรงจูงใจสำหรับสิ่งนี้คือความจำเป็นในการแทนที่ตัวแยกวิเคราะห์ pegdown ในปลั๊กอิน Markdown Navigator
Pegdown มีชุดคุณลักษณะที่ยอดเยี่ยม แต่ความเร็วโดยทั่วไปยังน้อยกว่าอุดมคติและสำหรับ
ข้อมูลทางพยาธิวิทยาอาจแฮงค์หรือแฮงค์จริงในระหว่างการแยกวิเคราะห์
commonmark-java มีสถาปัตยกรรมการแยกวิเคราะห์ที่ยอดเยี่ยม ซึ่งง่ายต่อการเข้าใจและขยาย
เป้าหมายคือเพื่อให้แน่ใจว่าการเพิ่มการติดตามตำแหน่งแหล่งที่มาใน AST จะไม่เปลี่ยนความสะดวก
ของการแยกวิเคราะห์และสร้าง AST มากกว่าที่จำเป็นจริงๆ
เหตุผลในการเลือก commonmark-java เป็น parser คือ: ความเร็ว ความง่ายในการทำความเข้าใจ ความง่ายในการ
การขยายและความเร็ว ตอนนี้ฉันได้ปรับปรุงแกนหลักและเพิ่มส่วนขยายบางส่วนแล้วฉันรู้สึกดีมาก
พอใจกับตัวเลือกของฉัน
เป้าหมายอีกประการหนึ่งคือการปรับปรุงความสามารถของส่วนขยายในการปรับเปลี่ยนพฤติกรรมของตัวแยกวิเคราะห์เพื่อให้เป็นเช่นนั้น
ภาษาถิ่นของ markdown สามารถนำไปใช้ผ่านกลไกการขยาย ตัวเลือกที่ขยายได้
เพิ่ม API เพื่อให้สามารถตั้งค่าตัวเลือกทั้งหมดได้ในที่เดียว Parser, renderer และส่วนขยายใช้
ตัวเลือกเหล่านี้สำหรับการกำหนดค่า รวมถึงการปิดใช้งานตัวแยกวิเคราะห์บล็อกหลักบางตัว
นี่เป็นงานที่กำลังดำเนินการโดยมีการเปลี่ยนแปลง API มากมาย ไม่มีการพยายามเก็บ API ย้อนหลัง
เข้ากันได้กับโปรเจ็กต์ดั้งเดิมและจนกว่าชุดคุณลักษณะจะเสร็จสมบูรณ์เป็นส่วนใหญ่ด้วยซ้ำ
เวอร์ชันก่อนหน้าของโครงการนี้
การเปรียบเทียบคุณสมบัติ
(1)
อินพุตทางพยาธิวิทยาของ flexmark-java 100,000 [แยกวิเคราะห์ใน 68ms, 100,000] ใน 57ms, 100,000
ซ้อนกัน [ ] แยกวิเคราะห์ใน 55ms
(2)
อินพุตทางพยาธิวิทยาของ commonmark-java 100,000 [แยกวิเคราะห์ใน 30ms, 100,000] ใน 30ms, 100,000
ซ้อนกัน [ ] แยกวิเคราะห์ใน 43ms
(3)
อินพุตทางพยาธิวิทยา pegdown ของ 17 [แยกวิเคราะห์ใน 650ms, 18 [ ใน 1300ms
ความคืบหน้า
ฉันพอใจมากกับการตัดสินใจเปลี่ยนไปใช้ parser ที่ใช้ commonmark-java สำหรับฉันเอง
โครงการ แม้ว่าฉันต้องทำการผ่าตัดใหญ่ที่อวัยวะภายในเพื่อให้ได้ตำแหน่งเต็มตัวก็ตาม
การติดตามและ AST ที่ตรงกับองค์ประกอบแหล่งที่มา เรายินดีที่ได้ร่วมงานด้วยและตอนนี้
ยินดีที่จะขยาย หากคุณไม่ต้องการองค์ประกอบระดับแหล่งที่มา AST หรือส่วนที่เหลือของ flexmark-java
เพิ่มแล้วและ CommonMark เป็นตัวแยกวิเคราะห์เป้าหมายของคุณ จากนั้นฉันขอแนะนำให้คุณใช้
commonmark-java เนื่องจากเป็นตัวเลือกที่ยอดเยี่ยมสำหรับความต้องการของคุณและประสิทธิภาพไม่ได้เป็นเช่นนั้น
ต้องทนทุกข์ทรมานกับคุณสมบัติที่คุณจะไม่ได้ใช้
เกณฑ์มาตรฐาน
ล่าสุด, 28 มกราคม 2017 flexmark-java 0.13.1, Intellij-markdown จาก CE EAP 2017, commonmark-java
0.8.0:
อัตราส่วนข้างต้น:
เนื่องจากไฟล์ทั้งสองนี้แสดงถึงอินพุตทางพยาธิวิทยาของ pegdown ฉันจึงไม่เรียกใช้ไฟล์เหล่านั้นอีกต่อไป
ส่วนหนึ่งของเกณฑ์มาตรฐานเพื่อป้องกันการบิดเบือนผลลัพธ์ ผลลัพธ์อยู่ที่นี่เพื่อลูกหลาน
อัตราส่วนข้างต้น:
มีส่วนร่วม
ดึงคำขอประเด็นและความคิดเห็นยินดีต้อนรับ ?. สำหรับคำขอดึง:
ใบอนุญาต
ลิขสิทธิ์ (c) 2015-2016 Atlassian และอื่นๆ
ลิขสิทธิ์ (c) 2016-2023, Vladimir Schneider,
ได้รับอนุญาต BSD (2 ข้อ) ดูไฟล์ LICENSE.txt
ตัวอย่าง:
มิตสึบะ เรนเดอร์เรอร์ 3
เอกสารประกอบ | วิดีโอสอน | ลินุกซ์ | แมคโอเอส | หน้าต่าง | พีพีไอ |
---|---|---|---|---|---|
คำเตือน
ขณะนี้มีงานที่ไม่มีเอกสารและไม่มั่นคงเกิดขึ้นจำนวนมาก
สาขา master
เราขอแนะนำให้คุณใช้ของเรา
รุ่นล่าสุด
จนกว่าจะมีประกาศต่อไป
หากคุณต้องการลองใช้การเปลี่ยนแปลงที่กำลังจะเกิดขึ้น โปรดดูที่
คู่มือการย้ายนี้
ควรครอบคลุมคุณลักษณะใหม่ส่วนใหญ่และการเปลี่ยนแปลงที่กำลังจะเกิดขึ้น
การแนะนำ
Mitsuba 3 เป็นระบบการเรนเดอร์ที่เน้นการวิจัยสำหรับแสงไปข้างหน้าและไฟผกผัน
การจำลองการขนส่งที่พัฒนาขึ้นที่ EPFL ในประเทศสวิตเซอร์แลนด์
ประกอบด้วยไลบรารีหลักและชุดปลั๊กอินที่ใช้ฟังก์ชันการทำงาน
ตั้งแต่วัสดุและแหล่งกำเนิดแสงไปจนถึงอัลกอริธึมการเรนเดอร์ที่สมบูรณ์
Mitsuba 3 สามารถกำหนดเป้าหมายใหม่ได้ : นี่หมายความว่าการใช้งานพื้นฐานและ
โครงสร้างข้อมูลสามารถแปลงสภาพเพื่อทำงานต่างๆ ให้สำเร็จได้ สำหรับ
ตัวอย่าง รหัสเดียวกันสามารถจำลองการขนส่ง RGB ทั้งแบบสเกลาร์ (คลาสสิกหนึ่งเรย์ต่อครั้ง)
หรือการขนส่งสเปกตรัมที่แตกต่างกันบน GPU ทั้งหมดนี้สร้างขึ้น
Dr.Jit คอมไพเลอร์เฉพาะทาง just-in-time (JIT) ที่พัฒนาขึ้นสำหรับโปรเจ็กต์นี้โดยเฉพาะ
คุณสมบัติหลัก
ข้ามแพลตฟอร์ม : Mitsuba 3 ได้รับการทดสอบบน Linux ( x86_64
), macOS
( aarch64
, x8664
) และ Windows ( x8664
)
ประสิทธิภาพสูง : คอมไพเลอร์ Dr.Jit พื้นฐานจะฟิวส์โค้ดการเรนเดอร์
สู่เมล็ดพืชที่ได้รับประสิทธิภาพอันล้ำสมัยโดยใช้
แบ็กเอนด์ LLVM ที่กำหนดเป้าหมาย CPU และแบ็กเอนด์ CUDA/OptiX
กำหนดเป้าหมาย NVIDIA GPU ด้วยการเร่งด้วยฮาร์ดแวร์ Ray Tracing
Python ก่อน : Mitsuba 3 ได้รับการบูรณาการอย่างลึกซึ้งกับ Python วัสดุ,
พื้นผิวและแม้กระทั่งอัลกอริธึมการเรนเดอร์แบบเต็มสามารถพัฒนาได้ใน Python
ซึ่งระบบ JIT คอมไพล์ (และเลือกสร้างความแตกต่าง) ได้ทันที
สิ่งนี้ทำให้สามารถทดลองที่จำเป็นสำหรับการวิจัยในคอมพิวเตอร์กราฟิกและ
สาขาวิชาอื่น ๆ
ความแตกต่าง : Mitsuba 3 เป็นตัวเรนเดอร์ที่สร้างความแตกต่างได้ ซึ่งหมายความว่ามัน
สามารถคำนวณอนุพันธ์ของการจำลองทั้งหมดโดยคำนึงถึงอินพุต
พารามิเตอร์ต่างๆ เช่น ท่าทางกล้อง เรขาคณิต BSDF พื้นผิว และปริมาตร มัน
ใช้อัลกอริธึมการเรนเดอร์เชิงอนุพันธ์ล่าสุดที่พัฒนาขึ้นที่ EPFL
สเปกตรัมและโพลาไรเซชัน : Mitsuba 3 สามารถใช้เป็นสีเดียวได้
ตัวเรนเดอร์ ตัวเรนเดอร์แบบ RGB หรือตัวเรนเดอร์สเปกตรัม แต่ละรุ่นได้
สามารถเลือกพิจารณาถึงผลกระทบของโพลาไรเซชันได้หากต้องการ
วิดีโอสอน เอกสารประกอบ
เราได้บันทึกวิดีโอ YouTube หลายรายการที่มีการแนะนำอย่างนุ่มนวล
มิตซูบา 3 และ คุณหมอจิตร. นอกเหนือจากนี้ คุณจะพบสมุดบันทึก Juypter ฉบับสมบูรณ์
ครอบคลุมการใช้งาน คำแนะนำวิธีใช้ และเอกสารอ้างอิงที่หลากหลาย
บน readthedocs
การติดตั้ง
เราจัดเตรียมล้อไบนารีที่คอมไพล์ไว้ล่วงหน้าผ่าน PyPI การติดตั้ง Mitsuba ด้วยวิธีนี้ทำได้ง่ายเพียงแค่ใช้งาน
pip ติดตั้งมิตซูบา
บนบรรทัดคำสั่ง แพ็คเกจ Python มีตัวแปรสิบสามแบบตามค่าเริ่มต้น:
scalar_rgb
scalar_spectral
scalarspectralpolarized
llvmadrgb
llvmadmono
llvmadmono_polarized
llvmadspectral
llvmadspectral_polarized
cudaadrgb
cudaadmono
cudaadmono_polarized
cudaadspectral
cudaadspectral_polarized
สองรายการแรกทำการจำลองแบบหนึ่งเรย์ต่อครั้งแบบคลาสสิกโดยใช้ RGB
หรือการแสดงสีสเปกตรัม ในขณะที่สองอันหลังสามารถใช้สำหรับการผกผันได้
แสดงผลบน CPU หรือ GPU หากต้องการเข้าถึงตัวแปรเพิ่มเติม คุณจะต้อง
รวบรวม Dr.Jit เวอร์ชันที่กำหนดเองโดยใช้ CMake โปรดดูที่
เอกสารประกอบ
สำหรับรายละเอียดเกี่ยวกับเรื่องนี้
ความต้องการ
Python >= 3.8
(ทางเลือก) สำหรับการคำนวณบน GPU: Nvidia driver >= 495.89
(ทางเลือก) สำหรับการคำนวณแบบเวกเตอร์ / แบบขนานบน CPU: LLVM >= 11.1
การใช้งาน
นี่คือตัวอย่าง "Hello World" ง่ายๆ ที่แสดงให้เห็นว่าการเรนเดอร์ a เป็นเรื่องง่ายเพียงใด
ฉากโดยใช้ Mitsuba 3 จาก Python:
# นำเข้าไลบรารีโดยใช้นามแฝง "mi" นำเข้า mitsuba เป็น mi# ตั้งค่าตัวแปรของ renderermi.setvariant('scalarrgb')# โหลดฉากฉาก = mi.loติดยาเสพติด(mi.cornellbox())# เรนเดอร์ฉาก img = mi render(scene)# เขียนภาพที่เรนเดอร์ไปยังไฟล์ EXRmi.Bitmap(img).write('cbox.exr')
สามารถดูบทช่วยสอนและสมุดบันทึกตัวอย่างที่ครอบคลุมการใช้งานที่หลากหลาย
ในเอกสารประกอบ
เกี่ยวกับ
โปรเจ็กต์นี้สร้างโดย Wenzel Jakob
คุณสมบัติที่สำคัญและ/หรือการปรับปรุงโค้ดได้รับการสนับสนุนโดย
เซบาสเตียน สไปเรอร์,
นิโคลัส รุสเซล,
เมอร์ลิน นิเมียร์-เดวิด
เดลิโอ วิชินี่,
ทิเซียน เซลท์เนอร์,
แบปติสต์ นิโคเลต์,
มิเกล เครสโป,
วินเซนต์ เลอรอย และ
จือยี่ จาง.
เมื่อใช้ Mitsuba 3 ในโครงการวิชาการ โปรดอ้างอิง:
@software{Mitsuba3,title = {Mitsuba 3 renderer},ผู้เขียน = {Wenzel Jakob และ Sébastien Speierer และ Nicolas Roussel และ Merlin Nimier-David และ Delio Vicini และ Tizian Zeltner และ Baptiste Nicolet และ Miguel Crespo และ Vincent Leroy และ Ziyi Zhang} หมายเหตุ = {https://mitsuba-renderer.org},รุ่น = {3.1.1},ปี = 2022}