Re-link if (#1150)

This commit is contained in:
Robin Avery 2024-01-29 00:55:55 -05:00 committed by GitHub
parent 93f8a85257
commit c779ee6512
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
19 changed files with 5089 additions and 4272 deletions

File diff suppressed because it is too large Load Diff

3248
asm/melee/if/ifstatus.s Normal file

File diff suppressed because it is too large Load Diff

View File

@ -138,8 +138,8 @@ ifStatus_804D57C0:
.section .bss, "wa"
.balign 8
.global ifStatus_804A10C8
ifStatus_804A10C8:
.global ifStatus_HudInfo
ifStatus_HudInfo:
.skip 0x278

View File

@ -3298,16 +3298,14 @@ melee/if/iftime.c:
.sdata start:0x804D5788 end:0x804D57A8
.sdata2 start:0x804DDA38 end:0x804DDA48
melee/if/ifstatus_data.c:
melee/if/ifstatus.c:
.text start:0x802F4910 end:0x802F7288
.data start:0x803F9598 end:0x803F9780
.bss start:0x804A10C8 end:0x804A1340
.sdata start:0x804D57A8 end:0x804D57C8
.sbss start:0x804D6D60 end:0x804D7058
.sbss start:0x804D6D60 end:0x804D6D68
.sdata2 start:0x804DDA48 end:0x804DDAB0
melee/if/ifstatus.c:
.text start:0x802F4910 end:0x802F7288
melee/if/if_2F72.c:
.text start:0x802F7288 end:0x802F7EFC
.data start:0x803F9780 end:0x803F97A8

View File

@ -25066,7 +25066,7 @@ it_804A0E70 = .bss:0x804A0E70; // type:object size:0xF0 scope:global
it_804A0F60 = .bss:0x804A0F60; // type:object size:0x78 scope:global
ifAll_804A0FD8 = .bss:0x804A0FD8; // type:object size:0xA0 scope:global data:4byte
ifTime_804A1078 = .bss:0x804A1078; // type:object size:0x50 scope:global data:4byte
ifStatus_804A10C8 = .bss:0x804A10C8; // type:object size:0x278 scope:global data:4byte
ifStatus_HudInfo = .bss:0x804A10C8; // type:object size:0x278 scope:global data:4byte
lbl_804A1340 = .bss:0x804A1340; // type:object size:0x38 data:4byte
ifStock_804A1378 = .bss:0x804A1378; // type:object size:0x3FC scope:global data:4byte
ifStock_804A1774 = .bss:0x804A1774; // type:object size:0x318 scope:global data:byte

View File

@ -1052,11 +1052,10 @@ config.libs = [
[
Object(NonMatching, "melee/if/ifall.c"),
Object(NonMatching, "melee/if/iftime.c"),
Object(NonMatching, "melee/if/ifstatus_data.c"),
Object(Unknown, "melee/if/ifstatus.c"),
Object(NonMatching, "melee/if/ifstatus.c"),
Object(NonMatching, "melee/if/if_2F72.c"),
Object(NonMatching, "melee/if/ifstock.c"),
Object(Unknown, "melee/if/ifmagnify.c"),
Object(NonMatching, "melee/if/ifmagnify.c"),
],
),
MeleeLib(

View File

@ -768,11 +768,9 @@ TEXT_O_FILES +=\
TEXT_O_FILES +=\
$(BUILD_DIR)/asm/melee/if/ifall.s.o\
$(BUILD_DIR)/asm/melee/if/iftime.s.o\
$(BUILD_DIR)/asm/melee/if/ifstatus_data.s.o\
$(BUILD_DIR)/src/melee/if/ifstatus.c.o\
$(BUILD_DIR)/asm/melee/if/ifstatus.s.o\
$(BUILD_DIR)/asm/melee/if/if_2F72.s.o\
$(BUILD_DIR)/asm/melee/if/ifstock.s.o\
$(BUILD_DIR)/src/melee/if/ifmagnify.c.o\
$(BUILD_DIR)/asm/melee/if/ifmagnify.s.o\
TEXT_O_FILES +=\

View File

@ -1,8 +1,11 @@
#ifndef MELEE_GM_FORWARD_H
#define MELEE_GM_FORWARD_H
#include <placeholder.h>
typedef struct datetime datetime;
typedef struct GameRules GameRules;
typedef struct Placeholder_8016AE38_flags Placeholder_8016AE38_flags;
typedef struct Placeholder_8016AE38_flags_2 Placeholder_8016AE38_flags_2;
typedef struct Placeholder_8016AE38_ret_val Placeholder_8016AE38_ret_val;
typedef struct Placeholder_8016AE50_ret_val Placeholder_8016AE50_ret_val;
#endif

View File

@ -2,14 +2,10 @@
#define GALE01_1601C4
#include <platform.h>
#include "gm/forward.h"
#include <placeholder.h>
struct datetime {
u16 year;
u8 month, day, hour, minute, second;
};
/* 160854 */ void gm_80160854(void);
/* 160968 */ bool gm_80160968(void);
/* 164600 */ bool gm_80164600(void);
@ -17,8 +13,10 @@ struct datetime {
/* 164ABC */ bool gm_80164ABC(void);
/* 167320 */ void gm_80167320(int slot, bool);
/* 168B34 */ void gm_80168B34(void);
/* 1692E8 */ void gm_801692E8(int, struct datetime* datetime);
/* 1692E8 */ void gm_801692E8(int, datetime* datetime);
/* 16AE38 */ Placeholder_8016AE38_ret_val* gm_8016AE38(void);
/* 16AE44 */ bool gm_8016AE44(void);
/* 16AE50 */ Placeholder_8016AE50_ret_val* gm_8016AE50(void);
/* 16AE80 */ bool gm_8016AE80(void);
/* 16AEDC */ bool gm_8016AEDC(void);
/* 16B014 */ bool gm_8016B014(void);
@ -35,6 +33,7 @@ struct datetime {
/* 16B3D8 */ bool gm_8016B3D8(void);
/* 16B41C */ bool gm_8016B41C(void);
/* 16B498 */ void gm_8016B498(void);
/* 16B8D4 */ void gm_8016B8D4(s32, s32);
/* 16C5C0 */ bool gm_8016C5C0(int pl_slot);
/* 16C6C0 */ /* static */ UNK_RET gm_8016C6C0(UNK_PARAMS);
/* 16C75C */ /* static */ UNK_RET gm_8016C75C(UNK_PARAMS);

View File

@ -177,4 +177,39 @@ struct gmm_retval_EDB0 {
s32 x4;
};
struct Placeholder_8016AE38_flags {
u8 unk80 : 1;
u8 unk40 : 1;
u8 unk20 : 1;
u8 unk10 : 1;
u8 unk8 : 1;
u8 unk4 : 1;
u8 unk2 : 1;
u8 unk1 : 1;
};
struct Placeholder_8016AE38_flags_2 {
u8 top3 : 3;
u8 bot5 : 5;
};
struct Placeholder_8016AE38_ret_val {
u32 unk0;
u32 unk4;
u32 unk8;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u32 padding[0x931 - 3];
Placeholder_8016AE38_flags_2 unk24C8;
u8 unk24C9;
Placeholder_8016AE38_flags unk24CA;
};
struct datetime {
u16 year;
u8 month, day, hour, minute, second;
};
#endif

14
src/melee/if/forward.h Normal file
View File

@ -0,0 +1,14 @@
#ifndef MELEE_IF_FORWARD_H
#define MELEE_IF_FORWARD_H
typedef struct Element_803F9628 Element_803F9628;
typedef struct Element_803F9628_Obj_14 Element_803F9628_Obj_14;
typedef struct HudFlags HudFlags;
typedef struct HudIndex HudIndex;
typedef struct HudValue HudValue;
typedef struct ifMagnify ifMagnify;
typedef struct Placeholder_8016AE50_flags Placeholder_8016AE50_flags;
typedef struct Thing_803F9628 Thing_803F9628;
typedef struct UnknownClassTypeE UnknownClassTypeE;
#endif

13
src/melee/if/if_2F72.h Normal file
View File

@ -0,0 +1,13 @@
#ifndef GALE01_2F7288
#define GALE01_2F7288
#include <platform.h>
#include <placeholder.h>
/* 2F7AF8 */ void if_802F7AF8(s32);
/* 2F7BB4 */ void if_802F7BB4(s32);
/* 2F7C30 */ void if_802F7C30(s32);
/* 2F7D08 */ void if_802F7D08(s32);
#endif

View File

@ -1,10 +1,10 @@
#ifndef MELEE_IF_IFALL_H
#define MELEE_IF_IFALL_H
#ifndef GALE01_2F3394
#define GALE01_2F3394
#include <platform.h>
void ifAll_802F3424(void);
void ifAll_802F3690(void);
void ifAll_802F343C(void);
/* 2F3424 */ void ifAll_802F3424(void);
/* 2F343C */ void ifAll_802F343C(void);
/* 2F3690 */ void ifAll_802F3690(void);
#endif

View File

@ -1,39 +1,12 @@
#ifndef MELEE_IF_IFMAGNIFY_H
#define MELEE_IF_IFMAGNIFY_H
#ifndef GALE01_2FB6E8
#define GALE01_2FB6E8
#include <platform.h>
#include <baselib/forward.h>
#include <sysdolphin/baselib/gobj.h>
#include <sysdolphin/baselib/jobj.h>
#include <sysdolphin/baselib/tobj.h>
#include "if/types.h"
typedef struct ifMagnify {
HSD_Joint* joint; // // ifMagnify_802fc3c0 accesses 0x804A1DE0 for a Joint
int x4;
int x8;
int xC;
int x10;
struct {
HSD_GObj* gobj; // ifMagnify_802fc750 accesses 0x804A1DF4 + slot * 0x10
// for a GObj
HSD_TObj* tobj; // ifMagnify_802fc3c0 accesses 0x804A1DF8 + slot * 0x10
// for a TObj
HSD_ImageDesc*
idesc; // ifMagnify_802FBBDC access 0x804A1DFC for an ImageDesc
struct {
u8 is_offscreen : 1;
u8 ignore_offscreen : 1;
u8 unk : 6;
} state;
} player[6];
u8 unk[0xF0 - 0x74];
} ifMagnify;
extern ifMagnify ifMagnify_804A1DE0;
s32 ifMagnify_802FB6E8(s32);
bool ifMagnify_802FC998(s32 ply_slot);
/* 2FB6E8 */ s32 ifMagnify_802FB6E8(s32);
/* 2FC998 */ bool ifMagnify_802FC998(s32 ply_slot);
/* 4A1DE0 */ extern ifMagnify ifMagnify_804A1DE0;
#endif

File diff suppressed because it is too large Load Diff

View File

@ -1,241 +1,38 @@
#ifndef MELEE_IF_IFSTATUS_H
#define MELEE_IF_IFSTATUS_H
#ifndef GALE01_2F4910
#define GALE01_2F4910
#include <platform.h>
#include "if/forward.h"
#include <baselib/forward.h>
#include "pl/player.h"
#include <baselib/gobj.h>
#include <baselib/gobjgxlink.h>
#include <baselib/jobj.h>
#include <baselib/tobj.h>
typedef struct _HudFlags {
u8 explode_animation : 1;
u8 unk40 : 1;
u8 force_digit_shake : 1;
u8 unk10 : 1;
u8 hide_all_digits : 1;
u8 animation_status_id : 2;
u8 unk1 : 1;
} HudFlags;
typedef struct _UnknownClassTypeE {
s32 padding[0x24];
HSD_JObj* unk28;
} UnknownClassTypeE;
typedef struct _HudValue {
// pointer to "unknown class type E"
// 0x00
HSD_GObj* HUD_parent_entity;
// probably a pointer to "unknown class type E"
// 0x04
HSD_GObj* next;
// represents players 1-6
// TODO: list if this 0 indexed, or what
// 0x08
u8 player_slot;
// 0x09
u8 unk9;
// damage as int
// 0x0A
u16 damage_percent;
// 0x0C
u16 old_damage;
// 0x0E
u8 damage_from_last_attack;
// 0x0F
u8 frames_of_shake_remaining;
// 0x10
HudFlags flags;
// 0x14
f32 hundreds_digit_x_translation;
// 0x18
f32 tens_digit_x_translation;
// 0x1C
f32 ones_digit_x_translation;
// 0x20
f32 percent_sign_x_translation;
// 0x24
f32 hundreds_digit_y_translation;
// 0x28
f32 tens_digit_y_translation;
f32 ones_digit_y_translation;
f32 percent_sign_y_translation;
f32 hundreds_x_velocity;
f32 hundreds_y_velocity;
f32 tens_x_velocity;
f32 tens_y_velocity;
f32 ones_x_velocity;
f32 ones_y_velocity;
f32 percent_sign_x_velocity;
f32 percent_sign_y_velocity;
HSD_JObj* hundreds_jobj;
HSD_JObj* tens_jobj;
HSD_JObj* ones_jobj;
HSD_JObj* percent_sign_jobj;
} HudValue;
typedef struct _HudIndex {
HudValue players[6];
// 258 unk
HSD_Joint* unk258;
// 0x25c
void* jobj_desc_parent;
// 0x260
HSD_AnimJoint* janim_selection_joints;
// 0x264
void* janim_selection_textures;
// 0x268 null?
void* unk268;
void* unk26C;
void* unk270;
void* unk274;
// 8 elements of size 0x28, what is this?
} HudIndex;
typedef struct _Element_803F9628_Obj_14 {
s32 padding[6];
s32 unk1C;
} Element_803F9628_Obj_14;
typedef struct _Element_803F9628 {
// 0x00
// maybe?
HSD_GObj* unk0;
// 0x04
u32 unk4;
// 0x08
void* unk8;
// 0x0C
// flags?
u32 unkC;
// 0x10
// flags?
u32 unk10;
// 0x14
s32 unk14;
// 0x18
u32 unk18;
// 0x1C
u32 unk1C;
// 0x20
u32 unk20;
// 0x24
u32 unk24;
// 0x28
// u32 unk40;
} Element_803F9628;
typedef struct _Thing_803F9628 {
Element_803F9628 things[8];
u32 extra[6];
} Thing_803F9628;
typedef struct _Coordinate3D {
f32 x;
f32 y;
f32 z;
} Coordinate3D;
typedef struct _Placeholder_8016AE38_flags {
u8 unk80 : 1;
u8 unk40 : 1;
u8 unk20 : 1;
u8 unk10 : 1;
u8 unk8 : 1;
u8 unk4 : 1;
u8 unk2 : 1;
u8 unk1 : 1;
} Placeholder_8016AE38_flags;
typedef struct _Placeholder_8016AE38_flags_2 {
u8 top3 : 3;
u8 bot5 : 5;
} Placeholder_8016AE38_flags_2;
// When we figure out what that function is, replace this type with an actual
// type
typedef struct _Placeholder_8016AE38_ret_val {
u32 unk0;
u32 unk4;
u32 unk8;
u8 unkC;
u8 unkD;
u8 unkE;
u8 unkF;
u32 padding[0x931 - 3];
Placeholder_8016AE38_flags_2 unk24C8;
u8 unk24C9;
Placeholder_8016AE38_flags unk24CA;
} Placeholder_8016AE38_ret_val;
typedef struct _Placeholder_8016AE50_flags {
u8 unk80 : 1;
u8 unk40 : 1;
u8 unk20 : 1;
u8 unk10 : 1;
u8 unk8 : 1;
u8 unk4 : 1;
u8 unk2 : 1;
u8 unk1 : 1;
} Placeholder_8016AE50_flags;
// When we figure out what that function is, replace this type with an actual
// type
typedef struct _Placeholder_8016AE50_ret_val {
u8 unk0;
u8 unk1;
Placeholder_8016AE50_flags flags;
} Placeholder_8016AE50_ret_val;
// external functions we need
// takes HSD obj* ?
// extern void func_80391CAC(void*);
extern void ifStock_802FB6AC(s32);
extern Placeholder_8016AE38_ret_val* gm_8016AE38(void);
extern Placeholder_8016AE50_ret_val* gm_8016AE50(void);
extern void gm_8016B8D4(s32, s32);
extern void if_802F7C30(s32);
extern void if_802F7AF8(s32);
extern void if_802F7D08(s32);
extern void if_802F7BB4(s32);
extern void ifStock_802FB650(s32);
// functions defined in this file
HudIndex* ifStatus_802F4910(void);
HSD_GObj* ifStatus_802F6194(HSD_GObj*, s32);
void ifStatus_802F6508(s32);
void ifStatus_802F665C(s8);
void ifStatus_802F6788(s32);
void ifStatus_802F6804(void);
void ifStatus_802F6898(void);
void ifStatus_802F68F0(void);
void ifStatus_802F6948(s32);
void ifStatus_802F69C0(s32, s32);
void ifStatus_802F6AF8(s32);
void ifStatus_802F6C04(s32);
void ifStatus_802F6D10(s32);
void ifStatus_802F6E1C(int slot);
void ifStatus_802F6E3C(s32);
void ifStatus_802F7220(void);
extern HudIndex ifStatus_804A10C8; // global array of HUD info
void ifStatus_802F5B48(void);
void ifStatus_802F5DE0(HSD_GObj* player, s32 arg1);
void ifStatus_802F5E50(void);
void ifStatus_802F5EC0(void);
void ifStatus_802F61FC(void);
void ifStatus_802F66A4(void);
void ifStatus_802F4B84(void);
void ifStatus_802F6EA4(void);
void ifStatus_802F7034(void);
void ifStatus_802F7134(void);
void ifStatus_802F4EDC(void);
void ifStatus_802F491C(void);
/* 2F4910 */ HudIndex* ifStatus_802F4910(void);
/* 2F491C */ void ifStatus_802F491C(void);
/* 2F4B84 */ void ifStatus_802F4B84(void);
/* 2F4EDC */ void ifStatus_802F4EDC(void);
/* 2F5B48 */ void ifStatus_802F5B48(void);
/* 2F5DE0 */ void ifStatus_802F5DE0(HSD_GObj* player, s32 arg1);
/* 2F5E50 */ void ifStatus_802F5E50(void);
/* 2F5EC0 */ void ifStatus_802F5EC0(void);
/* 2F6194 */ HSD_GObj* ifStatus_802F6194(HSD_GObj*, s32);
/* 2F61FC */ void ifStatus_802F61FC(void);
/* 2F6508 */ void ifStatus_802F6508(s32);
/* 2F665C */ void ifStatus_802F665C(s8);
/* 2F66A4 */ void ifStatus_802F66A4(void);
/* 2F6788 */ void ifStatus_802F6788(s32);
/* 2F6804 */ void ifStatus_802F6804(void);
/* 2F6898 */ void ifStatus_802F6898(void);
/* 2F68F0 */ void ifStatus_802F68F0(void);
/* 2F6948 */ void ifStatus_802F6948(s32);
/* 2F69C0 */ void ifStatus_802F69C0(s32, s32);
/* 2F6AF8 */ void ifStatus_802F6AF8(s32);
/* 2F6C04 */ void ifStatus_802F6C04(s32);
/* 2F6D10 */ void ifStatus_802F6D10(s32);
/* 2F6E1C */ void ifStatus_802F6E1C(int slot);
/* 2F6E3C */ void ifStatus_802F6E3C(s32);
/* 2F6EA4 */ void ifStatus_802F6EA4(void);
/* 2F7034 */ void ifStatus_802F7034(void);
/* 2F7134 */ void ifStatus_802F7134(void);
/* 2F7220 */ void ifStatus_802F7220(void);
/* 4A10C8 */ extern HudIndex ifStatus_HudInfo;
#endif

View File

@ -1,8 +1,10 @@
#ifndef MELEE_IF_IFSTOCK_H
#define MELEE_IF_IFSTOCK_H
#ifndef GALE01_2F7EFC
#define GALE01_2F7EFC
#include <platform.h>
void ifStock_802F98E8(void);
/* 2F98E8 */ void ifStock_802F98E8(void);
/* 2FB650 */ void ifStock_802FB650(s32);
/* 2FB6AC */ void ifStock_802FB6AC(s32);
#endif

170
src/melee/if/types.h Normal file
View File

@ -0,0 +1,170 @@
#ifndef MELEE_IF_TYPES_H
#define MELEE_IF_TYPES_H
#include <platform.h>
#include "if/forward.h" // IWYU pragma: export
#include <baselib/forward.h>
struct HudFlags {
u8 explode_animation : 1;
u8 unk40 : 1;
u8 force_digit_shake : 1;
u8 unk10 : 1;
u8 hide_all_digits : 1;
u8 animation_status_id : 2;
u8 unk1 : 1;
};
struct UnknownClassTypeE {
s32 padding[0x24];
HSD_JObj* unk28;
};
struct HudValue {
// pointer to "unknown class type E"
// 0x00
HSD_GObj* HUD_parent_entity;
// probably a pointer to "unknown class type E"
// 0x04
HSD_GObj* next;
// represents players 1-6
// TODO: list if this 0 indexed, or what
// 0x08
u8 player_slot;
// 0x09
u8 unk9;
// damage as int
// 0x0A
u16 damage_percent;
// 0x0C
u16 old_damage;
// 0x0E
u8 damage_from_last_attack;
// 0x0F
u8 frames_of_shake_remaining;
// 0x10
HudFlags flags;
// 0x14
f32 hundreds_digit_x_translation;
// 0x18
f32 tens_digit_x_translation;
// 0x1C
f32 ones_digit_x_translation;
// 0x20
f32 percent_sign_x_translation;
// 0x24
f32 hundreds_digit_y_translation;
// 0x28
f32 tens_digit_y_translation;
f32 ones_digit_y_translation;
f32 percent_sign_y_translation;
f32 hundreds_x_velocity;
f32 hundreds_y_velocity;
f32 tens_x_velocity;
f32 tens_y_velocity;
f32 ones_x_velocity;
f32 ones_y_velocity;
f32 percent_sign_x_velocity;
f32 percent_sign_y_velocity;
HSD_JObj* hundreds_jobj;
HSD_JObj* tens_jobj;
HSD_JObj* ones_jobj;
HSD_JObj* percent_sign_jobj;
};
struct HudIndex {
HudValue players[6];
// 258 unk
HSD_Joint* unk258;
// 0x25c
void* jobj_desc_parent;
// 0x260
HSD_AnimJoint* janim_selection_joints;
// 0x264
void* janim_selection_textures;
// 0x268 null?
void* unk268;
void* unk26C;
void* unk270;
void* unk274;
// 8 elements of size 0x28, what is this?
};
struct Element_803F9628_Obj_14 {
s32 padding[6];
s32 unk1C;
};
struct Element_803F9628 {
// 0x00
// maybe?
HSD_GObj* unk0;
// 0x04
u32 unk4;
// 0x08
void* unk8;
// 0x0C
// flags?
u32 unkC;
// 0x10
// flags?
u32 unk10;
// 0x14
s32 unk14;
// 0x18
u32 unk18;
// 0x1C
u32 unk1C;
// 0x20
u32 unk20;
// 0x24
u32 unk24;
// 0x28
// u32 unk40;
};
struct Thing_803F9628 {
Element_803F9628 things[8];
u32 extra[6];
};
struct Placeholder_8016AE50_flags {
u8 unk80 : 1;
u8 unk40 : 1;
u8 unk20 : 1;
u8 unk10 : 1;
u8 unk8 : 1;
u8 unk4 : 1;
u8 unk2 : 1;
u8 unk1 : 1;
};
struct Placeholder_8016AE50_ret_val {
u8 unk0;
u8 unk1;
Placeholder_8016AE50_flags flags;
};
struct ifMagnify {
HSD_Joint* joint; // // ifMagnify_802fc3c0 accesses 0x804A1DE0 for a Joint
int x4;
int x8;
int xC;
int x10;
struct {
HSD_GObj* gobj; // ifMagnify_802fc750 accesses 0x804A1DF4 + slot * 0x10
// for a GObj
HSD_TObj* tobj; // ifMagnify_802fc3c0 accesses 0x804A1DF8 + slot * 0x10
// for a TObj
HSD_ImageDesc*
idesc; // ifMagnify_802FBBDC access 0x804A1DFC for an ImageDesc
struct {
u8 is_offscreen : 1;
u8 ignore_offscreen : 1;
u8 unk : 6;
} state;
} player[6];
u8 unk[0xF0 - 0x74];
};
#endif

View File

@ -39,8 +39,11 @@ lazy_static! {
.expect("Failed to parse ldscript glob.")
)
.add(
Glob::new(&format!("{}/config/**/{{symbols,splits}}.txt", *ROOT_STR))
.expect("Failed to parse dtk config glob.")
Glob::new(&format!(
"{}/config/**/{{symbols,splits}}.txt",
*ROOT_STR
))
.expect("Failed to parse dtk config glob.")
)
.build()
.expect("Failed to create SRC_FILES glob.");
@ -84,9 +87,10 @@ pub fn replace(from: &Regex, to: &str, path: impl AsRef<Path>) -> Result<()> {
}
fn is_identifier(c: char) -> bool {
matches!(c, 'a'..='z' | 'A'..='Z' | '0'..='9' | '_' | '.')
matches!(c, 'a'..='z' | 'A'..='Z' | '0'..='9' | '_')
}
/// TODO: Rewrite this using simple regex or nom
pub fn replace_symbols<K, V, S>(
path: impl AsRef<Path>,
replacements: &HashMap<K, V, S>,