diff --git a/.idea/feragstring.iml b/.idea/feragstring.iml index c956989..5e764c4 100644 --- a/.idea/feragstring.iml +++ b/.idea/feragstring.iml @@ -1,5 +1,6 @@ + diff --git a/README.md b/README.md index afa9480..fd7d6e5 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -[![Go Report Card](https://goreportcard.com/badge/github.com/jakoubek/feragstring)](https://goreportcard.com/report/github.com/jakoubek/feragstring) - # feragstring *feragstring* is a Go package for creating a FERAG string file programmatically. If you don't know what FERAG (the company) or a FERAG string is you probably don't need this package ;-) @@ -83,7 +81,7 @@ feragString := fs.PrintOut() ## Installation ```bash -go get -u github.com/jakoubek/feragstring +go get -u git.sr.ht/~jakoubek/feragstring ``` ## Need commercial support? diff --git a/ferag.go b/ferag.go index a4ce7be..75563fe 100644 --- a/ferag.go +++ b/ferag.go @@ -84,8 +84,10 @@ func (fs *FeragString) PrintOut() string { // AddProductReference adds a Product Reference instance to the list // of product references of the FeragString func (fs *FeragString) AddProductReference(pr *ProductReference) error { - fs.ProductReferencesNr++ - pr.SetProductReferenceNumber(fs.ProductReferencesNr) + if pr.productReferenceNumber == 0 { + fs.ProductReferencesNr++ + pr.SetProductReferenceNumber(fs.ProductReferencesNr) + } if pr.productReferenceNumber == 1 && pr.productUsageType == 0 { pr.SetProductUsageType(1) } diff --git a/go.mod b/go.mod index e29fa7b..ad81db9 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,3 @@ -module github.com/jakoubek/feragstring +module git.sr.ht/~jakoubek/feragstring go 1.14 diff --git a/product_reference.go b/product_reference.go index 8e53de2..0f205b4 100644 --- a/product_reference.go +++ b/product_reference.go @@ -31,6 +31,9 @@ func NewMissingParameter(missingRate, missingSize int) MissingParameter { } func (pr *ProductReference) IssueReference() string { + if pr.issueReference == "" { + return "" + } return fmt.Sprintf("+99195%-8s", pr.issueReference) } @@ -47,7 +50,7 @@ func (pr *ProductReference) SetMissingParameter(missingParameter MissingParamete } func (pr *ProductReference) Scatter() string { - return fmt.Sprintf("+99102%06d", pr.scatter) + return fmt.Sprintf("+99276%06d", pr.scatter) } func (pr *ProductReference) SetScatter(scatter int) { @@ -119,13 +122,17 @@ func (pr *ProductReference) SetProductName(productName string) { } func (pr *ProductReference) ProductReferenceNumber() string { - return fmt.Sprintf("+41%02d", pr.productReferenceNumber) + return fmt.Sprintf("+99141%03d", pr.productReferenceNumber) } func (pr *ProductReference) SetProductReferenceNumber(productReferenceNumber int) { pr.productReferenceNumber = productReferenceNumber } +func (pr *ProductReference) GetProductReferenceNumber() int { + return pr.productReferenceNumber +} + func NewProductReference() *ProductReference { pr := ProductReference{ FeragMessage: FeragMessage{"2450", "!"}, @@ -147,7 +154,7 @@ func (pr *ProductReference) Payload() string { data += pr.Supervision() data += pr.Overlap() data += pr.FeedingMode() - data += pr.Scatter() + //data += pr.Scatter() data += pr.MissingParameter() data += pr.IssueReference() return data diff --git a/production_drop.go b/production_drop.go index 2ae7a01..34bcc90 100644 --- a/production_drop.go +++ b/production_drop.go @@ -2,15 +2,25 @@ package feragstring import "fmt" +// ProductionDrop is the struct for one production drop +// underneath a route type ProductionDrop struct { FeragMessage - agentName string - numberOfCopies int - ControlCharacters ControlCharacterSet - dontProduce bool - topsheetData string + agentName string + numberOfCopies int + ControlCharacters ControlCharacterSet + limit int + maxStack int + standard int + parameterN int + maxBundle int + parameterSz int + dontProduce bool + topsheetData string + productReferenceNumbers []int } +// TopsheetData returns the formatted topsheet data segment func (pd *ProductionDrop) TopsheetData() string { if pd.topsheetData == "" { return "" @@ -30,30 +40,95 @@ func (pd *ProductionDrop) TopsheetData() string { return message(&fm, tsdSegment) } +func (pd *ProductionDrop) MaxBundle() string { + return fmt.Sprintf("+34%04d", pd.maxBundle) +} + +func (pd *ProductionDrop) SetMaxBundle(maxBundle int) { + pd.maxBundle = maxBundle +} + +func (pd *ProductionDrop) ParameterN() string { + return fmt.Sprintf("+33%04d", pd.parameterN) +} + +func (pd *ProductionDrop) SetParameterN(parameterN int) { + pd.parameterN = parameterN +} + +func (pd *ProductionDrop) Standard() string { + return fmt.Sprintf("+32%04d", pd.standard) +} + +func (pd *ProductionDrop) SetStandard(standard int) { + pd.standard = standard +} + +func (pd *ProductionDrop) MaxStack() string { + return fmt.Sprintf("+31%04d", pd.maxStack) +} + +func (pd *ProductionDrop) SetMaxStack(maxStack int) { + pd.maxStack = maxStack +} + +func (pd *ProductionDrop) Limit() string { + return fmt.Sprintf("+30%04d", pd.limit) +} + +func (pd *ProductionDrop) SetLimit(limit int) { + pd.limit = limit +} + +func (pd *ProductionDrop) ParameterSz() string { + return fmt.Sprintf("+35%04d", pd.parameterSz) +} + +func (pd *ProductionDrop) SetParameterSz(parameterSz int) { + pd.parameterSz = parameterSz +} + +// SetTopsheetData sets the topsheet data to a given string func (pd *ProductionDrop) SetTopsheetData(topsheetData string) { pd.topsheetData = topsheetData } -func (pd *ProductionDrop) SetDontProduce() { - pd.dontProduce = true +// ProductReferenceNumbers returns the string of TSL-formatted ProductReferenceNumbers +func (pd *ProductionDrop) ProductReferenceNumbers() string { + var prreffmt string + for _, pr := range pd.productReferenceNumbers { + prreffmt += fmt.Sprintf("+99141%03d", pr) + } + return prreffmt } +// AddProductReferenceNumber adds a numeric ProductReferenceNumber to the production drop +func (pd *ProductionDrop) AddProductReferenceNumber(productReferenceNumber int) { + pd.productReferenceNumbers = append(pd.productReferenceNumbers, productReferenceNumber) +} + +// NumberOfCopies returns the formatted number of copies in the route func (pd *ProductionDrop) NumberOfCopies() string { return fmt.Sprintf("+13%05d", pd.numberOfCopies) } +// SetNumberOfCopies sets the number of copies in the production drop func (pd *ProductionDrop) SetNumberOfCopies(numberOfCopies int) { pd.numberOfCopies = numberOfCopies } +// AgentName returns the formatted agent name func (pd *ProductionDrop) AgentName() string { return fmt.Sprintf("+12%-10s", pd.agentName) } +// SetAgentName sets the agent name to a given string func (pd *ProductionDrop) SetAgentName(agentName string) { pd.agentName = agentName } +// NewProductionDrop instantiates a new production drop +// struct and returns a pointer to it. func NewProductionDrop() *ProductionDrop { pd := ProductionDrop{ FeragMessage: FeragMessage{ @@ -65,13 +140,24 @@ func NewProductionDrop() *ProductionDrop { return &pd } +// Payload returns the formatted FERAG string +// for embedding in the message func (pd *ProductionDrop) Payload() string { data := pd.AgentName() data += pd.NumberOfCopies() data += pd.ControlCharacters.GetControlCharactersMessage() + data += pd.Limit() + data += pd.MaxStack() + data += pd.Standard() + data += pd.ParameterN() + data += pd.MaxBundle() + data += pd.ParameterSz() + data += pd.ProductReferenceNumbers() return data } +// Message returns the formatted FERAG string +// for the production drop func (pd *ProductionDrop) Message() string { message := pd.FeragMessage.MessageTemplate() return message(&pd.FeragMessage, pd.Payload()) diff --git a/route.go b/route.go index 41cefb3..72980f7 100644 --- a/route.go +++ b/route.go @@ -117,6 +117,10 @@ func (ri *Route) SetTopsheetTemplateDirectory(topsheetTemplateDirectory int) { ri.topsheetTemplateDirectory = topsheetTemplateDirectory } +func (ri *Route) SetEditionName(editionName string) { + ri.editionName = editionName +} + func NewRoute() *Route { r := Route{ rampNumber: -1, diff --git a/title_info.go b/title_info.go index 366d3e2..2478c21 100644 --- a/title_info.go +++ b/title_info.go @@ -11,6 +11,7 @@ type TitleInfo struct { printObjectName string titleName string publicationDate time.Time + issueReference string countryCode string printObjectColor string additionalInfo string @@ -97,12 +98,24 @@ func (ti *TitleInfo) Payload() string { data := ti.PrintObjectName() data += ti.TitleName() data += ti.PublicationDate() + data += ti.IssueReference() data += ti.CountryCode() data += ti.PrintObjectColor() data += ti.AdditionalInfo() return data } +func (ti *TitleInfo) SetIssueReference(issueReference string) { + ti.issueReference = issueReference +} + +func (ti *TitleInfo) IssueReference() string { + if ti.issueReference == "" { + return "" + } + return fmt.Sprintf("+99195%8s", ti.issueReference) +} + // PrintObjectName returns the print object name segment (+93) FERAG-formatted func (ti *TitleInfo) PrintObjectName() string { if ti.printObjectName == "" {