Showing
100 changed files
with
3533 additions
and
0 deletions
Too many changes to show.
To preserve performance only 100 of 100+ files are displayed.
CHANGELOG.md
0 → 100644
1 | +## 0.7.3 | ||
2 | + | ||
3 | +* Add support for flutter 3.27.0 | ||
4 | + | ||
5 | +## 0.7.2 | ||
6 | + | ||
7 | +* Fix: add missing import to gesture_detector_builder_selectable.dart (#87) | ||
8 | +* Fix: simple null pointer exception (#82) | ||
9 | +* Fix: function node children update (#58) | ||
10 | + | ||
11 | +## 0.7.1 | ||
12 | + | ||
13 | +* Update `flutter_svg` dependency | ||
14 | +* Make expressions inside a root selectable | ||
15 | + | ||
16 | +## 0.7.0 | ||
17 | + | ||
18 | +* Support for Dart version `3.0.0`. | ||
19 | +* Code cleanups. | ||
20 | + | ||
21 | +## 0.6.3+1 | ||
22 | + | ||
23 | +* Updated example app flutter_tex dependency. | ||
24 | + | ||
25 | +## 0.6.3 | ||
26 | + | ||
27 | +* Removed unnecessary null-aware operators. Bumped min Flutter version to `3.0.0` and Dart to `2.17.0`. | ||
28 | + | ||
29 | +## 0.6.2 | ||
30 | + | ||
31 | +* Added CursorNode | ||
32 | + | ||
33 | +## 0.6.1 | ||
34 | + | ||
35 | +* Fixed text selection (`SelectableMath`). | ||
36 | + | ||
37 | +## 0.6.0 | ||
38 | + | ||
39 | +* Upgraded `flutter_svg` dependency to `1.0.0` release. | ||
40 | + | ||
41 | +## 0.5.0 | ||
42 | + | ||
43 | +* Upgraded `flutter_svg` dependency. | ||
44 | + | ||
45 | +## 0.4.2+2 | ||
46 | + | ||
47 | +* Fixed `\sqrt` child positioning. | ||
48 | + | ||
49 | +## 0.4.2+1 | ||
50 | + | ||
51 | +* Fixed `aligned` environment. | ||
52 | + | ||
53 | +## 0.4.2 | ||
54 | + | ||
55 | +* Added dry layout support. | ||
56 | + | ||
57 | +## 0.4.1 | ||
58 | + | ||
59 | +* Fixed styling of umlauts in text mode. | ||
60 | + | ||
61 | +## 0.4.0+1 | ||
62 | + | ||
63 | +* Fixed missing implementations compile-time error on `master`. | ||
64 | + | ||
65 | +## 0.4.0 | ||
66 | + | ||
67 | +* Bumped `provider` to `^6.0.0`. | ||
68 | + | ||
69 | +## 0.3.3+1 | ||
70 | + | ||
71 | +* Fixed breaking change in `TextSelectionControls.buildHandle`. | ||
72 | + | ||
73 | +## 0.3.3 | ||
74 | + | ||
75 | +* Fixed all SVG-related bugs on web (`\sqrt`, stretchies, etc.) as `flutter_svg` | ||
76 | + is now supported using both CanvasKit and the HTML renderer. | ||
77 | + | ||
78 | +## 0.3.2+1 | ||
79 | + | ||
80 | +* Fixed `\sqrt` not displaying in CanvasKit by forcing platform views for sqrt. | ||
81 | + | ||
82 | +## 0.3.2 | ||
83 | + | ||
84 | +* Fixed WebGL crashing by using `flutter_svg` on web when CanvasKit is enabled. | ||
85 | + | ||
86 | +## 0.3.1+1 | ||
87 | + | ||
88 | +* Exposed `MacroExpansion` in `package:flutter_math/tex.dart`. | ||
89 | + | ||
90 | +## 0.3.1 | ||
91 | + | ||
92 | +* Added support for custom macros by exposing `defineMacro` in `package:flutter_math/tex.dart`. | ||
93 | + | ||
94 | +## 0.3.0+3 | ||
95 | + | ||
96 | +* Bump `flutter_svg`. | ||
97 | + | ||
98 | +## 0.3.0+2 | ||
99 | + | ||
100 | +* Added missing `userUpdateTextEditingValue` implementation | ||
101 | + to `InternalSelectableMathState`. | ||
102 | + | ||
103 | +## 0.3.0+1 | ||
104 | + | ||
105 | +* Fixed font references. | ||
106 | + | ||
107 | +## 0.3.0 | ||
108 | + | ||
109 | +* Migrated to Flutter 2.0. | ||
110 | + | ||
111 | +## 0.3.0-nullsafety.0 | ||
112 | + | ||
113 | +* Migrate to dart null safety | ||
114 | +* Migrate to new selection theme api | ||
115 | + | ||
116 | +## 0.2.1 | ||
117 | + | ||
118 | +* Fix overflow in `cases` environment | ||
119 | +* Fix errors caused by null text colors in `Math` widget. | ||
120 | + | ||
121 | +## 0.2.0+2 | ||
122 | + | ||
123 | +* Add support for `TextStyle.color` in widget constructors. | ||
124 | + | ||
125 | +## 0.2.0+1 | ||
126 | + | ||
127 | +* Fix `Math.tex` constructor's wrong default value for `MathOptions`. | ||
128 | + | ||
129 | +## 0.2.0 | ||
130 | + | ||
131 | +* A new `SelectableMath` widget that supports selection and copy-to-clipboard. | ||
132 | +* A TeX encoder. | ||
133 | +* Various performance boosts. | ||
134 | +* fix a bug where some math functions' lower bound get dropped | ||
135 | +* **Breaking change**: major overhaul on class names. | ||
136 | +* **Breaking change**: `baseSizeMultiplier` is removed. | ||
137 | +* **Breaking change**: parse errors and build errors now have correct types instead of `dynamic`. | ||
138 | + `onErrorFallback`'s signature has changed as a result. | ||
139 | +* **Breaking change**: exports are grouped into `widgets`, `ast`, `tex`. | ||
140 | + | ||
141 | +For detailed information, please see [0.2.0 migration guide](doc/migration.0.2.0.md). | ||
142 | + | ||
143 | +## 0.1.9 | ||
144 | + | ||
145 | +* With all 0.2.0 improvements, but excluding those breaking changes. | ||
146 | + | ||
147 | +## 0.1.8+1 | ||
148 | + | ||
149 | +* More documentations. | ||
150 | + | ||
151 | +## 0.1.8 | ||
152 | + | ||
153 | +* Add support for text-mode accent and unicode accents. (e.g. `ä` and `\text{\v{a}}`) | ||
154 | +* Fix underflow issues of accents and sqrts when their child has too little height. | ||
155 | + | ||
156 | +## 0.1.7 | ||
157 | + | ||
158 | +* Remove need for specifying fonts in package Pubspec. | ||
159 | + | ||
160 | +## 0.1.6 | ||
161 | + | ||
162 | +* Add support for Flutter Web (DomCanvas backend) | ||
163 | + | ||
164 | +## 0.1.5 | ||
165 | + | ||
166 | +* Fix breakings caused by [dart/#40674](https://github.com/dart-lang/sdk/issues/40674) | ||
167 | +* Support Flutter 1.20. | ||
168 | + | ||
169 | +## 0.1.4 | ||
170 | + | ||
171 | +* Fix incorrect color for lines in \frac, \overline, \underline, and \rule | ||
172 | + | ||
173 | +## 0.1.3 | ||
174 | + | ||
175 | +* Dashed matrix separator will now be rendered correctly | ||
176 | + | ||
177 | +## 0.1.2 | ||
178 | + | ||
179 | +* Add support for composite symbols, i.e. \notin \not\lt | ||
180 | +* Add API to indicate font size | ||
181 | +* Fix a problem where some exceptions will not be caught | ||
182 | + | ||
183 | +## 0.1.1 | ||
184 | + | ||
185 | +* Add `onErrorFallback` functions for `FlutterMath` widget | ||
186 | + | ||
187 | +## 0.1.0 | ||
188 | + | ||
189 | +Fix minor crashes | ||
190 | + | ||
191 | +## 0.0.1+1 | ||
192 | + | ||
193 | +* Temporarily fix the problem that pana and dartfmt will crash on this package causing zero pub score | ||
194 | + | ||
195 | +## 0.0.1 | ||
196 | + | ||
197 | +Initial release. |
LICENSE
0 → 100644
1 | + | ||
2 | + Apache License | ||
3 | + Version 2.0, January 2004 | ||
4 | + http://www.apache.org/licenses/ | ||
5 | + | ||
6 | + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION | ||
7 | + | ||
8 | + 1. Definitions. | ||
9 | + | ||
10 | + "License" shall mean the terms and conditions for use, reproduction, | ||
11 | + and distribution as defined by Sections 1 through 9 of this document. | ||
12 | + | ||
13 | + "Licensor" shall mean the copyright owner or entity authorized by | ||
14 | + the copyright owner that is granting the License. | ||
15 | + | ||
16 | + "Legal Entity" shall mean the union of the acting entity and all | ||
17 | + other entities that control, are controlled by, or are under common | ||
18 | + control with that entity. For the purposes of this definition, | ||
19 | + "control" means (i) the power, direct or indirect, to cause the | ||
20 | + direction or management of such entity, whether by contract or | ||
21 | + otherwise, or (ii) ownership of fifty percent (50%) or more of the | ||
22 | + outstanding shares, or (iii) beneficial ownership of such entity. | ||
23 | + | ||
24 | + "You" (or "Your") shall mean an individual or Legal Entity | ||
25 | + exercising permissions granted by this License. | ||
26 | + | ||
27 | + "Source" form shall mean the preferred form for making modifications, | ||
28 | + including but not limited to software source code, documentation | ||
29 | + source, and configuration files. | ||
30 | + | ||
31 | + "Object" form shall mean any form resulting from mechanical | ||
32 | + transformation or translation of a Source form, including but | ||
33 | + not limited to compiled object code, generated documentation, | ||
34 | + and conversions to other media types. | ||
35 | + | ||
36 | + "Work" shall mean the work of authorship, whether in Source or | ||
37 | + Object form, made available under the License, as indicated by a | ||
38 | + copyright notice that is included in or attached to the work | ||
39 | + (an example is provided in the Appendix below). | ||
40 | + | ||
41 | + "Derivative Works" shall mean any work, whether in Source or Object | ||
42 | + form, that is based on (or derived from) the Work and for which the | ||
43 | + editorial revisions, annotations, elaborations, or other modifications | ||
44 | + represent, as a whole, an original work of authorship. For the purposes | ||
45 | + of this License, Derivative Works shall not include works that remain | ||
46 | + separable from, or merely link (or bind by name) to the interfaces of, | ||
47 | + the Work and Derivative Works thereof. | ||
48 | + | ||
49 | + "Contribution" shall mean any work of authorship, including | ||
50 | + the original version of the Work and any modifications or additions | ||
51 | + to that Work or Derivative Works thereof, that is intentionally | ||
52 | + submitted to Licensor for inclusion in the Work by the copyright owner | ||
53 | + or by an individual or Legal Entity authorized to submit on behalf of | ||
54 | + the copyright owner. For the purposes of this definition, "submitted" | ||
55 | + means any form of electronic, verbal, or written communication sent | ||
56 | + to the Licensor or its representatives, including but not limited to | ||
57 | + communication on electronic mailing lists, source code control systems, | ||
58 | + and issue tracking systems that are managed by, or on behalf of, the | ||
59 | + Licensor for the purpose of discussing and improving the Work, but | ||
60 | + excluding communication that is conspicuously marked or otherwise | ||
61 | + designated in writing by the copyright owner as "Not a Contribution." | ||
62 | + | ||
63 | + "Contributor" shall mean Licensor and any individual or Legal Entity | ||
64 | + on behalf of whom a Contribution has been received by Licensor and | ||
65 | + subsequently incorporated within the Work. | ||
66 | + | ||
67 | + 2. Grant of Copyright License. Subject to the terms and conditions of | ||
68 | + this License, each Contributor hereby grants to You a perpetual, | ||
69 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
70 | + copyright license to reproduce, prepare Derivative Works of, | ||
71 | + publicly display, publicly perform, sublicense, and distribute the | ||
72 | + Work and such Derivative Works in Source or Object form. | ||
73 | + | ||
74 | + 3. Grant of Patent License. Subject to the terms and conditions of | ||
75 | + this License, each Contributor hereby grants to You a perpetual, | ||
76 | + worldwide, non-exclusive, no-charge, royalty-free, irrevocable | ||
77 | + (except as stated in this section) patent license to make, have made, | ||
78 | + use, offer to sell, sell, import, and otherwise transfer the Work, | ||
79 | + where such license applies only to those patent claims licensable | ||
80 | + by such Contributor that are necessarily infringed by their | ||
81 | + Contribution(s) alone or by combination of their Contribution(s) | ||
82 | + with the Work to which such Contribution(s) was submitted. If You | ||
83 | + institute patent litigation against any entity (including a | ||
84 | + cross-claim or counterclaim in a lawsuit) alleging that the Work | ||
85 | + or a Contribution incorporated within the Work constitutes direct | ||
86 | + or contributory patent infringement, then any patent licenses | ||
87 | + granted to You under this License for that Work shall terminate | ||
88 | + as of the date such litigation is filed. | ||
89 | + | ||
90 | + 4. Redistribution. You may reproduce and distribute copies of the | ||
91 | + Work or Derivative Works thereof in any medium, with or without | ||
92 | + modifications, and in Source or Object form, provided that You | ||
93 | + meet the following conditions: | ||
94 | + | ||
95 | + (a) You must give any other recipients of the Work or | ||
96 | + Derivative Works a copy of this License; and | ||
97 | + | ||
98 | + (b) You must cause any modified files to carry prominent notices | ||
99 | + stating that You changed the files; and | ||
100 | + | ||
101 | + (c) You must retain, in the Source form of any Derivative Works | ||
102 | + that You distribute, all copyright, patent, trademark, and | ||
103 | + attribution notices from the Source form of the Work, | ||
104 | + excluding those notices that do not pertain to any part of | ||
105 | + the Derivative Works; and | ||
106 | + | ||
107 | + (d) If the Work includes a "NOTICE" text file as part of its | ||
108 | + distribution, then any Derivative Works that You distribute must | ||
109 | + include a readable copy of the attribution notices contained | ||
110 | + within such NOTICE file, excluding those notices that do not | ||
111 | + pertain to any part of the Derivative Works, in at least one | ||
112 | + of the following places: within a NOTICE text file distributed | ||
113 | + as part of the Derivative Works; within the Source form or | ||
114 | + documentation, if provided along with the Derivative Works; or, | ||
115 | + within a display generated by the Derivative Works, if and | ||
116 | + wherever such third-party notices normally appear. The contents | ||
117 | + of the NOTICE file are for informational purposes only and | ||
118 | + do not modify the License. You may add Your own attribution | ||
119 | + notices within Derivative Works that You distribute, alongside | ||
120 | + or as an addendum to the NOTICE text from the Work, provided | ||
121 | + that such additional attribution notices cannot be construed | ||
122 | + as modifying the License. | ||
123 | + | ||
124 | + You may add Your own copyright statement to Your modifications and | ||
125 | + may provide additional or different license terms and conditions | ||
126 | + for use, reproduction, or distribution of Your modifications, or | ||
127 | + for any such Derivative Works as a whole, provided Your use, | ||
128 | + reproduction, and distribution of the Work otherwise complies with | ||
129 | + the conditions stated in this License. | ||
130 | + | ||
131 | + 5. Submission of Contributions. Unless You explicitly state otherwise, | ||
132 | + any Contribution intentionally submitted for inclusion in the Work | ||
133 | + by You to the Licensor shall be under the terms and conditions of | ||
134 | + this License, without any additional terms or conditions. | ||
135 | + Notwithstanding the above, nothing herein shall supersede or modify | ||
136 | + the terms of any separate license agreement you may have executed | ||
137 | + with Licensor regarding such Contributions. | ||
138 | + | ||
139 | + 6. Trademarks. This License does not grant permission to use the trade | ||
140 | + names, trademarks, service marks, or product names of the Licensor, | ||
141 | + except as required for reasonable and customary use in describing the | ||
142 | + origin of the Work and reproducing the content of the NOTICE file. | ||
143 | + | ||
144 | + 7. Disclaimer of Warranty. Unless required by applicable law or | ||
145 | + agreed to in writing, Licensor provides the Work (and each | ||
146 | + Contributor provides its Contributions) on an "AS IS" BASIS, | ||
147 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or | ||
148 | + implied, including, without limitation, any warranties or conditions | ||
149 | + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A | ||
150 | + PARTICULAR PURPOSE. You are solely responsible for determining the | ||
151 | + appropriateness of using or redistributing the Work and assume any | ||
152 | + risks associated with Your exercise of permissions under this License. | ||
153 | + | ||
154 | + 8. Limitation of Liability. In no event and under no legal theory, | ||
155 | + whether in tort (including negligence), contract, or otherwise, | ||
156 | + unless required by applicable law (such as deliberate and grossly | ||
157 | + negligent acts) or agreed to in writing, shall any Contributor be | ||
158 | + liable to You for damages, including any direct, indirect, special, | ||
159 | + incidental, or consequential damages of any character arising as a | ||
160 | + result of this License or out of the use or inability to use the | ||
161 | + Work (including but not limited to damages for loss of goodwill, | ||
162 | + work stoppage, computer failure or malfunction, or any and all | ||
163 | + other commercial damages or losses), even if such Contributor | ||
164 | + has been advised of the possibility of such damages. | ||
165 | + | ||
166 | + 9. Accepting Warranty or Additional Liability. While redistributing | ||
167 | + the Work or Derivative Works thereof, You may choose to offer, | ||
168 | + and charge a fee for, acceptance of support, warranty, indemnity, | ||
169 | + or other liability obligations and/or rights consistent with this | ||
170 | + License. However, in accepting such obligations, You may act only | ||
171 | + on Your own behalf and on Your sole responsibility, not on behalf | ||
172 | + of any other Contributor, and only if You agree to indemnify, | ||
173 | + defend, and hold each Contributor harmless for any liability | ||
174 | + incurred by, or claims asserted against, such Contributor by reason | ||
175 | + of your accepting any such warranty or additional liability. | ||
176 | + | ||
177 | + END OF TERMS AND CONDITIONS | ||
178 | + | ||
179 | + APPENDIX: How to apply the Apache License to your work. | ||
180 | + | ||
181 | + To apply the Apache License to your work, attach the following | ||
182 | + boilerplate notice, with the fields enclosed by brackets "[]" | ||
183 | + replaced with your own identifying information. (Don't include | ||
184 | + the brackets!) The text should be enclosed in the appropriate | ||
185 | + comment syntax for the file format. We also recommend that a | ||
186 | + file or class name and description of purpose be included on the | ||
187 | + same "printed page" as the copyright notice for easier | ||
188 | + identification within third-party archives. | ||
189 | + | ||
190 | + Copyright [yyyy] [name of copyright owner] | ||
191 | + | ||
192 | + Licensed under the Apache License, Version 2.0 (the "License"); | ||
193 | + you may not use this file except in compliance with the License. | ||
194 | + You may obtain a copy of the License at | ||
195 | + | ||
196 | + http://www.apache.org/licenses/LICENSE-2.0 | ||
197 | + | ||
198 | + Unless required by applicable law or agreed to in writing, software | ||
199 | + distributed under the License is distributed on an "AS IS" BASIS, | ||
200 | + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
201 | + See the License for the specific language governing permissions and | ||
202 | + limitations under the License. |
README.md
0 → 100644
1 | +# Flutter Math | ||
2 | + | ||
3 | +[](https://travis-ci.com/znjameswu/flutter_math) [](https://codecov.io/gh/znjameswu/flutter_math) [](https://pub.dev/packages/flutter_math_fork) | ||
4 | + | ||
5 | + | ||
6 | +## ⚠ fork | ||
7 | + | ||
8 | +This is a fork of [flutter_math](https://github.com/znjameswu/flutter_math) addressing compatibility | ||
9 | +problems while `flutter_math` is not being maintained. | ||
10 | + | ||
11 | +--- | ||
12 | + | ||
13 | + | ||
14 | + | ||
15 | +Math equation rendering in pure Dart & Flutter. | ||
16 | + | ||
17 | + | ||
18 | +This project aims to achieve maximum compatibility and fidelity with regard to the [KaTeX](https://github.com/KaTeX/KaTeX) project, while maintaining the performance advantage of Dart and Flutter. A further [UnicodeMath](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf)-style equation editing support will be experimented in the future. | ||
19 | + | ||
20 | + | ||
21 | +The TeX parser is a Dart port of the KaTeX parser. There are only a few unsupported features and parsing differences compared to the original KaTeX parser. List of some unsupported features can be found [here](doc/unsupported.md). | ||
22 | + | ||
23 | +## [Online Demo](https://znjameswu.github.io/flutter_math_demo/) | ||
24 | + | ||
25 | +## Rendering Samples | ||
26 | + | ||
27 | +`x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}` | ||
28 | + | ||
29 | + | ||
30 | + | ||
31 | +`i\hbar\frac{\partial}{\partial t}\Psi(\vec x,t) = -\frac{\hbar}{2m}\nabla^2\Psi(\vec x,t)+ V(\vec x)\Psi(\vec x,t)` | ||
32 | + | ||
33 | + | ||
34 | + | ||
35 | +`\hat f(\xi) = \int_{-\infty}^\infty f(x)e^{- 2\pi i \xi x}\mathrm{d}x` | ||
36 | + | ||
37 | + | ||
38 | + | ||
39 | + | ||
40 | +## How to use | ||
41 | + | ||
42 | +Add `flutter_math` to your `pubspec.yaml` dependencies | ||
43 | + | ||
44 | +### Mobile | ||
45 | +Currently only Android platform has been tested. If you encounter any issues with iOS, please file them. | ||
46 | + | ||
47 | +### Web | ||
48 | +Web support is added in v0.1.6. It is tested for DomCanvas backend. In general it should behave largely the same with mobile. It is expected to break with CanvasKit backend. Check out the [Online Demo](https://znjameswu.github.io/flutter_math_demo/) | ||
49 | + | ||
50 | +## API usage (v0.2.0) | ||
51 | +The usage is straightforward. Just `Math.tex(r'\frac a b')`. There is also optional arguments of `TexParserSettings settings`, which corresponds to Settings in KaTeX and support a subset of its features. | ||
52 | + | ||
53 | +Display-style equations: | ||
54 | +```dart | ||
55 | +Math.tex(r'\frac a b', mathStyle: MathStyle.display) // Default | ||
56 | +``` | ||
57 | + | ||
58 | +In-line equations | ||
59 | +```dart | ||
60 | +Math.tex(r'\frac a b', mathStyle: MathStyle.text) | ||
61 | +``` | ||
62 | + | ||
63 | +The default size of the equation is obtained from the build context. If you wish to specify the size, you can use `textStyle`. Note: this parameter will also change how big 1cm/1pt/1inch is rendered on the screen. If you wish to specify the size of those absolute units, use `logicalPpi` | ||
64 | + | ||
65 | +```dart | ||
66 | +Math.tex( | ||
67 | + r'\frac a b', | ||
68 | + textStyle: TextStyle(fontSize: 42), | ||
69 | + // logicalPpi: MathOptions.defaultLogicalPpiFor(42), | ||
70 | +) | ||
71 | +``` | ||
72 | + | ||
73 | +There is also a selectable variant `SelectableMath` that creates selectable and copy-able equations on both mobile and web. (EXPERIMENTAL) Users can select part of the equation and obtain the encoded TeX strings. The usage is similar to Flutter's `SelectableText`. | ||
74 | + | ||
75 | +```dart | ||
76 | +SelectableMath.tex(r'\frac a b', textStyle: TextStyle(fontSize: 42)) | ||
77 | +``` | ||
78 | + | ||
79 | +If you would like to display custom styled error message, you should use `onErrorFallback` parameter. You can also process the errors in this function. But beware this function is called in build function. | ||
80 | +```dart | ||
81 | +Math.tex( | ||
82 | + r'\garbled $tring', | ||
83 | + textStyle: TextStyle(color: Colors.green), | ||
84 | + onErrorFallback: (err) => Container( | ||
85 | + color: Colors.red, | ||
86 | + child: Text(err.messageWithType, style: TextStyle(color: Colors.yellow)), | ||
87 | + ), | ||
88 | +) | ||
89 | +``` | ||
90 | + | ||
91 | +If you wish to have more granularity dealing with equations, you can manually invoke the parser and supply AST into the widget. | ||
92 | +```dart | ||
93 | +SyntaxTree ast; | ||
94 | +try { | ||
95 | + ast = SyntaxTree(greenRoot: TexParser(r'\frac a b', TexParserSettings()).parse()); | ||
96 | +} on ParseException catch (e) { | ||
97 | + // Handle my error here | ||
98 | +} | ||
99 | + | ||
100 | +SelectableMath( | ||
101 | + ast: ast, | ||
102 | + mathStyle: MathStyle.text, | ||
103 | + textStyle: TextStyle(fontSize: 42), | ||
104 | +) | ||
105 | +``` | ||
106 | + | ||
107 | +## [Line Breaking](doc/line_breaking.md) | ||
108 | + | ||
109 | +## Credits | ||
110 | +This project is possible thanks to the inspirations and resources from [the KaTeX Project](https://katex.org/), [MathJax](www.mathjax.org), [Zefyr](https://github.com/memspace/zefyr), and [CaTeX](https://github.com/simpleclub/CaTeX). | ||
111 | + | ||
112 | +## Goals | ||
113 | +- [x] : TeX math parsing (See [design doc](doc/design.md)) | ||
114 | +- [x] : AST rendering in flutter | ||
115 | +- [x] : Selectable widget | ||
116 | +- [x] : TeX output (WIP) | ||
117 | +- [ ] : UnicodeMath parsing and encoding | ||
118 | +- [ ] : [UnicodeMath](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf)-style editing | ||
119 | +- [ ] : Breakable equations | ||
120 | +- [ ] : MathML parsing and encoding | ||
121 | + |
doc/TODO.md
0 → 100644
1 | +* [ ] Nullability check of required arguments! | ||
2 | + | ||
3 | +* LeftRight should remove 0.12 em nulldelimiter introduced by FracNode. | ||
4 | + | ||
5 | +* | and \u2223 needs extra moderation for the symbol (also in stacked delimiter) (\u2225Parallel & \u2016Vert) | ||
6 | + | ||
7 | +* extract nulldelimiter | ||
8 | + | ||
9 | +* modify symbols.dart to change the render config of surrogate pairs | ||
10 | + | ||
11 | +* equation breaking | ||
12 | + | ||
13 | +* gathered environment |
doc/design.md
0 → 100644
1 | +# Design Rationale | ||
2 | + | ||
3 | +## Priority of design | ||
4 | +1. Consistent editing logic | ||
5 | +2. Faithful rendering of additional features if not conflicting with editing logic. | ||
6 | +3. Fast re-rendering on editing | ||
7 | +4. Good layout on constrained screen sizes | ||
8 | +5. Simple and declarative code | ||
9 | +6. Fast parsing and rendering | ||
10 | + | ||
11 | +## AST | ||
12 | + | ||
13 | +The AST of this project has a very similar structure compared with MathML, the AST of MathJax, with several differences: | ||
14 | + | ||
15 | +- MultiscriptNode do not support extra pairs of postscripts as <mmultiscripts> in MathML does. Extra postscript pairs will conflict with UnicodeMath input syntax. | ||
16 | +- <msubsup> and part of <mmultiscripts> are merged into one single MultiscriptsNode. After removing the support of extra postscript feature, they become largely the same. In current TeX height/depth calculation mechanism, nesting subsups with presubscripts will fail to generate vertically-aligned scripts. We have to merge it into one node anyway. | ||
17 | + | ||
18 | + | ||
19 | +### Rosyln's Reg-Green Tree | ||
20 | +The AST uses Roslyn's immutable Red-Green Tree (without deduplication features) to construct the AST. And the GreenNodes are completely stateless and context-free. | ||
21 | +- In the build process, this ensures a uni-directional data flow. Options down, widgets up. | ||
22 | +- It is simpler to perform widget reusing. As long as the GreenNode and relevant Options stay the same, the entire subtree can be bypassed. And this simple mechanism will cover ALL possible widget reusing scenarios, as the flutter widget tree itself is immutable as well. | ||
23 | +- It is tremendously easier and more robust to revert any editing changes. You just need to find the old root node. | ||
24 | +- Any layout parameters can be safely calculated and stored inside AST nodes. | ||
25 | + | ||
26 | + | ||
27 | +### Text and Math mode AST design Rationale: | ||
28 | +We merge text-mode symbols and math-mode symbols into a single SymbolNode class but separated by their AtomTypes at the parsing time. This distinction of symbols will be preserved throughout any editing. We did not choose the following alternatives: | ||
29 | +- Make a TextNode extend from EquationRowNode and only allow this type to hold TextSymbolNode as children | ||
30 | + - Good for editing experience | ||
31 | + - Horrible nesting of math inside text inside math while editing (which KaTeX supports). Type safety concerns for TextSymbolNode's occurance. | ||
32 | + - We could straightfoward avoid math inside text during parsing. But it requires a complete re-write of the parser. | ||
33 | +- Make a TextNode same as before, but adding a property in Options to change the behavior of child MathSymbolNode | ||
34 | + - Similar as before without type safety concern. However a symbol will behave vastly different in two modes. Some lazy initialization become impossible and inefficient. | ||
35 | +- Add a property in Options, and using a StyleNode to express mode changes | ||
36 | + - Similar to above option. This StyleNode will require extra caution during AST optimization due to its property and all the text style commands beneath it. | ||
37 | +- Use a tree of TextNode inspired by TextSpan | ||
38 | + - How can I nest math inside text? | ||
39 | + | ||
40 | + | ||
41 | + | ||
42 | +## Rendering | ||
43 | +- Tex's height and depth calculations are performed implicitly by the layout process of RenderObjects. The height and depth information is carried by MathOrd widget and propagated during widget composition. I feel this is better and simpler than using widget-layer parameters to override existing everyday render-layer behaviors. | ||
44 | +- Other Tex's font specs are calculated inside AST nodes and passed explicitly into dedicated layout widgets. Incorporating them (e.g. italic) into RenderObject will cause heavy compatibility burdens (as the breakable RenderObject has already caused) with no real benefits, since the AST is already efficient at calculating and reusing these parameters. | ||
45 | +- (WIP) Breakable RenderObjects are made subclasses of RenderBox, which caused huge amount of boilerplate code and exception spots. But we have no choice since we need the interop between RenderBox and breakable ones. | ||
46 | +- A large amount of layouts are expressed by custom IntrinsicLayoutDelegate. This is due to the observation that most math nodes will disregard constraints during layout, and its horizontal resizing does not influence vertical layout, and vice versa. IntrinsicLayoutDelegate is hugely concise and efficient in this scenario. | ||
47 | + | ||
48 | + | ||
49 | +## Symbols and Font | ||
50 | +KaTeX use mode (math/text) to directly map commands depending on context into different replacement atoms + atom types + font family. The atom will first try to use explicit contextual font. If not available, it will fall back to default font provided by atom type and font family. (With the exception of wide chars) | ||
51 | + | ||
52 | +Due to the need of editing and copy/pasting, we need to maintain an independent, Unicode-based character set as AST symbols. We chose a method similar to MathJax. Unicode char + variantForm uniquely define a symbol. Each symbol has its default replacement, types and font settings, but they can only be overrided when they are constructed by the compiler. Likewise, the symbol will first try to use explicit contextual font. If not available, it will fall back. Any chars using a replacement will never be able to override their font family. (with some exceptions on some punctuations which KaTeX choose to use replacement). | ||
53 | + | ||
54 | +variantForm is basically chosen in line with MathJax, for the exception of \u210F(\hbar). |
doc/img/delta.png
0 → 100644

10.2 KB
doc/img/fourier.png
0 → 100644

16.5 KB
doc/img/leftright.png
0 → 100644

2.61 KB
doc/img/matrix.png
0 → 100644

937 Bytes
doc/img/nary.png
0 → 100644

2.55 KB
doc/img/schrodinger.png
0 → 100644

24.6 KB
doc/img/stretchyop.png
0 → 100644

557 Bytes
doc/img/underover.png
0 → 100644

1.67 KB
doc/line_breaking.md
0 → 100644
1 | +# Line Breaking | ||
2 | + | ||
3 | +## Standard TeX Style vs. Advanced Display Style | ||
4 | +This library plans to support two types of line breaking: standard TeX style and advanced display style. | ||
5 | + | ||
6 | +Comparison between the two modes. | ||
7 | + | ||
8 | +| Line Breaking | Standard TeX Style | Advanced Display Style | | ||
9 | +|----------------------|---------------------------------------------------------------------|------------------------------------------------------| | ||
10 | +| Status | Done | Planning | | ||
11 | +| Scenario | In-line equations only | Display equations only | | ||
12 | +| Break Point Level | Only the outermost level. E.g., not inside \left \right constructs. | Any nested node as long as in a single-line context | | ||
13 | +| Break Point Position | After `bin` and `rel` atoms | Before `bin` atoms or after `rel` atoms. | | ||
14 | +| API Style | Generate a list of broken-down widgets | A dedicated RenderObject subtype and layout protocol | | ||
15 | + | ||
16 | +## Standard TeX Style Quick Start | ||
17 | + Currently you can try standard TeX-style line breaking through a very simplistic API: | ||
18 | + | ||
19 | +```dart | ||
20 | +final longEq = Math.tex(r'12345678\times 987654321 = 121932631112635269'); | ||
21 | +final breakResult = longEq.texBreak(); | ||
22 | +final widget = Wrap( | ||
23 | + children: breakResult.parts, | ||
24 | +); | ||
25 | +``` | ||
26 | +`Math.texBreak` will break the equation into pieces according to TeX spec **as much as possible** (some exceptions exist when `enforceNoBreak: true`). Then, you can assemble the pieces in whatever way you like. The most simple way is to put the parts inside a `Wrap`. | ||
27 | + | ||
28 | +If you wish to implement a custom line breaking policy to manage the penalties, you can access the penalties in `BreakResult.penalties`. The values in `BreakResult.penalties` represent the line-breaking penalty generated at the right end of each `BreakResult.parts`. Note that `\nobreak` or `\penalty<number>=10000>` are left unbroken by default, you need to supply `enforceNoBreak: false` into `Math.texBreak` to expose those break points and their penalties. | ||
29 | + | ||
30 | + | ||
31 | +## Background | ||
32 | +TeX equation line breaking are documented in TeXBook Chapter 18.6. It reads | ||
33 | +> When you have formulas in a paragraph, TEX may have to | ||
34 | +break them between lines. ... A formula will be broken only after a relation symbol like = or < or →, | ||
35 | +or after a binary operation symbol like + or − or ×, where the relation or binary | ||
36 | +operation is on the “outer level” of the formula (i.e., not enclosed in {...} and | ||
37 | +not part of an ‘\over’ construction). | ||
38 | + | ||
39 | +From other popular equation editing software such as MS Word, we can see that the displayed equations can also be broken. The main difference is that it can line break inside arbitrarily deep nested nodes. Also it breaks before `bin` atoms rather than after. | ||
40 | + | ||
41 | +However, the second style is very hard to achieve with current Flutter Math's design. | ||
42 | + | ||
43 | +For example, the height of left/right delimiters depends on the highest element within the delimiters. In Flutter Math, it is decided that the height/width are calculated by Flutter's layout pipeline rather than precalculating them from AST. So each node has to be wrapped in one single RenderObject to share layout results, which requires a dedicated `RenderObject` subtype and a dedicated layout protocol. |
doc/migration.0.2.0.md
0 → 100644
1 | +# v0.2.0 Migration Guide | ||
2 | + | ||
3 | +## Name Changes | ||
4 | +| Old name | New name | | ||
5 | +|------------|-------------------| | ||
6 | +| Options | MathOptions | | ||
7 | +| Settings | TexParserSettings | | ||
8 | +| SizeMode | MathSize | | ||
9 | +| ParseError | ParseException | | ||
10 | + | ||
11 | +## New Widget Variant | ||
12 | +The `FlutterMath` class has been deprecated and becomes a wrapper of `Math` widget. You should use more specific widget variants: `Math` and `SelectableMath`. | ||
13 | + | ||
14 | +`Math` is static, non-selectable. `SelectableMath` is static but selectable. If you wish to avoid extra performance cost brings by selectibility, use `Math`. | ||
15 | + | ||
16 | +The constructor name has also been changed to `Math.tex` and `SelectableMath.tex`. | ||
17 | + | ||
18 | +## TextStyle over Options | ||
19 | +`TextStyle` will be adopted as the parameter in exposed APIs to replace `Options`. Directly supplying `Options` is OK, but is apparently not the best way. | ||
20 | + | ||
21 | +### Use TextStyle to controll the size of your equation | ||
22 | +1. `TextStyle.fontSize` will be the size of any math symbols. | ||
23 | +2. `logicalPpi` will be used to decide the size of absolute units (pt, cm, inch, etc). | ||
24 | +3. If `logicalPpi` is null, then absolute units will resize on different `TextStyle.fontSize` to keep a consistent ratio (Just like current `baseSizeMultiplier`'s behavior). | ||
25 | +4. `baseSizeMultiplier` is deprecated. If you still wish similar behavior, calculate relevant parameters from `MathOptions.defaultFontSize` and `double defaultLogicalPpi(double fontSize)`. | ||
26 | +5. If neither `TextStyle.fontSize` nor `logicalPpi` is supplied, then the widget will use the default `TextStyle` supplied by Flutter's build context. | ||
27 | + | ||
28 | +## Sanitized Error System | ||
29 | +`ParseError` will be renamed to `ParseException`. Also, other throws within the library will be sanitized to throw either `ParseException`, `BuildException`, `EncodeExecption`. All of them extends `FlutterMathException`. As a result, `onErrorFallback` will have a different signature and allows users to handle exceptions with type safety. | ||
30 | + | ||
31 | +Detailed exception variant can be found in their respective API documentations. | ||
32 | + | ||
33 | +The final API will look like | ||
34 | +``` | ||
35 | +Math.tex( | ||
36 | + r'\frac a b', | ||
37 | + textStyle: TextStyle(fontSize: 42), | ||
38 | + // settings: TexParserSettings(), | ||
39 | + // logicalPpi: defaultLogicalPpi(42), | ||
40 | + onErrorFallback: (err) => { | ||
41 | + if (error is ParseException) | ||
42 | + return SelectableText('ParseError: ${err.message}'); | ||
43 | + return Container( | ||
44 | + color: Colors.red, | ||
45 | + SelectableText(err.toString()); | ||
46 | + ) | ||
47 | + }, | ||
48 | +) | ||
49 | +``` |
doc/unicode_math.md
0 → 100644
1 | +# References on UnicodeMath input implementation | ||
2 | + | ||
3 | +There are two areas of UnicodeMath input support currently under consideration: user input, or a string input. The plan is to support both by treating string input as raw sequence of AtomNode, performing autocorrect, then performing an exhaustive fold with lowest precedence from the end. (This behavior is not guaranteed by the spec itself, but it seems good.) | ||
4 | + | ||
5 | +## Difference between user input and string input | ||
6 | +### Heuristic operation | ||
7 | +- '\sum a b' input by user will produce '\sum\of(a b)'. But in string input it should be '\sum\of(a) b' | ||
8 | +- same with every operators creating an SlottableNode and moves cursor inside | ||
9 | + | ||
10 | + | ||
11 | +The [UnicodeMath spec](https://www.unicode.org/notes/tn28/UTN28-PlainTextMath-v3.1.pdf) itself proposed a reference parsing algorithm in Appendix A. However there are some conflicts in the UnicodeMath spec. | ||
12 | + | ||
13 | +## Conflicts and Decision | ||
14 | + | ||
15 | +Spec-wise, this reference algorithm deviates from the spec: | ||
16 | +- Handling of the unary operators before and after subsup (*Align with reference*) | ||
17 | + - '+^2', 'a^-2' as subsup? (Spec says no. Reference says yes.) | ||
18 | +- \of \funcapply \naryand | ||
19 | + | ||
20 | +Also, MS Word's implementation deviates from the reference: | ||
21 | +- Handling of the normal operators after div & subsup (*Align with MS Word*) | ||
22 | + - '1/+2', '+1/2' as fraction? (Reference disallows both. MS Word permits the first one.) | ||
23 | +- Differentiation between the unary plus and unary subtract (*Align with MS Word*) | ||
24 | + - 'a^-1' vs 'a^+1' as subsup? (Reference only allows the first. MS Word allows both.) | ||
25 | +- ScriptBase parsing (*Align with MS Word*) | ||
26 | + - 'word^2' as subsup? (Reference says yes. MS Word says no.) | ||
27 | + | ||
28 | +Some quirks in MS Word: | ||
29 | +- `/\of ` folds into `\frac{}{\frac{}{}}`, while `^\of ` leads to an \of on the supscript as expected. (Potentially bug) | ||
30 | +- `/` wins in precedence in the combination `/^`. (*reproduced*) | ||
31 | +- `(1) /2` folds into `\frac{1}{2}`, while `1 /2` folds into `1 \frac{}{2}`. (*reproduced*) | ||
32 | +- `\sum \of \of ` folds into `\sum{}`. (*reproduced*) | ||
33 | +- In `∑^∑_a▒a`, `\of` has a higher precedence than `^`. | ||
34 | + | ||
35 | +Some conflicts between UnicodeMath and TeX: | ||
36 | +- Rendering of subsup scripts when base comprises of multiple elements. | ||
37 | + | ||
38 | +## Parser Scheme | ||
39 | + | ||
40 | +The following parser scheme should be good enough to comply with the spec and mimic reference/MS Word behavior. | ||
41 | + | ||
42 | +Operators will declare | ||
43 | +- Their precedence | ||
44 | +- Whether they need left operand and right operand | ||
45 | +- Their associativity (i.e., '/' and '^' has opposite associativity) | ||
46 | +- Whether they will unwrap parenthesis-enclosed operand (i.e. scriptBase will retain the parenthesis) | ||
47 | + | ||
48 | +Fold operations are specified with precedence and starting pos. A one-time fold will iterate from right to left: | ||
49 | +- Collect if not an operator. | ||
50 | +- If met an operator with lower precedence, abort and return collected nodes. Open-close pairs will not be aborted. | ||
51 | +- If met an operator with higher precedence, | ||
52 | + - If said operator needs left operand, launch an exhaustive fold to collect left operand | ||
53 | + - If left associative, the exhaustive fold will collect the largest block with greater-or-equal precedence. | ||
54 | + - If right associative, it will only allows greater precedence. | ||
55 | + - Give operands to the operand (If needed) and concat the result. Return. | ||
56 | + | ||
57 | +An exhaustive fold with precedence p_start will: | ||
58 | +- Perform a one-time fold. Denote the fold result's internal precedence as p_res. End position has either index = 0 or has a precedence p_end < p_res. | ||
59 | +- At the end position, if p_end > p_start, continue with another exhaustive fold with the same precedence. Results from the previous steps (p_res) will be passed into the fold (p_end) as potential right operand. | ||
60 | + | ||
61 | +Some special points: | ||
62 | +- Some operators may throw an exception (i.e. parenthesis mismatch). This will cause a one-time fold to revert, or the immediate cycle of a exhaustive fold to revert. | ||
63 | +- Many operators will raise their precedence if preceded by fraction operators and script operators. | ||
64 | +- Many operators will be forcefully taken as base if the script operators cannot fetch a left operand as base. | ||
65 | +- The folding of Naryand will only be triggered by \of | ||
66 | +- Some operators will eventually have to rollback due to their non-local ambiguity, such as `|`. | ||
67 | + | ||
68 | +## Unsupported UnicodeMath functions | ||
69 | +The following features are not supported by MS Word and by Flutter Math | ||
70 | +- \lessgtr \gtrless | ||
71 | +- \sqsubseteq \sqsupseteq | ||
72 | +- \ndiv | ||
73 | + | ||
74 | +The following feature are not supported by Flutter Math | ||
75 | +- \sdiv | ||
76 | +- \ldiv | ||
77 | +- Nary | ||
78 | +- Nary limits control | ||
79 | +- prescript ? | ||
80 | +- multiscript with a composite base (render difference) | ||
81 | +- \coint | ||
82 | +- \middle | ||
83 | + | ||
84 | +## Reference algorithm | ||
85 | +- char ← Unicode character | ||
86 | +- space ← ASCII space (U+0020) | ||
87 | +- αASCII ← ASCII A-Z a-z | ||
88 | +- nASCII ← ASCII 0-9 | ||
89 | +- αnMath ← Unicode math alphanumeric (U+1D400 – U+1D7FF with some Letterlike symbols U+2102 – U+2134) | ||
90 | +- αnOther ← Unicode alphanumeric not including αnMath nor nASCII | ||
91 | +- αn ← αnMath | αnOther | ||
92 | +--- | ||
93 | +- diacritic ← Unicode combining mark | ||
94 | +- opArray ← ‘&’ | VT | ‘■’ | ||
95 | +- opClose ← ‘)’ | ‘]’ | ‘}’ | ‘⌍’ | ||
96 | +- opCloser ← opClose | “\close” | ||
97 | +- opDecimal ← ‘.’ | ‘,’ | ||
98 | +- opHbracket ← Unicode math horizontal bracket | ||
99 | +- opNary ← Unicode integrals, summation, product, and other nary ops | ||
100 | +- opOpen ← ‘(’ | ‘[’ | ‘{’ | ‘⌌’ | ||
101 | +- opOpener ← opOpen | “\open” | ||
102 | +- opOver ← ‘/’ | “\atop” | ||
103 | +- opBuildup ← ‘_’ | ‘^’ | ‘√’ | ‘∙’ | ‘√’ | ‘□’ | ‘/’ | ‘|’ | opArray | opOpen | opClose | opNary | opOver | opHbracket | opDecimal | ||
104 | +- other ← char – {αn + nASCII + diacritic + opBuildup + CR} | ||
105 | +--- | ||
106 | +- diacriticbase ← αn | nASCII | ‘(’ exp ‘)’ | ||
107 | +- diacritics ← diacritic | diacritics diacritic | ||
108 | +- atom ← αn | diacriticbase diacritics | ||
109 | +- atoms ← atom | atoms atom | ||
110 | +- digits ← nASCII | digits nASCII | ||
111 | +- number ← digits | digits opDecimal digits | ||
112 | +--- | ||
113 | +- expBracket ← opOpener exp opCloser | ||
114 | + ← ‘||’ exp ‘||’ | ||
115 | + ← ‘|’ exp ‘|’ | ||
116 | +- word ← αASCII | word αASCII | ||
117 | +- scriptbase ← word | word nASCII | αnMath | number | other | expBracket | opNary | ||
118 | +- soperand ← operand | ‘∞’ | ‘-’ operand | “-∞” | ||
119 | +- expSubsup ← scriptbase ‘_’ soperand ‘^’ soperand | scriptbase ‘^’ soperand ‘_’ soperand | ||
120 | +- expSubscript ← scriptbase ‘_’ soperand | ||
121 | +- expSuperscript ← scriptbase ‘^’ soperand | ||
122 | +- expScript ← expSubsup | expSubscript | expSuperscript | ||
123 | +--- | ||
124 | +- entity ← atoms | expBracket | number | ||
125 | +- factor ← entity | entity ‘!’ | entity “!!” | function | expScript | ||
126 | +- operand ← factor | operand factor | ||
127 | +- box ← ‘□’ operand | ||
128 | +- hbrack ← opHbracket operand | ||
129 | +- sqrt ← ‘√’ operand | ||
130 | +- cubert ← ‘∙’ operand | ||
131 | +- fourthrt ← ‘√’ operand | ||
132 | +- nthrt ← “√(” operand ‘&’ operand ‘)’ | ||
133 | +- function ← sqrt | cubert | fourthrt | nthrt | box | hbrack | ||
134 | +- numerator ← operand | fraction | ||
135 | +- fraction ← numerator opOver operand | ||
136 | +--- | ||
137 | +- row ← exp | row ‘&’ exp | ||
138 | +- rows ← row | rows ‘@’ row | ||
139 | +- array ← “\array(” rows ‘)’ | ||
140 | +--- | ||
141 | +- element ← fraction | operand | array | ||
142 | +- exp ← element | exp other element |
doc/unsupported.md
0 → 100644
1 | + | ||
2 | +## Won't support functionalities | ||
3 | +- `\href` | ||
4 | +- `\includegraphics` | ||
5 | +- `\lap` and other horizontal lapping command (This will probably be reconsidered in the future) | ||
6 | +- `\mathchoice` and dependent features | ||
7 | +- `\smash` | ||
8 | +- `\overlinesegment`, `\underlinesegment` | ||
9 | +- `\pmb` | ||
10 | +- `\hspace*` | ||
11 | +- Exotic composite symbols: `\Coloneqq, \coloneq, \Coloneq, \Eqqcolon, \Eqcolon, \colonapprox, \Colonapprox, \colonsim, \Colonsim, \simcolon, \simcoloncolon, \approxcolon, \approxcoloncolon`, and also their equivalent `\coloncolonequals` ... | ||
12 | +- `\vcentcolon` | ||
13 | +- `\textcircle` and related `\copyright`, `\registered`, etc. | ||
14 | + | ||
15 | +## Functionalities that will be supported later | ||
16 | +- `gather` environment | ||
17 | +- `Vmatrix` environment | ||
18 | +- `\mathnormal` | ||
19 | + | ||
20 | +## Known parsing differences to KaTeX | ||
21 | +- `\not` can only accept selected characters following it, because it is no longer backed by `\rlap`. (This will probably be revisited). | ||
22 | +- The parsing behavior of `\overbrace` and `\underbase` with sub-sup pairs will be in line with MathJax rather than KaTeX. | ||
23 | +- `\u2258` will be investigated later | ||
24 | + | ||
25 | +## Known rendering differences to KaTeX | ||
26 | +- Math functions with limit-like subscript and superscript will not adapt to sub/sup under/over styles under different styles. This breaks TeX spec. This is due to the design of AST, and is in accordance with UnicodeMath designs. | ||
27 | +- Multiple `\hlines` and `||` column separators for matrices will not be supported, just as MathJax won't either. | ||
28 | +- `aligned` and `alignedat` will have column spacings more similar to an ordinary equation. This should be an improvement to KaTeX and MathJax. | ||
29 | +- `\genfrac`'s delimiters will have a larger spacing with inner node. (This might be fixed in future) | ||
30 | +- `\color` commands inside a block will NOT be applied to right delimiters. This is in line with MathJax rather than KaTeX. | ||
31 | +- `\colon`'s behavior will be in line with MathJax rather than KaTeX. | ||
32 | +- `\mathop` will no longer vertically center single characaters. MathJax doesn't do this either. | ||
33 | +- `\cancel`, `\xcancel`, `\bcancel` will render differently compared to KaTeX. The vertical padding will be more similar to MathJaX. | ||
34 | +- Due to the lack of `\mathchoice`, `\pod`, `\pmod`, `\mod` will have fixed spacing. | ||
35 | +- `\dfrac`, `\tfrac` ... will have slight size deviation from KaTeX and will be in line with MathJax's rendering behavior. | ||
36 | +- `\sqrt` will no longer underflow below the baseline when given a child whose height is too small (e.g. `\sqrt{.}`). This is also different from MathJaX. | ||
37 | +- The size of `\sqrt` symbol might be slightly different. Due to a different style choosing scheme. | ||
38 | +- There will be no automatic thinspace between `\cdots` and right delimiter, (which is odd. MathJax and Tex don't have them either) | ||
39 | + | ||
40 | + | ||
41 | +Any other deviations from KaTeX will be considered as bug. |
example/README.md
0 → 100644
1 | +# example | ||
2 | + | ||
3 | +A new Flutter project. | ||
4 | + | ||
5 | +## Getting Started | ||
6 | + | ||
7 | +This project is a starting point for a Flutter application. | ||
8 | + | ||
9 | +A few resources to get you started if this is your first Flutter project: | ||
10 | + | ||
11 | +- [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) | ||
12 | +- [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) | ||
13 | + | ||
14 | +For help getting started with Flutter, view our | ||
15 | +[online documentation](https://flutter.dev/docs), which offers tutorials, | ||
16 | +samples, guidance on mobile development, and a full API reference. |
example/android/app/build.gradle
0 → 100644
1 | +def localProperties = new Properties() | ||
2 | +def localPropertiesFile = rootProject.file('local.properties') | ||
3 | +if (localPropertiesFile.exists()) { | ||
4 | + localPropertiesFile.withReader('UTF-8') { reader -> | ||
5 | + localProperties.load(reader) | ||
6 | + } | ||
7 | +} | ||
8 | + | ||
9 | +def flutterRoot = localProperties.getProperty('flutter.sdk') | ||
10 | +if (flutterRoot == null) { | ||
11 | + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") | ||
12 | +} | ||
13 | + | ||
14 | +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') | ||
15 | +if (flutterVersionCode == null) { | ||
16 | + flutterVersionCode = '1' | ||
17 | +} | ||
18 | + | ||
19 | +def flutterVersionName = localProperties.getProperty('flutter.versionName') | ||
20 | +if (flutterVersionName == null) { | ||
21 | + flutterVersionName = '1.0' | ||
22 | +} | ||
23 | + | ||
24 | +apply plugin: 'com.android.application' | ||
25 | +apply plugin: 'kotlin-android' | ||
26 | +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" | ||
27 | + | ||
28 | +android { | ||
29 | + compileSdkVersion 28 | ||
30 | + | ||
31 | + sourceSets { | ||
32 | + main.java.srcDirs += 'src/main/kotlin' | ||
33 | + } | ||
34 | + | ||
35 | + lintOptions { | ||
36 | + disable 'InvalidPackage' | ||
37 | + } | ||
38 | + | ||
39 | + defaultConfig { | ||
40 | + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). | ||
41 | + applicationId "com.example.example" | ||
42 | + minSdkVersion 16 | ||
43 | + targetSdkVersion 28 | ||
44 | + versionCode flutterVersionCode.toInteger() | ||
45 | + versionName flutterVersionName | ||
46 | + } | ||
47 | + | ||
48 | + buildTypes { | ||
49 | + release { | ||
50 | + // TODO: Add your own signing config for the release build. | ||
51 | + // Signing with the debug keys for now, so `flutter run --release` works. | ||
52 | + signingConfig signingConfigs.debug | ||
53 | + } | ||
54 | + } | ||
55 | +} | ||
56 | + | ||
57 | +flutter { | ||
58 | + source '../..' | ||
59 | +} | ||
60 | + | ||
61 | +dependencies { | ||
62 | + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" | ||
63 | +} |
1 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | + package="com.example.example"> | ||
3 | + <!-- Flutter needs it to communicate with the running application | ||
4 | + to allow setting breakpoints, to provide hot reload, etc. | ||
5 | + --> | ||
6 | + <uses-permission android:name="android.permission.INTERNET"/> | ||
7 | +</manifest> |
1 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | + package="com.example.example"> | ||
3 | + <!-- io.flutter.app.FlutterApplication is an android.app.Application that | ||
4 | + calls FlutterMain.startInitialization(this); in its onCreate method. | ||
5 | + In most cases you can leave this as-is, but you if you want to provide | ||
6 | + additional functionality it is fine to subclass or reimplement | ||
7 | + FlutterApplication and put your custom class here. --> | ||
8 | + <application | ||
9 | + android:name="io.flutter.app.FlutterApplication" | ||
10 | + android:label="example" | ||
11 | + android:usesCleartextTraffic="true" | ||
12 | + android:icon="@mipmap/ic_launcher"> | ||
13 | + <activity | ||
14 | + android:name=".MainActivity" | ||
15 | + android:launchMode="singleTop" | ||
16 | + android:theme="@style/LaunchTheme" | ||
17 | + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" | ||
18 | + android:hardwareAccelerated="true" | ||
19 | + android:windowSoftInputMode="adjustResize"> | ||
20 | + <!-- Specifies an Android theme to apply to this Activity as soon as | ||
21 | + the Android process has started. This theme is visible to the user | ||
22 | + while the Flutter UI initializes. After that, this theme continues | ||
23 | + to determine the Window background behind the Flutter UI. --> | ||
24 | + <meta-data | ||
25 | + android:name="io.flutter.embedding.android.NormalTheme" | ||
26 | + android:resource="@style/NormalTheme" | ||
27 | + /> | ||
28 | + <!-- Displays an Android View that continues showing the launch screen | ||
29 | + Drawable until Flutter paints its first frame, then this splash | ||
30 | + screen fades out. A splash screen is useful to avoid any visual | ||
31 | + gap between the end of Android's launch screen and the painting of | ||
32 | + Flutter's first frame. --> | ||
33 | + <meta-data | ||
34 | + android:name="io.flutter.embedding.android.SplashScreenDrawable" | ||
35 | + android:resource="@drawable/launch_background" | ||
36 | + /> | ||
37 | + <intent-filter> | ||
38 | + <action android:name="android.intent.action.MAIN"/> | ||
39 | + <category android:name="android.intent.category.LAUNCHER"/> | ||
40 | + </intent-filter> | ||
41 | + </activity> | ||
42 | + <!-- Don't delete the meta-data below. | ||
43 | + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java --> | ||
44 | + <meta-data | ||
45 | + android:name="flutterEmbedding" | ||
46 | + android:value="2" /> | ||
47 | + </application> | ||
48 | + <uses-permission android:name="android.permission.INTERNET" /> | ||
49 | + <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> | ||
50 | + <uses-permission android:name="android.permission.WAKE_LOCK" /> | ||
51 | +</manifest> |
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<!-- Modify this file to customize your launch splash screen --> | ||
3 | +<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> | ||
4 | + <item android:drawable="@android:color/white" /> | ||
5 | + | ||
6 | + <!-- You can insert your own image assets here --> | ||
7 | + <!-- <item> | ||
8 | + <bitmap | ||
9 | + android:gravity="center" | ||
10 | + android:src="@mipmap/launch_image" /> | ||
11 | + </item> --> | ||
12 | +</layer-list> |

544 Bytes

442 Bytes

721 Bytes

1.01 KB

1.41 KB
1 | +<?xml version="1.0" encoding="utf-8"?> | ||
2 | +<resources> | ||
3 | + <!-- Theme applied to the Android Window while the process is starting --> | ||
4 | + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar"> | ||
5 | + <!-- Show a splash screen on the activity. Automatically removed when | ||
6 | + Flutter draws its first frame --> | ||
7 | + <item name="android:windowBackground">@drawable/launch_background</item> | ||
8 | + </style> | ||
9 | + <!-- Theme applied to the Android Window as soon as the process has started. | ||
10 | + This theme determines the color of the Android Window while your | ||
11 | + Flutter UI initializes, as well as behind your Flutter UI while its | ||
12 | + running. | ||
13 | + | ||
14 | + This Theme is only used starting with V2 of Flutter's Android embedding. --> | ||
15 | + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar"> | ||
16 | + <item name="android:windowBackground">@android:color/white</item> | ||
17 | + </style> | ||
18 | +</resources> |
1 | +<manifest xmlns:android="http://schemas.android.com/apk/res/android" | ||
2 | + package="com.example.example"> | ||
3 | + <!-- Flutter needs it to communicate with the running application | ||
4 | + to allow setting breakpoints, to provide hot reload, etc. | ||
5 | + --> | ||
6 | + <uses-permission android:name="android.permission.INTERNET"/> | ||
7 | +</manifest> |
example/android/build.gradle
0 → 100644
1 | +buildscript { | ||
2 | + ext.kotlin_version = '1.3.50' | ||
3 | + repositories { | ||
4 | + google() | ||
5 | + jcenter() | ||
6 | + } | ||
7 | + | ||
8 | + dependencies { | ||
9 | + classpath 'com.android.tools.build:gradle:3.5.0' | ||
10 | + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" | ||
11 | + } | ||
12 | +} | ||
13 | + | ||
14 | +allprojects { | ||
15 | + repositories { | ||
16 | + google() | ||
17 | + jcenter() | ||
18 | + } | ||
19 | +} | ||
20 | + | ||
21 | +rootProject.buildDir = '../build' | ||
22 | +subprojects { | ||
23 | + project.buildDir = "${rootProject.buildDir}/${project.name}" | ||
24 | +} | ||
25 | +subprojects { | ||
26 | + project.evaluationDependsOn(':app') | ||
27 | +} | ||
28 | + | ||
29 | +task clean(type: Delete) { | ||
30 | + delete rootProject.buildDir | ||
31 | +} |
example/android/gradle.properties
0 → 100644
example/android/settings.gradle
0 → 100644
1 | +// Copyright 2014 The Flutter Authors. All rights reserved. | ||
2 | +// Use of this source code is governed by a BSD-style license that can be | ||
3 | +// found in the LICENSE file. | ||
4 | + | ||
5 | +include ':app' | ||
6 | + | ||
7 | +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") | ||
8 | +def properties = new Properties() | ||
9 | + | ||
10 | +assert localPropertiesFile.exists() | ||
11 | +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } | ||
12 | + | ||
13 | +def flutterSdkPath = properties.getProperty("flutter.sdk") | ||
14 | +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" | ||
15 | +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" |
example/ios/Flutter/AppFrameworkInfo.plist
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
3 | +<plist version="1.0"> | ||
4 | +<dict> | ||
5 | + <key>CFBundleDevelopmentRegion</key> | ||
6 | + <string>$(DEVELOPMENT_LANGUAGE)</string> | ||
7 | + <key>CFBundleExecutable</key> | ||
8 | + <string>App</string> | ||
9 | + <key>CFBundleIdentifier</key> | ||
10 | + <string>io.flutter.flutter.app</string> | ||
11 | + <key>CFBundleInfoDictionaryVersion</key> | ||
12 | + <string>6.0</string> | ||
13 | + <key>CFBundleName</key> | ||
14 | + <string>App</string> | ||
15 | + <key>CFBundlePackageType</key> | ||
16 | + <string>FMWK</string> | ||
17 | + <key>CFBundleShortVersionString</key> | ||
18 | + <string>1.0</string> | ||
19 | + <key>CFBundleSignature</key> | ||
20 | + <string>????</string> | ||
21 | + <key>CFBundleVersion</key> | ||
22 | + <string>1.0</string> | ||
23 | + <key>MinimumOSVersion</key> | ||
24 | + <string>9.0</string> | ||
25 | +</dict> | ||
26 | +</plist> |
example/ios/Flutter/Debug.xcconfig
0 → 100644
example/ios/Flutter/Release.xcconfig
0 → 100644
example/ios/Podfile
0 → 100644
1 | +# Uncomment this line to define a global platform for your project | ||
2 | +# platform :ios, '9.0' | ||
3 | + | ||
4 | +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. | ||
5 | +ENV['COCOAPODS_DISABLE_STATS'] = 'true' | ||
6 | + | ||
7 | +project 'Runner', { | ||
8 | + 'Debug' => :debug, | ||
9 | + 'Profile' => :release, | ||
10 | + 'Release' => :release, | ||
11 | +} | ||
12 | + | ||
13 | +def flutter_root | ||
14 | + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) | ||
15 | + unless File.exist?(generated_xcode_build_settings_path) | ||
16 | + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" | ||
17 | + end | ||
18 | + | ||
19 | + File.foreach(generated_xcode_build_settings_path) do |line| | ||
20 | + matches = line.match(/FLUTTER_ROOT\=(.*)/) | ||
21 | + return matches[1].strip if matches | ||
22 | + end | ||
23 | + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" | ||
24 | +end | ||
25 | + | ||
26 | +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) | ||
27 | + | ||
28 | +flutter_ios_podfile_setup | ||
29 | + | ||
30 | +target 'Runner' do | ||
31 | + use_frameworks! | ||
32 | + use_modular_headers! | ||
33 | + | ||
34 | + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) | ||
35 | +end | ||
36 | + | ||
37 | +post_install do |installer| | ||
38 | + installer.pods_project.targets.each do |target| | ||
39 | + flutter_additional_ios_build_settings(target) | ||
40 | + end | ||
41 | +end |
example/ios/Podfile.lock
0 → 100644
1 | +PODS: | ||
2 | + - Flutter (1.0.0) | ||
3 | + - path_provider (0.0.1): | ||
4 | + - Flutter | ||
5 | + - webview_flutter (0.0.1): | ||
6 | + - Flutter | ||
7 | + | ||
8 | +DEPENDENCIES: | ||
9 | + - Flutter (from `Flutter`) | ||
10 | + - path_provider (from `.symlinks/plugins/path_provider/ios`) | ||
11 | + - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) | ||
12 | + | ||
13 | +EXTERNAL SOURCES: | ||
14 | + Flutter: | ||
15 | + :path: Flutter | ||
16 | + path_provider: | ||
17 | + :path: ".symlinks/plugins/path_provider/ios" | ||
18 | + webview_flutter: | ||
19 | + :path: ".symlinks/plugins/webview_flutter/ios" | ||
20 | + | ||
21 | +SPEC CHECKSUMS: | ||
22 | + Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a | ||
23 | + path_provider: abfe2b5c733d04e238b0d8691db0cfd63a27a93c | ||
24 | + webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 | ||
25 | + | ||
26 | +PODFILE CHECKSUM: aafe91acc616949ddb318b77800a7f51bffa2a4c | ||
27 | + | ||
28 | +COCOAPODS: 1.11.2 |
example/ios/Runner.xcodeproj/project.pbxproj
0 → 100644
1 | +// !$*UTF8*$! | ||
2 | +{ | ||
3 | + archiveVersion = 1; | ||
4 | + classes = { | ||
5 | + }; | ||
6 | + objectVersion = 46; | ||
7 | + objects = { | ||
8 | + | ||
9 | +/* Begin PBXBuildFile section */ | ||
10 | + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; | ||
11 | + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; | ||
12 | + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; | ||
13 | + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; | ||
14 | + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; | ||
15 | + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; | ||
16 | + F48DE973BA1E521434FC1702 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74710499D2D255F296A080C /* Pods_Runner.framework */; }; | ||
17 | +/* End PBXBuildFile section */ | ||
18 | + | ||
19 | +/* Begin PBXCopyFilesBuildPhase section */ | ||
20 | + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { | ||
21 | + isa = PBXCopyFilesBuildPhase; | ||
22 | + buildActionMask = 2147483647; | ||
23 | + dstPath = ""; | ||
24 | + dstSubfolderSpec = 10; | ||
25 | + files = ( | ||
26 | + ); | ||
27 | + name = "Embed Frameworks"; | ||
28 | + runOnlyForDeploymentPostprocessing = 0; | ||
29 | + }; | ||
30 | +/* End PBXCopyFilesBuildPhase section */ | ||
31 | + | ||
32 | +/* Begin PBXFileReference section */ | ||
33 | + 0F368602A01D0A7D23DAB6FB /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; }; | ||
34 | + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; }; | ||
35 | + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; }; | ||
36 | + 2AB79FE5254A85B8BCC05F07 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; }; | ||
37 | + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; }; | ||
38 | + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; }; | ||
39 | + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; }; | ||
40 | + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; }; | ||
41 | + 80533411EE60F73FC4167D74 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; }; | ||
42 | + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; }; | ||
43 | + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; }; | ||
44 | + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
45 | + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; }; | ||
46 | + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; }; | ||
47 | + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; }; | ||
48 | + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; }; | ||
49 | + B74710499D2D255F296A080C /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; | ||
50 | +/* End PBXFileReference section */ | ||
51 | + | ||
52 | +/* Begin PBXFrameworksBuildPhase section */ | ||
53 | + 97C146EB1CF9000F007C117D /* Frameworks */ = { | ||
54 | + isa = PBXFrameworksBuildPhase; | ||
55 | + buildActionMask = 2147483647; | ||
56 | + files = ( | ||
57 | + F48DE973BA1E521434FC1702 /* Pods_Runner.framework in Frameworks */, | ||
58 | + ); | ||
59 | + runOnlyForDeploymentPostprocessing = 0; | ||
60 | + }; | ||
61 | +/* End PBXFrameworksBuildPhase section */ | ||
62 | + | ||
63 | +/* Begin PBXGroup section */ | ||
64 | + 63DF8C8827F3F9A1CCCA99E9 /* Frameworks */ = { | ||
65 | + isa = PBXGroup; | ||
66 | + children = ( | ||
67 | + B74710499D2D255F296A080C /* Pods_Runner.framework */, | ||
68 | + ); | ||
69 | + name = Frameworks; | ||
70 | + sourceTree = "<group>"; | ||
71 | + }; | ||
72 | + 9740EEB11CF90186004384FC /* Flutter */ = { | ||
73 | + isa = PBXGroup; | ||
74 | + children = ( | ||
75 | + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, | ||
76 | + 9740EEB21CF90195004384FC /* Debug.xcconfig */, | ||
77 | + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, | ||
78 | + 9740EEB31CF90195004384FC /* Generated.xcconfig */, | ||
79 | + ); | ||
80 | + name = Flutter; | ||
81 | + sourceTree = "<group>"; | ||
82 | + }; | ||
83 | + 97C146E51CF9000F007C117D = { | ||
84 | + isa = PBXGroup; | ||
85 | + children = ( | ||
86 | + 9740EEB11CF90186004384FC /* Flutter */, | ||
87 | + 97C146F01CF9000F007C117D /* Runner */, | ||
88 | + 97C146EF1CF9000F007C117D /* Products */, | ||
89 | + F6DE744E732F52EEDF08ABDC /* Pods */, | ||
90 | + 63DF8C8827F3F9A1CCCA99E9 /* Frameworks */, | ||
91 | + ); | ||
92 | + sourceTree = "<group>"; | ||
93 | + }; | ||
94 | + 97C146EF1CF9000F007C117D /* Products */ = { | ||
95 | + isa = PBXGroup; | ||
96 | + children = ( | ||
97 | + 97C146EE1CF9000F007C117D /* Runner.app */, | ||
98 | + ); | ||
99 | + name = Products; | ||
100 | + sourceTree = "<group>"; | ||
101 | + }; | ||
102 | + 97C146F01CF9000F007C117D /* Runner */ = { | ||
103 | + isa = PBXGroup; | ||
104 | + children = ( | ||
105 | + 97C146FA1CF9000F007C117D /* Main.storyboard */, | ||
106 | + 97C146FD1CF9000F007C117D /* Assets.xcassets */, | ||
107 | + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, | ||
108 | + 97C147021CF9000F007C117D /* Info.plist */, | ||
109 | + 97C146F11CF9000F007C117D /* Supporting Files */, | ||
110 | + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, | ||
111 | + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, | ||
112 | + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, | ||
113 | + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, | ||
114 | + ); | ||
115 | + path = Runner; | ||
116 | + sourceTree = "<group>"; | ||
117 | + }; | ||
118 | + 97C146F11CF9000F007C117D /* Supporting Files */ = { | ||
119 | + isa = PBXGroup; | ||
120 | + children = ( | ||
121 | + ); | ||
122 | + name = "Supporting Files"; | ||
123 | + sourceTree = "<group>"; | ||
124 | + }; | ||
125 | + F6DE744E732F52EEDF08ABDC /* Pods */ = { | ||
126 | + isa = PBXGroup; | ||
127 | + children = ( | ||
128 | + 2AB79FE5254A85B8BCC05F07 /* Pods-Runner.debug.xcconfig */, | ||
129 | + 0F368602A01D0A7D23DAB6FB /* Pods-Runner.release.xcconfig */, | ||
130 | + 80533411EE60F73FC4167D74 /* Pods-Runner.profile.xcconfig */, | ||
131 | + ); | ||
132 | + name = Pods; | ||
133 | + path = Pods; | ||
134 | + sourceTree = "<group>"; | ||
135 | + }; | ||
136 | +/* End PBXGroup section */ | ||
137 | + | ||
138 | +/* Begin PBXNativeTarget section */ | ||
139 | + 97C146ED1CF9000F007C117D /* Runner */ = { | ||
140 | + isa = PBXNativeTarget; | ||
141 | + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; | ||
142 | + buildPhases = ( | ||
143 | + 668574B88DFFA288A30855DB /* [CP] Check Pods Manifest.lock */, | ||
144 | + 9740EEB61CF901F6004384FC /* Run Script */, | ||
145 | + 97C146EA1CF9000F007C117D /* Sources */, | ||
146 | + 97C146EB1CF9000F007C117D /* Frameworks */, | ||
147 | + 97C146EC1CF9000F007C117D /* Resources */, | ||
148 | + 9705A1C41CF9048500538489 /* Embed Frameworks */, | ||
149 | + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, | ||
150 | + 53DA22E0E6FE2F8B9BCD1344 /* [CP] Embed Pods Frameworks */, | ||
151 | + ); | ||
152 | + buildRules = ( | ||
153 | + ); | ||
154 | + dependencies = ( | ||
155 | + ); | ||
156 | + name = Runner; | ||
157 | + productName = Runner; | ||
158 | + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; | ||
159 | + productType = "com.apple.product-type.application"; | ||
160 | + }; | ||
161 | +/* End PBXNativeTarget section */ | ||
162 | + | ||
163 | +/* Begin PBXProject section */ | ||
164 | + 97C146E61CF9000F007C117D /* Project object */ = { | ||
165 | + isa = PBXProject; | ||
166 | + attributes = { | ||
167 | + LastUpgradeCheck = 1020; | ||
168 | + ORGANIZATIONNAME = ""; | ||
169 | + TargetAttributes = { | ||
170 | + 97C146ED1CF9000F007C117D = { | ||
171 | + CreatedOnToolsVersion = 7.3.1; | ||
172 | + LastSwiftMigration = 1100; | ||
173 | + }; | ||
174 | + }; | ||
175 | + }; | ||
176 | + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; | ||
177 | + compatibilityVersion = "Xcode 9.3"; | ||
178 | + developmentRegion = en; | ||
179 | + hasScannedForEncodings = 0; | ||
180 | + knownRegions = ( | ||
181 | + en, | ||
182 | + Base, | ||
183 | + ); | ||
184 | + mainGroup = 97C146E51CF9000F007C117D; | ||
185 | + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; | ||
186 | + projectDirPath = ""; | ||
187 | + projectRoot = ""; | ||
188 | + targets = ( | ||
189 | + 97C146ED1CF9000F007C117D /* Runner */, | ||
190 | + ); | ||
191 | + }; | ||
192 | +/* End PBXProject section */ | ||
193 | + | ||
194 | +/* Begin PBXResourcesBuildPhase section */ | ||
195 | + 97C146EC1CF9000F007C117D /* Resources */ = { | ||
196 | + isa = PBXResourcesBuildPhase; | ||
197 | + buildActionMask = 2147483647; | ||
198 | + files = ( | ||
199 | + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, | ||
200 | + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, | ||
201 | + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, | ||
202 | + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, | ||
203 | + ); | ||
204 | + runOnlyForDeploymentPostprocessing = 0; | ||
205 | + }; | ||
206 | +/* End PBXResourcesBuildPhase section */ | ||
207 | + | ||
208 | +/* Begin PBXShellScriptBuildPhase section */ | ||
209 | + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { | ||
210 | + isa = PBXShellScriptBuildPhase; | ||
211 | + buildActionMask = 2147483647; | ||
212 | + files = ( | ||
213 | + ); | ||
214 | + inputPaths = ( | ||
215 | + ); | ||
216 | + name = "Thin Binary"; | ||
217 | + outputPaths = ( | ||
218 | + ); | ||
219 | + runOnlyForDeploymentPostprocessing = 0; | ||
220 | + shellPath = /bin/sh; | ||
221 | + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; | ||
222 | + }; | ||
223 | + 53DA22E0E6FE2F8B9BCD1344 /* [CP] Embed Pods Frameworks */ = { | ||
224 | + isa = PBXShellScriptBuildPhase; | ||
225 | + buildActionMask = 2147483647; | ||
226 | + files = ( | ||
227 | + ); | ||
228 | + inputFileListPaths = ( | ||
229 | + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", | ||
230 | + ); | ||
231 | + name = "[CP] Embed Pods Frameworks"; | ||
232 | + outputFileListPaths = ( | ||
233 | + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", | ||
234 | + ); | ||
235 | + runOnlyForDeploymentPostprocessing = 0; | ||
236 | + shellPath = /bin/sh; | ||
237 | + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; | ||
238 | + showEnvVarsInLog = 0; | ||
239 | + }; | ||
240 | + 668574B88DFFA288A30855DB /* [CP] Check Pods Manifest.lock */ = { | ||
241 | + isa = PBXShellScriptBuildPhase; | ||
242 | + buildActionMask = 2147483647; | ||
243 | + files = ( | ||
244 | + ); | ||
245 | + inputFileListPaths = ( | ||
246 | + ); | ||
247 | + inputPaths = ( | ||
248 | + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", | ||
249 | + "${PODS_ROOT}/Manifest.lock", | ||
250 | + ); | ||
251 | + name = "[CP] Check Pods Manifest.lock"; | ||
252 | + outputFileListPaths = ( | ||
253 | + ); | ||
254 | + outputPaths = ( | ||
255 | + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", | ||
256 | + ); | ||
257 | + runOnlyForDeploymentPostprocessing = 0; | ||
258 | + shellPath = /bin/sh; | ||
259 | + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; | ||
260 | + showEnvVarsInLog = 0; | ||
261 | + }; | ||
262 | + 9740EEB61CF901F6004384FC /* Run Script */ = { | ||
263 | + isa = PBXShellScriptBuildPhase; | ||
264 | + buildActionMask = 2147483647; | ||
265 | + files = ( | ||
266 | + ); | ||
267 | + inputPaths = ( | ||
268 | + ); | ||
269 | + name = "Run Script"; | ||
270 | + outputPaths = ( | ||
271 | + ); | ||
272 | + runOnlyForDeploymentPostprocessing = 0; | ||
273 | + shellPath = /bin/sh; | ||
274 | + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; | ||
275 | + }; | ||
276 | +/* End PBXShellScriptBuildPhase section */ | ||
277 | + | ||
278 | +/* Begin PBXSourcesBuildPhase section */ | ||
279 | + 97C146EA1CF9000F007C117D /* Sources */ = { | ||
280 | + isa = PBXSourcesBuildPhase; | ||
281 | + buildActionMask = 2147483647; | ||
282 | + files = ( | ||
283 | + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, | ||
284 | + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, | ||
285 | + ); | ||
286 | + runOnlyForDeploymentPostprocessing = 0; | ||
287 | + }; | ||
288 | +/* End PBXSourcesBuildPhase section */ | ||
289 | + | ||
290 | +/* Begin PBXVariantGroup section */ | ||
291 | + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { | ||
292 | + isa = PBXVariantGroup; | ||
293 | + children = ( | ||
294 | + 97C146FB1CF9000F007C117D /* Base */, | ||
295 | + ); | ||
296 | + name = Main.storyboard; | ||
297 | + sourceTree = "<group>"; | ||
298 | + }; | ||
299 | + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { | ||
300 | + isa = PBXVariantGroup; | ||
301 | + children = ( | ||
302 | + 97C147001CF9000F007C117D /* Base */, | ||
303 | + ); | ||
304 | + name = LaunchScreen.storyboard; | ||
305 | + sourceTree = "<group>"; | ||
306 | + }; | ||
307 | +/* End PBXVariantGroup section */ | ||
308 | + | ||
309 | +/* Begin XCBuildConfiguration section */ | ||
310 | + 249021D3217E4FDB00AE95B9 /* Profile */ = { | ||
311 | + isa = XCBuildConfiguration; | ||
312 | + buildSettings = { | ||
313 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
314 | + CLANG_ANALYZER_NONNULL = YES; | ||
315 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
316 | + CLANG_CXX_LIBRARY = "libc++"; | ||
317 | + CLANG_ENABLE_MODULES = YES; | ||
318 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
319 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
320 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
321 | + CLANG_WARN_COMMA = YES; | ||
322 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
323 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
324 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
325 | + CLANG_WARN_EMPTY_BODY = YES; | ||
326 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
327 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
328 | + CLANG_WARN_INT_CONVERSION = YES; | ||
329 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
330 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
331 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
332 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
333 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
334 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
335 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
336 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
337 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
338 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
339 | + COPY_PHASE_STRIP = NO; | ||
340 | + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
341 | + ENABLE_NS_ASSERTIONS = NO; | ||
342 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
343 | + GCC_C_LANGUAGE_STANDARD = gnu99; | ||
344 | + GCC_NO_COMMON_BLOCKS = YES; | ||
345 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
346 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
347 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
348 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
349 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
350 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
351 | + IPHONEOS_DEPLOYMENT_TARGET = 9.0; | ||
352 | + MTL_ENABLE_DEBUG_INFO = NO; | ||
353 | + SDKROOT = iphoneos; | ||
354 | + SUPPORTED_PLATFORMS = iphoneos; | ||
355 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
356 | + VALIDATE_PRODUCT = YES; | ||
357 | + }; | ||
358 | + name = Profile; | ||
359 | + }; | ||
360 | + 249021D4217E4FDB00AE95B9 /* Profile */ = { | ||
361 | + isa = XCBuildConfiguration; | ||
362 | + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||
363 | + buildSettings = { | ||
364 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
365 | + CLANG_ENABLE_MODULES = YES; | ||
366 | + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | ||
367 | + ENABLE_BITCODE = NO; | ||
368 | + FRAMEWORK_SEARCH_PATHS = ( | ||
369 | + "$(inherited)", | ||
370 | + "$(PROJECT_DIR)/Flutter", | ||
371 | + ); | ||
372 | + INFOPLIST_FILE = Runner/Info.plist; | ||
373 | + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; | ||
374 | + LIBRARY_SEARCH_PATHS = ( | ||
375 | + "$(inherited)", | ||
376 | + "$(PROJECT_DIR)/Flutter", | ||
377 | + ); | ||
378 | + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; | ||
379 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
380 | + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||
381 | + SWIFT_VERSION = 5.0; | ||
382 | + VERSIONING_SYSTEM = "apple-generic"; | ||
383 | + }; | ||
384 | + name = Profile; | ||
385 | + }; | ||
386 | + 97C147031CF9000F007C117D /* Debug */ = { | ||
387 | + isa = XCBuildConfiguration; | ||
388 | + buildSettings = { | ||
389 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
390 | + CLANG_ANALYZER_NONNULL = YES; | ||
391 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
392 | + CLANG_CXX_LIBRARY = "libc++"; | ||
393 | + CLANG_ENABLE_MODULES = YES; | ||
394 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
395 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
396 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
397 | + CLANG_WARN_COMMA = YES; | ||
398 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
399 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
400 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
401 | + CLANG_WARN_EMPTY_BODY = YES; | ||
402 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
403 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
404 | + CLANG_WARN_INT_CONVERSION = YES; | ||
405 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
406 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
407 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
408 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
409 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
410 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
411 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
412 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
413 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
414 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
415 | + COPY_PHASE_STRIP = NO; | ||
416 | + DEBUG_INFORMATION_FORMAT = dwarf; | ||
417 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
418 | + ENABLE_TESTABILITY = YES; | ||
419 | + GCC_C_LANGUAGE_STANDARD = gnu99; | ||
420 | + GCC_DYNAMIC_NO_PIC = NO; | ||
421 | + GCC_NO_COMMON_BLOCKS = YES; | ||
422 | + GCC_OPTIMIZATION_LEVEL = 0; | ||
423 | + GCC_PREPROCESSOR_DEFINITIONS = ( | ||
424 | + "DEBUG=1", | ||
425 | + "$(inherited)", | ||
426 | + ); | ||
427 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
428 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
429 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
430 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
431 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
432 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
433 | + IPHONEOS_DEPLOYMENT_TARGET = 9.0; | ||
434 | + MTL_ENABLE_DEBUG_INFO = YES; | ||
435 | + ONLY_ACTIVE_ARCH = YES; | ||
436 | + SDKROOT = iphoneos; | ||
437 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
438 | + }; | ||
439 | + name = Debug; | ||
440 | + }; | ||
441 | + 97C147041CF9000F007C117D /* Release */ = { | ||
442 | + isa = XCBuildConfiguration; | ||
443 | + buildSettings = { | ||
444 | + ALWAYS_SEARCH_USER_PATHS = NO; | ||
445 | + CLANG_ANALYZER_NONNULL = YES; | ||
446 | + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; | ||
447 | + CLANG_CXX_LIBRARY = "libc++"; | ||
448 | + CLANG_ENABLE_MODULES = YES; | ||
449 | + CLANG_ENABLE_OBJC_ARC = YES; | ||
450 | + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; | ||
451 | + CLANG_WARN_BOOL_CONVERSION = YES; | ||
452 | + CLANG_WARN_COMMA = YES; | ||
453 | + CLANG_WARN_CONSTANT_CONVERSION = YES; | ||
454 | + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; | ||
455 | + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; | ||
456 | + CLANG_WARN_EMPTY_BODY = YES; | ||
457 | + CLANG_WARN_ENUM_CONVERSION = YES; | ||
458 | + CLANG_WARN_INFINITE_RECURSION = YES; | ||
459 | + CLANG_WARN_INT_CONVERSION = YES; | ||
460 | + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; | ||
461 | + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; | ||
462 | + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; | ||
463 | + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; | ||
464 | + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; | ||
465 | + CLANG_WARN_STRICT_PROTOTYPES = YES; | ||
466 | + CLANG_WARN_SUSPICIOUS_MOVE = YES; | ||
467 | + CLANG_WARN_UNREACHABLE_CODE = YES; | ||
468 | + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; | ||
469 | + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; | ||
470 | + COPY_PHASE_STRIP = NO; | ||
471 | + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; | ||
472 | + ENABLE_NS_ASSERTIONS = NO; | ||
473 | + ENABLE_STRICT_OBJC_MSGSEND = YES; | ||
474 | + GCC_C_LANGUAGE_STANDARD = gnu99; | ||
475 | + GCC_NO_COMMON_BLOCKS = YES; | ||
476 | + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; | ||
477 | + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; | ||
478 | + GCC_WARN_UNDECLARED_SELECTOR = YES; | ||
479 | + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; | ||
480 | + GCC_WARN_UNUSED_FUNCTION = YES; | ||
481 | + GCC_WARN_UNUSED_VARIABLE = YES; | ||
482 | + IPHONEOS_DEPLOYMENT_TARGET = 9.0; | ||
483 | + MTL_ENABLE_DEBUG_INFO = NO; | ||
484 | + SDKROOT = iphoneos; | ||
485 | + SUPPORTED_PLATFORMS = iphoneos; | ||
486 | + SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; | ||
487 | + TARGETED_DEVICE_FAMILY = "1,2"; | ||
488 | + VALIDATE_PRODUCT = YES; | ||
489 | + }; | ||
490 | + name = Release; | ||
491 | + }; | ||
492 | + 97C147061CF9000F007C117D /* Debug */ = { | ||
493 | + isa = XCBuildConfiguration; | ||
494 | + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; | ||
495 | + buildSettings = { | ||
496 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
497 | + CLANG_ENABLE_MODULES = YES; | ||
498 | + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | ||
499 | + ENABLE_BITCODE = NO; | ||
500 | + FRAMEWORK_SEARCH_PATHS = ( | ||
501 | + "$(inherited)", | ||
502 | + "$(PROJECT_DIR)/Flutter", | ||
503 | + ); | ||
504 | + INFOPLIST_FILE = Runner/Info.plist; | ||
505 | + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; | ||
506 | + LIBRARY_SEARCH_PATHS = ( | ||
507 | + "$(inherited)", | ||
508 | + "$(PROJECT_DIR)/Flutter", | ||
509 | + ); | ||
510 | + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; | ||
511 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
512 | + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||
513 | + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; | ||
514 | + SWIFT_VERSION = 5.0; | ||
515 | + VERSIONING_SYSTEM = "apple-generic"; | ||
516 | + }; | ||
517 | + name = Debug; | ||
518 | + }; | ||
519 | + 97C147071CF9000F007C117D /* Release */ = { | ||
520 | + isa = XCBuildConfiguration; | ||
521 | + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; | ||
522 | + buildSettings = { | ||
523 | + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; | ||
524 | + CLANG_ENABLE_MODULES = YES; | ||
525 | + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; | ||
526 | + ENABLE_BITCODE = NO; | ||
527 | + FRAMEWORK_SEARCH_PATHS = ( | ||
528 | + "$(inherited)", | ||
529 | + "$(PROJECT_DIR)/Flutter", | ||
530 | + ); | ||
531 | + INFOPLIST_FILE = Runner/Info.plist; | ||
532 | + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; | ||
533 | + LIBRARY_SEARCH_PATHS = ( | ||
534 | + "$(inherited)", | ||
535 | + "$(PROJECT_DIR)/Flutter", | ||
536 | + ); | ||
537 | + PRODUCT_BUNDLE_IDENTIFIER = com.example.example; | ||
538 | + PRODUCT_NAME = "$(TARGET_NAME)"; | ||
539 | + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; | ||
540 | + SWIFT_VERSION = 5.0; | ||
541 | + VERSIONING_SYSTEM = "apple-generic"; | ||
542 | + }; | ||
543 | + name = Release; | ||
544 | + }; | ||
545 | +/* End XCBuildConfiguration section */ | ||
546 | + | ||
547 | +/* Begin XCConfigurationList section */ | ||
548 | + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { | ||
549 | + isa = XCConfigurationList; | ||
550 | + buildConfigurations = ( | ||
551 | + 97C147031CF9000F007C117D /* Debug */, | ||
552 | + 97C147041CF9000F007C117D /* Release */, | ||
553 | + 249021D3217E4FDB00AE95B9 /* Profile */, | ||
554 | + ); | ||
555 | + defaultConfigurationIsVisible = 0; | ||
556 | + defaultConfigurationName = Release; | ||
557 | + }; | ||
558 | + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { | ||
559 | + isa = XCConfigurationList; | ||
560 | + buildConfigurations = ( | ||
561 | + 97C147061CF9000F007C117D /* Debug */, | ||
562 | + 97C147071CF9000F007C117D /* Release */, | ||
563 | + 249021D4217E4FDB00AE95B9 /* Profile */, | ||
564 | + ); | ||
565 | + defaultConfigurationIsVisible = 0; | ||
566 | + defaultConfigurationName = Release; | ||
567 | + }; | ||
568 | +/* End XCConfigurationList section */ | ||
569 | + }; | ||
570 | + rootObject = 97C146E61CF9000F007C117D /* Project object */; | ||
571 | +} |
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<Scheme | ||
3 | + LastUpgradeVersion = "1020" | ||
4 | + version = "1.3"> | ||
5 | + <BuildAction | ||
6 | + parallelizeBuildables = "YES" | ||
7 | + buildImplicitDependencies = "YES"> | ||
8 | + <BuildActionEntries> | ||
9 | + <BuildActionEntry | ||
10 | + buildForTesting = "YES" | ||
11 | + buildForRunning = "YES" | ||
12 | + buildForProfiling = "YES" | ||
13 | + buildForArchiving = "YES" | ||
14 | + buildForAnalyzing = "YES"> | ||
15 | + <BuildableReference | ||
16 | + BuildableIdentifier = "primary" | ||
17 | + BlueprintIdentifier = "97C146ED1CF9000F007C117D" | ||
18 | + BuildableName = "Runner.app" | ||
19 | + BlueprintName = "Runner" | ||
20 | + ReferencedContainer = "container:Runner.xcodeproj"> | ||
21 | + </BuildableReference> | ||
22 | + </BuildActionEntry> | ||
23 | + </BuildActionEntries> | ||
24 | + </BuildAction> | ||
25 | + <TestAction | ||
26 | + buildConfiguration = "Debug" | ||
27 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
28 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
29 | + shouldUseLaunchSchemeArgsEnv = "YES"> | ||
30 | + <Testables> | ||
31 | + </Testables> | ||
32 | + <MacroExpansion> | ||
33 | + <BuildableReference | ||
34 | + BuildableIdentifier = "primary" | ||
35 | + BlueprintIdentifier = "97C146ED1CF9000F007C117D" | ||
36 | + BuildableName = "Runner.app" | ||
37 | + BlueprintName = "Runner" | ||
38 | + ReferencedContainer = "container:Runner.xcodeproj"> | ||
39 | + </BuildableReference> | ||
40 | + </MacroExpansion> | ||
41 | + <AdditionalOptions> | ||
42 | + </AdditionalOptions> | ||
43 | + </TestAction> | ||
44 | + <LaunchAction | ||
45 | + buildConfiguration = "Debug" | ||
46 | + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" | ||
47 | + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" | ||
48 | + launchStyle = "0" | ||
49 | + useCustomWorkingDirectory = "NO" | ||
50 | + ignoresPersistentStateOnLaunch = "NO" | ||
51 | + debugDocumentVersioning = "YES" | ||
52 | + debugServiceExtension = "internal" | ||
53 | + allowLocationSimulation = "YES"> | ||
54 | + <BuildableProductRunnable | ||
55 | + runnableDebuggingMode = "0"> | ||
56 | + <BuildableReference | ||
57 | + BuildableIdentifier = "primary" | ||
58 | + BlueprintIdentifier = "97C146ED1CF9000F007C117D" | ||
59 | + BuildableName = "Runner.app" | ||
60 | + BlueprintName = "Runner" | ||
61 | + ReferencedContainer = "container:Runner.xcodeproj"> | ||
62 | + </BuildableReference> | ||
63 | + </BuildableProductRunnable> | ||
64 | + <AdditionalOptions> | ||
65 | + </AdditionalOptions> | ||
66 | + </LaunchAction> | ||
67 | + <ProfileAction | ||
68 | + buildConfiguration = "Profile" | ||
69 | + shouldUseLaunchSchemeArgsEnv = "YES" | ||
70 | + savedToolIdentifier = "" | ||
71 | + useCustomWorkingDirectory = "NO" | ||
72 | + debugDocumentVersioning = "YES"> | ||
73 | + <BuildableProductRunnable | ||
74 | + runnableDebuggingMode = "0"> | ||
75 | + <BuildableReference | ||
76 | + BuildableIdentifier = "primary" | ||
77 | + BlueprintIdentifier = "97C146ED1CF9000F007C117D" | ||
78 | + BuildableName = "Runner.app" | ||
79 | + BlueprintName = "Runner" | ||
80 | + ReferencedContainer = "container:Runner.xcodeproj"> | ||
81 | + </BuildableReference> | ||
82 | + </BuildableProductRunnable> | ||
83 | + </ProfileAction> | ||
84 | + <AnalyzeAction | ||
85 | + buildConfiguration = "Debug"> | ||
86 | + </AnalyzeAction> | ||
87 | + <ArchiveAction | ||
88 | + buildConfiguration = "Release" | ||
89 | + revealArchiveInOrganizer = "YES"> | ||
90 | + </ArchiveAction> | ||
91 | +</Scheme> |
example/ios/Runner/AppDelegate.swift
0 → 100644
1 | +import UIKit | ||
2 | +import Flutter | ||
3 | + | ||
4 | +@UIApplicationMain | ||
5 | +@objc class AppDelegate: FlutterAppDelegate { | ||
6 | + override func application( | ||
7 | + _ application: UIApplication, | ||
8 | + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? | ||
9 | + ) -> Bool { | ||
10 | + GeneratedPluginRegistrant.register(with: self) | ||
11 | + return super.application(application, didFinishLaunchingWithOptions: launchOptions) | ||
12 | + } | ||
13 | +} |
1 | +{ | ||
2 | + "images" : [ | ||
3 | + { | ||
4 | + "size" : "20x20", | ||
5 | + "idiom" : "iphone", | ||
6 | + "filename" : "Icon-App-20x20@2x.png", | ||
7 | + "scale" : "2x" | ||
8 | + }, | ||
9 | + { | ||
10 | + "size" : "20x20", | ||
11 | + "idiom" : "iphone", | ||
12 | + "filename" : "Icon-App-20x20@3x.png", | ||
13 | + "scale" : "3x" | ||
14 | + }, | ||
15 | + { | ||
16 | + "size" : "29x29", | ||
17 | + "idiom" : "iphone", | ||
18 | + "filename" : "Icon-App-29x29@1x.png", | ||
19 | + "scale" : "1x" | ||
20 | + }, | ||
21 | + { | ||
22 | + "size" : "29x29", | ||
23 | + "idiom" : "iphone", | ||
24 | + "filename" : "Icon-App-29x29@2x.png", | ||
25 | + "scale" : "2x" | ||
26 | + }, | ||
27 | + { | ||
28 | + "size" : "29x29", | ||
29 | + "idiom" : "iphone", | ||
30 | + "filename" : "Icon-App-29x29@3x.png", | ||
31 | + "scale" : "3x" | ||
32 | + }, | ||
33 | + { | ||
34 | + "size" : "40x40", | ||
35 | + "idiom" : "iphone", | ||
36 | + "filename" : "Icon-App-40x40@2x.png", | ||
37 | + "scale" : "2x" | ||
38 | + }, | ||
39 | + { | ||
40 | + "size" : "40x40", | ||
41 | + "idiom" : "iphone", | ||
42 | + "filename" : "Icon-App-40x40@3x.png", | ||
43 | + "scale" : "3x" | ||
44 | + }, | ||
45 | + { | ||
46 | + "size" : "60x60", | ||
47 | + "idiom" : "iphone", | ||
48 | + "filename" : "Icon-App-60x60@2x.png", | ||
49 | + "scale" : "2x" | ||
50 | + }, | ||
51 | + { | ||
52 | + "size" : "60x60", | ||
53 | + "idiom" : "iphone", | ||
54 | + "filename" : "Icon-App-60x60@3x.png", | ||
55 | + "scale" : "3x" | ||
56 | + }, | ||
57 | + { | ||
58 | + "size" : "20x20", | ||
59 | + "idiom" : "ipad", | ||
60 | + "filename" : "Icon-App-20x20@1x.png", | ||
61 | + "scale" : "1x" | ||
62 | + }, | ||
63 | + { | ||
64 | + "size" : "20x20", | ||
65 | + "idiom" : "ipad", | ||
66 | + "filename" : "Icon-App-20x20@2x.png", | ||
67 | + "scale" : "2x" | ||
68 | + }, | ||
69 | + { | ||
70 | + "size" : "29x29", | ||
71 | + "idiom" : "ipad", | ||
72 | + "filename" : "Icon-App-29x29@1x.png", | ||
73 | + "scale" : "1x" | ||
74 | + }, | ||
75 | + { | ||
76 | + "size" : "29x29", | ||
77 | + "idiom" : "ipad", | ||
78 | + "filename" : "Icon-App-29x29@2x.png", | ||
79 | + "scale" : "2x" | ||
80 | + }, | ||
81 | + { | ||
82 | + "size" : "40x40", | ||
83 | + "idiom" : "ipad", | ||
84 | + "filename" : "Icon-App-40x40@1x.png", | ||
85 | + "scale" : "1x" | ||
86 | + }, | ||
87 | + { | ||
88 | + "size" : "40x40", | ||
89 | + "idiom" : "ipad", | ||
90 | + "filename" : "Icon-App-40x40@2x.png", | ||
91 | + "scale" : "2x" | ||
92 | + }, | ||
93 | + { | ||
94 | + "size" : "76x76", | ||
95 | + "idiom" : "ipad", | ||
96 | + "filename" : "Icon-App-76x76@1x.png", | ||
97 | + "scale" : "1x" | ||
98 | + }, | ||
99 | + { | ||
100 | + "size" : "76x76", | ||
101 | + "idiom" : "ipad", | ||
102 | + "filename" : "Icon-App-76x76@2x.png", | ||
103 | + "scale" : "2x" | ||
104 | + }, | ||
105 | + { | ||
106 | + "size" : "83.5x83.5", | ||
107 | + "idiom" : "ipad", | ||
108 | + "filename" : "Icon-App-83.5x83.5@2x.png", | ||
109 | + "scale" : "2x" | ||
110 | + }, | ||
111 | + { | ||
112 | + "size" : "1024x1024", | ||
113 | + "idiom" : "ios-marketing", | ||
114 | + "filename" : "Icon-App-1024x1024@1x.png", | ||
115 | + "scale" : "1x" | ||
116 | + } | ||
117 | + ], | ||
118 | + "info" : { | ||
119 | + "version" : 1, | ||
120 | + "author" : "xcode" | ||
121 | + } | ||
122 | +} |

