aboutsummaryrefslogtreecommitdiff
path: root/libcrystfel/src/symmetry.c
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2019-02-11 18:15:32 +0100
committerThomas White <taw@physics.org>2019-03-11 16:49:36 +0100
commit24ce9e4ac098d7744fb23f535eb97f3375425fd8 (patch)
tree5f8d9a85dd1761e51e0905cbaea0e20a5e299d43 /libcrystfel/src/symmetry.c
parent9a3ef1de0b661085a26d9be60bcff9e261783acd (diff)
Symmetry operation parser using Flex/Bison
Diffstat (limited to 'libcrystfel/src/symmetry.c')
-rw-r--r--libcrystfel/src/symmetry.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/libcrystfel/src/symmetry.c b/libcrystfel/src/symmetry.c
index 06cc368c..19c754ea 100644
--- a/libcrystfel/src/symmetry.c
+++ b/libcrystfel/src/symmetry.c
@@ -41,6 +41,8 @@
#include "symmetry.h"
#include "utils.h"
#include "integer_matrix.h"
+#include "symop-parse.h"
+#include "symop-lex.h"
/**
@@ -1713,28 +1715,25 @@ static IntegerMatrix *parse_symmetry_operation(const char *s)
SymOpList *parse_symmetry_operations(const char *s)
{
- SymOpList *sol;
- char **ops;
- int n, i;
+ YY_BUFFER_STATE b;
+ RationalMatrix *m;
+ int r;
- sol = new_symoplist();
- if ( sol == NULL ) return NULL;
+ m = rtnl_mtx_new(3, 3);
+ b = symop_scan_string(s);
+ r = symopparse(m);
+ symop_delete_buffer(b);
- n = assplode(s, ";:", &ops, ASSPLODE_NONE);
- for ( i=0; i<n; i++ ) {
- IntegerMatrix *m;
- m = parse_symmetry_operation(ops[i]);
- if ( m != NULL ) {
- add_symop(sol, m);
- } else {
- ERROR("Invalid symmetry operation '%s'\n", ops[i]);
- /* Try the next one */
- }
- free(ops[i]);
+ if ( r ) {
+ ERROR("Failed to parse '%s'\n", s);
+ rtnl_mtx_free(m);
+ return NULL;
}
- free(ops);
- return sol;
+ STATUS("Parsed OK\n");
+ rtnl_mtx_print(m);
+
+ return NULL;
}