📄 tmadmin.tmi
字号:
for name in RecNames( record ) do
if record.( name ) = 0 then
Unbind( record.( name ) );
fi;
od;
# Make the table of marks object.
record:= ConvertToLibTom( record );
# Set some attribute values.
SetSize( UnderlyingGroup( record ),
OrdersTom( record )[ Length( OrdersTom( record ) ) ] );
SetTableOfMarks( UnderlyingGroup( record ), record );
Add( LIBTOMKNOWN.( LIBTOMKNOWN.ACTUAL ), record );
end );
#############################################################################
##
#F ACLT( <name>, <component>, <value> )
##
InstallGlobalFunction( ACLT, function( name, component, value )
local pos, tom, nrgens, newvalue, i;
# Get the table of marks with name <name>.
pos:= Position( LIBTOMLIST.names, name );
if pos = fail then
Error( "no table of marks with name ", name, " known" );
fi;
pos:= LIBTOMLIST.positions[ pos ][2];
tom:= LIBTOMKNOWN.( LIBTOMKNOWN.ACTUAL )[ pos ];
# Handle special components.
if component = "sortperm" then
#T what is this `sortperm' really good for??
return;
elif component = "otherwords" then
nrgens:= Length( GeneratorsOfGroup( tom!.UnderlyingGroup ) );
newvalue:= [];
for i in [ 1 .. Length( value ) ] do
if IsBound( value[i] ) then
newvalue[i]:= List( value[i],
x -> StraightLineProgram( x, nrgens ) );
fi;
od;
value:= newvalue;
fi;
# Set the additional component.
tom!.( component ):= value;
end );
#############################################################################
##
#F AFLT( <source>, <destination>, <fusion> )
##
InstallGlobalFunction( AFLT, function( source, destination, fusion )
local pos, fus, tom;
# get the table of marks with name <source>
pos:=Position(LIBTOMLIST.names,source);
if pos = fail then
Error("no table of marks with name ",source," known\n");
fi;
if LIBTOMKNOWN.ACTUAL <> LIBTOMLIST.files[LIBTOMLIST.positions[pos][1]] then
Error("source \"",source,"\" is not stored in file ",
Concatenation(LIBTOMKNOWN.ACTUAL,".tom"));
fi;
pos:=LIBTOMLIST.positions[pos][2];
tom:=LIBTOMKNOWN.(LIBTOMKNOWN.ACTUAL)[pos];
# do some tests
for fus in FusionsTom(tom) do
if fus = [destination,fusion] then
return;
elif fus[1] = destination and fus[2][Length(fus[2])] =
fusion[Length(fusion)] then
Error("there is already another fusion from \"",source,
"\" to \"",destination,"\" stored on \"",source,"\"\n");
fi;
od;
# add the fusion
Add(FusionsTom(LIBTOMKNOWN.(LIBTOMKNOWN.ACTUAL)[pos]),
[destination,fusion]);
end );
#############################################################################
##
#F AllLibTomNames()
##
InstallGlobalFunction( AllLibTomNames, function()
local result, file;
result:=[];
for file in LIBTOMLIST.namelist do
Append(result,List(file,x->x[1]));
od;
return result;
end );
#############################################################################
##
#F NamesLibTom( <tom> )
#F NamesLibTom( <string> )
##
InstallMethod( NamesLibTom,
[ IsTableOfMarks and IsLibTomRep ],
x -> NamesLibTom( Identifier( x ) ) );
InstallMethod( NamesLibTom,
[ IsString ],
function( string )
local pos;
if IsNameOfNoninstalledTableOfMarks( string ) then
return fail;
fi;
pos:=Position(LIBTOMLIST.names,LowercaseString(string));
if pos = fail then
Info( InfoTom, 1,
"no library table of marks whith name \"", string, "\" found" );
return fail;
else
pos:= LIBTOMLIST.positions[ pos ];
return LIBTOMLIST.namelist[ pos[1] ][ pos[2] ];
fi;
end );
#############################################################################
##
#M NotifiedFusionsOfLibTom( <tom> )
#M NotifiedFusionsOfLibTom( <string> )
#M FusionsOfLibTom( <tom> )
#M FusionsOfLibTom( <string> )
##
InstallMethod( FusionsOfLibTom,
[ IsTableOfMarks and IsLibTomRep ],
tom -> Filtered( FusionsTom( tom ),
x -> not x[1] in LIBTOMLIST.noninstalled ) );
InstallMethod( FusionsOfLibTom,
[ IsString ],
function(string)
local tom;
tom:=TableOfMarks(string);
if tom = fail then
return fail;
else
return Filtered( FusionsTom(tom),
x-> not x[1] in LIBTOMLIST.noninstalled);
fi;
end );
InstallMethod( NotifiedFusionsOfLibTom,
[ IsTableOfMarks and IsLibTomRep ],
tom -> List( Filtered( FusionsTom( tom ),
x -> not x[1] in LIBTOMLIST.noninstalled ),
x -> [ x[1], x[2][ Length( x[2] ) ] ] ) );
InstallMethod( NotifiedFusionsOfLibTom,
[ IsString ],
function( string )
local result, i, j, f;
if IsNameOfNoninstalledTableOfMarks( string ) then
return fail;
elif not LowercaseString(string) in LIBTOMLIST.names then
Info( InfoTom, 1,
"no library table of marks with name \"", string, "\" found" );
return fail;
fi;
result:= [];
for i in [ 1 .. Length( LIBTOMLIST.namelist ) ] do
for j in [ 1 .. Length( LIBTOMLIST.namelist[i] ) ] do
for f in LIBTOMLIST.fusions[i][j] do
if LowercaseString( f[1] ) in NamesLibTom( string ) then
Add( result, [ LIBTOMLIST.namelist[i][j][1], f[2] ] );
fi;
od;
od;
od;
return result;
end );
#############################################################################
##
#M NotifiedFusionsToLibTom( <tom> )
#M NotifiedFusionsToLibTom( <string> )
#M FusionsToLibTom( <tom> )
#M FusionsToLibTom( <string> )
##
InstallMethod( FusionsToLibTom,
[ IsTableOfMarks and IsLibTomRep],
x -> FusionsToLibTom( Identifier( x ) ) );
InstallMethod( FusionsToLibTom,
[ IsString ],
function(string)
local result, tom, f, fus, fusions;
if IsNameOfNoninstalledTableOfMarks( string ) then
return fail;
elif not LowercaseString(string) in LIBTOMLIST.names then
Info( InfoTom, 1,
"no library table of marks with name \"", string, "\" found" );
return fail;
fi;
result:=[];
fusions:=NotifiedFusionsToLibTom(string);
# get the fusion maps
for fus in fusions do
tom:=TableOfMarks(fus[1]);
for f in FusionsTom(tom) do
if f[1] in NamesLibTom(string) and f[2][Length(f[2])] = fus[2] then
Add(result,[fus[1],f[2]]);
fi;
od;
od;
return result;
end );
InstallMethod( NotifiedFusionsToLibTom,
[ IsTableOfMarks and IsLibTomRep ],
x -> NotifiedFusionsToLibTom( Identifier( x ) ) );
InstallMethod( NotifiedFusionsToLibTom,
[ IsString ],
function( string )
local pos;
if IsNameOfNoninstalledTableOfMarks( string ) then
return fail;
fi;
pos:=Position(LIBTOMLIST.names,LowercaseString(string));
if pos = fail then
Info( InfoTom, 1,
"no library table of marks with name \"", string, "\" found" );
return fail;
fi;
pos:=LIBTOMLIST.positions[pos];
return Filtered(LIBTOMLIST.fusions[pos[1]][pos[2]], x-> not x[1] in
LIBTOMLIST.noninstalled );
end );
#############################################################################
##
#E
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -