mirror of
https://github.com/vishapoberon/vipak.git
synced 2026-04-05 20:42:26 +00:00
Something works:D
This commit is contained in:
parent
1f1763abff
commit
173fd486fe
7 changed files with 80 additions and 64 deletions
|
|
@ -43,7 +43,7 @@ VAR
|
|||
BEGIN
|
||||
NEW(n);
|
||||
|
||||
IF self.Count = 0 THEN RETURN 0AX END;
|
||||
IF self.Count = 0 THEN RETURN 0X END;
|
||||
|
||||
n := self.Get(self, self.Count - 1);
|
||||
self.Delete(self, self.Count - 1);
|
||||
|
|
@ -56,7 +56,7 @@ VAR
|
|||
BEGIN
|
||||
NEW(n);
|
||||
|
||||
IF self.Count = 0 THEN RETURN 0AX END;
|
||||
IF self.Count = 0 THEN RETURN 0X END;
|
||||
|
||||
n := self.Get(self, self.Count - 1);
|
||||
RETURN n.obj(TChar).char;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@ VAR
|
|||
moduleNames: ARRAY ArrayMaxNumber OF JsonParser.TString;
|
||||
moduleJson: ARRAY ArrayMaxNumber OF JsonParser.TString;
|
||||
moduleVersions: ARRAY ArrayMaxNumber OF JsonParser.TString;
|
||||
|
||||
j : LONGINT;
|
||||
|
||||
PROCEDURE Resolve *(jsonString: ARRAY OF CHAR);
|
||||
|
|
@ -20,7 +21,7 @@ BEGIN
|
|||
jsonRecord := JsonParser.Create(jsonString);
|
||||
|
||||
keyFound := jsonRecord.GetTerminal(jsonRecord, "Package", packageName);
|
||||
|
||||
|
||||
IF keyFound THEN
|
||||
Logger.Log("Parsing package by name");
|
||||
Logger.Log(packageName);
|
||||
|
|
@ -28,40 +29,45 @@ BEGIN
|
|||
ELSE Logger.Log("Value for the Key is not found"); RETURN; END;
|
||||
|
||||
dependencies := jsonRecord.GetNonTerminal(jsonRecord, "Dependencies");
|
||||
|
||||
dependencies.GetTerminalKeys(dependencies, keys);
|
||||
|
||||
FOR i := 0 TO LEN(keys) - 1 DO
|
||||
keyFound := dependencies.GetTerminal(dependencies, keys[i], version);
|
||||
|
||||
IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END;
|
||||
ASSERT(keyFound);
|
||||
FOR i := 0 TO LEN(keys) - 1 DO (* TODO: rewrite this logic to work with key count *)
|
||||
IF ~Strings.Match(keys[i], "") THEN
|
||||
keyFound := dependencies.GetTerminal(dependencies, keys[i], version);
|
||||
IF ~keyFound THEN Logger.Log('ERROR while seatching key'); Logger.Log(keys[i]); END;
|
||||
ASSERT(keyFound);
|
||||
|
||||
PackageResolver.ResolveFile(
|
||||
Settings.host,
|
||||
Settings.port,
|
||||
keys[i],
|
||||
version,
|
||||
Settings.packageFileName,
|
||||
returnedJSON
|
||||
);
|
||||
|
||||
keyFound := FALSE;
|
||||
FOR k := 0 TO j - 1 DO
|
||||
IF Strings.Match(moduleNames[k], keys[i]) THEN
|
||||
keyFound := TRUE;
|
||||
PackageResolver.ResolveFile(
|
||||
Settings.host,
|
||||
Settings.port,
|
||||
keys[i],
|
||||
version,
|
||||
Settings.packageFileName,
|
||||
returnedJSON
|
||||
);
|
||||
|
||||
keyFound := FALSE;
|
||||
IF j >= LEN(moduleNames) THEN
|
||||
Logger.Log("Out of range in Resolve function in ...");
|
||||
END;
|
||||
ASSERT(j < LEN(moduleNames));
|
||||
|
||||
FOR k := 0 TO j - 1 DO
|
||||
IF Strings.Match(moduleNames[k], keys[i]) THEN
|
||||
keyFound := TRUE;
|
||||
END;
|
||||
END;
|
||||
|
||||
|
||||
IF ~keyFound THEN
|
||||
COPY(keys[i], moduleNames[j]);
|
||||
COPY(version, moduleVersions[j]);
|
||||
COPY(returnedJSON, moduleJson[j]);
|
||||
INC(j);
|
||||
Resolve(returnedJSON);
|
||||
END;
|
||||
END;
|
||||
|
||||
IF ~keyFound THEN
|
||||
COPY(keys[i], moduleNames[j]);
|
||||
COPY(version, moduleVersions[j]);
|
||||
COPY(returnedJSON, moduleJson[j]);
|
||||
INC(j);
|
||||
Resolve(returnedJSON);
|
||||
END;
|
||||
END;
|
||||
|
||||
END Resolve;
|
||||
|
||||
END DependencyResolver.
|
||||
|
|
@ -2,7 +2,7 @@ MODULE JsonParser;
|
|||
IMPORT Logger, CharacterStack, Strings, Out, strutils;
|
||||
CONST
|
||||
ArrayMaxNumber = 30;
|
||||
ArrayMaxNumberChar = 1000;
|
||||
ArrayMaxNumberChar = 10000;
|
||||
(* Const *)
|
||||
symbolBracketStart = "{";
|
||||
symbolBracketEnd = "}";
|
||||
|
|
@ -40,13 +40,19 @@ VAR
|
|||
BEGIN
|
||||
FOR i := 0 TO LEN(self.NonTerminalKeys) - 1 DO
|
||||
IF Strings.Match(key, self.NonTerminalKeys[i]) THEN RETURN self.NonTerminalValues[i] END;
|
||||
Logger.Log(key);
|
||||
Logger.Log(self.NonTerminalKeys[i]);
|
||||
END;
|
||||
|
||||
RETURN NIL;
|
||||
END GetNonTerminal;
|
||||
|
||||
PROCEDURE Empty(VAR string: ARRAY OF CHAR);
|
||||
VAR
|
||||
i : LONGINT;
|
||||
BEGIN
|
||||
FOR i := 0 TO LEN(string) - 1 DO string[i] := 0X END;
|
||||
COPY("", string);
|
||||
END Empty;
|
||||
|
||||
PROCEDURE GetTerminal *(self: JsonTypePointer; key: ARRAY OF CHAR; VAR returnValue: ARRAY OF CHAR): BOOLEAN;
|
||||
VAR
|
||||
i: LONGINT;
|
||||
|
|
@ -106,10 +112,10 @@ END GetNoneTerminalKeys;
|
|||
*)
|
||||
|
||||
PROCEDURE PushDownString(
|
||||
string: ARRAY OF CHAR;
|
||||
startCharacter: CHAR;
|
||||
endCharacter: CHAR;
|
||||
i: LONGINT;
|
||||
string: ARRAY OF CHAR;
|
||||
startCharacter: CHAR;
|
||||
endCharacter: CHAR;
|
||||
i: LONGINT;
|
||||
VAR returnString: ARRAY OF CHAR): LONGINT;
|
||||
VAR
|
||||
characterStack: CharacterStack.CharacterStackType;
|
||||
|
|
@ -118,6 +124,7 @@ BEGIN
|
|||
NEW(characterStack);
|
||||
j := i;
|
||||
characterStack := CharacterStack.Create();
|
||||
Empty(returnString);
|
||||
REPEAT
|
||||
IF (characterStack.Count > 1) & (string[j] = endCharacter) THEN
|
||||
REPEAT UNTIL characterStack.pop(characterStack) = startCharacter;
|
||||
|
|
@ -125,12 +132,17 @@ BEGIN
|
|||
characterStack.push(characterStack, string[j]);
|
||||
INC(j);
|
||||
END;
|
||||
UNTIL characterStack.top(characterStack) = 0AX;
|
||||
UNTIL characterStack.Count = 0; (* do not trust top it btings OAX on EOL*)
|
||||
|
||||
IF j >= LEN(returnString) THEN
|
||||
Logger.Log('ERROR string out of range in JSON parser');
|
||||
END;
|
||||
ASSERT(j < LEN(returnString));
|
||||
|
||||
FOR k := i TO j DO
|
||||
returnString[k - i] := string[k];
|
||||
END;
|
||||
|
||||
|
||||
RETURN j; (* returning next symbol of quote *)
|
||||
END PushDownString;
|
||||
|
||||
|
|
@ -152,7 +164,7 @@ VAR
|
|||
self: JsonTypePointer;
|
||||
i, j, terminalIterator, noneTerminalIterator: LONGINT;
|
||||
characterStack: CharacterStack.CharacterStackType;
|
||||
key, val, nonTerminalVal, string: ARRAY ArrayMaxNumber OF CHAR;
|
||||
key, val, nonTerminalVal, string: ARRAY ArrayMaxNumberChar OF CHAR;
|
||||
symbol: CHAR;
|
||||
symbolStart: CHAR;
|
||||
quoteStart: BOOLEAN;
|
||||
|
|
@ -171,21 +183,21 @@ BEGIN
|
|||
terminalIterator := 0;
|
||||
noneTerminalIterator := 0;
|
||||
|
||||
|
||||
COPY("", key);
|
||||
COPY("", val);
|
||||
COPY("", nonTerminalVal);
|
||||
Empty(key);
|
||||
Empty(val);
|
||||
Empty(nonTerminalVal);
|
||||
Empty(string);
|
||||
|
||||
quoteStart := FALSE;
|
||||
|
||||
REPEAT
|
||||
IF (text[i] = symbolBracketStart) & (i = 0) THEN
|
||||
INC(i);
|
||||
Logger.Log("Starting Parse Json");
|
||||
(* Logger.Log("Starting Parse Json"); *)
|
||||
END;
|
||||
|
||||
IF symbol = symbolBracketStart THEN
|
||||
Logger.Log("End Parsing Json");
|
||||
(* Logger.Log("End Parsing Json"); *)
|
||||
END;
|
||||
|
||||
symbol := text[i];
|
||||
|
|
@ -202,16 +214,17 @@ BEGIN
|
|||
COPY(string, key);
|
||||
END;
|
||||
|
||||
COPY("", string);
|
||||
Empty(string);
|
||||
END;
|
||||
|
||||
IF (Strings.Length(key) > 0) & (Strings.Length(val) > 0) THEN
|
||||
deQuote(key, self.TerminalKeys[terminalIterator]);
|
||||
deQuote(val, self.TerminalsValues[terminalIterator]);
|
||||
|
||||
INC(terminalIterator);
|
||||
|
||||
COPY("", key);
|
||||
COPY("", val);
|
||||
Empty(key);
|
||||
Empty(val);
|
||||
END;
|
||||
|
||||
(* none terminals *)
|
||||
|
|
@ -221,27 +234,24 @@ BEGIN
|
|||
|
||||
IF (Strings.Length(string) > 0) & (symbol = symbolBracketStart) THEN
|
||||
IF Strings.Length(key) > 0 THEN
|
||||
COPY(string, nonTerminalVal)
|
||||
COPY(string, nonTerminalVal);
|
||||
END;
|
||||
|
||||
COPY("", string);
|
||||
Empty(string);
|
||||
END;
|
||||
|
||||
|
||||
|
||||
IF (Strings.Length(key) > 0) & (Strings.Length(nonTerminalVal) > 0) THEN
|
||||
deQuote(key, self.NonTerminalKeys[noneTerminalIterator]);
|
||||
self.NonTerminalValues[noneTerminalIterator] := Create(nonTerminalVal);
|
||||
|
||||
|
||||
INC(noneTerminalIterator);
|
||||
|
||||
COPY("", key);
|
||||
COPY("", nonTerminalVal);
|
||||
RETURN self;
|
||||
Empty(key);
|
||||
Empty(nonTerminalVal);
|
||||
END;
|
||||
|
||||
INC(i);
|
||||
UNTIL i > LEN(text) - 1;
|
||||
UNTIL (i >= LEN(text) - 1) OR (text[i] = 0X);
|
||||
|
||||
RETURN self;
|
||||
END Create;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
MODULE PackageResolver;
|
||||
IMPORT FileManager, http, Strings;
|
||||
IMPORT FileManager, http, Strings, Logger;
|
||||
|
||||
CONST ArrayMaxNumber = 10000;
|
||||
|
||||
|
|
@ -21,7 +21,7 @@ BEGIN
|
|||
Strings.Append(fileName, filePath);
|
||||
|
||||
http.get(host, port, filePath, returnValue);
|
||||
|
||||
http.getClean(returnValue, returnValue);
|
||||
(* TODO: introduce write to file functionality *)
|
||||
(* FileManager.CreateDirectory(packageName); *)
|
||||
(* FileManager.Write(packageName + fileName, returnValue); *)
|
||||
|
|
|
|||
|
|
@ -2,5 +2,5 @@ MODULE Settings;
|
|||
CONST
|
||||
packageFileName* = "VersionFile.json";
|
||||
host* = "localhost";
|
||||
port* = "8000";
|
||||
port* = "80";
|
||||
END Settings.
|
||||
2
http.Mod
2
http.Mod
|
|
@ -77,7 +77,7 @@ BEGIN
|
|||
(i > Strings.Length(buff));
|
||||
END getHeader;
|
||||
|
||||
PROCEDURE get *(host, path, port: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR);
|
||||
PROCEDURE get *(host, port, path: ARRAY OF CHAR; VAR buff: ARRAY OF CHAR);
|
||||
VAR
|
||||
socket : Internet.Socket;
|
||||
connectionFlag: BOOLEAN;
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ BEGIN
|
|||
Out.String("-");
|
||||
LogNormalized(sec, 2);
|
||||
Out.String(" :- ");
|
||||
FOR i:=0 TO Strings.Length(buff) DO
|
||||
FOR i := 0 TO Strings.Length(buff) - 1 DO
|
||||
(* Out.Char(" ");
|
||||
Out.Int(ORD(buff[i]), 4);
|
||||
Out.Char("-"); *)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue