Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 37x 37x 37x 37x 37x 37x 37x 37x 37x 3x 3x 3x 3x 34x 34x 37x 1x 1x 1x 1x 33x 37x 37x 37x 4x 4x 4x 4x 4x 4x 4x 37x 10x 10x 29x 6x 6x 6x 37x 1x | import * as Expressions from "../../2_statements/expressions";
import {StatementNode} from "../../nodes";
import {IdentifierMeta, TypedIdentifier} from "../../types/_typed_identifier";
import {CharacterType, StructureType} from "../../types/basic";
import {StatementSyntax} from "../_statement_syntax";
import {SyntaxInput, syntaxIssue} from "../_syntax_input";
export class SelectionScreen implements StatementSyntax {
public runSyntax(node: StatementNode, input: SyntaxInput) {
const blockNode = node.findFirstExpression(Expressions.BlockName);
const blockToken = blockNode?.getFirstToken();
const blockName = blockNode?.concatTokens();
const concat = node.concatTokens().toUpperCase();
const maxNameLengthAllowed = concat.includes("BEGIN OF TABBED BLOCK") ? 16 : 20;
if (blockName !== undefined && blockName.length > maxNameLengthAllowed) {
const message = "SELECTION-SCREEN block name too long, " + blockName;
input.issues.push(syntaxIssue(input, node.getFirstToken(), message));
return;
}
const field = node.findFirstExpression(Expressions.InlineField);
if (field !== undefined && field.concatTokens().length > 8) {
const message = "SELECTION-SCREEN name too long, " + field.concatTokens();
input.issues.push(syntaxIssue(input, field.getFirstToken(), message));
return;
}
const fieldName = field?.getFirstToken();
if (concat.includes("BEGIN OF TABBED BLOCK") && blockToken) {
const type = new StructureType([
{name: "PROG", type: new CharacterType(40)},
{name: "DYNNR", type: new CharacterType(4)},
{name: "ACTIVETAB", type: new CharacterType(132)},
]);
input.scope.addIdentifier(new TypedIdentifier(blockToken, input.filename, type, [IdentifierMeta.SelectionScreenTab]));
} else if (concat.startsWith("SELECTION-SCREEN TAB") && fieldName) {
const id = new TypedIdentifier(fieldName, input.filename, new CharacterType(83), [IdentifierMeta.SelectionScreenTab]);
input.scope.addNamedIdentifier(field!.concatTokens(), id);
} else if (fieldName) {
const id = new TypedIdentifier(fieldName, input.filename, new CharacterType(83));
input.scope.addNamedIdentifier(field!.concatTokens(), id);
}
}
}
|