2026-01-21 07:49:56 +00:00
|
|
|
import 'dart:async';
|
2025-09-20 14:46:21 +00:00
|
|
|
import 'dart:convert' show utf8;
|
2026-01-21 07:49:56 +00:00
|
|
|
import 'package:flutter/services.dart' show rootBundle;
|
2025-09-20 14:46:21 +00:00
|
|
|
|
|
|
|
|
import 'package:resource_portable/resource_portable.dart' show Resource;
|
|
|
|
|
|
|
|
|
|
import '../corpus.dart';
|
|
|
|
|
import '../formula_models.dart';
|
|
|
|
|
|
2026-01-21 07:49:56 +00:00
|
|
|
|
2025-09-20 14:46:21 +00:00
|
|
|
Future<Corpus> createDefaultCorpus() async{
|
|
|
|
|
final corpus = Corpus();
|
|
|
|
|
|
2026-01-21 07:49:56 +00:00
|
|
|
Future<String> loadResourceAsString(String path) async {
|
|
|
|
|
return await rootBundle.loadString(path, cache: false);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2025-09-20 14:46:21 +00:00
|
|
|
Future<void> loadUnits() async {
|
|
|
|
|
final unitResources = [
|
2026-02-17 16:35:51 +00:00
|
|
|
"assets/units/amount.d4rt.units",
|
2026-01-21 07:49:56 +00:00
|
|
|
"assets/units/angle.d4rt.units",
|
|
|
|
|
"assets/units/area.d4rt.units",
|
2026-02-17 16:35:51 +00:00
|
|
|
"assets/units/charge.d4rt.units",
|
2026-01-31 18:53:12 +00:00
|
|
|
"assets/units/currency.d4rt.units",
|
2026-02-17 16:35:51 +00:00
|
|
|
"assets/units/derived.d4rt.units",
|
2026-01-21 07:49:56 +00:00
|
|
|
"assets/units/distance.d4rt.units",
|
2026-02-07 11:52:55 +00:00
|
|
|
"assets/units/elasticity.d4rt.units",
|
|
|
|
|
"assets/units/electricity.d4rt.units",
|
2026-01-21 07:49:56 +00:00
|
|
|
"assets/units/energy.d4rt.units",
|
2026-02-07 11:52:55 +00:00
|
|
|
"assets/units/frequency.d4rt.units",
|
2026-01-21 07:49:56 +00:00
|
|
|
"assets/units/force.d4rt.units",
|
|
|
|
|
"assets/units/mass.d4rt.units",
|
2026-02-17 16:35:51 +00:00
|
|
|
"assets/units/power.d4rt.units",
|
2026-01-21 07:49:56 +00:00
|
|
|
"assets/units/pressure.d4rt.units",
|
|
|
|
|
"assets/units/scalar.d4rt.units",
|
|
|
|
|
"assets/units/temperature.d4rt.units",
|
|
|
|
|
"assets/units/time.d4rt.units",
|
|
|
|
|
"assets/units/velocity.d4rt.units",
|
2026-02-17 16:35:51 +00:00
|
|
|
"assets/units/volume.d4rt.units",
|
2025-09-20 14:46:21 +00:00
|
|
|
];
|
|
|
|
|
|
|
|
|
|
for (final unitRes in unitResources) {
|
2026-01-31 18:53:12 +00:00
|
|
|
print( "Loading units from $unitRes");
|
2026-01-21 07:49:56 +00:00
|
|
|
final literal = await loadResourceAsString(unitRes);
|
2025-09-20 14:46:21 +00:00
|
|
|
final units = UnitSpec.fromArrayStringLiteral(literal);
|
2026-02-11 08:07:13 +00:00
|
|
|
final formulaElements = units.cast<FormulaElement>();
|
|
|
|
|
corpus.loadFormulaElements(formulaElements);
|
2025-09-20 14:46:21 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> loadFormulas() async {
|
2026-02-23 19:02:13 +00:00
|
|
|
final formulaResources = [
|
|
|
|
|
"assets/formulas/formulas.d4rt",
|
2026-02-24 19:28:01 +00:00
|
|
|
"assets/formulas/conversions_and_constants.d4rt",
|
2026-02-23 19:02:13 +00:00
|
|
|
"assets/formulas/electromagnetism.d4rt",
|
2026-02-24 19:28:01 +00:00
|
|
|
"assets/formulas/energy_and_power.d4rt",
|
2026-02-23 19:02:13 +00:00
|
|
|
"assets/formulas/fluids_and_pressure.d4rt",
|
2026-02-24 19:28:01 +00:00
|
|
|
"assets/formulas/geometry.d4rt",
|
|
|
|
|
"assets/formulas/gravity.d4rt",
|
|
|
|
|
"assets/formulas/it-networking.d4rt",
|
|
|
|
|
"assets/formulas/kinematics_and_dynamics.d4rt",
|
|
|
|
|
"assets/formulas/materials_elasticity.d4rt",
|
|
|
|
|
"assets/formulas/medical_and_bio.d4rt",
|
|
|
|
|
"assets/formulas/misc_math.d4rt",
|
|
|
|
|
"assets/formulas/optics.d4rt",
|
|
|
|
|
"assets/formulas/thermodynamics.d4rt",
|
|
|
|
|
"assets/formulas/trigonometry.d4rt",
|
2026-02-23 19:02:13 +00:00
|
|
|
];
|
2025-09-20 14:46:21 +00:00
|
|
|
|
|
|
|
|
for (final formRes in formulaResources) {
|
2026-02-18 10:25:14 +00:00
|
|
|
print( "Loading formulas from $formRes ...");
|
2026-01-21 07:49:56 +00:00
|
|
|
final literal = await loadResourceAsString(formRes);
|
2026-02-18 10:25:14 +00:00
|
|
|
print( "Loaded $formRes");
|
2025-09-20 14:46:21 +00:00
|
|
|
final formulas = Formula.fromArrayStringLiteral(literal);
|
2026-02-24 19:28:01 +00:00
|
|
|
print( "Parsed $formRes");
|
2026-02-11 08:07:13 +00:00
|
|
|
final formulaElements = formulas.cast<FormulaElement>();
|
|
|
|
|
corpus.loadFormulaElements(formulaElements);
|
2025-09-20 14:46:21 +00:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
await loadUnits();
|
|
|
|
|
await loadFormulas();
|
|
|
|
|
|
|
|
|
|
return corpus;
|
|
|
|
|
}
|