diff options
| author | Fuwn <[email protected]> | 2022-05-15 23:44:53 -0700 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2022-05-15 23:44:53 -0700 |
| commit | 242b0b9591fa4fd5f8b4a45ec4c179f451c62c14 (patch) | |
| tree | 6dcc82c1e87725224bc3dcd22c974ab0775f4c7f /src/file_generator.rs | |
| parent | docs(license): add license for vergen (diff) | |
| download | chorus-main.tar.xz chorus-main.zip | |
Diffstat (limited to 'src/file_generator.rs')
| -rw-r--r-- | src/file_generator.rs | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/src/file_generator.rs b/src/file_generator.rs new file mode 100644 index 0000000..278da0e --- /dev/null +++ b/src/file_generator.rs @@ -0,0 +1,72 @@ +// This file is part of Chorus <https://github.com/Fuwn/chorus>. +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// +// This program is free software: you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation, version 3. +// +// This program is distributed in the hope that it will be useful, but +// WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, see <http://www.gnu.org/licenses/>. +// +// Copyright (C) 2022-2022 Fuwn <[email protected]> +// SPDX-License-Identifier: GPL-3.0-only + +use std::path::Path; + +use anyhow::Result; + +use crate::utilities::is_unicode_xid; + +/// Keep unique paths, replace local paths (".") with "default" +fn local_or_default(path: &Path) -> String { + if path.display().to_string() == "." { + "default".to_string() + } else { + path.display().to_string() + } +} + +/// Generate a default main file +pub fn main_file(name: &Path) -> Result<String> { + is_unicode_xid(&name.display().to_string())?; + + Ok(format!( + r#"IDENTIFICATION DIVISION. +PROGRAM-ID. {}. + +PROCEDURE DIVISION. +DISPLAY "Hello, World!". +STOP RUN. +"#, + local_or_default(name).to_ascii_uppercase(), + )) +} + +/// Generate a Chorus package manifest +pub fn package_manifest(name: &Path) -> Result<String> { + is_unicode_xid(&name.display().to_string())?; + + Ok(format!( + r#"[package] +name = "{}" + +[build] +compiler = "gnucobol" +extensions = ["cbl", "cob"] +mode = "incremental" +type = "executable" + +[build.gnucobol] +format = "free" +options = ["-Wall"] +std = "default" +optimization = "O3" +"#, + local_or_default(name), + )) +} |