mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 18:22:45 +00:00 
			
		
		
		
	LibMarkdown: Take a 'view_width' argument for render_for_terminal()
Some constructs will require the width of the terminal (or a general 'width') to be rendered correctly, such as tables.
This commit is contained in:
		
							parent
							
								
									5fbec2b003
								
							
						
					
					
						commit
						aa65f664a9
					
				
					 12 changed files with 30 additions and 14 deletions
				
			
		|  | @ -36,7 +36,7 @@ public: | |||
|     virtual ~Block() { } | ||||
| 
 | ||||
|     virtual String render_to_html() const = 0; | ||||
|     virtual String render_for_terminal() const = 0; | ||||
|     virtual String render_for_terminal(size_t view_width = 0) const = 0; | ||||
| }; | ||||
| 
 | ||||
| } | ||||
|  |  | |||
|  | @ -74,7 +74,7 @@ String CodeBlock::render_to_html() const | |||
|     return builder.build(); | ||||
| } | ||||
| 
 | ||||
| String CodeBlock::render_for_terminal() const | ||||
| String CodeBlock::render_for_terminal(size_t) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
| 
 | ||||
|  |  | |||
|  | @ -42,7 +42,7 @@ public: | |||
|     virtual ~CodeBlock() override { } | ||||
| 
 | ||||
|     virtual String render_to_html() const override; | ||||
|     virtual String render_for_terminal() const override; | ||||
|     virtual String render_for_terminal(size_t view_width = 0) const override; | ||||
|     static OwnPtr<CodeBlock> parse(Vector<StringView>::ConstIterator& lines); | ||||
| 
 | ||||
| private: | ||||
|  |  | |||
|  | @ -52,12 +52,12 @@ String Document::render_to_html() const | |||
|     return builder.build(); | ||||
| } | ||||
| 
 | ||||
| String Document::render_for_terminal() const | ||||
| String Document::render_for_terminal(size_t view_width) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
| 
 | ||||
|     for (auto& block : m_blocks) { | ||||
|         auto s = block.render_for_terminal(); | ||||
|         auto s = block.render_for_terminal(view_width); | ||||
|         builder.append(s); | ||||
|     } | ||||
| 
 | ||||
|  |  | |||
|  | @ -35,7 +35,7 @@ namespace Markdown { | |||
| class Document final { | ||||
| public: | ||||
|     String render_to_html() const; | ||||
|     String render_for_terminal() const; | ||||
|     String render_for_terminal(size_t view_width = 0) const; | ||||
| 
 | ||||
|     static OwnPtr<Document> parse(const StringView&); | ||||
| 
 | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ String Heading::render_to_html() const | |||
|     return builder.build(); | ||||
| } | ||||
| 
 | ||||
| String Heading::render_for_terminal() const | ||||
| String Heading::render_for_terminal(size_t) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
| 
 | ||||
|  |  | |||
|  | @ -44,7 +44,7 @@ public: | |||
|     virtual ~Heading() override { } | ||||
| 
 | ||||
|     virtual String render_to_html() const override; | ||||
|     virtual String render_for_terminal() const override; | ||||
|     virtual String render_for_terminal(size_t view_width = 0) const override; | ||||
|     static OwnPtr<Heading> parse(Vector<StringView>::ConstIterator& lines); | ||||
| 
 | ||||
| private: | ||||
|  |  | |||
|  | @ -47,7 +47,7 @@ String List::render_to_html() const | |||
|     return builder.build(); | ||||
| } | ||||
| 
 | ||||
| String List::render_for_terminal() const | ||||
| String List::render_for_terminal(size_t) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
| 
 | ||||
|  |  | |||
|  | @ -43,7 +43,7 @@ public: | |||
|     virtual ~List() override { } | ||||
| 
 | ||||
|     virtual String render_to_html() const override; | ||||
|     virtual String render_for_terminal() const override; | ||||
|     virtual String render_for_terminal(size_t view_width = 0) const override; | ||||
| 
 | ||||
|     static OwnPtr<List> parse(Vector<StringView>::ConstIterator& lines); | ||||
| 
 | ||||
|  |  | |||
|  | @ -38,7 +38,7 @@ String Paragraph::render_to_html() const | |||
|     return builder.build(); | ||||
| } | ||||
| 
 | ||||
| String Paragraph::render_for_terminal() const | ||||
| String Paragraph::render_for_terminal(size_t) const | ||||
| { | ||||
|     StringBuilder builder; | ||||
|     builder.append(m_text.render_for_terminal()); | ||||
|  |  | |||
|  | @ -41,7 +41,7 @@ public: | |||
|     virtual ~Paragraph() override { } | ||||
| 
 | ||||
|     virtual String render_to_html() const override; | ||||
|     virtual String render_for_terminal() const override; | ||||
|     virtual String render_for_terminal(size_t view_width = 0) const override; | ||||
|     static OwnPtr<Paragraph> parse(Vector<StringView>::ConstIterator& lines); | ||||
| 
 | ||||
| private: | ||||
|  |  | |||
|  | @ -32,22 +32,38 @@ | |||
| #include <LibMarkdown/Document.h> | ||||
| #include <stdio.h> | ||||
| #include <string.h> | ||||
| #include <sys/ioctl.h> | ||||
| #include <unistd.h> | ||||
| 
 | ||||
| int main(int argc, char* argv[]) | ||||
| { | ||||
|     if (pledge("stdio rpath", nullptr) < 0) { | ||||
|     if (pledge("stdio rpath tty", nullptr) < 0) { | ||||
|         perror("pledge"); | ||||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     const char* file_name = nullptr; | ||||
|     bool html = false; | ||||
|     int view_width = 0; | ||||
| 
 | ||||
|     Core::ArgsParser args_parser; | ||||
|     args_parser.add_option(html, "Render to HTML rather than for the terminal", "html", 'H'); | ||||
|     args_parser.add_option(view_width, "Viewport width for the terminal (defaults to current terminal width)", "view-width", 0, "width"); | ||||
|     args_parser.add_positional_argument(file_name, "Path to Markdown file", "path", Core::ArgsParser::Required::No); | ||||
|     args_parser.parse(argc, argv); | ||||
| 
 | ||||
|     if (!html && view_width == 0) { | ||||
|         if (isatty(STDOUT_FILENO)) { | ||||
|             struct winsize ws; | ||||
|             if (ioctl(STDERR_FILENO, TIOCGWINSZ, &ws) < 0) | ||||
|                 view_width = 80; | ||||
|             else | ||||
|                 view_width = ws.ws_col; | ||||
| 
 | ||||
|         } else { | ||||
|             view_width = 80; | ||||
|         } | ||||
|     } | ||||
|     auto file = Core::File::construct(); | ||||
|     bool success; | ||||
|     if (file_name == nullptr) { | ||||
|  | @ -77,6 +93,6 @@ int main(int argc, char* argv[]) | |||
|         return 1; | ||||
|     } | ||||
| 
 | ||||
|     String res = html ? document->render_to_html() : document->render_for_terminal(); | ||||
|     String res = html ? document->render_to_html() : document->render_for_terminal(view_width); | ||||
|     printf("%s", res.characters()); | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 AnotherTest
						AnotherTest