Add Pascal support

Fixes #365
pull/369/head
Wilfred Hughes 2022-09-13 00:05:01 +07:00
parent 4c29035138
commit 3c51f58d8e
10 changed files with 100 additions and 16 deletions

@ -7,7 +7,7 @@ over unchanged punctuation.
### Parsing
Added support for QML.
Added support for Pascal and QML.
ZIP files are now always treated as binary files.

@ -273,15 +273,20 @@ fn main() {
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-php",
src_dir: "vendor/tree-sitter-php-src",
extra_files: vec!["scanner.cc"],
name: "tree-sitter-pascal",
src_dir: "vendor/tree-sitter-pascal-src",
extra_files: vec![],
},
TreeSitterParser {
name: "tree-sitter-perl",
src_dir: "vendor/tree-sitter-perl-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-php",
src_dir: "vendor/tree-sitter-php-src",
extra_files: vec!["scanner.cc"],
},
TreeSitterParser {
name: "tree-sitter-python",
src_dir: "vendor/tree-sitter-python-src",

@ -130,6 +130,9 @@ sample_files/ocaml_before.ml sample_files/ocaml_after.ml
sample_files/outer_delimiter_before.el sample_files/outer_delimiter_after.el
73130b8572a4f17fa6cf828f74e226ce -
sample_files/pascal_before.pascal sample_files/pascal_after.pascal
1f5c798497fed93e4dca7ee7ee2cd6d4 -
sample_files/perl_before.pl sample_files/perl_after.pl
a1cf6e4742550262a80725ccf76a6b3f -

@ -0,0 +1,29 @@
// From Rosetta Code https://rosettacode.org/wiki/Evaluate_binomial_coefficients#Delphi
// Under CC-BY-SA license.
program Binomial;
{$APPTYPE CONSOLE}
function BinomialCoff(N, K: Cardinal): Cardinal;
var
L: Cardinal;
begin
if N < K then
Result:= 0 // Error
else begin
Result:= 1;
L:= 0;
while L < K do begin
Result:= Result * (N - 1);
Inc(L);
Result:= Result div L;
end;
end;
end;
begin
Writeln('C(5,3) is ', BinomialCoff(5, 3));
ReadLn;
end.

@ -0,0 +1,31 @@
// From Rosetta Code https://rosettacode.org/wiki/Evaluate_binomial_coefficients#Delphi
// Under CC-BY-SA license.
program Binomial;
{$APPTYPE CONSOLE}
function BinomialCoff(N, K: Cardinal): Cardinal;
var
L: Cardinal;
begin
if N < K then
Result:= 0 // Error
else begin
if K > N - K then
K:= N - K; // Optimization
Result:= 1;
L:= 0;
while L < K do begin
Result:= Result * (N - L);
Inc(L);
Result:= Result div L;
end;
end;
end;
begin
Writeln('C(5,3) is ', BinomialCoff(5, 3));
ReadLn;
end.

@ -67,10 +67,7 @@ fn prefer_outer_delimiter(language: guess_language::Language) -> bool {
// For everything else, prefer the inner delimiter. These
// languages have syntax like `foo(bar)` or `foo[bar]` where
// the inner delimiter is more relevant.
Bash | C | CMake | CPlusPlus | CSharp | Css | Dart | Elixir | Elm | Elvish | Gleam | Go
| Hack | Haskell | Html | Java | JavaScript | Jsx | Julia | Kotlin | Lua | Make | Nix
| OCaml | OCamlInterface | Perl | Php | Python | Qml | Ruby | Rust | Scala | Swift
| Tsx | TypeScript | Yaml | Zig => false,
_ => false,
}
}

@ -49,8 +49,9 @@ pub enum Language {
Nix,
OCaml,
OCamlInterface,
Php,
Pascal,
Perl,
Php,
Python,
Qml,
Ruby,
@ -99,8 +100,9 @@ pub fn language_name(language: Language) -> &'static str {
Nix => "Nix",
OCaml => "OCaml",
OCamlInterface => "OCaml Interface",
Php => "PHP",
Pascal => "Pascal",
Perl => "Perl",
Php => "PHP",
Python => "Python",
Qml => "QML",
Ruby => "Ruby",
@ -180,8 +182,9 @@ pub const LANG_EXTENSIONS: &'static [(Language, &[&str])] = &[
(Nix, &["nix"]),
(OCaml, &["ml"]),
(OCamlInterface, &["mli"]),
(Php, &["php"]),
(Pascal, &["pas", "dfm", "dpr", "lpr", "pascal"]),
(Perl, &["pm", "pl"]),
(Php, &["php"]),
(Python, &["py", "py3", "pyi", "bzl"]),
(Qml, &["qml"]),
(Ruby, &["rb", "builder", "spec", "rake"]),

@ -70,6 +70,7 @@ extern "C" {
fn tree_sitter_nix() -> ts::Language;
fn tree_sitter_ocaml() -> ts::Language;
fn tree_sitter_ocaml_interface() -> ts::Language;
fn tree_sitter_pascal() -> ts::Language;
fn tree_sitter_php() -> ts::Language;
fn tree_sitter_perl() -> ts::Language;
fn tree_sitter_python() -> ts::Language;
@ -559,15 +560,15 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Php => {
let language = unsafe { tree_sitter_php() };
Pascal => {
let language = unsafe { tree_sitter_pascal() };
TreeSitterConfig {
language,
atom_nodes: vec!["string", "encapsed_string"].into_iter().collect(),
delimiter_tokens: vec![("(", ")"), ("[", "]"), ("{", "}")],
atom_nodes: vec![].into_iter().collect(),
delimiter_tokens: vec![("(", ")"), ("[", "]")],
highlight_query: ts::Query::new(
language,
include_str!("../../vendor/highlights/php.scm"),
include_str!("../../vendor/highlights/pascal.scm"),
)
.unwrap(),
}
@ -596,6 +597,19 @@ pub fn from_language(language: guess::Language) -> TreeSitterConfig {
.unwrap(),
}
}
Php => {
let language = unsafe { tree_sitter_php() };
TreeSitterConfig {
language,
atom_nodes: vec!["string", "encapsed_string"].into_iter().collect(),
delimiter_tokens: vec![("(", ")"), ("[", "]"), ("{", "}")],
highlight_query: ts::Query::new(
language,
include_str!("../../vendor/highlights/php.scm"),
)
.unwrap(),
}
}
Python => {
let language = unsafe { tree_sitter_python() };
TreeSitterConfig {

@ -0,0 +1 @@
../tree-sitter-pascal/queries/highlights.scm

@ -0,0 +1 @@
tree-sitter-pascal/src