564 Bytes

1.25 KB

1.55 KB

1.68 KB

1.88 KB

1.25 KB

1.85 KB

3.74 KB

1.84 KB

3.22 KB
1 | +{ | ||
2 | + "images" : [ | ||
3 | + { | ||
4 | + "idiom" : "universal", | ||
5 | + "filename" : "LaunchImage.png", | ||
6 | + "scale" : "1x" | ||
7 | + }, | ||
8 | + { | ||
9 | + "idiom" : "universal", | ||
10 | + "filename" : "LaunchImage@2x.png", | ||
11 | + "scale" : "2x" | ||
12 | + }, | ||
13 | + { | ||
14 | + "idiom" : "universal", | ||
15 | + "filename" : "LaunchImage@3x.png", | ||
16 | + "scale" : "3x" | ||
17 | + } | ||
18 | + ], | ||
19 | + "info" : { | ||
20 | + "version" : 1, | ||
21 | + "author" : "xcode" | ||
22 | + } | ||
23 | +} |

68 Bytes

68 Bytes

68 Bytes
1 | +# Launch Screen Assets | ||
2 | + | ||
3 | +You can customize the launch screen with your own desired assets by replacing the image files in this directory. | ||
4 | + | ||
5 | +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM"> | ||
3 | + <dependencies> | ||
4 | + <deployment identifier="iOS"/> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/> | ||
6 | + </dependencies> | ||
7 | + <scenes> | ||
8 | + <!--View Controller--> | ||
9 | + <scene sceneID="EHf-IW-A2E"> | ||
10 | + <objects> | ||
11 | + <viewController id="01J-lp-oVM" sceneMemberID="viewController"> | ||
12 | + <layoutGuides> | ||
13 | + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/> | ||
14 | + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/> | ||
15 | + </layoutGuides> | ||
16 | + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3"> | ||
17 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
18 | + <subviews> | ||
19 | + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4"> | ||
20 | + </imageView> | ||
21 | + </subviews> | ||
22 | + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/> | ||
23 | + <constraints> | ||
24 | + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/> | ||
25 | + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/> | ||
26 | + </constraints> | ||
27 | + </view> | ||
28 | + </viewController> | ||
29 | + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/> | ||
30 | + </objects> | ||
31 | + <point key="canvasLocation" x="53" y="375"/> | ||
32 | + </scene> | ||
33 | + </scenes> | ||
34 | + <resources> | ||
35 | + <image name="LaunchImage" width="168" height="185"/> | ||
36 | + </resources> | ||
37 | +</document> |
1 | +<?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||
2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r"> | ||
3 | + <dependencies> | ||
4 | + <deployment identifier="iOS"/> | ||
5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/> | ||
6 | + </dependencies> | ||
7 | + <scenes> | ||
8 | + <!--Flutter View Controller--> | ||
9 | + <scene sceneID="tne-QT-ifu"> | ||
10 | + <objects> | ||
11 | + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController"> | ||
12 | + <layoutGuides> | ||
13 | + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/> | ||
14 | + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/> | ||
15 | + </layoutGuides> | ||
16 | + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC"> | ||
17 | + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/> | ||
18 | + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/> | ||
19 | + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | ||
20 | + </view> | ||
21 | + </viewController> | ||
22 | + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/> | ||
23 | + </objects> | ||
24 | + </scene> | ||
25 | + </scenes> | ||
26 | +</document> |
example/ios/Runner/Info.plist
0 → 100644
1 | +<?xml version="1.0" encoding="UTF-8"?> | ||
2 | +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> | ||
3 | +<plist version="1.0"> | ||
4 | +<dict> | ||
5 | + <key>CFBundleDevelopmentRegion</key> | ||
6 | + <string>$(DEVELOPMENT_LANGUAGE)</string> | ||
7 | + <key>CFBundleExecutable</key> | ||
8 | + <string>$(EXECUTABLE_NAME)</string> | ||
9 | + <key>CFBundleIdentifier</key> | ||
10 | + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string> | ||
11 | + <key>CFBundleInfoDictionaryVersion</key> | ||
12 | + <string>6.0</string> | ||
13 | + <key>CFBundleName</key> | ||
14 | + <string>example</string> | ||
15 | + <key>CFBundlePackageType</key> | ||
16 | + <string>APPL</string> | ||
17 | + <key>CFBundleShortVersionString</key> | ||
18 | + <string>$(FLUTTER_BUILD_NAME)</string> | ||
19 | + <key>CFBundleSignature</key> | ||
20 | + <string>????</string> | ||
21 | + <key>CFBundleVersion</key> | ||
22 | + <string>$(FLUTTER_BUILD_NUMBER)</string> | ||
23 | + <key>LSRequiresIPhoneOS</key> | ||
24 | + <true/> | ||
25 | + <key>UILaunchStoryboardName</key> | ||
26 | + <string>LaunchScreen</string> | ||
27 | + <key>UIMainStoryboardFile</key> | ||
28 | + <string>Main</string> | ||
29 | + <key>UISupportedInterfaceOrientations</key> | ||
30 | + <array> | ||
31 | + <string>UIInterfaceOrientationPortrait</string> | ||
32 | + <string>UIInterfaceOrientationLandscapeLeft</string> | ||
33 | + <string>UIInterfaceOrientationLandscapeRight</string> | ||
34 | + </array> | ||
35 | + <key>UISupportedInterfaceOrientations~ipad</key> | ||
36 | + <array> | ||
37 | + <string>UIInterfaceOrientationPortrait</string> | ||
38 | + <string>UIInterfaceOrientationPortraitUpsideDown</string> | ||
39 | + <string>UIInterfaceOrientationLandscapeLeft</string> | ||
40 | + <string>UIInterfaceOrientationLandscapeRight</string> | ||
41 | + </array> | ||
42 | + <key>NSAppTransportSecurity</key> | ||
43 | + <dict> | ||
44 | + <key>NSAllowsArbitraryLoads</key> <true/> | ||
45 | + </dict> | ||
46 | + <key>io.flutter.embedded_views_preview</key> <true/> | ||
47 | +</dict> | ||
48 | +</plist> |
example/ios/Runner/Runner-Bridging-Header.h
0 → 100644
1 | +#import "GeneratedPluginRegistrant.h" |
example/lib/demo.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_math_fork/flutter_math.dart'; | ||
3 | +import 'package:provider/provider.dart'; | ||
4 | + | ||
5 | +class DemoPage extends StatelessWidget { | ||
6 | + @override | ||
7 | + Widget build(BuildContext context) => Center( | ||
8 | + child: Container( | ||
9 | + constraints: BoxConstraints(maxWidth: 800), | ||
10 | + child: ChangeNotifierProvider( | ||
11 | + create: (context) => TextEditingController(), | ||
12 | + child: Column( | ||
13 | + mainAxisSize: MainAxisSize.max, | ||
14 | + crossAxisAlignment: CrossAxisAlignment.stretch, | ||
15 | + children: <Widget>[ | ||
16 | + Padding( | ||
17 | + padding: const EdgeInsets.all(10), | ||
18 | + child: Consumer<TextEditingController>( | ||
19 | + builder: (context, controller, _) => TextField( | ||
20 | + controller: controller, | ||
21 | + keyboardType: TextInputType.multiline, | ||
22 | + maxLines: null, | ||
23 | + decoration: InputDecoration( | ||
24 | + border: OutlineInputBorder(), | ||
25 | + labelText: 'Input TeX equation here', | ||
26 | + ), | ||
27 | + ), | ||
28 | + ), | ||
29 | + ), | ||
30 | + Expanded( | ||
31 | + flex: 1, | ||
32 | + child: Padding( | ||
33 | + padding: const EdgeInsets.all(10.0), | ||
34 | + child: Column( | ||
35 | + crossAxisAlignment: CrossAxisAlignment.stretch, | ||
36 | + children: <Widget>[ | ||
37 | + Center( | ||
38 | + child: Text( | ||
39 | + "Flutter Math's output", | ||
40 | + style: Theme.of(context).textTheme.titleLarge, | ||
41 | + ), | ||
42 | + ), | ||
43 | + Expanded( | ||
44 | + child: Container( | ||
45 | + decoration: BoxDecoration( | ||
46 | + border: Border.all(width: 1), | ||
47 | + borderRadius: BorderRadius.circular(5.0), | ||
48 | + ), | ||
49 | + alignment: Alignment.topCenter, | ||
50 | + padding: EdgeInsets.all(10), | ||
51 | + child: Consumer<TextEditingController>( | ||
52 | + builder: (context, controller, _) => | ||
53 | + SelectableMath.tex( | ||
54 | + controller.value.text, | ||
55 | + textStyle: TextStyle(fontSize: 22), | ||
56 | + ), | ||
57 | + ), | ||
58 | + ), | ||
59 | + ), | ||
60 | + ], | ||
61 | + ), | ||
62 | + ), | ||
63 | + ), | ||
64 | + ], | ||
65 | + ), | ||
66 | + ), | ||
67 | + ), | ||
68 | + ); | ||
69 | +} |
example/lib/display.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_math_fork/flutter_math.dart'; | ||
3 | + | ||
4 | +class DisplayMath extends StatelessWidget { | ||
5 | + final String expression; | ||
6 | + | ||
7 | + const DisplayMath({ | ||
8 | + Key? key, | ||
9 | + required this.expression, | ||
10 | + }) : super(key: key); | ||
11 | + | ||
12 | + @override | ||
13 | + Widget build(BuildContext context) => Card( | ||
14 | + child: Column( | ||
15 | + crossAxisAlignment: CrossAxisAlignment.center, | ||
16 | + mainAxisSize: MainAxisSize.min, | ||
17 | + mainAxisAlignment: MainAxisAlignment.start, | ||
18 | + children: <Widget>[ | ||
19 | + Padding( | ||
20 | + padding: const EdgeInsets.all(8.0), | ||
21 | + child: Text(expression, softWrap: true), | ||
22 | + ), | ||
23 | + Divider( | ||
24 | + thickness: 1.0, | ||
25 | + height: 1.0, | ||
26 | + ), | ||
27 | + Expanded( | ||
28 | + child: Center(child: Math.tex(expression)), | ||
29 | + ) | ||
30 | + ], | ||
31 | + ), | ||
32 | + ); | ||
33 | +} |
example/lib/equations.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | +import 'package:flutter_math_fork/flutter_math.dart'; | ||
3 | +import 'package:google_fonts/google_fonts.dart'; | ||
4 | + | ||
5 | +const equations = [ | ||
6 | + ['Solution of quadratic equation', r'x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a}'], | ||
7 | + [ | ||
8 | + 'Schrodinger\'s equation', | ||
9 | + r'i\hbar\frac{\partial}{\partial t}\Psi(\vec x,t) = -\frac{\hbar}{2m}\nabla^2\Psi(\vec x,t)+ V(\vec x)\Psi(\vec x,t)' | ||
10 | + ], | ||
11 | + [ | ||
12 | + 'Fourier transform', | ||
13 | + r'\hat f(\xi) = \int_{-\infty}^\infty {f(x)e^{- 2\pi i \xi x}\mathrm{d}x}' | ||
14 | + ], | ||
15 | + [ | ||
16 | + 'Maxwell\'s equations', | ||
17 | + r'''\left\{\begin{array}{l} | ||
18 | + \nabla\cdot\vec{D} = \rho \\ | ||
19 | + \nabla\cdot\vec{B} = 0 \\ | ||
20 | + \nabla\times\vec{E} = -\frac{\partial\vec{B}}{\partial t} \\ | ||
21 | + \nabla\times\vec{H} = \vec{J}_f + \frac{\partial\vec{D}}{\partial t} | ||
22 | +\end{array}\right.''' | ||
23 | + ], | ||
24 | +]; | ||
25 | + | ||
26 | +class EquationsPage extends StatelessWidget { | ||
27 | + @override | ||
28 | + Widget build(BuildContext context) => Center( | ||
29 | + child: Container( | ||
30 | + constraints: BoxConstraints(maxWidth: 800), | ||
31 | + child: ListView( | ||
32 | + children: equations | ||
33 | + .map((entry) => Padding( | ||
34 | + padding: const EdgeInsets.all(10), | ||
35 | + child: Card( | ||
36 | + child: Column( | ||
37 | + children: [ | ||
38 | + ListTile( | ||
39 | + title: Text(entry[0]), | ||
40 | + subtitle: SelectableText( | ||
41 | + entry[1], | ||
42 | + style: GoogleFonts.robotoMono(), | ||
43 | + ), | ||
44 | + ), | ||
45 | + Container( | ||
46 | + padding: const EdgeInsets.fromLTRB(1, 5, 1, 5), | ||
47 | + child: SelectableMath.tex( | ||
48 | + entry[1], | ||
49 | + textStyle: TextStyle(fontSize: 22), | ||
50 | + ), | ||
51 | + ) | ||
52 | + ], | ||
53 | + ), | ||
54 | + ), | ||
55 | + )) | ||
56 | + .toList(), | ||
57 | + ), | ||
58 | + ), | ||
59 | + ); | ||
60 | +} |
example/lib/feature.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | + | ||
3 | +import 'display.dart'; | ||
4 | +import 'supported_data.dart'; | ||
5 | + | ||
6 | +const largeSections = { | ||
7 | + 'Delimiter Sizing', | ||
8 | + 'Environment', | ||
9 | + 'Unicode Mathematical Alphanumeric Symbols', | ||
10 | +}; | ||
11 | + | ||
12 | +class FeaturePage extends StatelessWidget { | ||
13 | + @override | ||
14 | + Widget build(BuildContext context) { | ||
15 | + final entries = supportedData.entries.toList(); | ||
16 | + return ListView.builder( | ||
17 | + itemCount: supportedData.length, | ||
18 | + itemBuilder: (context, i) => Column( | ||
19 | + children: <Widget>[ | ||
20 | + Text( | ||
21 | + entries[i].key, | ||
22 | + style: Theme.of(context).textTheme.displaySmall, | ||
23 | + ), | ||
24 | + GridView.builder( | ||
25 | + shrinkWrap: true, | ||
26 | + physics: NeverScrollableScrollPhysics(), | ||
27 | + itemCount: entries[i].value.length, | ||
28 | + gridDelegate: SliverGridDelegateWithMaxCrossAxisExtent( | ||
29 | + maxCrossAxisExtent: | ||
30 | + largeSections.contains(entries[i].key) ? 250 : 125, | ||
31 | + mainAxisSpacing: 10, | ||
32 | + crossAxisSpacing: 10, | ||
33 | + childAspectRatio: 1, | ||
34 | + ), | ||
35 | + itemBuilder: (BuildContext context, int j) => | ||
36 | + DisplayMath(expression: entries[i].value[j]), | ||
37 | + ), | ||
38 | + ], | ||
39 | + ), | ||
40 | + ); | ||
41 | + } | ||
42 | +} |
example/lib/main.dart
0 → 100644
1 | +import 'package:flutter/material.dart'; | ||
2 | + | ||
3 | +import 'demo.dart'; | ||
4 | +import 'equations.dart'; | ||
5 | +import 'feature.dart'; | ||
6 | + | ||
7 | +void main() { | ||
8 | + runApp(MyApp()); | ||
9 | +} | ||
10 | + | ||
11 | +class MyApp extends StatelessWidget { | ||
12 | + @override | ||
13 | + Widget build(BuildContext context) => MaterialApp( | ||
14 | + title: 'Flutter Math Demo v0.2.0', | ||
15 | + theme: ThemeData( | ||
16 | + primarySwatch: Colors.blue, | ||
17 | + visualDensity: VisualDensity.adaptivePlatformDensity, | ||
18 | + ), | ||
19 | + home: DefaultTabController( | ||
20 | + length: 3, | ||
21 | + child: Scaffold( | ||
22 | + appBar: AppBar( | ||
23 | + title: Text( | ||
24 | + 'Flutter Math Demo v0.2.0', | ||
25 | + ), | ||
26 | + bottom: TabBar(tabs: [ | ||
27 | + Text('Interactive Demo'), | ||
28 | + Text('Equation Samples'), | ||
29 | + Text('Supported Features'), | ||
30 | + ]), | ||
31 | + ), | ||
32 | + body: TabBarView(children: [ | ||
33 | + DemoPage(), | ||
34 | + EquationsPage(), | ||
35 | + FeaturePage(), | ||
36 | + ]), | ||
37 | + ), | ||
38 | + ), | ||
39 | + ); | ||
40 | +} |
example/lib/supported_data.dart
0 → 100644
1 | +const supportedData = { | ||
2 | + 'Accents': [ | ||
3 | + r"a'", | ||
4 | + r'\tilde{a}', | ||
5 | + // r'\mathring{g}', | ||
6 | + r"a''", | ||
7 | + r'\widetilde{ac}', | ||
8 | + // r'\overgroup{AB}', | ||
9 | + r'a^{\prime}', | ||
10 | + r'\utilde{AB}', | ||
11 | + r'\undergroup{AB}', | ||
12 | + r'\acute{a}', | ||
13 | + r'\vec{F}', | ||
14 | + r'\Overrightarrow{AB}', | ||
15 | + r'\bar{y}', | ||
16 | + r'\overleftarrow{AB}', | ||
17 | + r'\overrightarrow{AB}', | ||
18 | + r'\breve{a}', | ||
19 | + r'\underleftarrow{AB}', | ||
20 | + r'\underrightarrow{AB}', | ||
21 | + r'\check{a}', | ||
22 | + r'\overleftharpoon{ac}', | ||
23 | + r'\overrightharpoon{ac}', | ||
24 | + r'\dot{a}', | ||
25 | + r'\overleftrightarrow{AB}', | ||
26 | + r'\overbrace{AB}', | ||
27 | + r'\ddot{a}', | ||
28 | + r'\underleftrightarrow{AB}', | ||
29 | + r'\underbrace{AB}', | ||
30 | + r'\grave{a}', | ||
31 | + r'\overline{AB}', | ||
32 | + // r'\overlinesegment{AB}', | ||
33 | + r'\hat{\theta}', | ||
34 | + r'\underline{AB}', | ||
35 | + // r'\underlinesegment{AB}', | ||
36 | + r'\widehat{ac}', | ||
37 | + r'\widecheck{ac}', | ||
38 | + ], | ||
39 | + // Accent functions inside \\text{…} | ||
40 | + | ||
41 | + 'Delimiters': [ | ||
42 | + r'(~)', | ||
43 | + r'\lparen~\rparen', | ||
44 | + r'⌈~⌉', | ||
45 | + r'\lceil~\rceil', | ||
46 | + r'\uparrow', | ||
47 | + r'[~]', | ||
48 | + r'\lbrack~\rbrack', | ||
49 | + r'⌊~⌋', | ||
50 | + r'\lfloor~\rfloor', | ||
51 | + r'\downarrow', | ||
52 | + r'\{ \}', | ||
53 | + r'\lbrace \rbrace', | ||
54 | + r'⎰⎱', | ||
55 | + r'\lmoustache \rmoustache', | ||
56 | + r'\updownarrow', | ||
57 | + r'⟨~⟩', | ||
58 | + r'\langle~\rangle', | ||
59 | + r'⟮~⟯', | ||
60 | + r'\lgroup~\rgroup', | ||
61 | + r'\Uparrow', | ||
62 | + r'\vert', | ||
63 | + r'\vert', | ||
64 | + r'┌ ┐', | ||
65 | + r'\ulcorner \urcorner', | ||
66 | + r'\Downarrow', | ||
67 | + r'\Vert', | ||
68 | + r'\Vert', | ||
69 | + r'└ ┘', | ||
70 | + r'\llcorner \lrcorner', | ||
71 | + r'\Updownarrow', | ||
72 | + r'\lvert~\rvert', | ||
73 | + r'\lVert~\rVert', | ||
74 | + r'\backslash', | ||
75 | + r'\lang~\rang', | ||
76 | + r'\lt~\gt', | ||
77 | + r'⟦~⟧', | ||
78 | + r'\llbracket~\rrbracket', | ||
79 | + r'\lBrace~\rBrace', | ||
80 | + ], | ||
81 | + 'Delimiter Sizing': [ | ||
82 | + r'\left(\LARGE{AB}\right)', | ||
83 | + r'( \big( \Big( \bigg( \Bigg(', | ||
84 | + ], | ||
85 | + 'Environment': [ | ||
86 | + r'\begin{matrix} a & b \\ c & d \end{matrix}', | ||
87 | + r'\begin{array}{cc}a & b\\c & d\end{array}', | ||
88 | + r'\begin{pmatrix} a & b \\ c & d \end{pmatrix}', | ||
89 | + r'\begin{bmatrix} a & b \\ c & d \end{bmatrix}', | ||
90 | + r'\begin{vmatrix} a & b \\ c & d \end{vmatrix}', | ||
91 | + r'\begin{Vmatrix} a & b \\ c & d \end{Vmatrix}', | ||
92 | + r'\begin{Bmatrix} a & b \\ c & d \end{Bmatrix}', | ||
93 | + // r'\def\arraystretch{1.5}\begin{array}{c:c:c} a & b & c \\ \hline d & e & f \\ \hdashline g & h & i \end{array}', | ||
94 | + r'\begin{array}{c:c:c} a & b & c \\ \hline d & e & f \\ \hdashline g & h & i \end{array}', | ||
95 | + r'\begin{aligned} a&=b+c \\ d+e&=f \end{aligned}', | ||
96 | + r'\begin{alignedat}{2}10&x+&3&y=2\\3&x+&13&y=4\end{alignedat}', | ||
97 | + r'\begin{gathered} a=b \\ e=b+c \end{gathered}', | ||
98 | + r'x = \begin{cases} a &\text{if } b \\ c &\text{if } d \end{cases}', | ||
99 | + r'\begin{smallmatrix} a & b \\ c & d \end{smallmatrix}', | ||
100 | + r'\begin{rcases} a &\text{if } b \\ c &\text{if } d \end{rcases}⇒…', | ||
101 | + ], | ||
102 | + | ||
103 | + // HTML, | ||
104 | + | ||
105 | + 'Greek Letters': [ | ||
106 | + r'\Alpha', | ||
107 | + r'\Beta', | ||
108 | + r'\Gamma', | ||
109 | + r'\Delta', | ||
110 | + r'\Epsilon', | ||
111 | + r'\Zeta', | ||
112 | + r'\Eta', | ||
113 | + r'\Theta', | ||
114 | + r'\Iota', | ||
115 | + r'\Kappa', | ||
116 | + r'\Lambda', | ||
117 | + r'\Mu', | ||
118 | + r'\Nu', | ||
119 | + r'\Xi', | ||
120 | + r'\Omicron', | ||
121 | + r'\Pi', | ||
122 | + r'\Rho', | ||
123 | + r'\Sigma', | ||
124 | + r'\Tau', | ||
125 | + r'\Upsilon', | ||
126 | + r'\Phi', | ||
127 | + r'\Chi', | ||
128 | + r'\Psi', | ||
129 | + r'\Omega', | ||
130 | + r'\varGamma', | ||
131 | + r'\varDelta', | ||
132 | + r'\varTheta', | ||
133 | + r'\varLambda', | ||
134 | + r'\varXi', | ||
135 | + r'\varPi', | ||
136 | + r'\varSigma', | ||
137 | + r'\varUpsilon', | ||
138 | + r'\varPhi', | ||
139 | + r'\varPsi', | ||
140 | + r'\varOmega', | ||
141 | + r'\alpha', | ||
142 | + r'\beta', | ||
143 | + r'\gamma', | ||
144 | + r'\delta', | ||
145 | + r'\epsilon', | ||
146 | + r'\zeta', | ||
147 | + r'\eta', | ||
148 | + r'\theta', | ||
149 | + r'\iota', | ||
150 | + r'\kappa', | ||
151 | + r'\lambda', | ||
152 | + r'\mu', | ||
153 | + r'\nu', | ||
154 | + r'\xi', | ||
155 | + r'\omicron', | ||
156 | + r'\pi', | ||
157 | + r'\rho', | ||
158 | + r'\sigma', | ||
159 | + r'\tau', | ||
160 | + r'\upsilon', | ||
161 | + r'\phi', | ||
162 | + r'\chi', | ||
163 | + r'\psi', | ||
164 | + r'\omega', | ||
165 | + r'\varepsilon', | ||
166 | + r'\varkappa', | ||
167 | + r'\vartheta', | ||
168 | + r'\thetasym', | ||
169 | + r'\varpi', | ||
170 | + r'\varrho', | ||
171 | + r'\varsigma', | ||
172 | + r'\varphi', | ||
173 | + r'\digamma ', | ||
174 | + ], | ||
175 | + | ||
176 | + 'Other characters': [ | ||
177 | + r'\imath', | ||
178 | + r'\nabla', | ||
179 | + r'\Im', | ||
180 | + r'\Reals', | ||
181 | + r'\text{\OE}', | ||
182 | + r'\jmath', | ||
183 | + r'\partial', | ||
184 | + r'\image', | ||
185 | + r'\wp', | ||
186 | + r'\text{\o}', | ||
187 | + r'\aleph', | ||
188 | + r'\Game', | ||
189 | + r'\Bbbk', | ||
190 | + r'\weierp', | ||
191 | + r'\text{\O}', | ||
192 | + r'\alef', | ||
193 | + r'\Finv', | ||
194 | + r'\N', | ||
195 | + r'\Z', | ||
196 | + r'\text{\ss}', | ||
197 | + r'\alefsym', | ||
198 | + r'\cnums', | ||
199 | + r'\natnums', | ||
200 | + // r'\text{\aa}', | ||
201 | + r'\text{\i}', | ||
202 | + r'\beth', | ||
203 | + r'\Complex', | ||
204 | + r'\R', | ||
205 | + // r'\text{\AA}', | ||
206 | + r'\text{\j}', | ||
207 | + r'\gimel', | ||
208 | + r'\ell', | ||
209 | + r'\Re', | ||
210 | + r'\text{\ae}', | ||
211 | + r'\daleth', | ||
212 | + r'\hbar', | ||
213 | + r'\real', | ||
214 | + r'\text{\AE}', | ||
215 | + r'\eth', | ||
216 | + r'\hslash', | ||
217 | + r'\reals', | ||
218 | + r'\text{\oe}', | ||
219 | + ], | ||
220 | + 'Unicode Mathematical Alphanumeric Symbols': [ | ||
221 | + r'\text{𝐀-𝐙 𝐚-𝐳 𝟎-𝟗}', | ||
222 | + r'\text{𝔸-}ℤ\ 𝕜', | ||
223 | + r'\text{𝐴-𝑍 𝑎-𝑧}', | ||
224 | + r'\text{𝖠-𝖹 𝖺-𝗓 𝟢-𝟫}', | ||
225 | + r'\text{𝑨-𝒁 𝒂-𝒛}', | ||
226 | + r'\text{𝗔-𝗭 𝗮-𝘇 𝟬-𝟵}', | ||
227 | + r'\text{𝒜-𝒵}', | ||
228 | + r'\text{𝘈-𝘡 𝘢-𝘻}', | ||
229 | + r'\text{𝔄-}ℨ\text{ 𝔞-𝔷}', | ||
230 | + r'\text{𝙰-𝚉 𝚊-𝚣 𝟶-𝟿}', | ||
231 | + ], | ||
232 | + 'Layout - Annotation': [ | ||
233 | + r'\cancel{5}', | ||
234 | + r'\overbrace{a+b+c}^{\text{note}}', | ||
235 | + r'\bcancel{5}', | ||
236 | + r'\underbrace{a+b+c}_{\text{note}}', | ||
237 | + r'\xcancel{ABC}', | ||
238 | + r'\not =', | ||
239 | + r'\sout{abc}', | ||
240 | + r'\boxed{\pi=\frac c d}', | ||
241 | + // r'\tag{hi} x+y^{2x}', | ||
242 | + // r'\tag*{hi} x+y^{2x}', | ||
243 | + ], | ||
244 | + 'Layout - Vertical Layout': [ | ||
245 | + r'x_n', | ||
246 | + r'\stackrel{!}{=}', | ||
247 | + r'a \atop b', | ||
248 | + r'e^x', | ||
249 | + r'\overset{!}{=}', | ||
250 | + r'a\raisebox{0.25em}{b}c', | ||
251 | + r'_u^o ', | ||
252 | + r'\underset{!}{=}', | ||
253 | + r'\sum_{\substack{0<i<m\\0<j<n}}', | ||
254 | + ], | ||
255 | + // 'Layout - Overlap and Spacing' | ||
256 | + 'Logic and Set Theory': [ | ||
257 | + r'\forall', | ||
258 | + r'\complement', | ||
259 | + r'\therefore', | ||
260 | + r'\emptyset', | ||
261 | + r'\exists', | ||
262 | + r'\subset', | ||
263 | + r'\because', | ||
264 | + r'\empty', | ||
265 | + r'\exist', | ||
266 | + r'\supset', | ||
267 | + r'\mapsto', | ||
268 | + r'\varnothing', | ||
269 | + r'\nexists', | ||
270 | + r'\mid', | ||
271 | + r'\to', | ||
272 | + r'\implies', | ||
273 | + r'\in', | ||
274 | + r'\land', | ||
275 | + r'\gets', | ||
276 | + r'\impliedby', | ||
277 | + r'\isin', | ||
278 | + r'\lor', | ||
279 | + r'\leftrightarrow', | ||
280 | + r'\iff', | ||
281 | + r'\notin', | ||
282 | + r'\ni', | ||
283 | + r'\notni', | ||
284 | + r'\neg', | ||
285 | + ], | ||
286 | + // 'Macros': [ | ||
287 | + // r'\def\foo{x^2} \foo + \foo', | ||
288 | + // r'\gdef\bar#1{#1^2} \bar{y} + \bar{y}', | ||
289 | + // ], | ||
290 | + 'Big Operators': [ | ||
291 | + r'\sum', | ||
292 | + r'\prod', | ||
293 | + r'\bigotimes', | ||
294 | + r'\bigvee', | ||
295 | + r'\int', | ||
296 | + r'\coprod', | ||
297 | + r'\bigoplus', | ||
298 | + r'\bigwedge', | ||
299 | + r'\iint', | ||
300 | + r'\intop', | ||
301 | + r'\bigodot', | ||
302 | + r'\bigcap', | ||
303 | + r'\iiint', | ||
304 | + r'\smallint', | ||
305 | + r'\biguplus', | ||
306 | + r'\bigcup', | ||
307 | + r'\oint', | ||
308 | + r'\oiint', | ||
309 | + r'\oiiint', | ||
310 | + r'\bigsqcup', | ||
311 | + ], | ||
312 | + | ||
313 | + 'Binary Operator': [ | ||
314 | + r'+', | ||
315 | + r'\cdot', | ||
316 | + r'\gtrdot', | ||
317 | + r'x \pmod a', | ||
318 | + r'-', | ||
319 | + r'\cdotp', | ||
320 | + r'\intercal', | ||
321 | + r'x \pod a', | ||
322 | + r'/', | ||
323 | + r'\centerdot', | ||
324 | + r'\land', | ||
325 | + r'\rhd', | ||
326 | + r'*', | ||
327 | + r'\circ', | ||
328 | + r'\leftthreetimes', | ||
329 | + r'\rightthreetimes', | ||
330 | + r'\amalg', | ||
331 | + r'\circledast', | ||
332 | + r'\ldotp', | ||
333 | + r'\rtimes', | ||
334 | + r'\And', | ||
335 | + r'\circledcirc', | ||
336 | + r'\lor', | ||
337 | + r'\setminus', | ||
338 | + r'\ast', | ||
339 | + r'\circleddash', | ||
340 | + r'\lessdot', | ||
341 | + r'\smallsetminus', | ||
342 | + r'\barwedge', | ||
343 | + r'\Cup', | ||
344 | + r'\lhd', | ||
345 | + r'\sqcap', | ||
346 | + r'\bigcirc', | ||
347 | + r'\cup', | ||
348 | + r'\ltimes', | ||
349 | + r'\sqcup', | ||
350 | + r'\bmod', | ||
351 | + r'\curlyvee', | ||
352 | + r'x \mod a', | ||
353 | + r'\times', | ||
354 | + r'\boxdot', | ||
355 | + r'\curlywedge', | ||
356 | + r'\mp', | ||
357 | + r'\unlhd', | ||
358 | + r'\boxminus', | ||
359 | + r'\div', | ||
360 | + r'\odot', | ||
361 | + r'\unrhd', | ||
362 | + r'\boxplus', | ||
363 | + r'\divideontimes', | ||
364 | + r'\ominus', | ||
365 | + r'\uplus', | ||
366 | + r'\boxtimes', | ||
367 | + r'\dotplus', | ||
368 | + r'\oplus', | ||
369 | + r'\vee', | ||
370 | + r'\bullet', | ||
371 | + r'\doublebarwedge', | ||
372 | + r'\otimes', | ||
373 | + r'\veebar', | ||
374 | + r'\Cap', | ||
375 | + r'\doublecap', | ||
376 | + r'\oslash', | ||
377 | + r'\wedge', | ||
378 | + r'\cap', | ||
379 | + r'\doublecup', | ||
380 | + r'\pm', | ||
381 | + r'\wr', | ||
382 | + ], | ||
383 | + 'Fractions and Binomials': [ | ||
384 | + r'\frac{a}{b}', | ||
385 | + r'\tfrac{a}{b}', | ||
386 | + r'\genfrac ( ] {2pt}{1}a{a+1}', | ||
387 | + r'{a \over b}', | ||
388 | + r'\dfrac{a}{b}', | ||
389 | + r'{a \above{2pt} b+1}', | ||
390 | + r'a/b', | ||
391 | + r'\cfrac{a}{1 + \cfrac{1}{b}}', | ||
392 | + r'\binom{n}{k}', | ||
393 | + r'\dbinom{n}{k}', | ||
394 | + r'{n\brace k}', | ||
395 | + r'{n \choose k}', | ||
396 | + r'\tbinom{n}{k}', | ||
397 | + r'{n\brack k}', | ||
398 | + ], | ||
399 | + 'Math Operators': [ | ||
400 | + r'\arcsin', | ||
401 | + r'\cotg', | ||
402 | + r'\ln', | ||
403 | + r'\det', | ||
404 | + r'\arccos', | ||
405 | + r'\coth', | ||
406 | + r'\log', | ||
407 | + r'\gcd', | ||
408 | + r'\arctan', | ||
409 | + r'\csc', | ||
410 | + r'\sec', | ||
411 | + r'\inf', | ||
412 | + r'\arctg', | ||
413 | + r'\ctg', | ||
414 | + r'\sin', | ||
415 | + r'\lim', | ||
416 | + r'\arcctg', | ||
417 | + r'\cth', | ||
418 | + r'\sinh', | ||
419 | + r'\liminf', | ||
420 | + r'\arg', | ||
421 | + r'\deg', | ||
422 | + r'\sh', | ||
423 | + r'\limsup', | ||
424 | + r'\ch', | ||
425 | + r'\dim', | ||
426 | + r'\tan', | ||
427 | + r'\max', | ||
428 | + r'\cos', | ||
429 | + r'\exp', | ||
430 | + r'\tanh', | ||
431 | + r'\min', | ||
432 | + r'\cosec', | ||
433 | + r'\hom', | ||
434 | + r'\tg', | ||
435 | + r'\Pr', | ||
436 | + r'\cosh', | ||
437 | + r'\ker', | ||
438 | + r'\th', | ||
439 | + r'\sup', | ||
440 | + r'\cot', | ||
441 | + r'\lg', | ||
442 | + r'\argmax', | ||
443 | + r'\argmin', | ||
444 | + r'\plim', | ||
445 | + r'\operatorname{f}', | ||
446 | + r'\operatorname*{f}', | ||
447 | + r'\sqrt{x}', | ||
448 | + r'\sqrt[3]{x}', | ||
449 | + ], | ||
450 | + | ||
451 | + 'Relations': [ | ||
452 | + r'=', | ||
453 | + r'\eqcirc', | ||
454 | + r'\lesseqgtr', | ||
455 | + r'\sqsupset', | ||
456 | + r'<', | ||
457 | + r'\eqcolon', | ||
458 | + r'\lesseqqgtr', | ||
459 | + r'\sqsupseteq', | ||
460 | + r'>', | ||
461 | + // r'\Eqcolon', | ||
462 | + r'\lessgtr', | ||
463 | + r'\Subset', | ||
464 | + r':', | ||
465 | + r'\eqqcolon', | ||
466 | + r'\lesssim', | ||
467 | + r'\subset', | ||
468 | + r'\approx', | ||
469 | + // r'\Eqqcolon', | ||
470 | + r'\ll', | ||
471 | + r'\subseteq', | ||
472 | + r'\approxeq', | ||
473 | + r'\eqsim', | ||
474 | + r'\lll', | ||
475 | + r'\subseteqq', | ||
476 | + r'\asymp', | ||
477 | + r'\eqslantgtr', | ||
478 | + r'\llless', | ||
479 | + r'\succ', | ||
480 | + r'\backepsilon', | ||
481 | + r'\eqslantless', | ||
482 | + r'\lt', | ||
483 | + r'\succapprox', | ||
484 | + r'\backsim', | ||
485 | + r'\equiv', | ||
486 | + r'\mid', | ||
487 | + r'\succcurlyeq', | ||
488 | + r'\backsimeq', | ||
489 | + r'\fallingdotseq', | ||
490 | + r'\models', | ||
491 | + r'\succeq', | ||
492 | + r'\between', | ||
493 | + r'\frown', | ||
494 | + r'\multimap', | ||
495 | + r'\succsim', | ||
496 | + r'\bowtie', | ||
497 | + r'\ge', | ||
498 | + r'\owns', | ||
499 | + r'\Supset', | ||
500 | + r'\bumpeq', | ||
501 | + r'\geq', | ||
502 | + r'\parallel', | ||
503 | + r'\supset', | ||
504 | + r'\Bumpeq', | ||
505 | + r'\geqq', | ||
506 | + r'\perp', | ||
507 | + r'\supseteq', | ||
508 | + r'\circeq', | ||
509 | + r'\geqslant', | ||
510 | + r'\pitchfork', | ||
511 | + r'\supseteqq', | ||
512 | + // r'\colonapprox', | ||
513 | + r'\gg', | ||
514 | + r'\prec', | ||
515 | + r'\thickapprox', | ||
516 | + // r'\Colonapprox', | ||
517 | + r'\ggg', | ||
518 | + r'\precapprox', | ||
519 | + r'\thicksim', | ||
520 | + // r'\coloneq', | ||
521 | + r'\gggtr', | ||
522 | + r'\preccurlyeq', | ||
523 | + r'\trianglelefteq', | ||
524 | + // r'\Coloneq', | ||
525 | + r'\gt', | ||
526 | + r'\preceq', | ||
527 | + r'\triangleq', | ||
528 | + r'\coloneqq', | ||
529 | + r'\gtrapprox', | ||
530 | + r'\precsim', | ||
531 | + r'\trianglerighteq', | ||
532 | + // r'\Coloneqq', | ||
533 | + r'\gtreqless', | ||
534 | + r'\propto', | ||
535 | + r'\varpropto', | ||
536 | + // r'\colonsim', | ||
537 | + r'\gtreqqless', | ||
538 | + r'\risingdotseq', | ||
539 | + r'\vartriangle', | ||
540 | + // r'\Colonsim', | ||
541 | + r'\gtrless', | ||
542 | + r'\shortmid', | ||
543 | + r'\vartriangleleft', | ||
544 | + r'\cong', | ||
545 | + r'\gtrsim', | ||
546 | + r'\shortparallel', | ||
547 | + r'\vartriangleright', | ||
548 | + r'\curlyeqprec', | ||
549 | + r'\in', | ||
550 | + r'\sim', | ||
551 | + r'\vcentcolon', | ||
552 | + r'\curlyeqsucc', | ||
553 | + r'\Join', | ||
554 | + r'\simeq', | ||
555 | + r'\vdash', | ||
556 | + r'\dashv', | ||
557 | + r'\le', | ||
558 | + r'\smallfrown', | ||
559 | + r'\vDash', | ||
560 | + r'\dblcolon', | ||
561 | + r'\leq', | ||
562 | + r'\smallsmile', | ||
563 | + r'\Vdash', | ||
564 | + r'\doteq', | ||
565 | + r'\leqq', | ||
566 | + r'\smile', | ||
567 | + r'\Vvdash', | ||
568 | + r'\Doteq', | ||
569 | + r'\leqslant', | ||
570 | + r'\sqsubset', | ||
571 | + r'\doteqdot', | ||
572 | + r'\lessapprox', | ||
573 | + r'\sqsubseteq', | ||
574 | + ], | ||
575 | + | ||
576 | + 'Negated Relations': [ | ||
577 | + r'\gnapprox', | ||
578 | + r'\ngeqslant', | ||
579 | + r'\nsubseteq', | ||
580 | + r'\precneqq', | ||
581 | + r'\gneq', | ||
582 | + r'\ngtr', | ||
583 | + r'\nsubseteqq', | ||
584 | + r'\precnsim', | ||
585 | + r'\gneqq', | ||
586 | + r'\nleq', | ||
587 | + r'\nsucc', | ||
588 | + r'\subsetneq', | ||
589 | + r'\gnsim', | ||
590 | + r'\nleqq', | ||
591 | + r'\nsucceq', | ||
592 | + r'\subsetneqq', | ||
593 | + r'\gvertneqq', | ||
594 | + r'\nleqslant', | ||
595 | + r'\nsupseteq', | ||
596 | + r'\succnapprox', | ||
597 | + r'\lnapprox', | ||
598 | + r'\nless', | ||
599 | + r'\nsupseteqq', | ||
600 | + r'\succneqq', | ||
601 | + r'\lneq', | ||
602 | + r'\nmid', | ||
603 | + r'\ntriangleleft', | ||
604 | + r'\succnsim', | ||
605 | + r'\lneqq', | ||
606 | + r'\notin', | ||
607 | + r'\ntrianglelefteq', | ||
608 | + r'\supsetneq', | ||
609 | + r'\lnsim', | ||
610 | + r'\notni', | ||
611 | + r'\ntriangleright', | ||
612 | + r'\supsetneqq', | ||
613 | + r'\lvertneqq', | ||
614 | + r'\nparallel', | ||
615 | + r'\ntrianglerighteq', | ||
616 | + r'\varsubsetneq', | ||
617 | + r'\ncong', | ||
618 | + r'\nprec', | ||
619 | + r'\nvdash', | ||
620 | + r'\varsubsetneqq', | ||
621 | + r'\ne', | ||
622 | + r'\npreceq', | ||
623 | + r'\nvDash', | ||
624 | + r'\varsupsetneq', | ||
625 | + r'\neq', | ||
626 | + r'\nshortmid', | ||
627 | + r'\nVDash', | ||
628 | + r'\varsupsetneqq', | ||
629 | + r'\ngeq', | ||
630 | + r'\nshortparallel', | ||
631 | + r'\nVdash', | ||
632 | + r'\ngeqq', | ||
633 | + r'\nsim', | ||
634 | + r'\precnapprox', | ||
635 | + ], | ||
636 | + | ||
637 | + 'Arrows': [ | ||
638 | + r'\circlearrowleft', | ||
639 | + r'\leftharpoonup', | ||
640 | + r'\rArr', | ||
641 | + r'\circlearrowright', | ||
642 | + r'\leftleftarrows', | ||
643 | + r'\rarr', | ||
644 | + r'\curvearrowleft', | ||
645 | + r'\leftrightarrow', | ||
646 | + r'\restriction', | ||
647 | + r'\curvearrowright', | ||
648 | + r'\Leftrightarrow', | ||
649 | + r'\rightarrow', | ||
650 | + r'\Darr', | ||
651 | + r'\leftrightarrows', | ||
652 | + r'\Rightarrow', | ||
653 | + r'\dArr', | ||
654 | + r'\leftrightharpoons', | ||
655 | + r'\rightarrowtail', | ||
656 | + r'\darr', | ||
657 | + r'\leftrightsquigarrow', | ||
658 | + r'\rightharpoondown', | ||
659 | + r'\dashleftarrow', | ||
660 | + r'\Lleftarrow', | ||
661 | + r'\rightharpoonup', | ||
662 | + r'\dashrightarrow', | ||
663 | + r'\longleftarrow', | ||
664 | + r'\rightleftarrows', | ||
665 | + r'\downarrow', | ||
666 | + r'\Longleftarrow', | ||
667 | + r'\rightleftharpoons', | ||
668 | + r'\Downarrow', | ||
669 | + r'\longleftrightarrow', | ||
670 | + r'\rightrightarrows', | ||
671 | + r'\downdownarrows', | ||
672 | + r'\Longleftrightarrow', | ||
673 | + r'\rightsquigarrow', | ||
674 | + r'\downharpoonleft', | ||
675 | + r'\longmapsto', | ||
676 | + r'\Rrightarrow', | ||
677 | + r'\downharpoonright', | ||
678 | + r'\longrightarrow', | ||
679 | + r'\Rsh', | ||
680 | + r'\gets', | ||
681 | + r'\Longrightarrow', | ||
682 | + r'\searrow', | ||
683 | + r'\Harr', | ||
684 | + r'\looparrowleft', | ||
685 | + r'\swarrow', | ||
686 | + r'\hArr', | ||
687 | + r'\looparrowright', | ||
688 | + r'\to', | ||
689 | + r'\harr', | ||
690 | + r'\Lrarr', | ||
691 | + r'\twoheadleftarrow', | ||
692 | + r'\hookleftarrow', | ||
693 | + r'\lrArr', | ||
694 | + r'\twoheadrightarrow', | ||
695 | + r'\hookrightarrow', | ||
696 | + r'\lrarr', | ||
697 | + r'\Uarr', | ||
698 | + r'\iff', | ||
699 | + r'\Lsh', | ||
700 | + r'\uArr', | ||
701 | + r'\impliedby', | ||
702 | + r'\mapsto', | ||
703 | + r'\uarr', | ||
704 | + r'\implies', | ||
705 | + r'\nearrow', | ||
706 | + r'\uparrow', | ||
707 | + r'\Larr', | ||
708 | + r'\nleftarrow', | ||
709 | + r'\Uparrow', | ||
710 | + r'\lArr', | ||
711 | + r'\nLeftarrow', | ||
712 | + r'\updownarrow', | ||
713 | + r'\larr', | ||
714 | + r'\nleftrightarrow', | ||
715 | + r'\Updownarrow', | ||
716 | + r'\leadsto', | ||
717 | + r'\nLeftrightarrow', | ||
718 | + r'\upharpoonleft', | ||
719 | + r'\leftarrow', | ||
720 | + r'\nrightarrow', | ||
721 | + r'\upharpoonright', | ||
722 | + r'\Leftarrow', | ||
723 | + r'\nRightarrow', | ||
724 | + r'\upuparrows', | ||
725 | + r'\leftarrowtail', | ||
726 | + r'\nwarrow', | ||
727 | + r'\leftharpoondown', | ||
728 | + r'\Rarr', | ||
729 | + ], | ||
730 | + 'Extensible Arrows': [ | ||
731 | + r'\xleftarrow{abc}', | ||
732 | + r'\xrightarrow[under]{over}', | ||
733 | + r'\xLeftarrow{abc}', | ||
734 | + r'\xRightarrow{abc}', | ||
735 | + r'\xleftrightarrow{abc}', | ||
736 | + r'\xLeftrightarrow{abc}', | ||
737 | + r'\xhookleftarrow{abc}', | ||
738 | + r'\xhookrightarrow{abc}', | ||
739 | + r'\xtwoheadleftarrow{abc}', | ||
740 | + r'\xtwoheadrightarrow{abc}', | ||
741 | + r'\xleftharpoonup{abc}', | ||
742 | + r'\xrightharpoonup{abc}', | ||
743 | + r'\xleftharpoondown{abc}', | ||
744 | + r'\xrightharpoondown{abc}', | ||
745 | + r'\xleftrightharpoons{abc}', | ||
746 | + r'\xrightleftharpoons{abc}', | ||
747 | + r'\xtofrom{abc}', | ||
748 | + r'\xmapsto{abc}', | ||
749 | + r'\xlongequal{abc}', | ||
750 | + ], | ||
751 | + 'Special Notation': [ | ||
752 | + r'\bra{\phi}', | ||
753 | + r'\ket{\psi}', | ||
754 | + r'\braket{\phi\vert\psi}', | ||
755 | + r'\Bra{\phi}', | ||
756 | + r'\Ket{\psi}', | ||
757 | + ], | ||
758 | + | ||
759 | + // Class Assignment | ||
760 | + | ||
761 | + 'Color': [ | ||
762 | + r'\color{blue} F=ma', | ||
763 | + r'\textcolor{blue}{F=ma}', | ||
764 | + r'\textcolor{#228B22}{F=ma}', | ||
765 | + r'\colorbox{aqua}{A}', | ||
766 | + r'\fcolorbox{red}{aqua}{A}', | ||
767 | + ], | ||
768 | + 'Font': [ | ||
769 | + r'\mathrm{Ab0}', | ||
770 | + r'\mathbf{Ab0}', | ||
771 | + r'\mathit{Ab0}', | ||
772 | + // r'\mathnormal{Ab0}', | ||
773 | + r'\textbf{Ab0}', | ||
774 | + r'\textit{Ab0}', | ||
775 | + r'\textrm{Ab0}', | ||
776 | + r'\bf Ab0', | ||
777 | + r'\it Ab0', | ||
778 | + r'\rm Ab0', | ||
779 | + r'\bold{Ab0}', | ||
780 | + r'\textup{Ab0}', | ||
781 | + r'\textnormal{Ab0}', | ||
782 | + r'\boldsymbol{Ab0}', | ||
783 | + r'\Bbb{AB}', | ||
784 | + r'\text{Ab0}', | ||
785 | + r'\bm{Ab0}', | ||
786 | + r'\mathbb{AB}', | ||
787 | + r'\mathsf{Ab0}', | ||
788 | + r'\textmd{Ab0}', | ||
789 | + r'\frak{Ab0}', | ||
790 | + r'\textsf{Ab0}', | ||
791 | + r'\mathtt{Ab0}', | ||
792 | + r'\mathfrak{Ab0}', | ||
793 | + r'\sf Ab0', | ||
794 | + r'\texttt{Ab0}', | ||
795 | + r'\mathcal{AB0}', | ||
796 | + r'\tt Ab0', | ||
797 | + r'\cal AB0', | ||
798 | + r'\mathscr{AB}', | ||
799 | + ], | ||
800 | + 'Size': [ | ||
801 | + r'\Huge AB', | ||
802 | + r'\normalsize AB', | ||
803 | + r'\huge AB', | ||
804 | + r'\small AB', | ||
805 | + r'\LARGE AB', | ||
806 | + r'\footnotesize AB', | ||
807 | + r'\Large AB', | ||
808 | + r'\scriptsize AB', | ||
809 | + r'\large AB', | ||
810 | + r'\tiny AB', | ||
811 | + ], | ||
812 | + | ||
813 | + 'Style': [ | ||
814 | + r'\displaystyle\sum_{i=1}^n', | ||
815 | + r'\textstyle\sum_{i=1}^n', | ||
816 | + r'\scriptstyle x', | ||
817 | + r'\scriptscriptstyle x', | ||
818 | + r'\lim\limits_x', | ||
819 | + r'\lim\nolimits_x', | ||
820 | + r'\verb!x^2!', | ||
821 | + ], | ||
822 | + | ||
823 | + '': [ | ||
824 | + r'\dots', | ||
825 | + r'\KaTeX', | ||
826 | + r'\%', | ||
827 | + r'\cdots', | ||
828 | + r'\LaTeX', | ||
829 | + r'\#', | ||
830 | + r'\ddots', | ||
831 | + r'\TeX', | ||
832 | + r'\&', | ||
833 | + r'\ldots', | ||
834 | + r'\nabla', | ||
835 | + r'\_', | ||
836 | + r'\vdots', | ||
837 | + r'\infty', | ||
838 | + r'\text{\textunderscore}', | ||
839 | + r'\dotsb', | ||
840 | + r'\infin', | ||
841 | + r'\text{--}', | ||
842 | + r'\dotsc', | ||
843 | + r'\checkmark', | ||
844 | + r'\text{\textendash}', | ||
845 | + r'\dotsi', | ||
846 | + r'\dag', | ||
847 | + r'\text{---}', | ||
848 | + r'\dotsm', | ||
849 | + r'\dagger', | ||
850 | + r'\text{\textemdash}', | ||
851 | + r'\dotso', | ||
852 | + r'\text{\textdagger}', | ||
853 | + r'\text{\textasciitilde}', | ||
854 | + r'\sdot', | ||
855 | + r'\ddag', | ||
856 | + r'\text{\textasciicircum}', | ||
857 | + r'\mathellipsis', | ||
858 | + r'\ddagger', | ||
859 | + r'`', | ||
860 | + r'\text{\textellipsis}', | ||
861 | + r'\text{\textdaggerdbl}', | ||
862 | + r'\text{\textquoteleft}', | ||
863 | + r'\Box', | ||
864 | + r'\Dagger', | ||
865 | + r'\lq', | ||
866 | + r'\square', | ||
867 | + r'\angle', | ||
868 | + r'\text{\textquoteright}', | ||
869 | + r'\blacksquare', | ||
870 | + r'\measuredangle', | ||
871 | + r'\rq', | ||
872 | + r'\triangle', | ||
873 | + r'\sphericalangle', | ||
874 | + r'\text{\textquotedblleft}', | ||
875 | + r'\triangledown', | ||
876 | + r'\top', | ||
877 | + r'"', | ||
878 | + r'\triangleleft', | ||
879 | + r'\bot', | ||
880 | + r'\text{\textquotedblright}', | ||
881 | + r'\triangleright', | ||
882 | + r'\$', | ||
883 | + r'\colon', | ||
884 | + r'\bigtriangledown', | ||
885 | + r'\text{\textdollar}', | ||
886 | + r'\backprime', | ||
887 | + r'\bigtriangleup', | ||
888 | + r'\pounds', | ||
889 | + r'\prime', | ||
890 | + r'\blacktriangle', | ||
891 | + r'\mathsterling', | ||
892 | + r'\text{\textless}', | ||
893 | + r'\blacktriangledown', | ||
894 | + r'\text{\textsterling}', | ||
895 | + r'\text{\textgreater}', | ||
896 | + r'\blacktriangleleft', | ||
897 | + r'\yen', | ||
898 | + r'\text{\textbar}', | ||
899 | + r'\blacktriangleright', | ||
900 | + r'\surd', | ||
901 | + r'\text{\textbardbl}', | ||
902 | + r'\diamond', | ||
903 | + r'\degree', | ||
904 | + r'\text{\textbraceleft}', | ||
905 | + r'\Diamond', | ||
906 | + r'\text{\textdegree}', | ||
907 | + r'\text{\textbraceright}', | ||
908 | + r'\lozenge', | ||
909 | + r'\mho', | ||
910 | + r'\text{\textbackslash}', | ||
911 | + r'\blacklozenge', | ||
912 | + r'\diagdown', | ||
913 | + r'\text{\P}', | ||
914 | + r'\star', | ||
915 | + r'\diagup', | ||
916 | + r'\text{\S}', | ||
917 | + r'\bigstar', | ||
918 | + r'\flat', | ||
919 | + r'\text{\sect}', | ||
920 | + r'\clubsuit', | ||
921 | + r'\natural', | ||
922 | + // r'\copyright', | ||
923 | + r'\clubs', | ||
924 | + r'\sharp', | ||
925 | + r'\circledR', | ||
926 | + r'\diamondsuit', | ||
927 | + r'\heartsuit', | ||
928 | + // r'\text{\textregistered}', | ||
929 | + r'\diamonds', | ||
930 | + r'\hearts', | ||
931 | + r'\circledS', | ||
932 | + r'\spadesuit', | ||
933 | + r'\spades', | ||
934 | + // r'\text{\textcircled a}', | ||
935 | + r'\maltese', | ||
936 | + ], | ||
937 | + 'Units': [ | ||
938 | + r'\rule{1em}{1em}', | ||
939 | + r'\scriptscriptstyle\rule{1em}{1em}', | ||
940 | + r'\huge\rule{1em}{1em}', | ||
941 | + r'\rule{18mu}{18mu}', | ||
942 | + r'\scriptscriptstyle\rule{18mu}{18mu}', | ||
943 | + r'\huge\rule{18mu}{18mu}', | ||
944 | + r'\rule{10pt}{10pt}', | ||
945 | + r'\scriptscriptstyle\rule{10pt}{10pt}', | ||
946 | + r'\huge\rule{10pt}{10pt}', | ||
947 | + ] | ||
948 | +}; |
example/pubspec.yaml
0 → 100644
1 | +name: flutter_math_fork_example | ||
2 | +description: A Flutter Package (Demo) to render LaTeX with pure Flutter. | ||
3 | + | ||
4 | +# The following line prevents the package from being accidentally published to | ||
5 | +# pub.dev using `pub publish`. This is preferred for private packages. | ||
6 | +publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ||
7 | +version: 1.0.0+1 | ||
8 | + | ||
9 | +environment: | ||
10 | + sdk: ">=2.12.0 <3.0.0" | ||
11 | + | ||
12 | +dependencies: | ||
13 | + flutter: | ||
14 | + sdk: flutter | ||
15 | + | ||
16 | + flutter_math_fork: | ||
17 | + path: ../ | ||
18 | + | ||
19 | + provider: any | ||
20 | + flutter_tex: ^4.0.3+4 | ||
21 | + google_fonts: ^4.0.4 | ||
22 | + | ||
23 | +dev_dependencies: | ||
24 | + flutter_test: | ||
25 | + sdk: flutter | ||
26 | + | ||
27 | +flutter: | ||
28 | + uses-material-design: true |
example/test/widget_test.dart
0 → 100644
1 | +void main() {} |
example/web/favicon.png
0 → 100644

