data structure for augment capabilities
This commit is contained in:
parent
dda581bda0
commit
07091eb708
@ -1,6 +1,7 @@
|
|||||||
//data structures
|
//data structures
|
||||||
|
|
||||||
import 'dart:typed_data';
|
import 'dart:typed_data';
|
||||||
|
import 'package:markdown/markdown.dart' as md;
|
||||||
|
|
||||||
class GetThreadResponse {
|
class GetThreadResponse {
|
||||||
final int id;
|
final int id;
|
||||||
@ -157,6 +158,94 @@ class AugmentTree {
|
|||||||
AugmentTree? parent;
|
AugmentTree? parent;
|
||||||
String ogTag = '';
|
String ogTag = '';
|
||||||
String numbering = '';
|
String numbering = '';
|
||||||
|
Map<String, int> hirarchyDict = {
|
||||||
|
"h1": 1,
|
||||||
|
"h2": 2,
|
||||||
|
"h3": 3,
|
||||||
|
"h4": 4,
|
||||||
|
"h5": 5,
|
||||||
|
"h6": 6,
|
||||||
|
"p": 8,
|
||||||
|
"ul": 8,
|
||||||
|
"li": 8,
|
||||||
|
};
|
||||||
|
|
||||||
|
AugmentTree();
|
||||||
|
|
||||||
|
AugmentTree.fromMD(String rawMD) {
|
||||||
|
//makes raw MD into an augmentTree
|
||||||
|
print("started markdown2tree");
|
||||||
|
final List<md.Node> nakedList = md.Document().parseLines(rawMD.split(
|
||||||
|
'\n')); //emails md is the index of the email in the thread, since this only handles one thus it shall be removed
|
||||||
|
// AugmentTree zoomTreeRoot = AugmentTree();
|
||||||
|
for (var node in nakedList) {
|
||||||
|
//maybe do an add function, but isn't this it?
|
||||||
|
if (node is md.Element) {
|
||||||
|
AugmentTree temp = AugmentTree();
|
||||||
|
temp.data = node.textContent;
|
||||||
|
temp.ogTag = node.tag;
|
||||||
|
if (hirarchyDict.containsKey(node.tag)) {
|
||||||
|
// make this O(1)
|
||||||
|
_add2Tree(this, node);
|
||||||
|
// print(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.addNumbering();
|
||||||
|
}
|
||||||
|
|
||||||
|
void _add2Tree(AugmentTree tree, md.Element node2add) {
|
||||||
|
// adds node to its corresponding place
|
||||||
|
AugmentTree newNode = AugmentTree();
|
||||||
|
newNode.setData(node2add.textContent);
|
||||||
|
newNode.ogTag = node2add.tag;
|
||||||
|
// cases,
|
||||||
|
//1. a node that comes is lower than the root.children last, if so it goes beneath it
|
||||||
|
if (tree.children.isEmpty) {
|
||||||
|
// new level to be created when totally empty
|
||||||
|
tree.children.add(newNode);
|
||||||
|
newNode.parent = tree;
|
||||||
|
} else if (tree.children.isNotEmpty &&
|
||||||
|
tree.children.last.ogTag.isNotEmpty) {
|
||||||
|
if ((hirarchyDict[node2add.tag] ??
|
||||||
|
-1) < // e.g. new node is h1 and old is h2, heapify
|
||||||
|
(hirarchyDict[tree.children.last.ogTag] ?? -1)) {
|
||||||
|
//have to figure out the borthers
|
||||||
|
//assuming it all goes right
|
||||||
|
if ((hirarchyDict[node2add.tag] ?? -1) == -1 ||
|
||||||
|
(hirarchyDict[tree.children.last.ogTag] ?? -1) == -1) {
|
||||||
|
print(
|
||||||
|
'failed and got -1 at _add2Tree \n ${hirarchyDict[node2add.tag] ?? -1} < ${hirarchyDict[tree.children.last.ogTag] ?? -1}');
|
||||||
|
return;
|
||||||
|
} else if (tree.children.last.parent == null) {
|
||||||
|
// becomes the new top level
|
||||||
|
for (AugmentTree brother in tree.children) {
|
||||||
|
brother.parent = newNode;
|
||||||
|
}
|
||||||
|
tree.children = [newNode];
|
||||||
|
} else {
|
||||||
|
newNode.parent = tree;
|
||||||
|
tree.children.add(newNode);
|
||||||
|
}
|
||||||
|
} else if ((hirarchyDict[node2add.tag] ??
|
||||||
|
-1) > // go down e.g. new node is h3 and old is h2 or something
|
||||||
|
(hirarchyDict[tree.children.last.ogTag] ?? -1)) {
|
||||||
|
if ((hirarchyDict[node2add.tag] ?? -1) == -1 ||
|
||||||
|
(hirarchyDict[tree.children.last.ogTag] ?? -1) == -1) {
|
||||||
|
print(
|
||||||
|
'failed and got -1 at _add2Tree \n ${hirarchyDict[node2add.tag] ?? -1} > ${hirarchyDict[tree.children.last.ogTag] ?? -1}');
|
||||||
|
print("-1 ${tree.children.last.ogTag}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
_add2Tree(tree.children.last, node2add);
|
||||||
|
} else if ((hirarchyDict[node2add.tag] ?? -1) ==
|
||||||
|
(hirarchyDict[tree.children.last.ogTag] ?? -1)) {
|
||||||
|
tree.children.add(newNode);
|
||||||
|
newNode.parent = tree;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void setData(String data) {
|
void setData(String data) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
@ -197,14 +286,19 @@ class AugmentTree {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//perhaps make a struct that builds augment tree, since its so complex and needs to be like recursive
|
||||||
|
|
||||||
class MarkdownParsed{
|
class MarkdownParsed {
|
||||||
|
//struct for holding the MD given in endpoint //not used
|
||||||
final String text;
|
final String text;
|
||||||
MarkdownParsed({required this.text});
|
MarkdownParsed({required this.text});
|
||||||
factory MarkdownParsed.fromJson(Map<String, String> json){
|
factory MarkdownParsed.fromJson(Map<String, String> json) {
|
||||||
return MarkdownParsed(
|
return MarkdownParsed(
|
||||||
text: json['md'] ?? '',
|
text: json['md'] ?? '',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//should make an md to tree class/struct
|
||||||
|
|
||||||
|
// make a for loop of rows with markdown
|
||||||
|
Loading…
Reference in New Issue
Block a user