ProjectEntityHandler = require "../Project/ProjectEntityHandler" DocumentUpdaterHandler = require('../DocumentUpdater/DocumentUpdaterHandler') module.exports = LabelsHandler = labelCaptureRegex: () -> /\\label\{([^\}\n\\]{0,80})\}/g getAllLabelsForProject: (projectId, callback=(err, projectLabels)->) -> DocumentUpdaterHandler.flushProjectToMongo projectId, (err) -> if err? return callback(err) ProjectEntityHandler.getAllDocs projectId, (err, docs) -> if err? return callback(err) projectLabels = LabelsHandler.extractLabelsFromProjectDocs docs callback(null, projectLabels) getLabelsForDoc: (projectId, docId, callback=(err, docLabels)->) -> DocumentUpdaterHandler.flushDocToMongo projectId, docId, (err) -> if err? return callback(err) ProjectEntityHandler.getDoc projectId, docId, (err, lines) -> if err? return callback(err) docLabels = LabelsHandler.extractLabelsFromDoc lines callback(null, docLabels) extractLabelsFromDoc: (lines) -> docLabels = [] for line in lines re = LabelsHandler.labelCaptureRegex() while (labelMatch = re.exec(line)) if labelMatch[1] docLabels.push(labelMatch[1]) return docLabels extractLabelsFromProjectDocs: (projectDocs) -> projectLabels = {} # docId => List[Label] for _path, doc of projectDocs projectLabels[doc._id] = LabelsHandler.extractLabelsFromDoc(doc.lines) return projectLabels