917 Bytes
example/web/icons/Icon-192.png
0 → 100644

5.17 KB
example/web/icons/Icon-512.png
0 → 100644

8.06 KB
example/web/index.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html> | ||
3 | +<head> | ||
4 | + <meta charset="UTF-8"> | ||
5 | + <meta content="IE=Edge" http-equiv="X-UA-Compatible"> | ||
6 | + <meta name="description" content="A new Flutter project."> | ||
7 | + | ||
8 | + <!-- iOS meta tags & icons --> | ||
9 | + <meta name="apple-mobile-web-app-capable" content="yes"> | ||
10 | + <meta name="apple-mobile-web-app-status-bar-style" content="black"> | ||
11 | + <meta name="apple-mobile-web-app-title" content="example"> | ||
12 | + <link rel="apple-touch-icon" href="icons/Icon-192.png"> | ||
13 | + | ||
14 | + <!-- Favicon --> | ||
15 | + <link rel="shortcut icon" type="image/png" href="favicon.png"/> | ||
16 | + | ||
17 | + <title>Flutter Math Demo</title> | ||
18 | + <script src="assets/packages/flutter_tex/js/flutter_tex.js"></script> | ||
19 | + <link rel="manifest" href="manifest.json"> | ||
20 | +</head> | ||
21 | +<body> | ||
22 | + <!-- This script installs service_worker.js to provide PWA functionality to | ||
23 | + application. For more information, see: | ||
24 | + https://developers.google.com/web/fundamentals/primers/service-workers --> | ||
25 | + <script> | ||
26 | + if ('serviceWorker' in navigator) { | ||
27 | + window.addEventListener('load', function () { | ||
28 | + navigator.serviceWorker.register('flutter_service_worker.js'); | ||
29 | + }); | ||
30 | + } | ||
31 | + </script> | ||
32 | + <script src="main.dart.js" type="application/javascript"></script> | ||
33 | +</body> | ||
34 | +</html> |
example/web/manifest.json
0 → 100644
1 | +{ | ||
2 | + "name": "example", | ||
3 | + "short_name": "example", | ||
4 | + "start_url": ".", | ||
5 | + "display": "standalone", | ||
6 | + "background_color": "#0175C2", | ||
7 | + "theme_color": "#0175C2", | ||
8 | + "description": "A new Flutter project.", | ||
9 | + "orientation": "portrait-primary", | ||
10 | + "prefer_related_applications": false, | ||
11 | + "icons": [ | ||
12 | + { | ||
13 | + "src": "icons/Icon-192.png", | ||
14 | + "sizes": "192x192", | ||
15 | + "type": "image/png" | ||
16 | + }, | ||
17 | + { | ||
18 | + "src": "icons/Icon-512.png", | ||
19 | + "sizes": "512x512", | ||
20 | + "type": "image/png" | ||
21 | + } | ||
22 | + ] | ||
23 | +} |
lib/ast.dart
0 → 100644
1 | +/// Utilities to manipulate Flutter Math's ASTs | ||
2 | +/// | ||
3 | +/// See also: | ||
4 | +/// | ||
5 | +/// * [GreenNode] | ||
6 | +/// * [SyntaxNode] | ||
7 | +/// * [SyntaxTree] | ||
8 | +library ast; | ||
9 | + | ||
10 | +import 'src/ast/syntax_tree.dart'; | ||
11 | + | ||
12 | +export 'src/ast/nodes/accent.dart'; | ||
13 | +export 'src/ast/nodes/accent_under.dart'; | ||
14 | +export 'src/ast/nodes/enclosure.dart' show EnclosureNode; | ||
15 | +export 'src/ast/nodes/equation_array.dart'; | ||
16 | +export 'src/ast/nodes/frac.dart' show FracNode; | ||
17 | +export 'src/ast/nodes/function.dart'; | ||
18 | +export 'src/ast/nodes/left_right.dart' show LeftRightNode; | ||
19 | +export 'src/ast/nodes/matrix.dart'; | ||
20 | +export 'src/ast/nodes/multiscripts.dart'; | ||
21 | +export 'src/ast/nodes/nary_op.dart'; | ||
22 | +export 'src/ast/nodes/over.dart'; | ||
23 | +export 'src/ast/nodes/phantom.dart'; | ||
24 | +export 'src/ast/nodes/raise_box.dart'; | ||
25 | +export 'src/ast/nodes/space.dart'; | ||
26 | +export 'src/ast/nodes/sqrt.dart' show SqrtNode; | ||
27 | +export 'src/ast/nodes/stretchy_op.dart' show StretchyOpNode; | ||
28 | +export 'src/ast/nodes/style.dart'; | ||
29 | +export 'src/ast/nodes/symbol.dart' show SymbolNode; | ||
30 | +export 'src/ast/nodes/under.dart'; | ||
31 | +export 'src/ast/options.dart'; | ||
32 | +export 'src/ast/size.dart'; | ||
33 | +export 'src/ast/style.dart'; | ||
34 | +export 'src/ast/syntax_tree.dart' | ||
35 | + hide TemporaryNode, BuildResult, PositionDependentMixin; | ||
36 | +export 'src/ast/tex_break.dart' hide BreakResult; | ||
37 | +export 'src/ast/types.dart'; |
lib/flutter_math.dart
0 → 100644
1 | +/// Basic utilities to render math equations. | ||
2 | +/// | ||
3 | +/// Please refer to README for usage. | ||
4 | +library flutter_math_fork; | ||
5 | + | ||
6 | +export 'src/ast/options.dart' show MathOptions, FontOptions; | ||
7 | +export 'src/ast/size.dart' show MathSize; | ||
8 | +export 'src/ast/style.dart' show MathStyle; | ||
9 | +export 'src/encoder/exception.dart'; | ||
10 | +export 'src/parser/tex/parse_error.dart'; | ||
11 | +export 'src/parser/tex/settings.dart'; | ||
12 | +export 'src/widgets/exception.dart'; | ||
13 | +export 'src/widgets/math.dart'; | ||
14 | +export 'src/widgets/selectable.dart' show SelectableMath; |
lib/katex_fonts/LICENSE
0 → 100644
1 | +The MIT License (MIT) | ||
2 | + | ||
3 | +Copyright (c) 2018 Khan Academy | ||
4 | + | ||
5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | ||
6 | +of this software and associated documentation files (the "Software"), to deal | ||
7 | +in the Software without restriction, including without limitation the rights | ||
8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
9 | +copies of the Software, and to permit persons to whom the Software is | ||
10 | +furnished to do so, subject to the following conditions: | ||
11 | + | ||
12 | +The above copyright notice and this permission notice shall be included in all | ||
13 | +copies or substantial portions of the Software. | ||
14 | + | ||
15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
21 | +SOFTWARE. |
lib/katex_fonts/fonts/KaTeX_AMS-Regular.ttf
0 → 100644
No preview for this file type
No preview for this file type
No preview for this file type
lib/katex_fonts/fonts/KaTeX_Fraktur-Bold.ttf
0 → 100644
No preview for this file type
No preview for this file type
lib/katex_fonts/fonts/KaTeX_Main-Bold.ttf
0 → 100644
No preview for this file type
No preview for this file type
lib/katex_fonts/fonts/KaTeX_Main-Italic.ttf
0 → 100644
No preview for this file type
lib/katex_fonts/fonts/KaTeX_Main-Regular.ttf
0 → 100644
No preview for this file type
No preview for this file type
lib/katex_fonts/fonts/KaTeX_Math-Italic.ttf
0 → 100644
No preview for this file type
-
Please register or login to post a comment