Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 4x 4x 10x 4x 2x 2x 8x 2x 4x 1x 2x 8x 1x 2x | import { MultipleChoice, parse } from 'gift-pegjs' import { Choice, Question, createChoice, createQuestion } from '../question' import { QuestionFormat } from './format' const escapeMoodleStr = (str: string) => str.trim().replaceAll(/[~=#{}:\\]/g, '\\$&') const createGiftQuestion = (index: number, question: Question) => { const text = escapeMoodleStr(question.question) const answers = (choices: Choice[]) => choices.map((c) => `${c.isCorrect ? '=' : '~'}${escapeMoodleStr(c.answer)}`).join('\n') return ` // question ${index} [html]${text}{ ${answers(question.choices)} } ` } /** * Moodle GIFT format */ export const gift: QuestionFormat = { fileType: 'text/plain', fileExtension: 'txt', import: (text: string): Question[] => { const questions = parse(text).map((q) => createQuestion({ question: (q as MultipleChoice).stem.text.trim(), choices: (q as MultipleChoice).choices.map((c) => createChoice({ answer: c.text.text.trim(), isCorrect: c.isCorrect, }) ), }) ) return questions }, export: (questions: Question[]) => { return questions.map((q, i) => createGiftQuestion(i + 1, q)).join('') }, } |