Skip to content

Commit

Permalink
Added support for Peoplecode (#2302)
Browse files Browse the repository at this point in the history
  • Loading branch information
RunDevelopment committed Apr 27, 2020
1 parent fec39bc commit bd4d816
Show file tree
Hide file tree
Showing 14 changed files with 414 additions and 3 deletions.
2 changes: 1 addition & 1 deletion components.js

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions components.json
Expand Up @@ -755,6 +755,11 @@
"alias": "px",
"owner": "RunDevelopment"
},
"peoplecode": {
"title": "PeopleCode",
"alias": "pcode",
"owner": "RunDevelopment"
},
"perl": {
"title": "Perl",
"owner": "Golmote"
Expand Down
42 changes: 42 additions & 0 deletions components/prism-peoplecode.js
@@ -0,0 +1,42 @@
Prism.languages.peoplecode = {
'comment': RegExp([
// C-style multiline comments
/\/\*[\s\S]*?\*\//.source,
// REM comments
/\bREM[^;]*;/.source,
// Nested <* *> comments
/<\*(?:[^<*]|\*(?!>)|<(?!\*)|<\*(?:(?!\*>)[\s\S])*\*>)*\*>/.source,
// /+ +/ comments
/\/\+[\s\S]*?\+\//.source,
].join("|")),
'string': {
pattern: /'(?:''|[^'\r\n])*'(?!')|"(?:""|[^"\r\n])*"(?!")/,
greedy: true
},
'variable': /%\w+/,
'function-definition': {
pattern: /((?:^|[^\w-])(?:function|method)\s+)\w+/i,
lookbehind: true,
alias: 'function'
},
'class-name': {
pattern: /((?:^|[^-\w])(?:as|catch|class|component|create|extends|global|implements|instance|local|of|property|returns)\s+)\w+(?::\w+)*/i,
lookbehind: true,
inside: {
'punctuation': /:/
}
},
'keyword': /\b(?:abstract|alias|as|catch|class|component|constant|create|declare|else|end-(?:class|evaluate|for|function|get|if|method|set|try|while)|evaluate|extends|for|function|get|global|implements|import|instance|if|library|local|method|null|of|out|peopleCode|private|program|property|protected|readonly|ref|repeat|returns?|set|step|then|throw|to|try|until|value|when(?:-other)?|while)\b/i,
'operator-keyword': {
pattern: /\b(?:and|not|or)\b/i,
alias: 'operator'
},
'function': /[_a-z]\w*(?=\s*\()/i,

'boolean': /\b(?:false|true)\b/i,
'number': /\b\d+(?:\.\d+)?\b/,
'operator': /<>|[<>]=?|!=|\*\*|[-+*/|=@]/,
'punctuation': /[:.;,()[\]]/
};

Prism.languages.pcode = Prism.languages.peoplecode;
1 change: 1 addition & 0 deletions components/prism-peoplecode.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

128 changes: 128 additions & 0 deletions examples/prism-peoplecode.html
@@ -0,0 +1,128 @@
<h2>Full example</h2>
<pre><code>/* Source: https://github.com/chrismalek/psoftToXML/blob/master/psftToXML.pcode */

class psoftToXML
method RowsetToXML(&parentNode As XmlNode, &rowSetIn As Rowset) Returns XmlNode;
method RecordToXML(&parentNode As XmlNode, &recordIn As Record) Returns XmlNode;
method FieldToXML(&ParentNode As XmlNode, &fieldIn As Field) Returns XmlNode;
method RowToXML(&ParentNode As XmlNode, &rowIn As Row) Returns XmlNode;
method psoftToXML();
property array of string fieldsToSkip;
private
instance string &amp;psObjectTypeString;
end-class;

method psoftToXML
&psObjectTypeString = "PSOBJECTTYPE";
%This.fieldsToSkip = CreateArrayRept("", 0);
end-method;

method FieldToXML
/+ &ParentNode as XmlNode, +/
/+ &fieldIn as Field +/
/+ Returns XmlNode +/
Local XmlNode &amp;outNode;

