Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: tools/gn/standard_out.cc

Issue 2773043005: GN: Trim newlines in markdown help blocks (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « tools/gn/command_help.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "tools/gn/standard_out.h" 5 #include "tools/gn/standard_out.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <vector> 9 #include <vector>
10 10
(...skipping 233 matching lines...) Expand 10 before | Expand all | Expand 10 after
244 } 244 }
245 245
246 OutputString(line.substr(first_normal) + "\n"); 246 OutputString(line.substr(first_normal) + "\n");
247 } 247 }
248 248
249 void PrintLongHelp(const std::string& text, const std::string& tag) { 249 void PrintLongHelp(const std::string& text, const std::string& tag) {
250 EnsureInitialized(); 250 EnsureInitialized();
251 251
252 bool first_header = true; 252 bool first_header = true;
253 bool in_body = false; 253 bool in_body = false;
254 std::size_t empty_lines = 0;
254 for (const std::string& line : base::SplitString( 255 for (const std::string& line : base::SplitString(
255 text, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL)) { 256 text, "\n", base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL)) {
256 // Check for a heading line. 257 // Check for a heading line.
257 if (!line.empty() && line[0] != ' ') { 258 if (!line.empty() && line[0] != ' ') {
259 // New paragraph, just skip any trailing empty lines.
260 empty_lines = 0;
261
258 if (is_markdown) { 262 if (is_markdown) {
259 // GN's block-level formatting is converted to markdown as follows: 263 // GN's block-level formatting is converted to markdown as follows:
260 // * The first heading is treated as an H3. 264 // * The first heading is treated as an H3.
261 // * Subsequent heading are treated as H4s. 265 // * Subsequent heading are treated as H4s.
262 // * Any other text is wrapped in a code block and displayed as-is. 266 // * Any other text is wrapped in a code block and displayed as-is.
263 // 267 //
264 // Span-level formatting (the decorations) is converted inside 268 // Span-level formatting (the decorations) is converted inside
265 // OutputString(). 269 // OutputString().
266 if (in_body) { 270 if (in_body) {
267 OutputString("```\n\n", DECORATION_NONE); 271 OutputString("```\n\n", DECORATION_NONE);
(...skipping 23 matching lines...) Expand all
291 295
292 OutputString(line.substr(0, chars_to_highlight), DECORATION_YELLOW); 296 OutputString(line.substr(0, chars_to_highlight), DECORATION_YELLOW);
293 OutputString(line.substr(chars_to_highlight)); 297 OutputString(line.substr(chars_to_highlight));
294 OutputString("\n"); 298 OutputString("\n");
295 continue; 299 continue;
296 } else if (is_markdown && !line.empty() && !in_body) { 300 } else if (is_markdown && !line.empty() && !in_body) {
297 OutputString("```\n", DECORATION_NONE); 301 OutputString("```\n", DECORATION_NONE);
298 in_body = true; 302 in_body = true;
299 } 303 }
300 304
305 // We buffer empty lines, so we can skip them if needed
306 // (i.e. new paragraph body, end of final paragraph body).
307 if (in_body && is_markdown) {
308 if (!line.empty() && empty_lines != 0) {
309 OutputString(std::string(empty_lines, '\n'));
310 empty_lines = 0;
311 } else if (line.empty()) {
312 ++empty_lines;
313 continue;
314 }
315 }
316
301 // Check for a comment. 317 // Check for a comment.
302 TextDecoration dec = DECORATION_NONE; 318 TextDecoration dec = DECORATION_NONE;
303 for (const auto& elem : line) { 319 for (const auto& elem : line) {
304 if (elem == '#' && !is_markdown) { 320 if (elem == '#' && !is_markdown) {
305 // Got a comment, draw dimmed. 321 // Got a comment, draw dimmed.
306 dec = DECORATION_DIM; 322 dec = DECORATION_DIM;
307 break; 323 break;
308 } else if (elem != ' ') { 324 } else if (elem != ' ') {
309 break; 325 break;
310 } 326 }
311 } 327 }
312 328
313 OutputString(line + "\n", dec); 329 OutputString(line + "\n", dec);
314 } 330 }
315 331
316 if (is_markdown && in_body) 332 if (is_markdown && in_body)
317 OutputString("\n```\n"); 333 OutputString("```\n");
318 } 334 }
319 335
OLDNEW
« no previous file with comments | « tools/gn/command_help.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698