Compare commits
	
		
			6 Commits
		
	
	
		
			v0.0.1
			...
			49db07b9ee
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 49db07b9ee | |||
| d75e447bf3 | |||
| 99b9037719 | |||
| a51c6a976d | |||
| 06f4a2ec5b | |||
| f061bd964e | 
							
								
								
									
										10
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								CHANGELOG.md
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,10 @@ | ||||
| # Changelog | ||||
|  | ||||
| ## [v0.0.2] - _WIP_ | ||||
| ### Added | ||||
| - `width` parameter to `schema.render` for easier integration | ||||
| - `all-bit-i` config option | ||||
|  | ||||
| ## [v0.0.1] - 2024-05-19 | ||||
| - initial version | ||||
| - ported all features from the [python package](https://git.kb28.ch/HEL/rivet/) | ||||
| @@ -24,6 +24,7 @@ | ||||
| /// - width (float): TODO -> remove | ||||
| /// - height (float): TODO -> remove | ||||
| /// - full-page (bool): If true, the page will be resized to fit the diagram and take the background color | ||||
| /// - all-bit-i (bool): If true, all bit indices will be rendered, otherwise, only the ends of each range will be displayed | ||||
| /// -> dictionary | ||||
| #let config( | ||||
|   default-font-family: "Ubuntu Mono", | ||||
| @@ -49,7 +50,8 @@ | ||||
|   left-labels: false, | ||||
|   width: 1200, | ||||
|   height: 800, | ||||
|   full-page: false | ||||
|   full-page: false, | ||||
|   all-bit-i: true | ||||
| ) = {} | ||||
|  | ||||
| /// Dark theme config | ||||
|   | ||||
| @@ -11,4 +11,5 @@ | ||||
| /// This functions | ||||
| /// - structures (dictionary): A schema dictionary, as returned by #doc-ref("schema.load") | ||||
| /// - config (auto, dictionary): The configuration parameters, as returned by #doc-ref("config.config") | ||||
| #let render(structures, config: auto) | ||||
| /// - width (ratio, length): The width of the generated figure | ||||
| #let render(structures, config: auto, width: 100%) = {} | ||||
							
								
								
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								manual.pdf
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -22,7 +22,8 @@ | ||||
|   left-labels: false, | ||||
|   width: 1200, | ||||
|   height: 800, | ||||
|   full-page: false | ||||
|   full-page: false, | ||||
|   all-bit-i: true | ||||
| ) = { | ||||
|   return ( | ||||
|     default-font-family: default-font-family, | ||||
| @@ -48,7 +49,8 @@ | ||||
|     left-labels: left-labels, | ||||
|     width: width, | ||||
|     height: height, | ||||
|     full-page: full-page | ||||
|     full-page: full-page, | ||||
|     all-bit-i: all-bit-i | ||||
|   ) | ||||
| } | ||||
|  | ||||
|   | ||||
| @@ -1,4 +1,4 @@ | ||||
| #let version = version((0,0,1)) | ||||
| #let version = version((0,0,2)) | ||||
|  | ||||
| #import "config.typ" | ||||
| #import "schema.typ" | ||||
| @@ -356,14 +356,27 @@ | ||||
|   // Draw rectangle around structure | ||||
|   shapes += draw-rect(border-col, bits-x, bits-y, bits-width, bit-h, thickness: 2) | ||||
|  | ||||
|   let indices = range(struct.bits) | ||||
|   if not config.all-bit-i { | ||||
|     indices = () | ||||
|     for r in struct.ranges.values() { | ||||
|       indices.push(r.start) | ||||
|       indices.push(r.end) | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   for i in range(struct.bits) { | ||||
|     let bit-x = ox + i * bit-w | ||||
|     let real-i = struct.bits - i - 1 + start-bit | ||||
|  | ||||
|     if real-i in indices { | ||||
|       shapes += draw-text( | ||||
|       str(struct.bits - i - 1 + start-bit), | ||||
|         str(real-i), | ||||
|         txt-col, | ||||
|         bit-x + bit-w / 2, | ||||
|         oy + bit-h / 2  | ||||
|       ) | ||||
|     } | ||||
|  | ||||
|     // Draw separator | ||||
|     if i != 0 { | ||||
| @@ -433,7 +446,7 @@ | ||||
|   return (shapes, desc-y) | ||||
| } | ||||
|  | ||||
| #let render(config, structures) = { | ||||
| #let render(config, structures, width: 100%) = { | ||||
|   set text( | ||||
|     font: config.default-font-family, | ||||
|     size: config.default-font-size | ||||
| @@ -458,7 +471,7 @@ | ||||
|  | ||||
|   set page(..params) | ||||
|  | ||||
|   canvas(length: 1pt, background: config.background, { | ||||
|   let cnvs = canvas(length: 1pt, background: config.background, { | ||||
|     let (shapes, _) = draw-structure( | ||||
|       config, main, structures, | ||||
|       ox: ox, | ||||
| @@ -475,6 +488,36 @@ | ||||
|       fill: none | ||||
|     ) | ||||
|   }) | ||||
|  | ||||
|   if config.full-page { | ||||
|     cnvs | ||||
|   } else { | ||||
|     layout(size => { | ||||
|       let m = measure(cnvs) | ||||
|       let w = m.width | ||||
|       let h = m.height | ||||
|       let base-w = if type(width) == ratio { | ||||
|         size.width * width | ||||
|       } else { | ||||
|         width | ||||
|       } | ||||
|       let r = if w == 0 { | ||||
|         0 | ||||
|       } else { | ||||
|         base-w / w | ||||
|       } | ||||
|  | ||||
|       let new-w = w * r | ||||
|       let new-h = h * r | ||||
|       r *= 100% | ||||
|  | ||||
|       box( | ||||
|         width: new-w, | ||||
|         height: new-h, | ||||
|         scale(x: r, y: r, cnvs, reflow: true) | ||||
|       ) | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  | ||||
| #let make(config) = { | ||||
|   | ||||
| @@ -56,10 +56,10 @@ | ||||
|   return structures | ||||
| } | ||||
|  | ||||
| #let render(structures, config: auto) = { | ||||
| #let render(structures, width: 100%, config: auto) = { | ||||
|   if config == auto { | ||||
|     config = conf.config() | ||||
|   } | ||||
|   let renderer_ = renderer.make(config) | ||||
|   (renderer_.render)(structures) | ||||
|   (renderer_.render)(structures, width: width) | ||||
| } | ||||
| @@ -1,6 +1,6 @@ | ||||
| [package] | ||||
| name = "rivet" | ||||
| version = "0.0.1" | ||||
| version = "0.0.2" | ||||
| compiler = "0.11.0" | ||||
| repository = "https://git.kb28.ch/HEL/rivet-typst" | ||||
| entrypoint = "src/lib.typ" | ||||
|   | ||||
		Reference in New Issue
	
	Block a user