Skip to content

Commit

Permalink
fix expression parsing
Browse files Browse the repository at this point in the history
  • Loading branch information
ethanzhouyc committed Jan 25, 2025
1 parent 79ce4d2 commit 1f64e71
Showing 1 changed file with 6 additions and 6 deletions.
12 changes: 6 additions & 6 deletions src-electron/db/query-feature.js
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,7 @@ function evaluateConformanceExpression(expression, elementMap) {
*/
function evaluateBooleanExpression(expr) {
// Replace terms with their actual values from elementMap
expr = expr.replace(/[A-Za-z][A-Za-z0-9]*/g, (term) => {
expr = expr.replace(/[A-Za-z][A-Za-z0-9_]*/g, (term) => {
if (elementMap[term]) {
return 'true'
} else {
Expand Down Expand Up @@ -167,7 +167,7 @@ function evaluateConformanceExpression(expression, elementMap) {
let parts = expression.split(',')
// if any term is desc, the conformance is too complex to parse
for (let part of parts) {
let terms = part.match(/[A-Za-z][A-Za-z0-9]*/g)
let terms = part.match(/[A-Za-z][A-Za-z0-9_]*/g)
if (terms && terms.includes('desc')) {
return 'desc'
}
Expand Down Expand Up @@ -214,7 +214,7 @@ function evaluateConformanceExpression(expression, elementMap) {
* @returns all missing terms in an array
*/
function checkMissingTerms(expression, elementMap) {
let terms = expression.match(/[A-Za-z][A-Za-z0-9]*/g)
let terms = expression.match(/[A-Za-z][A-Za-z0-9_]*/g)
let missingTerms = []
let abbreviations = ['M', 'O', 'P', 'D', 'X']
for (let term of terms) {
Expand All @@ -234,7 +234,7 @@ function checkMissingTerms(expression, elementMap) {
*/
function filterElementsContainingDesc(elements) {
return elements.filter((element) => {
let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9]*/g)
let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9_]*/g)
return terms && terms.includes('desc')
})
}
Expand All @@ -248,7 +248,7 @@ function filterElementsContainingDesc(elements) {
*/
function filterRelatedDescElements(elements, featureCode) {
return elements.filter((element) => {
let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9]*/g)
let terms = element.conformance.match(/[A-Za-z][A-Za-z0-9_]*/g)
return terms && terms.includes('desc') && terms.includes(featureCode)
})
}
Expand Down Expand Up @@ -554,7 +554,7 @@ function filterRequiredElements(elements, elementMap, featureMap) {
elementMap
)
let expression = element.conformance
let terms = expression ? expression.match(/[A-Za-z][A-Za-z0-9]*/g) : []
let terms = expression ? expression.match(/[A-Za-z][A-Za-z0-9_]*/g) : []
let featureTerms = terms.filter((term) => term in featureMap).join(', ')
let elementTerms = terms.filter((term) => !(term in featureMap)).join(', ')
let conformToElement = terms.some((term) =>
Expand Down

0 comments on commit 1f64e71

Please # to comment.