171 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			171 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html lang="en">
 | |
| <head>
 | |
| 	<meta charset="utf-8">
 | |
| 	<title>math.js | printing HTML</title>
 | |
| 
 | |
| 	<script src="../../lib/browser/math.js"></script>
 | |
| 
 | |
| 	<style>
 | |
| 		body {
 | |
| 			font-size: 11pt;
 | |
| 			font-family: verdana, arial, sans-serif;
 | |
| 		}
 | |
| 
 | |
| 		h1 {
 | |
| 			font-size: 1rem;
 | |
| 		}
 | |
| 
 | |
| 		fieldset {
 | |
| 			display: inline;
 | |
| 			margin: 0 50px 10px 0;
 | |
| 			padding: 0;
 | |
| 			border: none;
 | |
| 		}
 | |
| 
 | |
| 		input[type=text] {
 | |
| 			font-size: 11pt;
 | |
| 			font-family: verdana, arial, sans-serif;
 | |
| 			padding: 5px;
 | |
| 			width: calc(100% - 14px);
 | |
| 		}
 | |
| 
 | |
| 		label {
 | |
| 			margin: 0 5px 0 0;
 | |
| 		}
 | |
| 
 | |
| 		table {
 | |
| 			width: 100%;
 | |
| 			border-collapse: collapse;
 | |
| 		}
 | |
| 
 | |
| 		table td,
 | |
| 		table th {
 | |
| 			padding: 5px;
 | |
| 			border: 1px solid LightGrey;
 | |
| 		}
 | |
| 
 | |
| 		table th {
 | |
| 			background-color: LightGrey;
 | |
| 		}
 | |
| 
 | |
| 		/* style the HTML output */
 | |
| 		.math-function {
 | |
| 			color: Purple;
 | |
| 			font-weight: bold;
 | |
| 		}
 | |
| 
 | |
| 		.math-number {
 | |
| 			color: Blue;
 | |
| 		}
 | |
| 
 | |
| 		.math-boolean {
 | |
| 			color: Green;
 | |
| 		}
 | |
| 
 | |
| 		.math-string {
 | |
| 			color: Grey;
 | |
| 		}
 | |
| 
 | |
| 		.math-string::before,
 | |
| 		.math-string::after {
 | |
| 			content: "\"";
 | |
| 		}
 | |
| 
 | |
| 		.math-property {
 | |
| 			font-style: italic;
 | |
| 		}
 | |
| 
 | |
| 		.math-explicit-binary-operator::before,
 | |
| 		.math-explicit-binary-operator::after {
 | |
| 			content: " ";
 | |
| 		}
 | |
| 
 | |
| 		.math-separator::after,
 | |
| 		.math-assignment-operator::after {
 | |
| 			content: " ";
 | |
| 		}
 | |
| 	</style>
 | |
| </head>
 | |
| <body>
 | |
| <h1>Expression evaluation and HTML code generation with math.js</h1>
 | |
| <form>
 | |
| 	<fieldset>
 | |
| 		Parenthesis option:
 | |
| 		<label><input type="radio" name="parenthesis" value="keep" checked>keep</label>
 | |
| 		<label><input type="radio" name="parenthesis" value="auto">auto</label>
 | |
| 		<label><input type="radio" name="parenthesis" value="all">all</label>
 | |
| 	</fieldset>
 | |
| 	<fieldset>
 | |
| 		Implicit multiplication:
 | |
| 		<label><input type="radio" name="implicit" value="hide" checked>hide</label>
 | |
| 		<label><input type="radio" name="implicit" value="show">show</label>
 | |
| 	</fieldset>
 | |
| </form>
 | |
| <table>
 | |
| 	<tr>
 | |
| 		<th>Expression</th>
 | |
| 		<td><input type="text" id="expr"/></td>
 | |
| 	</tr>
 | |
| 	<tr>
 | |
| 		<th>Result</th>
 | |
| 		<td><div id="result"></div></td>
 | |
| 	</tr>
 | |
| 	<tr>
 | |
| 		<th>HTML output</th>
 | |
| 		<td><div id="output">$$$$</div></td>
 | |
| 	</tr>
 | |
| 	<tr>
 | |
| 		<th>HTML code</th>
 | |
| 		<td><div id="code">$$$$</div></td>
 | |
| 	</tr>
 | |
| </table>
 | |
| <script>
 | |
|   const expr = document.getElementById('expr')
 | |
|   const output = document.getElementById('output')
 | |
|   const code = document.getElementById('code')
 | |
|   const result = document.getElementById('result')
 | |
|   let options = {parenthesis: 'keep', implicit: 'hide'}
 | |
| 
 | |
|   // initialize with an example expression
 | |
|   expr.value = 'sqrt(75/3)+det([[-1,2],[3,1]])-sin(pi/4)^2'
 | |
| 
 | |
|   function print () {
 | |
|     let parsed = null
 | |
| 
 | |
|     try {
 | |
|       // parse the expression
 | |
|       parsed = math.parse(expr.value)
 | |
| 
 | |
|       // evaluate the result of the expression
 | |
|       result.innerHTML = math.format(parsed.compile().evaluate())
 | |
| 
 | |
|       // print the HTML output
 | |
|       const html = math.parse(expr.value).toHTML(options)
 | |
|       output.innerHTML = html
 | |
| 
 | |
|       // print the HTML code
 | |
|       code.innerHTML = html.replace(/</g, '<').
 | |
|       replace(/>/g, '>').
 | |
|       replace(/<\/span>/g, '</span><br />')
 | |
|     }
 | |
|     catch (err) {
 | |
|       result.innerHTML = '<span style="color: red;">' + err.toString() + '</span>'
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   window.onload = print
 | |
|   expr.oninput = print
 | |
| 
 | |
|   // make the controls work
 | |
|   const controls = document.querySelectorAll('input[type=radio]')
 | |
|   controls.forEach(function (control) {
 | |
|     control.onclick = function() {
 | |
|       options[control.name] = control.value
 | |
|       print()
 | |
|     }
 | |
|   })
 | |
| </script>
 | |
| </body>
 | |
| </html>
 |