Changeset 230 for trunk/Acronym.pas
- Timestamp:
- Jan 24, 2025, 11:42:58 PM (9 days ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Acronym.pas
r226 r230 24 24 Name: string; 25 25 Meanings: TAcronymMeanings; 26 procedure Assign(Source: TAcronym); 26 27 procedure SaveToNode(Node: TDOMNode); 27 28 procedure LoadFromNode(Node: TDOMNode); … … 34 35 TAcronyms = class(TObjectList<TAcronym>) 35 36 Db: TAcronymDb; 37 procedure Assign(Source: TAcronyms); 36 38 procedure SaveToNode(Node: TDOMNode); 37 39 procedure LoadFromNode(Node: TDOMNode); … … 50 52 Categories: TAcronymCategories; 51 53 Sources: TImportSources; 54 procedure Assign(Source: TAcronymMeaning); 52 55 procedure MergeCategories(MergedCategories: TAcronymCategories); 53 56 procedure SaveToNode(Node: TDOMNode); … … 62 65 public 63 66 Acronym: TAcronym; 67 procedure Assign(Source: TAcronymMeanings); 64 68 procedure UpdateIds; 65 69 procedure SaveToNode(Node: TDOMNode); … … 75 79 Id: Integer; 76 80 Name: string; 77 AcronymMeanings: TAcronymMeanings;78 ImportSources: TImportSources;79 81 Enabled: Boolean; 82 AcronymDb: TAcronymDb; 83 function GetAcronymMeanings: TAcronymMeanings; 84 function GetAcronymMeaningsCount: Integer; 85 function GetImportSources: TImportSources; 86 function GetImportSourcesCount: Integer; 80 87 procedure Assign(Source: TAcronymCategory); 81 88 procedure SaveToNode(Node: TDOMNode); 82 89 procedure LoadFromNode(Node: TDOMNode); 83 90 constructor Create; 84 destructor Destroy; override;85 91 end; 86 92 … … 103 109 procedure Assign(Source: TAcronymCategories); 104 110 function GetString: string; 105 procedure UpdateLinkImportSources(Item: TImportSource);106 procedure UpdateLinkAcronymMeanings(Item: TAcronymMeaning);107 111 function IsAnyEnabled: Boolean; 108 112 end; … … 164 168 165 169 TImportFormats = class(TObjectList<TImportFormat>) 170 procedure Assign(Source: TImportFormats); 166 171 procedure UpdateIds; 167 172 procedure SaveToNode(Node: TDOMNode); … … 177 182 ResponseStream: TMemoryStream; 178 183 procedure DoPassword(Sender: TObject; var RepeatRequest : Boolean); 179 procedure TextParse( S: string);184 procedure TextParse(AcronymDb: TAcronymDb; S: string); 180 185 public 181 186 Id: Integer; … … 191 196 Password: string; 192 197 function DownloadHTTP(URL: string; Stream: TStream): Boolean; 193 procedure Process ;194 procedure ProcessTextParseURL ;195 procedure ProcessTextParseFile ;196 procedure ProcessMSAccess ;198 procedure Process(AcronymDb: TAcronymDb); 199 procedure ProcessTextParseURL(AcronymDb: TAcronymDb); 200 procedure ProcessTextParseFile(AcronymDb: TAcronymDb); 201 procedure ProcessMSAccess(AcronymDb: TAcronymDb); 197 202 procedure Assign(Source: TImportSource); 198 203 procedure SaveToNode(Node: TDOMNode); … … 211 216 procedure LoadRefFromNode(Node: TDOMNode); 212 217 procedure AssignToStrings(Strings: TStrings); 218 procedure Assign(Source: TImportSources); 213 219 function SearchByName(Name: string): TImportSource; 214 220 procedure SaveToNode(Node: TDOMNode); … … 233 239 constructor Create; 234 240 destructor Destroy; override; 241 procedure Assign(Source: TAcronymDb); 235 242 procedure LoadFromFile(FileName: string); 236 243 procedure SaveToFile(FileName: string); … … 307 314 { TImportSourceMSAccess } 308 315 309 procedure TImportSource.ProcessMSAccess ;316 procedure TImportSource.ProcessMSAccess(AcronymDb: TAcronymDb); 310 317 var 311 318 ODBCConnection1: TODBCConnection; … … 342 349 NewAcronym.Meaning := Trim(WinCPToUTF8(SQLQuery1.FieldByName('Meaning').AsString)); 343 350 if (NewAcronym.Name <> '') and (NewAcronym.Meaning <> '') then begin 344 AddedAcronym := Sources.AcronymDb.AddAcronym(NewAcronym.Name, NewAcronym.Meaning);351 AddedAcronym := AcronymDb.AddAcronym(NewAcronym.Name, NewAcronym.Meaning); 345 352 AddedAcronym.MergeCategories(Categories); 346 353 if AddedAcronym.Sources.IndexOf(Self) = -1 then … … 437 444 end; 438 445 439 procedure TImportSource.TextParse( S: string);446 procedure TImportSource.TextParse(AcronymDb: TAcronymDb; S: string); 440 447 var 441 448 SS: string; … … 490 497 with Format.ItemPatterns[I] do begin 491 498 if Flag <> ipfRemove then begin 499 TT := StartString; 492 500 if Length(StartString) > 0 then begin 493 501 P := Pos(StartString, S); … … 523 531 end; 524 532 TT := Trim(TT); 525 NewCategory := Sources.AcronymDb.Categories.SearchByName(TT);533 NewCategory := AcronymDb.Categories.SearchByName(TT); 526 534 if not Assigned(NewCategory) then begin 527 535 NewCategory := TAcronymCategory.Create; 528 536 NewCategory.Name := TT; 529 Sources.AcronymDb.Categories.Add(NewCategory);537 AcronymDb.Categories.Add(NewCategory); 530 538 end; 531 539 NewAcronym.Categories.AddObject(TT, NewCategory); … … 538 546 if (Flag = ipfNewItem) and (NewAcronym.Name <> '') and 539 547 (NewAcronym.Meaning <> '') then begin 540 AddedAcronym := Sources.AcronymDb.AddAcronym(NewAcronym.Name, NewAcronym.Meaning);548 AddedAcronym := AcronymDb.AddAcronym(NewAcronym.Name, NewAcronym.Meaning); 541 549 AddedAcronym.Description := NewAcronym.Description; 542 550 AddedAcronym.MergeCategories(Categories); 543 551 AddedAcronym.Categories.AddFromStrings(NewAcronym.Categories); 544 AddedAcronym.Categories.UpdateLinkAcronymMeanings(AddedAcronym);545 552 if AddedAcronym.Sources.IndexOf(Self) = -1 then 546 553 AddedAcronym.Sources.Add(Self); … … 593 600 I: Integer; 594 601 begin 595 List.C lear;602 List.Count := Count; 596 603 for I := 0 to Count - 1 do 597 List .Add(Items[I]);598 end; 599 600 procedure TImportSource.Process ;604 List[I] := Items[I]; 605 end; 606 607 procedure TImportSource.Process(AcronymDb: TAcronymDb); 601 608 begin 602 609 ItemCount := 0; 603 610 case Format.Kind of 604 ifkParseURL: ProcessTextParseURL ;605 ifkMSAccess: ProcessMSAccess ;606 ifkParseFile: ProcessTextParseFile ;611 ifkParseURL: ProcessTextParseURL(AcronymDb); 612 ifkMSAccess: ProcessMSAccess(AcronymDb); 613 ifkParseFile: ProcessTextParseFile(AcronymDb); 607 614 else raise Exception.Create(SUnsupportedImportFormat); 608 615 end; … … 742 749 end; 743 750 751 procedure TImportSources.Assign(Source: TImportSources); 752 begin 753 754 end; 755 744 756 function TImportSources.SearchByName(Name: string): TImportSource; 745 757 var … … 795 807 end; 796 808 809 procedure TImportFormats.Assign(Source: TImportFormats); 810 begin 811 812 end; 813 797 814 procedure TImportFormats.UpdateIds; 798 815 var … … 856 873 { TImportSource } 857 874 858 procedure TImportSource.ProcessTextParseURL ;875 procedure TImportSource.ProcessTextParseURL(AcronymDb: TAcronymDb); 859 876 var 860 877 S: string; … … 867 884 ResponseStream.Read(S[1], Length(S)); 868 885 869 TextParse( S);870 end; 871 end; 872 873 procedure TImportSource.ProcessTextParseFile ;886 TextParse(AcronymDb, S); 887 end; 888 end; 889 890 procedure TImportSource.ProcessTextParseFile(AcronymDb: TAcronymDb); 874 891 var 875 892 S: TStringList; … … 879 896 try 880 897 S.LoadFromFile(URL); 881 TextParse( S.Text);898 TextParse(AcronymDb, S.Text); 882 899 finally 883 900 S.Free; … … 920 937 var 921 938 Node2: TDOMNode; 922 I: Integer;923 939 begin 924 940 Name := ReadString(Node, 'Name', ''); … … 934 950 if Assigned(Node2) then 935 951 Categories.LoadRefFromNode(Node2); 936 937 // Add reverse references938 for I := 0 to Categories.Count - 1 do939 Categories[I].ImportSources.Add(Self);940 952 end; 941 953 … … 950 962 951 963 destructor TImportSource.Destroy; 952 var 953 I: Integer; 954 begin 955 for I := 0 to Categories.Count - 1 do 956 Categories[I].ImportSources.Remove(Self); 964 begin 957 965 FreeAndNil(Categories); 958 966 FreeAndNil(ResponseStream); … … 979 987 980 988 { TAcronymMeanings } 989 990 procedure TAcronymMeanings.Assign(Source: TAcronymMeanings); 991 begin 992 993 end; 981 994 982 995 procedure TAcronymMeanings.UpdateIds; … … 1049 1062 Result := TAcronymMeaning.Create; 1050 1063 Result.Name := Name; 1064 Result.Acronym := Acronym; 1051 1065 Add(Result); 1052 1066 end; … … 1064 1078 { TAcronymMeaning } 1065 1079 1080 procedure TAcronymMeaning.Assign(Source: TAcronymMeaning); 1081 begin 1082 Name := Source.Name; 1083 Description := Source.Description; 1084 Language := Source.Language; 1085 Categories.Assign(Source.Categories); 1086 Sources.Assign(Source.Sources); 1087 end; 1088 1066 1089 procedure TAcronymMeaning.MergeCategories(MergedCategories: TAcronymCategories); 1067 1090 var … … 1071 1094 if Categories.IndexOf(MergedCategories[I]) = -1 then begin 1072 1095 Categories.Add(MergedCategories[I]); 1073 MergedCategories[I].AcronymMeanings.Add(Self);1074 1096 end; 1075 1097 end; … … 1095 1117 var 1096 1118 Node2: TDOMNode; 1097 I: Integer;1098 1119 begin 1099 1120 Name := ReadString(Node, 'Name', ''); … … 1105 1126 if Assigned(Node2) then begin 1106 1127 Categories.LoadRefFromNode(Node2); 1107 1108 // Add reverse references1109 for I := 0 to Categories.Count - 1 do1110 Categories[I].AcronymMeanings.Add(Self);1111 1128 end; 1112 1129 … … 1125 1142 1126 1143 destructor TAcronymMeaning.Destroy; 1127 var 1128 I: Integer; 1129 begin 1130 for I := 0 to Categories.Count - 1 do 1131 Categories[I].AcronymMeanings.Remove(Self); 1144 begin 1132 1145 FreeAndNil(Categories); 1133 1146 FreeAndNil(Sources); … … 1136 1149 1137 1150 { TAcronyms } 1151 1152 procedure TAcronyms.Assign(Source: TAcronyms); 1153 begin 1154 1155 end; 1138 1156 1139 1157 procedure TAcronyms.SaveToNode(Node: TDOMNode); … … 1184 1202 Result := TAcronym.Create; 1185 1203 Result.Name := Name; 1204 Result.Db := Db; 1186 1205 Add(Result); 1187 1206 end; … … 1199 1218 if Items[I].Id > LastId then LastId := Items[I].Id; 1200 1219 end; 1220 1201 1221 // Add ID to new items without ID 1202 1222 for I := 0 to Count - 1 do begin … … 1231 1251 while Assigned(Node2) and (Node2.NodeName = 'Category') do begin 1232 1252 NewItem := TAcronymCategory.Create; 1253 NewItem.AcronymDb := Db; 1233 1254 NewItem.LoadFromNode(Node2); 1234 1255 Add(NewItem); … … 1259 1280 while Assigned(Node2) and (Node2.NodeName = 'Ref') do begin 1260 1281 if TryStrToInt(string(Node2.TextContent), Id) then begin 1261 Category := Db.Categories.SearchById(Id); 1262 if Assigned(Category) then begin 1263 Add(Category); 1282 Category := SearchById(Id); 1283 if not Assigned(Category) then begin 1284 Category := Db.Categories.SearchById(Id); 1285 if Assigned(Category) then begin 1286 Add(Category); 1287 end; 1264 1288 end; 1265 1289 end; … … 1334 1358 I: Integer; 1335 1359 begin 1336 List.C lear;1360 List.Count := Count; 1337 1361 for I := 0 to Count - 1 do 1338 List .Add(Items[I]);1362 List[I] := Items[I]; 1339 1363 end; 1340 1364 … … 1347 1371 for I := 0 to Source.Count - 1 do begin 1348 1372 NewCategory := TAcronymCategory.Create; 1373 NewCategory.AcronymDb := Db; 1349 1374 NewCategory.Assign(Source[I]); 1350 1375 Add(NewCategory); … … 1360 1385 Result := Result + Items[I].Name + ','; 1361 1386 System.Delete(Result, Length(Result), 1); 1362 end;1363 1364 procedure TAcronymCategories.UpdateLinkImportSources(Item: TImportSource);1365 var1366 I: Integer;1367 begin1368 for I := 0 to Count - 1 do1369 if Items[I].ImportSources.IndexOf(Item) = -1 then1370 Items[I].ImportSources.Add(Item);1371 end;1372 1373 procedure TAcronymCategories.UpdateLinkAcronymMeanings(Item: TAcronymMeaning);1374 var1375 I: Integer;1376 begin1377 for I := 0 to Count - 1 do1378 if Items[I].AcronymMeanings.IndexOf(Item) = -1 then1379 Items[I].AcronymMeanings.Add(Item);1380 1387 end; 1381 1388 … … 1394 1401 { TAcronym } 1395 1402 1403 procedure TAcronym.Assign(Source: TAcronym); 1404 begin 1405 Name := Source.Name; 1406 Meanings.Assign(Source.Meanings); 1407 end; 1408 1396 1409 procedure TAcronym.SaveToNode(Node: TDOMNode); 1397 1410 var … … 1430 1443 { TAcronymCategory } 1431 1444 1445 function TAcronymCategory.GetAcronymMeanings: TAcronymMeanings; 1446 var 1447 I: Integer; 1448 J: Integer; 1449 begin 1450 Result := TAcronymMeanings.Create(False); 1451 for I := 0 to AcronymDb.Acronyms.Count - 1 do 1452 with AcronymDb.Acronyms[I] do begin 1453 for J := 0 to Meanings.Count - 1 do 1454 with Meanings[J] do 1455 if Assigned(Categories.SearchById(Self.Id)) then 1456 Result.Add(Meanings[J]); 1457 end; 1458 end; 1459 1460 function TAcronymCategory.GetAcronymMeaningsCount: Integer; 1461 var 1462 I: Integer; 1463 J: Integer; 1464 begin 1465 Result := 0; 1466 for I := 0 to AcronymDb.Acronyms.Count - 1 do 1467 with AcronymDb.Acronyms[I] do begin 1468 for J := 0 to Meanings.Count - 1 do 1469 with Meanings[J] do 1470 if Assigned(Categories.SearchById(Self.Id)) then 1471 Inc(Result); 1472 end; 1473 end; 1474 1475 function TAcronymCategory.GetImportSources: TImportSources; 1476 var 1477 I: Integer; 1478 begin 1479 Result := TImportSources.Create(False); 1480 for I := 0 to AcronymDb.ImportSources.Count - 1 do 1481 with AcronymDb.ImportSources[I] do 1482 if Assigned(Categories.SearchById(Self.Id)) then 1483 Result.Add(AcronymDb.ImportSources[I]); 1484 end; 1485 1486 function TAcronymCategory.GetImportSourcesCount: Integer; 1487 var 1488 I: Integer; 1489 begin 1490 Result := 0; 1491 for I := 0 to AcronymDb.ImportSources.Count - 1 do 1492 with AcronymDb.ImportSources[I] do 1493 if Assigned(Categories.SearchById(Self.Id)) then 1494 Inc(Result); 1495 end; 1496 1432 1497 procedure TAcronymCategory.Assign(Source: TAcronymCategory); 1433 1498 begin 1434 1499 Id := Source.Id; 1435 1500 Name := Source.Name; 1436 // AcronymMeanings.Assign(Source.AcronymMeanings);1437 // ImportSources.Assign(Source.ImportSources);1438 1501 Enabled := Source.Enabled; 1439 1502 end; … … 1458 1521 Name := ''; 1459 1522 Enabled := True; 1460 AcronymMeanings := TAcronymMeanings.Create(False);1461 ImportSources := TImportSources.Create(False);1462 end;1463 1464 destructor TAcronymCategory.Destroy;1465 var1466 I: Integer;1467 begin1468 for I := 0 to AcronymMeanings.Count - 1 do1469 AcronymMeanings[I].Categories.Remove(Self);1470 FreeAndNil(AcronymMeanings);1471 for I := 0 to ImportSources.Count - 1 do1472 ImportSources[I].Categories.Remove(Self);1473 FreeAndNil(ImportSources);1474 inherited;1475 1523 end; 1476 1524 … … 1498 1546 FreeAndNil(Categories); 1499 1547 inherited; 1548 end; 1549 1550 procedure TAcronymDb.Assign(Source: TAcronymDb); 1551 begin 1552 Modified := Source.Modified; 1553 AddedCount := Source.AddedCount; 1554 FileName := Source.FileName; 1555 Categories.Assign(Source.Categories); 1556 Acronyms.Assign(Source.Acronyms); 1557 ImportFormats.Assign(Source.ImportFormats); 1558 ImportSources.Assign(Source.ImportSources); 1500 1559 end; 1501 1560 … … 1624 1683 end; 1625 1684 NewMeaning.Categories.Add(AcronymCategory); 1626 AcronymCategory.AcronymMeanings.Add(NewMeaning);1627 1685 end; 1628 1686 end; … … 1709 1767 if not Assigned(Acronym) then begin 1710 1768 Acronym := TAcronym.Create; 1769 Acronym.Db := Self; 1711 1770 Acronym.Name := AcronymName; 1712 1771 Acronyms.Add(Acronym);
Note:
See TracChangeset
for help on using the changeset viewer.