Local XmlNode &fldNode, &amp;tempNode;

&fldNode = &ParentNode.AddElement(&fieldIn.Name);

&fldNode.AddAttribute("PSFIELDTYPE", &fieldIn.Type);
&fldNode.AddAttribute(%This.psObjectTypeString, "FIELD");

If &fieldIn.IsEditXlat Then
&fldNode.AddAttribute("LongTranslateValue", &fieldIn.LongTranslateValue);
End-If;

Evaluate &fieldIn.Type
When = "LONGCHAR"
When = "IMAGE"
When = "IMAGEREFERENCE"
If All(&fieldIn.Value) Then

&tempNode = &fldNode.AddCDataSection(&fieldIn.Value);
End-If;
Break;

When = "NUMBER";
&tempNode = &fldNode.AddText(&fieldIn.Value);
Break;
When-Other
If All(&fieldIn.Value) Then
&tempNode = &fldNode.AddText(&fieldIn.Value);
End-If;

Break;
End-Evaluate;

Return &amp;outNode;
end-method;


method RecordToXML
/+ &parentNode as XmlNode, +/
/+ &recordIn as Record +/
/+ Returns XmlNode +/

Local XmlNode &outNode, &amp;fieldNode;

Local integer &amp;i;

&outNode = &parentNode.AddElement(&recordIn.Name);

&outNode.AddAttribute(%This.psObjectTypeString, "RECORD");

For &i = 1 To &recordIn.FieldCount

If %This.fieldsToSkip.Find(&recordIn.GetField(&i).Name) &lt;= 0 Then
&fieldNode = %This.FieldToXML(&outNode, &recordIn.GetField(&i));
End-If;
End-For;

Return &amp;outNode;
end-method;


method RowToXML
/+ &ParentNode as XmlNode, +/
/+ &rowIn as Row +/
/+ Returns XmlNode +/

Local XmlNode &outNode, &amp;recNode;

Local integer &amp;i;

&outNode = &ParentNode.AddElement("ROW");
&outNode.AddAttribute(&psObjectTypeString, "ROW");
&outNode.AddAttribute("RowNumber", String(&rowIn.RowNumber));

For &i = 1 To &rowIn.RecordCount
&recNode = %This.RecordToXML(&outNode, &rowIn.GetRecord(&i));
End-For;

Local XmlNode &amp;rsNode;
For &i = 1 To &rowIn.ChildCount
&rsNode = %This.RowsetToXML(&outNode, &rowIn.GetRowset(&i));

End-For;

Return &amp;outNode;
end-method;


method RowsetToXML
/+ &parentNode as XmlNode, +/
/+ &rowSetIn as Rowset +/
/+ Returns XmlNode +/

Local XmlNode &outNode, &amp;rowNode;

Local integer &amp;i;
&outNode = &parentNode.AddElement(&rowSetIn.DBRecordName);
&outNode.AddAttribute(&psObjectTypeString, "ROWSET");

For &i = 1 To &rowSetIn.ActiveRowCount
&rowNode = %This.RowToXML(&outNode, &rowSetIn.GetRow(&i));
End-For;
Return &amp;outNode;
end-method;</code></pre>
1 change: 1 addition & 0 deletions plugins/autoloader/prism-autoloader.js
Expand Up @@ -176,6 +176,7 @@
"objc": "objectivec",
"objectpascal": "pascal",
"px": "pcaxis",
"pcode": "peoplecode",
"pq": "powerquery",
"mscript": "powerquery",
"py": "python",
Expand Down
2 changes: 1 addition & 1 deletion plugins/autoloader/prism-autoloader.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions plugins/show-language/prism-show-language.js
Expand Up @@ -120,6 +120,8 @@
"objectpascal": "Object Pascal",
"pcaxis": "PC-Axis",
"px": "PC-Axis",
"peoplecode": "PeopleCode",
"pcode": "PeopleCode",
"php": "PHP",
"phpdoc": "PHPDoc",
"php-extras": "PHP Extras",
Expand Down

0 comments on commit bd4d816

Please sign in to comment.