mirror of
https://git.mirrors.martin98.com/https://github.com/syoyo/tinygltf.git
synced 2025-08-11 21:09:07 +08:00
Correctly handle filename containing spaces for external resources. Fixes #74.
This commit is contained in:
parent
5307850555
commit
57f8e7ca3b
15
experimental/README.md
Normal file
15
experimental/README.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Python script which generates C++11 code from JSON schema.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
* python3
|
||||||
|
* jsonref
|
||||||
|
|
||||||
|
## Generate
|
||||||
|
|
||||||
|
Run `gen.py` by specifing the path to glTF schema directory(from https://github.com/KhronosGroup/glTF.git)
|
||||||
|
|
||||||
|
```
|
||||||
|
$ python gen.py /path/to/glTF/specification/2.0/schema
|
||||||
|
```
|
||||||
|
|
34
experimental/gen.py
Normal file
34
experimental/gen.py
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
import sys, os
|
||||||
|
import subprocess
|
||||||
|
import json
|
||||||
|
from pprint import pprint
|
||||||
|
import jsonref
|
||||||
|
|
||||||
|
# glTF 2.0
|
||||||
|
schema_files = [
|
||||||
|
"glTF.schema.json"
|
||||||
|
]
|
||||||
|
|
||||||
|
def main():
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
print("Requires path to glTF scheme directory.")
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
gltf_schema_dir = sys.argv[1]
|
||||||
|
|
||||||
|
gltf_schema_filepath = os.path.join(gltf_schema_dir, schema_files[0])
|
||||||
|
if not os.path.exists(gltf_schema_filepath):
|
||||||
|
print("File not found: {}".format(gltf_schema_filepath))
|
||||||
|
sys.exit(-1)
|
||||||
|
|
||||||
|
gltf_schema_uri = 'file://{}/'.format(gltf_schema_dir)
|
||||||
|
with open(gltf_schema_filepath) as schema_file:
|
||||||
|
j = jsonref.loads(schema_file.read(), base_uri=gltf_schema_uri, jsonschema=True)
|
||||||
|
pprint(j)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
main()
|
@ -733,15 +733,17 @@ static std::string ExpandFilePath(const std::string &filepath) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// char** w;
|
// char** w;
|
||||||
int ret = wordexp(filepath.c_str(), &p, 0);
|
// wrap filepath by quotes to avoid splitting file path when the path contains spaces(more precisely, $IFS environment variables).
|
||||||
|
std::string quoted_filepath = "\"" + filepath + "\"";
|
||||||
|
int ret = wordexp(quoted_filepath.c_str(), &p, 0);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
// err
|
// err
|
||||||
s = filepath;
|
s = filepath;
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use first element only.
|
|
||||||
if (p.we_wordv) {
|
if (p.we_wordv) {
|
||||||
|
// Use first item.
|
||||||
s = std::string(p.we_wordv[0]);
|
s = std::string(p.we_wordv[0]);
|
||||||
wordfree(&p);
|
wordfree(&p);
|
||||||
} else {
|
} else {
|
||||||
@ -902,7 +904,7 @@ static bool LoadExternalFile(std::vector<unsigned char> *out, std::string *err,
|
|||||||
std::string filepath = FindFile(paths, filename);
|
std::string filepath = FindFile(paths, filename);
|
||||||
if (filepath.empty()) {
|
if (filepath.empty()) {
|
||||||
if (err) {
|
if (err) {
|
||||||
(*err) += "File not found : " + filename + "\n";
|
(*err) += "File not found : \"" + filename + "\"\n";
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -910,7 +912,7 @@ static bool LoadExternalFile(std::vector<unsigned char> *out, std::string *err,
|
|||||||
std::ifstream f(filepath.c_str(), std::ifstream::binary);
|
std::ifstream f(filepath.c_str(), std::ifstream::binary);
|
||||||
if (!f) {
|
if (!f) {
|
||||||
if (err) {
|
if (err) {
|
||||||
(*err) += "File open error : " + filepath + "\n";
|
(*err) += "File open error : \"" + filepath + "\"\n";
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user