Browse Source

Print examples correctly

gingerBill 3 years ago
parent
commit
b5754b6ed9
3 changed files with 83 additions and 77 deletions
  1. 36 37
      core/sync/barrier.odin
  2. 34 37
      core/sync/sync2/extended.odin
  3. 13 3
      tools/odin-html-docs/odin_html_docs_main.odin

+ 36 - 37
core/sync/barrier.odin

@@ -1,44 +1,43 @@
 package sync
 
 
-// A barrier enabling multiple threads to synchronize the beginning of some computation
 /*
- * Example:
- *
- * 	package example
- *
- * 	import "core:fmt"
- * 	import "core:sync"
- * 	import "core:thread"
- *
- * 	barrier := &sync.Barrier{};
- *
- * 	main :: proc() {
- * 		fmt.println("Start");
- *
- * 		THREAD_COUNT :: 4;
- * 		threads: [THREAD_COUNT]^thread.Thread;
- *
- * 		sync.barrier_init(barrier, THREAD_COUNT);
- * 		defer sync.barrier_destroy(barrier);
- *
- *
- * 		for _, i in threads {
- * 			threads[i] = thread.create_and_start(proc(t: ^thread.Thread) {
- * 				// Same messages will be printed together but without any interleaving
- * 				fmt.println("Getting ready!");
- * 				sync.barrier_wait(barrier);
- * 				fmt.println("Off their marks they go!");
- * 			});
- * 		}
- *
- * 		for t in threads {
- * 			thread.destroy(t); // join and free thread
- * 		}
- * 		fmt.println("Finished");
- * 	}
- *
- */
+A barrier enabling multiple threads to synchronize the beginning of some computation
+Example:
+
+	package example
+
+	import "core:fmt"
+	import "core:sync"
+	import "core:thread"
+
+	barrier := &sync.Barrier{};
+
+	main :: proc() {
+		fmt.println("Start");
+
+		THREAD_COUNT :: 4;
+		threads: [THREAD_COUNT]^thread.Thread;
+
+		sync.barrier_init(barrier, THREAD_COUNT);
+		defer sync.barrier_destroy(barrier);
+
+
+		for _, i in threads {
+			threads[i] = thread.create_and_start(proc(t: ^thread.Thread) {
+				// Same messages will be printed together but without any interleaving
+				fmt.println("Getting ready!");
+				sync.barrier_wait(barrier);
+				fmt.println("Off their marks they go!");
+			});
+		}
+
+		for t in threads {
+			thread.destroy(t); // join and free thread
+		}
+		fmt.println("Finished");
+	}
+*/
 Barrier :: struct {
 	mutex: Blocking_Mutex,
 	cond:  Condition,

+ 34 - 37
core/sync/sync2/extended.odin

@@ -67,44 +67,41 @@ wait_group_wait_with_timeout :: proc(wg: ^Wait_Group, duration: time.Duration) -
 
 
 
-// A barrier enabling multiple threads to synchronize the beginning of some computation
 /*
- * Example:
- *
- * 	package example
- *
- * 	import "core:fmt"
- * 	import "core:sync"
- * 	import "core:thread"
- *
- * 	barrier := &sync.Barrier{}
- *
- * 	main :: proc() {
- * 		fmt.println("Start")
- *
- * 		THREAD_COUNT :: 4
- * 		threads: [THREAD_COUNT]^thread.Thread
- *
- * 		sync.barrier_init(barrier, THREAD_COUNT)
- * 		defer sync.barrier_destroy(barrier)
- *
- *
- * 		for _, i in threads {
- * 			threads[i] = thread.create_and_start(proc(t: ^thread.Thread) {
- * 				// Same messages will be printed together but without any interleaving
- * 				fmt.println("Getting ready!")
- * 				sync.barrier_wait(barrier)
- * 				fmt.println("Off their marks they go!")
- * 			})
- * 		}
- *
- * 		for t in threads {
- * 			thread.destroy(t) // join and free thread
- * 		}
- * 		fmt.println("Finished")
- * 	}
- *
- */
+A barrier enabling multiple threads to synchronize the beginning of some computation
+
+Example:
+	package example
+
+	import "core:fmt"
+	import "core:sync"
+	import "core:thread"
+
+	barrier := &sync.Barrier{}
+
+	main :: proc() {
+		fmt.println("Start")
+
+		THREAD_COUNT :: 4
+		threads: [THREAD_COUNT]^thread.Thread
+
+		sync.barrier_init(barrier, THREAD_COUNT)
+
+		for _, i in threads {
+			threads[i] = thread.create_and_start(proc(t: ^thread.Thread) {
+				// Same messages will be printed together but without any interleaving
+				fmt.println("Getting ready!")
+				sync.barrier_wait(barrier)
+				fmt.println("Off their marks they go!")
+			})
+		}
+
+		for t in threads {
+			thread.destroy(t) // join and free thread
+		}
+		fmt.println("Finished")
+	}
+*/
 Barrier :: struct {
 	mutex: Mutex,
 	cond:  Cond,

+ 13 - 3
tools/odin-html-docs/odin_html_docs_main.odin

@@ -802,21 +802,31 @@ write_docs :: proc(w: io.Writer, pkg: ^doc.Pkg, docs: string) {
 	it := docs
 	was_code := true
 	was_paragraph := true
+	prev_line: string
 	for line in strings.split_iterator(&it, "\n") {
+		text := strings.trim_space(line)
+		defer prev_line = line
+
 		if strings.has_prefix(line, "\t") {
 			if !was_code {
 				was_code = true;
-				fmt.wprint(w, `<pre class="doc-code"><code>`)
+				if prev_line == "Example:"  {
+					fmt.wprint(w, `<pre class="doc-code doc-code-example"><code>`)
+				} else {
+					fmt.wprint(w, `<pre class="doc-code"><code>`)
+				}
 			}
 			fmt.wprintf(w, "%s\n", strings.trim_prefix(line, "\t"))
 			continue
 		} else if was_code {
+			if text == "" {
+				continue
+			}
 			was_code = false
 			fmt.wprintln(w, "</code></pre>")
-			continue
 		}
-		text := strings.trim_space(line)
 		if text == "" {
+
 			if was_paragraph {
 				was_paragraph = false
 				fmt.wprintln(w, "</p>")