Skip to content

Commit

Permalink
update parser grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
scottafk committed Feb 22, 2024
1 parent 556a521 commit 025a454
Show file tree
Hide file tree
Showing 20 changed files with 121 additions and 52 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
.DS_Store
.vscode
app-tool
.antlr
/gen
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2021 IBAX
Copyright (c) 2024 IBAX

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
39 changes: 33 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# Applications Packager

G and Chain files packager for import into the Ecosystems created in the IBAX blockchain.
## Description

Utilite that can convert import json bundle from/to files of sim, ptl, csv, json.

### struct.dot
Expand Down Expand Up @@ -28,7 +29,7 @@ Binary files can be found in the current directory

Execute the command

```
```shell
$ ./app-tool basic.json
```

Expand All @@ -41,19 +42,45 @@ The **basic** folder is generated in the current directory
and the **config.json** structure in the directory look like *./app-tool/basic/config.json*.

Execute the command
```
```shell
$ ./app-tool basic/
```

The **basic.json** folder is generated in the current directory

### 3. Split json file by number

Execute the command
```
Execute the command, where **40** - number of files.
```shell
$ ./app-tool -s -n 40 basic.json

//output:
output:
basic1.json
basic2.json
```

## Command line options

if you invoke the command without line arguments, the help will be displayed.

```shell
$ ./app-tool -h
Usage of ./app-tool:
-d debug
-g make graphical structure in dot-file
-i string
input (default ".")
-input string
-i, path for input files, filename for pack and dirname/ (slashed) for unpack (default ".")
-n uint
split json file by number
-o string
-output (default "output")
-output string
-o, output filename for JSON if input file name not pointed (default "output")
-s split json file by type
-u -unpack
-unpack
-u, unpacking mode
-v -version
```
23 changes: 0 additions & 23 deletions basic/struct.dot

This file was deleted.

4 changes: 2 additions & 2 deletions config.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@ package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
)

func readConfig(out *exportFile) {
config := exportFile{}
absConfPath, _ := filepath.Abs(inputName)
bs, err := ioutil.ReadFile(filepath.Join(absConfPath, configName))
bs, err := os.ReadFile(filepath.Join(absConfPath, configName))
if err != nil {
if debug {
fmt.Println("config file not found. used default values")
Expand Down
1 change: 1 addition & 0 deletions consts.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ type dataConf struct {
}

type importStruct struct {
FullPath string `json:",omitempty"`
Name string `json:",omitempty"`
Confirmation string `json:",omitempty"`
Conditions string `json:",omitempty"`
Expand Down
8 changes: 7 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
module github.com/ibax-io/app-tool

go 1.17
go 1.20

require (
github.com/IBAX-io/needle v0.0.0-20240222043134-6b6cfefba416
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e
github.com/spkg/bom v1.0.0
github.com/tmc/dot v0.0.0-20210901225022-f9bc17da75c0
)

require (
github.com/antlr4-go/antlr/v4 v4.13.0 // indirect
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect
)
12 changes: 9 additions & 3 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,16 +1,22 @@
github.com/IBAX-io/needle v0.0.0-20240222043134-6b6cfefba416 h1:yPqKp3nU7TePHtPu8+I8vMl05LiPl3KAQOdi/14T7hY=
github.com/IBAX-io/needle v0.0.0-20240222043134-6b6cfefba416/go.mod h1:eUW8wuBdbJYJ1CeZ4vnpLRvgz2rMPH6AGFM2g2sbGOQ=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e h1:wSQCJiig/QkoUnpvelSPbLiZNWvh2yMqQTQvIQqSUkU=
github.com/andlabs/ui v0.0.0-20200610043537-70a69d6ae31e/go.mod h1:5G2EjwzgZUPnnReoKvPWVneT8APYbyKkihDVAHUi0II=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/antlr4-go/antlr/v4 v4.13.0 h1:lxCg3LAv+EUK6t1i0y1V6/SLeUi0eKEKdhQAlS8TVTI=
github.com/antlr4-go/antlr/v4 v4.13.0/go.mod h1:pfChB/xh/Unjila75QW7+VU4TSnWnnk9UTnmpPaOR2g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/spkg/bom v1.0.0 h1:S939THe0ukL5WcTGiGqkgtaW5JW+O6ITaIlpJXTYY64=
github.com/spkg/bom v1.0.0/go.mod h1:lAz2VbTuYNcvs7iaFF8WW0ufXrHShJ7ck1fYFFbVXJs=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/tmc/dot v0.0.0-20210901225022-f9bc17da75c0 h1:hwIpbdjckSFqmZ6hod7WZgGR7tVVrSUzZrBfNZl7AOg=
github.com/tmc/dot v0.0.0-20210901225022-f9bc17da75c0/go.mod h1:DV83s9TfD0rgoKcqvDmM+aYdz6BXmTkquwd+bI/8tlo=
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU=
golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
5 changes: 2 additions & 3 deletions graph.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package main

import (
"fmt"
"io/ioutil"
"os"
"path/filepath"
"regexp"
Expand Down Expand Up @@ -57,7 +56,7 @@ func createGraph(filename string) {
graphList := []graphStruct{}
dir := filepath.Dir(filename)
dirAbs, _ := filepath.Abs(dir)
files, err := ioutil.ReadDir(dirAbs)
files, err := os.ReadDir(dirAbs)
if err != nil {
return
}
Expand Down Expand Up @@ -89,7 +88,7 @@ func createGraph(filename string) {
}

func dirToGraph(path string) (out []graphStruct) {
files, err := ioutil.ReadDir(path)
files, err := os.ReadDir(path)
if err != nil {
return
}
Expand Down
20 changes: 14 additions & 6 deletions pack.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"regexp"
Expand All @@ -13,9 +12,10 @@ import (

func packJSON(path string) {
out := packDir(path)

var arr []string
arr = append(arr)
path = filepath.Dir(path)
files, err := ioutil.ReadDir(path)
files, err := os.ReadDir(path)
if err != nil {
return
}
Expand Down Expand Up @@ -51,6 +51,12 @@ func packJSON(path string) {
case dirPage:
out.Pages = append(out.Pages, dir.Pages...)
case dirCon:
for _, cont := range dir.Contracts {
err := ParserGrammarFile(cont.FullPath)
if err != nil {
panic(err)
}
}
out.Contracts = append(out.Contracts, dir.Contracts...)
}
}
Expand Down Expand Up @@ -96,6 +102,7 @@ func packJSON(path string) {
abspath := filepath.Join(abs, structFileName)
createGraph(abspath)
}
fmt.Println("pack complete!\noutput file:", outputName)
}
}
func packDir(path string) (out exportFile) {
Expand All @@ -108,7 +115,7 @@ func packDir(path string) (out exportFile) {
out.Parameters = []importStruct{}
out.Tables = []importStruct{}

files, err := ioutil.ReadDir(path)
files, err := os.ReadDir(path)
if err != nil {
return
}
Expand Down Expand Up @@ -216,14 +223,15 @@ func encodeStd(path, fname string) (result importStruct) {
ext := filepath.Ext(fname)
name := fname[:len(fname)-len(ext)]
fpath := filepath.Join(path, fname)
result.FullPath = fpath
result.Name = name
result.Value = file2str(fpath)
result.Conditions = defaultCondition
return
}

func file2str(filename string) (str string) {
bs, err := ioutil.ReadFile(filename)
bs, err := os.ReadFile(filename)
if err != nil {
return
}
Expand All @@ -232,7 +240,7 @@ func file2str(filename string) (str string) {
}

func file2data(filename string) (result dataStruct) {
bs, err := ioutil.ReadFile(filename)
bs, err := os.ReadFile(filename)
if err != nil {
return
}
Expand Down
27 changes: 27 additions & 0 deletions parser.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package main

import (
parser "github.com/IBAX-io/needle/grammar"
)

var filePath string

func ParserGrammarBase(data string) error {
p, err := parser.NewParserBase([]byte(data), "")
if err != nil {
return err
}
p.Parse()
p.PrintlnError()
return nil
}

func ParserGrammarFile(filePath string) error {
p, err := parser.NewParserFile(filePath)
if err != nil {
return err
}
p.Parse()
p.PrintlnError()
return nil
}
6 changes: 5 additions & 1 deletion basic.json → tests/basic.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,14 @@
"name": "Basic application",
"data": [
{
"FullPath": "tests/basic/snippets/snippet.ptl",
"Name": "snippet",
"Conditions": "ContractConditions(\"MainCondition\")",
"Value": "SetTitle(snippet)",
"Type": "snippets"
},
{
"FullPath": "tests/basic/menus/default_menu.ptl",
"Name": "default_menu",
"Conditions": "ContractAccess(\"@1EditMenu\")",
"Value": "MenuItem(Title:$profile$, Page:profile_view, Icon:\"fa icon-user\")\nMenuItem(Title:$membership$, Page:members_list, Icon:\"fa icon-people\")\nMenuGroup(Title:$notifications$, Icon:\"icon-arrow-right\"){\n MenuItem(Title:$single_notifics$, Page:notifications_single, Icon:\"fa fa-bell-o\")\n MenuItem(Title:$role_notifics$, Page:notifications_roles, Icon:\"fa fa-bullhorn\")\n MenuItem(Title:$test_page$, Page:notifications_testpage, Icon:\"icon-settings\")\n}\nMenuItem(Title:$roles$, Page:roles_list, Icon:\"fa fa-list-ul\")\nMenuGroup(Title:$voting$, Icon:\"icon-arrow-right\"){\n MenuItem(Title:$voting$, Page:voting_list, Icon:\"fa fa-edit\")\n}",
Expand All @@ -20,6 +22,7 @@
"Type": "tables"
},
{
"FullPath": "tests/basic/app_params/notification_closure.csv",
"Name": "notification_closure",
"Conditions": "ContractConditions(\"MainCondition\")",
"Value": "single,multiple",
Expand All @@ -33,9 +36,10 @@
"Type": "pages"
},
{
"FullPath": "tests/basic/contracts/Profile_Edit.sim",
"Name": "Profile_Edit",
"Conditions": "ContractConditions(\"MainCondition\")",
"Value": "contract Profile_Edit {\n data {\n member_name string\n member_image bytes \"file\"\n information string \"optional\"\n }\n\n conditions {\n var app_name string\n app_name = \"Basic application\" \n\n $member_map = DBFind(\"members\").Where(\"id = $\", $key_id).Row()\n $app_id = DBFind(\"applications\").Where(\"name = $ AND deleted = 0\", app_name).One(\"id\")\n\n if !$member_map {\n // check member_name \n $member_id = DBFind(\"members\").Where(\"member_name = $\", $member_name).One(\"id\")\n if $member_id {\n warning \"This member name is busy. Enter another member name, please\"\n }\n }\n }\n\n action {\n var memberInfo map\n var image_id int\n var image_name string\n image_name = \"avatar\" \n\n if $member_map {\n image_id = Int($member_map[\"image_id\"]) \n image_id = @1UploadBinary(\"Name,Data,ApplicationId\", image_name, $member_image, Int($app_id))\n DBUpdate(\"members\", Int($member_map[\"id\"]), \"member_info->information,image_id\", $information, image_id)\n } else {\n memberInfo[\"information\"] = $information\n image_id = @1UploadBinary(\"Name,Data,ApplicationId\", image_name, $member_image, Int($app_id))\n DBInsert(\"members\", \"id,member_name,image_id,member_info\", $key_id, $member_name, image_id, memberInfo)\n }\n }\n}",
"Value": "contract Profile_Edit {\n data {\n member_name string\n member_image bytes \"file\"\n information string \"optional\"\n }\n\n conditions {\n var app_name string\n app_name = \"Basic application\"\n\n $member_map = DBFind(\"members\").Where(\"id = $\", $key_id).Row()\n $app_id = DBFind(\"applications\").Where(\"name = $ AND deleted = 0\", app_name).One(\"id\")\n/**\n* dadada\n*/\n if !$member_map {\n // check member_name\n $member_id = DBFind(\"members\").Where(\"member_name = $\", $member_name).One(\"id\")\n if $member_id {\n warning \"This member name is busy. Enter another member name, please\"\n }\n }\n }\n\n action {\n var memberInfo map\n var image_id int\n var image_name string\n image_name = \"avatar\"\n\n if $member_map {\n image_id = Int($member_map[\"image_id\"])\n image_id = @1UploadBinary(\"Name,Data,ApplicationId\", image_name, $member_image, Int($app_id))\n DBUpdate(\"members\", Int($member_map[\"id\"]), \"member_info->information,image_id\", $information, image_id)\n } else {\n memberInfo[\"information\"] = $information\n image_id = @1UploadBinary(\"Name,Data,ApplicationId\", image_name, $member_image, Int($app_id))\n DBInsert(\"members\", \"id,member_name,image_id,member_info\", $key_id, $member_name, image_id, memberInfo)\n }\n }\n}",
"Type": "contracts"
}
]
Expand Down
File renamed without changes.
7 changes: 6 additions & 1 deletion basic/config.json → tests/basic/config.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
{
"name": "Basic application",
"snippets": null,
"snippets": [
{
"Name": "snippet",
"Conditions": "ContractConditions(\"MainCondition\")"
}
],
"contracts": [
{
"Name": "Profile_Edit",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,13 @@ contract Profile_Edit {

conditions {
var app_name string
app_name = "Basic application"
app_name = "Basic application"

$member_map = DBFind("members").Where("id = $", $key_id).Row()
$app_id = DBFind("applications").Where("name = $ AND deleted = 0", app_name).One("id")

if !$member_map {
// check member_name
// check member_name
$member_id = DBFind("members").Where("member_name = $", $member_name).One("id")
if $member_id {
warning "This member name is busy. Enter another member name, please"
Expand All @@ -25,10 +25,10 @@ contract Profile_Edit {
var memberInfo map
var image_id int
var image_name string
image_name = "avatar"
image_name = "avatar"

if $member_map {
image_id = Int($member_map["image_id"])
image_id = Int($member_map["image_id"])
image_id = @1UploadBinary("Name,Data,ApplicationId", image_name, $member_image, Int($app_id))
DBUpdate("members", Int($member_map["id"]), "member_info->information,image_id", $information, image_id)
} else {
Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Loading

0 comments on commit 025a454

Please sign in to comment.