Please make a colourful pdf on topic " Mixed conversation questions on present simple and present continuous tense" negative and pia. Write headline in Capital letter as "MIXED
mkdir -p /home/daytona/workspace/tense-pdf && cat > /home/daytona/workspace/tense-pdf/create_pdf.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT from reportlab.platypus import KeepTogether # Custom colors DARK_PURPLE = colors.HexColor("#4A148C") BRIGHT_PURPLE = colors.HexColor("#7B1FA2") TEAL = colors.HexColor("#00796B") ORANGE = colors.HexColor("#E65100") PINK = colors.HexColor("#AD1457") BLUE = colors.HexColor("#1565C0") LIGHT_YELLOW = colors.HexColor("#FFFDE7") LIGHT_BLUE = colors.HexColor("#E3F2FD") LIGHT_GREEN = colors.HexColor("#E8F5E9") LIGHT_PINK = colors.HexColor("#FCE4EC") LIGHT_TEAL = colors.HexColor("#E0F2F1") LIGHT_ORANGE = colors.HexColor("#FFF3E0") WHITE = colors.white DARK_GRAY = colors.HexColor("#212121") doc = SimpleDocTemplate( "/home/daytona/workspace/tense-pdf/Mixed_Tense_Questions.pdf", pagesize=A4, topMargin=1.8*cm, bottomMargin=1.8*cm, leftMargin=1.8*cm, rightMargin=1.8*cm, ) styles = getSampleStyleSheet() # ── Style definitions ──────────────────────────────────────────────────────── headline = ParagraphStyle( "headline", fontName="Helvetica-Bold", fontSize=28, textColor=WHITE, alignment=TA_CENTER, leading=34, spaceAfter=4, ) subheadline = ParagraphStyle( "subheadline", fontName="Helvetica-Bold", fontSize=15, textColor=WHITE, alignment=TA_CENTER, leading=20, spaceAfter=2, ) section_title = ParagraphStyle( "section_title", fontName="Helvetica-Bold", fontSize=13, textColor=WHITE, alignment=TA_CENTER, leading=18, spaceAfter=2, spaceBefore=2, ) q_style = ParagraphStyle( "q_style", fontName="Helvetica", fontSize=10.5, textColor=DARK_GRAY, leading=15, spaceAfter=1, ) note_style = ParagraphStyle( "note_style", fontName="Helvetica-Oblique", fontSize=9, textColor=TEAL, alignment=TA_CENTER, leading=13, ) tip_style = ParagraphStyle( "tip_style", fontName="Helvetica", fontSize=9.5, textColor=DARK_GRAY, leading=14, ) # ── Helper: coloured banner ────────────────────────────────────────────────── def banner(text, style, bg_color, width=None): w = width or (A4[0] - 3.6*cm) data = [[Paragraph(text, style)]] t = Table(data, colWidths=[w]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg_color), ("ROUNDEDCORNERS", [8]), ("TOPPADDING", (0,0), (-1,-1), 10), ("BOTTOMPADDING",(0,0), (-1,-1), 10), ("LEFTPADDING", (0,0), (-1,-1), 14), ("RIGHTPADDING", (0,0), (-1,-1), 14), ])) return t # ── Helper: question table ─────────────────────────────────────────────────── def question_table(questions, bg_color, num_color): col_w = A4[0] - 3.6*cm rows = [] for i, q in enumerate(questions, 1): num_para = Paragraph(f"<b>{i}</b>", ParagraphStyle( "num", fontName="Helvetica-Bold", fontSize=11, textColor=num_color, alignment=TA_CENTER, leading=15)) q_para = Paragraph(q, q_style) rows.append([num_para, q_para]) t = Table(rows, colWidths=[0.7*cm, col_w - 0.7*cm]) style_cmds = [ ("BACKGROUND", (0,0), (-1,-1), bg_color), ("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#BDBDBD")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING",(0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("ROWBACKGROUNDS",(0,0),(-1,-1), [bg_color, colors.HexColor("#F5F5F5")]), ] t.setStyle(TableStyle(style_cmds)) return t # ── Helper: tip box ────────────────────────────────────────────────────────── def tip_box(title, lines, bg, title_color): content = f"<b><font color='#{title_color[1:] if title_color.startswith('#') else '000000'}'>{title}</font></b><br/>" + "<br/>".join(lines) data = [[Paragraph(content, tip_style)]] t = Table(data, colWidths=[A4[0] - 3.6*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("ROUNDEDCORNERS", [6]), ("TOPPADDING", (0,0), (-1,-1), 8), ("BOTTOMPADDING",(0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 12), ("RIGHTPADDING", (0,0), (-1,-1), 12), ])) return t # ════════════════════════════════════════════════════════════════════════════ # BUILD CONTENT # ════════════════════════════════════════════════════════════════════════════ story = [] # ── MAIN HEADLINE ──────────────────────────────────────────────────────────── story.append(banner("MIXED", headline, DARK_PURPLE)) story.append(Spacer(1, 0.15*cm)) story.append(banner("CONVERSATION QUESTIONS", subheadline, BRIGHT_PURPLE)) story.append(Spacer(1, 0.15*cm)) story.append(banner("Present Simple & Present Continuous Tense", subheadline, TEAL)) story.append(Spacer(1, 0.15*cm)) story.append(banner("Negative & Positive Forms", ParagraphStyle( "sub2", fontName="Helvetica", fontSize=11, textColor=WHITE, alignment=TA_CENTER, leading=16), PINK)) story.append(Spacer(1, 0.4*cm)) # ── GRAMMAR REFERENCE BOX ──────────────────────────────────────────────────── story.append(tip_box( "Quick Grammar Reference", [ "Present Simple (+): I/You/We/They work | He/She/It works", "Present Simple (−): I/You/We/They don't work | He/She/It doesn't work", "Present Continuous (+): I am working | You/We/They are working | He/She/It is working", "Present Continuous (−): I am not working | You/We/They are not working | He/She/It is not working", ], LIGHT_YELLOW, "#4A148C" )) story.append(Spacer(1, 0.45*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 1 – POSITIVE QUESTIONS # ════════════════════════════════════════════════════════════════════════════ story.append(banner("✅ SECTION 1 — POSITIVE QUESTIONS", section_title, BLUE)) story.append(Spacer(1, 0.2*cm)) positive_qs = [ "Do you usually wake up early on weekdays?", "Where do you work / study at the moment?", "What language do you speak at home?", "Are you enjoying this English class right now?", "Does your best friend live near you?", "What are you thinking about at this moment?", "How often do you eat out at restaurants?", "Is the teacher explaining something difficult today?", "Do you like travelling to new places?", "What are you wearing today, and why did you choose it?", "Does your family eat dinner together every day?", "Are you planning anything fun for this weekend?", "How many hours a day do you usually sleep?", "Is your phone charging right now?", "What sport do you play or watch regularly?", ] story.append(question_table(positive_qs, LIGHT_BLUE, BLUE)) story.append(Spacer(1, 0.5*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 2 – NEGATIVE QUESTIONS # ════════════════════════════════════════════════════════════════════════════ story.append(banner("❌ SECTION 2 — NEGATIVE QUESTIONS", section_title, ORANGE)) story.append(Spacer(1, 0.2*cm)) negative_qs = [ "Don't you feel tired when you stay up late?", "Aren't you sitting comfortably right now?", "Doesn't your city have a good public transport system?", "Isn't the weather getting worse these days?", "Don't you think English is getting easier for you?", "Aren't people spending too much time on social media?", "Doesn't your school / workplace start very early?", "Isn't your favourite team playing this week?", "Don't most people in your country drive to work?", "Aren't you looking forward to a holiday soon?", "Doesn't your teacher give a lot of homework?", "Aren't technology companies changing our lives very fast?", "Don't children nowadays play outside as much as before?", "Isn't anyone helping you with your English studies?", "Don't you think people are becoming more health-conscious?", ] story.append(question_table(negative_qs, LIGHT_ORANGE, ORANGE)) story.append(Spacer(1, 0.5*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 3 – MIXED CONVERSATION PRACTICE # ════════════════════════════════════════════════════════════════════════════ story.append(banner("🔀 SECTION 3 — MIXED CONVERSATION PRACTICE", section_title, TEAL)) story.append(Spacer(1, 0.2*cm)) mixed_qs = [ "What do you do after school / work? What are you doing differently this week?", "Do you cook at home? Are you cooking anything special these days?", "Aren't you studying another language apart from English?", "Does your city have many green parks? Are the parks getting crowded this season?", "Don't you feel that life is moving too fast today?", "Are your friends and family all doing well at the moment?", "Do you read books regularly? Are you reading anything interesting right now?", "Doesn't your daily routine change much from day to day?", "What music do you usually listen to? What are you listening to a lot this month?", "Aren't people around you becoming more aware of environmental issues?", "Do you exercise every day? Are you following any fitness plan at the moment?", "Isn't technology making communication easier and harder at the same time?", "What do you normally do on Sunday mornings? What are you planning this Sunday?", "Don't you think children are watching too much TV / screen time these days?", "Are you finding this exercise helpful? Do you enjoy practising speaking in class?", ] story.append(question_table(mixed_qs, LIGHT_TEAL, TEAL)) story.append(Spacer(1, 0.5*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 4 – ANSWER PROMPTS / SENTENCE STARTERS # ════════════════════════════════════════════════════════════════════════════ story.append(banner("💬 SECTION 4 — USEFUL ANSWER STARTERS", section_title, PINK)) story.append(Spacer(1, 0.2*cm)) starters = [ ("Positive answers", "Yes, I do … / Yes, I am … / Yes, he/she does … / Yes, they are …"), ("Negative answers", "No, I don't … / No, I'm not … / No, he/she doesn't … / No, they aren't …"), ("Giving more detail", "I usually … but right now I am … / Normally I … however today I …"), ("Disagreeing politely", "Actually, I don't think so because … / Well, in my opinion …"), ("Asking follow-up", "Really? Do you often …? / Oh interesting! Are you still …?"), ] col_w = A4[0] - 3.6*cm for label, example in starters: row_data = [[ Paragraph(f"<b>{label}:</b>", ParagraphStyle( "lb", fontName="Helvetica-Bold", fontSize=10, textColor=PINK, leading=14)), Paragraph(example, ParagraphStyle( "ex", fontName="Helvetica", fontSize=10, textColor=DARK_GRAY, leading=14)) ]] t = Table(row_data, colWidths=[3.5*cm, col_w - 3.5*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), LIGHT_PINK), ("GRID", (0,0), (-1,-1), 0.3, colors.HexColor("#F48FB1")), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING",(0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) story.append(t) story.append(Spacer(1, 0.12*cm)) story.append(Spacer(1, 0.4*cm)) # ── FOOTER NOTE ────────────────────────────────────────────────────────────── story.append(HRFlowable(width="100%", thickness=1.5, color=DARK_PURPLE, spaceAfter=8)) story.append(Paragraph( "Practice tip: Work in pairs — one student asks, the other answers using a full sentence. Then swap roles!", note_style)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph( "Present Simple = habits, facts, routines | Present Continuous = actions happening now or around now", note_style)) # ── BUILD ──────────────────────────────────────────────────────────────────── doc.build(story) print("PDF created successfully!") PYEOF python3 /home/daytona/workspace/tense-pdf/create_pdf.py
Mixed Tense Questions
PDF Document · PDF
| Section | Content | Colour |
|---|---|---|
| Quick Grammar Reference | Positive & negative forms at a glance | Yellow |
| Section 1 - Positive Questions | 15 questions (Do you...? / Are you...?) | Blue |
| Section 2 - Negative Questions | 15 questions (Don't you...? / Aren't you...?) | Orange |
| Section 3 - Mixed Practice | 15 questions blending both tenses & both forms | Teal |
| Section 4 - Answer Starters | Useful phrases for full-sentence replies | Pink |
Please this pdf should only have 20 questions (not funny and logical) for 3rd grade ESL student.
cat > /home/daytona/workspace/tense-pdf/create_pdf_v2.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT # Custom colors DARK_PURPLE = colors.HexColor("#4A148C") BRIGHT_PURPLE = colors.HexColor("#7B1FA2") TEAL = colors.HexColor("#00796B") ORANGE = colors.HexColor("#E65100") PINK = colors.HexColor("#AD1457") BLUE = colors.HexColor("#1565C0") GREEN = colors.HexColor("#2E7D32") LIGHT_YELLOW = colors.HexColor("#FFFDE7") LIGHT_BLUE = colors.HexColor("#E3F2FD") LIGHT_GREEN = colors.HexColor("#E8F5E9") LIGHT_PINK = colors.HexColor("#FCE4EC") LIGHT_TEAL = colors.HexColor("#E0F2F1") LIGHT_ORANGE = colors.HexColor("#FFF3E0") LIGHT_PURPLE = colors.HexColor("#F3E5F5") WHITE = colors.white DARK_GRAY = colors.HexColor("#212121") doc = SimpleDocTemplate( "/home/daytona/workspace/tense-pdf/Mixed_Tense_Questions.pdf", pagesize=A4, topMargin=1.6*cm, bottomMargin=1.6*cm, leftMargin=1.8*cm, rightMargin=1.8*cm, ) # ── Style definitions ──────────────────────────────────────────────────────── headline = ParagraphStyle( "headline", fontName="Helvetica-Bold", fontSize=30, textColor=WHITE, alignment=TA_CENTER, leading=36, ) subheadline = ParagraphStyle( "subheadline", fontName="Helvetica-Bold", fontSize=14, textColor=WHITE, alignment=TA_CENTER, leading=19, ) section_title = ParagraphStyle( "section_title", fontName="Helvetica-Bold", fontSize=12, textColor=WHITE, alignment=TA_CENTER, leading=17, ) q_style = ParagraphStyle( "q_style", fontName="Helvetica", fontSize=11, textColor=DARK_GRAY, leading=16, ) ans_label = ParagraphStyle( "ans_label", fontName="Helvetica-Oblique", fontSize=9.5, textColor=colors.HexColor("#757575"), leading=13, ) note_style = ParagraphStyle( "note_style", fontName="Helvetica-Oblique", fontSize=9, textColor=TEAL, alignment=TA_CENTER, leading=13, ) tip_style = ParagraphStyle( "tip_style", fontName="Helvetica", fontSize=9.5, textColor=DARK_GRAY, leading=14, ) # ── Helper: coloured banner ────────────────────────────────────────────────── def banner(text, style, bg_color): w = A4[0] - 3.6*cm data = [[Paragraph(text, style)]] t = Table(data, colWidths=[w]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg_color), ("TOPPADDING", (0,0), (-1,-1), 10), ("BOTTOMPADDING", (0,0), (-1,-1), 10), ("LEFTPADDING", (0,0), (-1,-1), 14), ("RIGHTPADDING", (0,0), (-1,-1), 14), ])) return t # ── Helper: grammar tip box ────────────────────────────────────────────────── def tip_box(rows_data): col_w = A4[0] - 3.6*cm label_w = 3.8*cm rows = [] for label, example, bg in rows_data: lp = Paragraph(f"<b>{label}</b>", ParagraphStyle( "lb", fontName="Helvetica-Bold", fontSize=9.5, textColor=DARK_PURPLE, leading=14)) ep = Paragraph(example, ParagraphStyle( "ex", fontName="Helvetica", fontSize=9.5, textColor=DARK_GRAY, leading=14)) rows.append(([lp, ep], bg)) table_rows = [r[0] for r in rows] bgs = [r[1] for r in rows] t = Table(table_rows, colWidths=[label_w, col_w - label_w]) cmds = [ ("GRID", (0,0), (-1,-1), 0.4, colors.HexColor("#CE93D8")), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING",(0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ] for i, bg in enumerate(bgs): cmds.append(("BACKGROUND", (0,i), (-1,i), bg)) t.setStyle(TableStyle(cmds)) return t # ── Helper: question rows ──────────────────────────────────────────────────── def question_table(questions, bg_even, bg_odd, num_color): col_w = A4[0] - 3.6*cm rows = [] for i, (q, ans_hint) in enumerate(questions): num_para = Paragraph(f"<b>{i+1}</b>", ParagraphStyle( "num", fontName="Helvetica-Bold", fontSize=12, textColor=num_color, alignment=TA_CENTER, leading=16)) q_para = Paragraph(q, q_style) ah_para = Paragraph(f"<i>Answer hint: {ans_hint}</i>", ans_label) cell = Table([[q_para], [ah_para]], colWidths=[col_w - 1.0*cm]) cell.setStyle(TableStyle([ ("TOPPADDING", (0,0), (-1,-1), 1), ("BOTTOMPADDING", (0,0), (-1,-1), 1), ("LEFTPADDING", (0,0), (-1,-1), 0), ("RIGHTPADDING", (0,0), (-1,-1), 0), ])) rows.append([num_para, cell]) t = Table(rows, colWidths=[1.0*cm, col_w - 1.0*cm]) cmds = [ ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 6), ("RIGHTPADDING", (0,0), (-1,-1), 6), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("LINEBELOW", (0,0), (-1,-2), 0.3, colors.HexColor("#BDBDBD")), ] for i in range(len(questions)): bg = bg_even if i % 2 == 0 else bg_odd cmds.append(("BACKGROUND", (0,i), (-1,i), bg)) t.setStyle(TableStyle(cmds)) return t # ════════════════════════════════════════════════════════════════════════════ # CONTENT # ════════════════════════════════════════════════════════════════════════════ story = [] # ── HEADLINE ───────────────────────────────────────────────────────────────── story.append(banner("MIXED", headline, DARK_PURPLE)) story.append(Spacer(1, 0.12*cm)) story.append(banner("CONVERSATION QUESTIONS", subheadline, BRIGHT_PURPLE)) story.append(Spacer(1, 0.12*cm)) story.append(banner("Present Simple & Present Continuous | Negative & Positive", subheadline, TEAL)) story.append(Spacer(1, 0.12*cm)) story.append(banner("Grade 3 · ESL Students", ParagraphStyle( "grade", fontName="Helvetica-Bold", fontSize=11, textColor=WHITE, alignment=TA_CENTER, leading=15), PINK)) story.append(Spacer(1, 0.35*cm)) # ── GRAMMAR QUICK REFERENCE ────────────────────────────────────────────────── story.append(banner(" GRAMMAR QUICK REFERENCE", section_title, BLUE)) story.append(Spacer(1, 0.15*cm)) story.append(tip_box([ ("Simple (+)", "I eat breakfast. / She eats breakfast.", LIGHT_BLUE), ("Simple (−)", "I don't eat lunch. / He doesn't eat lunch.", colors.HexColor("#DCEEFB")), ("Continuous (+)", "I am reading. / They are playing.", LIGHT_TEAL), ("Continuous (−)", "I am not sleeping. / She is not watching TV.", colors.HexColor("#D5F0EC")), ])) story.append(Spacer(1, 0.45*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 1 – POSITIVE QUESTIONS (10 questions) # ════════════════════════════════════════════════════════════════════════════ story.append(banner("SECTION 1 — POSITIVE QUESTIONS ✅", section_title, GREEN)) story.append(Spacer(1, 0.18*cm)) # Each item: (question text, answer hint for student) pos_qs = [ ("Do you walk to school every day?", "Yes, I walk … / No, I don't walk …"), ("What do you eat for breakfast in the morning?", "I eat … / I don't eat …"), ("Does your teacher write on the board every day?", "Yes, she/he writes … / No, she/he doesn't …"), ("Are you sitting at a desk right now?", "Yes, I am sitting … / No, I am not sitting …"), ("Do you like reading books at school?", "Yes, I like … / No, I don't like …"), ("Is the sun shining outside at this moment?", "Yes, it is shining … / No, it is not shining …"), ("Does your family eat dinner together every evening?", "Yes, we eat … / No, we don't eat …"), ("Are your classmates listening to the teacher right now?", "Yes, they are listening … / No, they are not …"), ("Do you drink water during class?", "Yes, I drink … / No, I don't drink …"), ("Are you wearing a school uniform today?", "Yes, I am wearing … / No, I am not wearing …"), ] story.append(question_table(pos_qs, LIGHT_GREEN, colors.HexColor("#F1F8E9"), GREEN)) story.append(Spacer(1, 0.5*cm)) # ════════════════════════════════════════════════════════════════════════════ # SECTION 2 – NEGATIVE QUESTIONS (10 questions) # ════════════════════════════════════════════════════════════════════════════ story.append(banner("SECTION 2 — NEGATIVE QUESTIONS ❌", section_title, ORANGE)) story.append(Spacer(1, 0.18*cm)) neg_qs = [ ("Don't you bring a water bottle to school?", "Yes, I do bring … / No, I don't bring …"), ("Isn't your teacher standing at the front of the class right now?", "Yes, she/he is standing … / No, she/he isn't …"), ("Don't you brush your teeth every morning?", "Yes, I brush … / No, I don't brush …"), ("Aren't you using a pencil to write today?", "Yes, I am using … / No, I am not using …"), ("Doesn't your school have a playground?", "Yes, it has … / No, it doesn't have …"), ("Aren't the students in your class working quietly right now?", "Yes, they are working … / No, they are not …"), ("Don't you go to bed before 9 o'clock at night?", "Yes, I go … / No, I don't go …"), ("Isn't your teacher giving you a lesson at this moment?", "Yes, she/he is giving … / No, she/he isn't …"), ("Don't you have a favourite subject at school?", "Yes, I have … My favourite is … / No, I don't have …"), ("Aren't you trying your best in English class right now?", "Yes, I am trying … / No, I am not trying …"), ] story.append(question_table(neg_qs, LIGHT_ORANGE, colors.HexColor("#FFF8F0"), ORANGE)) story.append(Spacer(1, 0.5*cm)) # ── FOOTER ─────────────────────────────────────────────────────────────────── story.append(HRFlowable(width="100%", thickness=1.5, color=DARK_PURPLE, spaceAfter=7)) story.append(Paragraph( "Tip for students: Listen to the question carefully. Answer with a FULL sentence and add one extra detail!", note_style)) story.append(Spacer(1, 0.08*cm)) story.append(Paragraph( "Present Simple = things you do every day | Present Continuous = things happening right NOW", note_style)) # ── BUILD ──────────────────────────────────────────────────────────────────── doc.build(story) print("PDF created successfully!") PYEOF python3 /home/daytona/workspace/tense-pdf/create_pdf_v2.py
Mixed Tense Questions
PDF Document · PDF
| Section | Questions | Colour |
|---|---|---|
| Section 1 - Positive Questions | 10 age-appropriate questions | Green |
| Section 2 - Negative Questions | 10 age-appropriate questions | Orange |
I can't download the pdf, I don't want a link,just givee already completely ready pdf or ppt presentation.Because above mentioned I am unable to download.
~/tense-pdf/make_pptx.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "MIXED – Conversation Questions";
pres.author = "ESL Teacher";
// ─── PALETTE ────────────────────────────────────────────────────────────────
const C = {
darkPurple: "4A148C",
purple: "7B1FA2",
teal: "00796B",
lightTeal: "E0F2F1",
orange: "E65100",
lightOrange: "FFF3E0",
pink: "AD1457",
blue: "1565C0",
lightBlue: "E3F2FD",
green: "2E7D32",
lightGreen: "E8F5E9",
yellow: "F9A825",
white: "FFFFFF",
offWhite: "F5F5F5",
darkGray: "212121",
midGray: "616161",
};
// ─── HELPERS ─────────────────────────────────────────────────────────────────
function addBg(slide, color) {
slide.background = { color };
}
function badge(slide, text, x, y, w, h, fill, textColor, fontSize = 11) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill: { color: fill },
line: { color: fill },
rectRadius: 0.12,
});
slide.addText(text, {
x, y, w, h,
fontSize,
bold: true,
color: textColor,
align: "center",
valign: "middle",
margin: 0,
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ════════════════════════════════════════════════════════════════════════════
(function titleSlide() {
const s = pres.addSlide();
addBg(s, C.darkPurple);
// top accent bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
// big MIXED
s.addText("MIXED", {
x: 0.3, y: 0.22, w: 9.4, h: 1.5,
fontSize: 72, bold: true, color: C.white,
align: "center", charSpacing: 12,
});
// subtitle band
s.addShape(pres.ShapeType.rect, { x: 0, y: 1.75, w: 10, h: 1.05, fill: { color: C.purple }, line: { color: C.purple } });
s.addText("CONVERSATION QUESTIONS", {
x: 0.3, y: 1.8, w: 9.4, h: 0.95,
fontSize: 26, bold: true, color: C.white, align: "center", valign: "middle",
});
// tense band
s.addShape(pres.ShapeType.rect, { x: 0, y: 2.82, w: 10, h: 0.72, fill: { color: C.teal }, line: { color: C.teal } });
s.addText("Present Simple & Present Continuous | Positive & Negative", {
x: 0.3, y: 2.84, w: 9.4, h: 0.68,
fontSize: 15, bold: true, color: C.white, align: "center", valign: "middle",
});
// grade badge
s.addShape(pres.ShapeType.rect, { x: 0, y: 3.56, w: 10, h: 0.52, fill: { color: C.pink }, line: { color: C.pink } });
s.addText("Grade 3 · ESL Students", {
x: 0.3, y: 3.58, w: 9.4, h: 0.48,
fontSize: 14, bold: true, color: C.white, align: "center", valign: "middle",
});
// grammar reminder box
s.addShape(pres.ShapeType.roundRect, {
x: 0.5, y: 4.25, w: 9, h: 1.05,
fill: { color: "FFF9C4" }, line: { color: C.yellow, pt: 2 },
rectRadius: 0.12,
});
s.addText([
{ text: "Present Simple", options: { bold: true, color: C.blue } },
{ text: " = things you do every day | ", options: { color: C.darkGray } },
{ text: "Present Continuous", options: { bold: true, color: C.teal } },
{ text: " = things happening RIGHT NOW", options: { color: C.darkGray } },
], {
x: 0.6, y: 4.28, w: 8.8, h: 0.42, fontSize: 12, align: "center", valign: "middle",
});
s.addText([
{ text: "Positive (+)", options: { bold: true, color: C.green } },
{ text: " I walk. / I am walking. | ", options: { color: C.darkGray } },
{ text: "Negative (−)", options: { bold: true, color: C.orange } },
{ text: " I don't walk. / I am not walking.", options: { color: C.darkGray } },
], {
x: 0.6, y: 4.72, w: 8.8, h: 0.42, fontSize: 12, align: "center", valign: "middle",
});
// bottom bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
})();
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 2 – SECTION 1 INTRO
// ════════════════════════════════════════════════════════════════════════════
(function sec1Intro() {
const s = pres.addSlide();
addBg(s, C.green);
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.15, fill: { color: C.yellow }, line: { color: C.yellow } });
s.addText("SECTION 1", {
x: 0.3, y: 0.3, w: 9.4, h: 1.1,
fontSize: 64, bold: true, color: C.white, align: "center",
});
s.addText("POSITIVE QUESTIONS ✅", {
x: 0.3, y: 1.35, w: 9.4, h: 0.8,
fontSize: 28, bold: true, color: "C8E6C9", align: "center",
});
s.addShape(pres.ShapeType.roundRect, {
x: 1.5, y: 2.4, w: 7, h: 2.6,
fill: { color: "1B5E20" }, line: { color: "A5D6A7", pt: 2 },
rectRadius: 0.18,
});
s.addText([
{ text: "Do you … ? / Does she … ?\n", options: { bold: true, color: C.yellow, fontSize: 16 } },
{ text: "Are you … ? / Is he … ?\n\n", options: { bold: true, color: "81D4FA", fontSize: 16 } },
{ text: "Answer with a FULL sentence!\n", options: { color: C.white, fontSize: 13 } },
{ text: 'e.g. "Yes, I do walk to school."', options: { italic: true, color: "E0E0E0", fontSize: 12 } },
], {
x: 1.6, y: 2.5, w: 6.8, h: 2.4, align: "center", valign: "middle",
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
})();
// ════════════════════════════════════════════════════════════════════════════
// POSITIVE QUESTIONS (Q1–Q10) – two per slide
// ════════════════════════════════════════════════════════════════════════════
const posQs = [
{ q: "Do you walk to school every day?", hint: "Yes, I walk to school. / No, I don't walk to school." },
{ q: "What do you eat for breakfast in the morning?", hint: "I eat … / I don't eat …" },
{ q: "Does your teacher write on the board every day?", hint: "Yes, she/he writes … / No, she/he doesn't write …" },
{ q: "Are you sitting at a desk right now?", hint: "Yes, I am sitting … / No, I am not sitting …" },
{ q: "Do you like reading books at school?", hint: "Yes, I like … / No, I don't like …" },
{ q: "Is the sun shining outside at this moment?", hint: "Yes, it is shining. / No, it is not shining." },
{ q: "Does your family eat dinner together every evening?", hint: "Yes, we eat … / No, we don't eat …" },
{ q: "Are your classmates listening to the teacher right now?", hint: "Yes, they are listening. / No, they are not listening." },
{ q: "Do you drink water during class?", hint: "Yes, I drink … / No, I don't drink …" },
{ q: "Are you wearing a school uniform today?", hint: "Yes, I am wearing … / No, I am not wearing …" },
];
const BG_PAIRS_POS = ["E8F5E9","F1F8E9","DCEDC8","F9FBE7","E8F5E9"];
for (let i = 0; i < posQs.length; i += 2) {
const s = pres.addSlide();
addBg(s, C.offWhite);
// header bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.52, fill: { color: C.green }, line: { color: C.green } });
s.addText("SECTION 1 — POSITIVE QUESTIONS ✅", {
x: 0.2, y: 0, w: 9.6, h: 0.52,
fontSize: 14, bold: true, color: C.white, align: "center", valign: "middle",
});
const questions = [posQs[i], posQs[i + 1]].filter(Boolean);
const yPositions = [0.72, 2.95];
questions.forEach((item, idx) => {
const qNum = i + idx + 1;
const y = yPositions[idx];
const bgColor = idx === 0 ? "E8F5E9" : "F1F8E9";
// card background
s.addShape(pres.ShapeType.roundRect, {
x: 0.3, y, w: 9.4, h: 2.1,
fill: { color: bgColor }, line: { color: "A5D6A7", pt: 1.5 },
rectRadius: 0.15,
});
// number badge
badge(s, String(qNum), 0.38, y + 0.18, 0.55, 0.55, C.green, C.white, 18);
// question text
s.addText(item.q, {
x: 1.05, y: y + 0.1, w: 8.45, h: 0.85,
fontSize: 19, bold: true, color: C.green, valign: "middle",
});
// divider line
s.addShape(pres.ShapeType.line, {
x: 1.05, y: y + 0.98, w: 8.2, h: 0,
line: { color: "A5D6A7", pt: 1 },
});
// answer hint
s.addText("✏️ " + item.hint, {
x: 1.05, y: y + 1.05, w: 8.45, h: 0.82,
fontSize: 13, italic: true, color: C.midGray, valign: "middle",
});
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.green }, line: { color: C.green } });
s.addText(`Questions ${i + 1}–${Math.min(i + 2, posQs.length)} of 10`, {
x: 0, y: 5.43, w: 10, h: 0.18, fontSize: 9, color: "A5D6A7", align: "center", valign: "middle",
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE – SECTION 2 INTRO
// ════════════════════════════════════════════════════════════════════════════
(function sec2Intro() {
const s = pres.addSlide();
addBg(s, C.orange);
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.15, fill: { color: C.yellow }, line: { color: C.yellow } });
s.addText("SECTION 2", {
x: 0.3, y: 0.3, w: 9.4, h: 1.1,
fontSize: 64, bold: true, color: C.white, align: "center",
});
s.addText("NEGATIVE QUESTIONS ❌", {
x: 0.3, y: 1.35, w: 9.4, h: 0.8,
fontSize: 28, bold: true, color: "FFE0B2", align: "center",
});
s.addShape(pres.ShapeType.roundRect, {
x: 1.5, y: 2.4, w: 7, h: 2.6,
fill: { color: "BF360C" }, line: { color: "FFCCBC", pt: 2 },
rectRadius: 0.18,
});
s.addText([
{ text: "Don't you … ? / Doesn't she … ?\n", options: { bold: true, color: C.yellow, fontSize: 16 } },
{ text: "Aren't you … ? / Isn't he … ?\n\n", options: { bold: true, color: "81D4FA", fontSize: 16 } },
{ text: "Answer with a FULL sentence!\n", options: { color: C.white, fontSize: 13 } },
{ text: '"Yes, I do!" or "No, I don\'t …"', options: { italic: true, color: "E0E0E0", fontSize: 12 } },
], {
x: 1.6, y: 2.5, w: 6.8, h: 2.4, align: "center", valign: "middle",
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
})();
// ════════════════════════════════════════════════════════════════════════════
// NEGATIVE QUESTIONS (Q11–Q20) – two per slide
// ════════════════════════════════════════════════════════════════════════════
const negQs = [
{ q: "Don't you bring a water bottle to school?", hint: "Yes, I do bring one. / No, I don't bring one." },
{ q: "Isn't your teacher standing at the front of the class right now?", hint: "Yes, she/he is standing. / No, she/he isn't standing." },
{ q: "Don't you brush your teeth every morning?", hint: "Yes, I brush my teeth. / No, I don't brush my teeth." },
{ q: "Aren't you using a pencil to write today?", hint: "Yes, I am using a pencil. / No, I am not using a pencil." },
{ q: "Doesn't your school have a playground?", hint: "Yes, it has a playground. / No, it doesn't have one." },
{ q: "Aren't the students in your class working quietly right now?", hint: "Yes, they are working. / No, they are not working." },
{ q: "Don't you go to bed before 9 o'clock at night?", hint: "Yes, I go to bed before 9. / No, I don't." },
{ q: "Isn't your teacher giving you a lesson at this moment?", hint: "Yes, she/he is giving a lesson. / No, she/he isn't." },
{ q: "Don't you have a favourite subject at school?", hint: "Yes, I have one. My favourite is … / No, I don't." },
{ q: "Aren't you trying your best in English class right now?", hint: "Yes, I am trying my best. / No, I am not." },
];
for (let i = 0; i < negQs.length; i += 2) {
const s = pres.addSlide();
addBg(s, C.offWhite);
// header bar
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.52, fill: { color: C.orange }, line: { color: C.orange } });
s.addText("SECTION 2 — NEGATIVE QUESTIONS ❌", {
x: 0.2, y: 0, w: 9.6, h: 0.52,
fontSize: 14, bold: true, color: C.white, align: "center", valign: "middle",
});
const questions = [negQs[i], negQs[i + 1]].filter(Boolean);
const yPositions = [0.72, 2.95];
questions.forEach((item, idx) => {
const qNum = 10 + i + idx + 1;
const y = yPositions[idx];
const bgColor = idx === 0 ? "FFF3E0" : "FFF8F0";
s.addShape(pres.ShapeType.roundRect, {
x: 0.3, y, w: 9.4, h: 2.1,
fill: { color: bgColor }, line: { color: "FFCC80", pt: 1.5 },
rectRadius: 0.15,
});
badge(s, String(qNum), 0.38, y + 0.18, 0.55, 0.55, C.orange, C.white, 18);
s.addText(item.q, {
x: 1.05, y: y + 0.1, w: 8.45, h: 0.85,
fontSize: 18, bold: true, color: C.orange, valign: "middle",
});
s.addShape(pres.ShapeType.line, {
x: 1.05, y: y + 0.98, w: 8.2, h: 0,
line: { color: "FFCC80", pt: 1 },
});
s.addText("✏️ " + item.hint, {
x: 1.05, y: y + 1.05, w: 8.45, h: 0.82,
fontSize: 13, italic: true, color: C.midGray, valign: "middle",
});
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.orange }, line: { color: C.orange } });
s.addText(`Questions ${10 + i + 1}–${Math.min(10 + i + 2, 20)} of 20`, {
x: 0, y: 5.43, w: 10, h: 0.18, fontSize: 9, color: "FFCC80", align: "center", valign: "middle",
});
}
// ════════════════════════════════════════════════════════════════════════════
// FINAL SLIDE
// ════════════════════════════════════════════════════════════════════════════
(function finalSlide() {
const s = pres.addSlide();
addBg(s, C.darkPurple);
s.addShape(pres.ShapeType.rect, { x: 0, y: 0, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
s.addText("Well Done! 🌟", {
x: 0.3, y: 0.35, w: 9.4, h: 1.2,
fontSize: 52, bold: true, color: C.yellow, align: "center",
});
s.addText("You practised 20 questions today!", {
x: 0.3, y: 1.55, w: 9.4, h: 0.65,
fontSize: 20, bold: true, color: "CE93D8", align: "center",
});
// summary boxes
const boxes = [
{ label: "Section 1", sub: "10 Positive Questions", color: C.green, light: "1B5E20" },
{ label: "Section 2", sub: "10 Negative Questions", color: C.orange, light: "BF360C" },
];
boxes.forEach((b, idx) => {
const x = 0.8 + idx * 4.8;
s.addShape(pres.ShapeType.roundRect, {
x, y: 2.35, w: 4.2, h: 1.65,
fill: { color: b.light }, line: { color: b.color, pt: 3 },
rectRadius: 0.18,
});
s.addText(b.label, { x: x + 0.1, y: 2.45, w: 4, h: 0.65, fontSize: 22, bold: true, color: C.white, align: "center" });
s.addText(b.sub, { x: x + 0.1, y: 3.1, w: 4, h: 0.65, fontSize: 14, color: "E0E0E0", align: "center" });
});
s.addShape(pres.ShapeType.roundRect, {
x: 0.5, y: 4.15, w: 9, h: 1.0,
fill: { color: "311B92" }, line: { color: "CE93D8", pt: 1.5 },
rectRadius: 0.12,
});
s.addText([
{ text: "Remember: ", options: { bold: true, color: C.yellow } },
{ text: "Present Simple", options: { bold: true, color: "81D4FA" } },
{ text: " = every day | ", options: { color: C.white } },
{ text: "Present Continuous", options: { bold: true, color: "A5D6A7" } },
{ text: " = right now!", options: { color: C.white } },
], {
x: 0.6, y: 4.2, w: 8.8, h: 0.9, fontSize: 13, align: "center", valign: "middle",
});
s.addShape(pres.ShapeType.rect, { x: 0, y: 5.43, w: 10, h: 0.18, fill: { color: C.yellow }, line: { color: C.yellow } });
})();
// ─── WRITE FILE ──────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/tense-pdf/Mixed_Tense_Questions.pptx" })
.then(() => console.log("PPTX created successfully!"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/tense-pdf && node make_pptx.js
I am waiting for you to give me colourful pdf or PPT
ls -lh /home/daytona/workspace/tense-pdf/
Mixed Tense Questions
Presentation · PPTX
Mixed Tense Questions
PDF Document · PDF
| Slide | Content |
|---|---|
| 1 | Title slide - MIXED in large text, purple/teal/pink banners, grammar reference box |
| 2 | Section 1 intro - bright green, explains positive question forms |
| 3-7 | 10 Positive Questions (2 per slide) - green cards with numbered badges + answer hints |
| 8 | Section 2 intro - bright orange, explains negative question forms |
| 9-13 | 10 Negative Questions (2 per slide) - orange cards with numbered badges + answer hints |
| 14 | Final "Well Done!" slide - purple/yellow, summary of both sections |
I want standard logical questions and don't include stupid questions from classroom.Please replace all those questions and make a new list of logical conversation questions , negative sentences but questions should not start with negative.Only answers should have positive and negative sentences.
~/tense-pdf/make_pptx_v2.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "MIXED – Conversation Questions";
pres.author = "ESL Teacher";
// ─── PALETTE ────────────────────────────────────────────────────────────────
const C = {
darkPurple: "4A148C",
purple: "7B1FA2",
teal: "00796B",
orange: "E65100",
pink: "AD1457",
blue: "1565C0",
green: "2E7D32",
yellow: "F9A825",
white: "FFFFFF",
offWhite: "F5F5F5",
darkGray: "212121",
midGray: "616161",
};
function addBg(slide, color) {
slide.background = { color };
}
function badge(slide, text, x, y, w, h, fill, textColor, fontSize = 18) {
slide.addShape(pres.ShapeType.roundRect, {
x, y, w, h,
fill: { color: fill },
line: { color: fill },
rectRadius: 0.12,
});
slide.addText(text, {
x, y, w, h,
fontSize, bold: true, color: textColor,
align: "center", valign: "middle", margin: 0,
});
}
// ════════════════════════════════════════════════════════════════════════════
// SLIDE 1 – TITLE
// ════════════════════════════════════════════════════════════════════════════
(function titleSlide() {
const s = pres.addSlide();
addBg(s, C.darkPurple);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
s.addText("MIXED", {
x:0.3, y:0.22, w:9.4, h:1.45,
fontSize:72, bold:true, color:C.white,
align:"center", charSpacing:12,
});
s.addShape(pres.ShapeType.rect, { x:0, y:1.7, w:10, h:1.0, fill:{color:C.purple}, line:{color:C.purple} });
s.addText("CONVERSATION QUESTIONS", {
x:0.3, y:1.72, w:9.4, h:0.96,
fontSize:26, bold:true, color:C.white, align:"center", valign:"middle",
});
s.addShape(pres.ShapeType.rect, { x:0, y:2.72, w:10, h:0.7, fill:{color:C.teal}, line:{color:C.teal} });
s.addText("Present Simple & Present Continuous | Positive & Negative", {
x:0.3, y:2.74, w:9.4, h:0.66,
fontSize:15, bold:true, color:C.white, align:"center", valign:"middle",
});
s.addShape(pres.ShapeType.rect, { x:0, y:3.44, w:10, h:0.5, fill:{color:C.pink}, line:{color:C.pink} });
s.addText("Grade 3 · ESL Students", {
x:0.3, y:3.46, w:9.4, h:0.46,
fontSize:14, bold:true, color:C.white, align:"center", valign:"middle",
});
// grammar box
s.addShape(pres.ShapeType.roundRect, {
x:0.5, y:4.1, w:9, h:1.12,
fill:{color:"FFF9C4"}, line:{color:C.yellow, pt:2}, rectRadius:0.12,
});
s.addText([
{text:"Present Simple", options:{bold:true, color:C.blue}},
{text:" = things you do every day | ", options:{color:C.darkGray}},
{text:"Present Continuous", options:{bold:true, color:C.teal}},
{text:" = things happening RIGHT NOW", options:{color:C.darkGray}},
], { x:0.6, y:4.14, w:8.8, h:0.42, fontSize:12, align:"center", valign:"middle" });
s.addText([
{text:"Positive (+) ", options:{bold:true, color:C.green}},
{text:"→ I play football. / I am playing football. ", options:{color:C.darkGray}},
{text:"Negative (−) ", options:{bold:true, color:C.orange}},
{text:"→ I don't play. / I am not playing.", options:{color:C.darkGray}},
], { x:0.6, y:4.6, w:8.8, h:0.42, fontSize:11.5, align:"center", valign:"middle" });
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
})();
// ════════════════════════════════════════════════════════════════════════════
// SECTION 1 INTRO
// ════════════════════════════════════════════════════════════════════════════
(function sec1Intro() {
const s = pres.addSlide();
addBg(s, C.green);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.15, fill:{color:C.yellow}, line:{color:C.yellow} });
s.addText("SECTION 1", {
x:0.3, y:0.28, w:9.4, h:1.1,
fontSize:62, bold:true, color:C.white, align:"center",
});
s.addText("PRESENT SIMPLE — Questions", {
x:0.3, y:1.35, w:9.4, h:0.7,
fontSize:26, bold:true, color:"C8E6C9", align:"center",
});
s.addShape(pres.ShapeType.roundRect, {
x:1.2, y:2.2, w:7.6, h:2.9,
fill:{color:"1B5E20"}, line:{color:"A5D6A7", pt:2}, rectRadius:0.18,
});
s.addText([
{text:"How to ask:\n", options:{bold:true, color:C.yellow, fontSize:15}},
{text:"Do you … ? / Does he/she … ?\n\n", options:{bold:true, color:"81D4FA", fontSize:15}},
{text:"How to answer:\n", options:{bold:true, color:"A5D6A7", fontSize:13}},
{text:"(+) Yes, I do. / Yes, she does.\n", options:{color:C.white, fontSize:12}},
{text:"(−) No, I don't. / No, she doesn't.", options:{italic:true, color:"E0E0E0", fontSize:12}},
], { x:1.35, y:2.3, w:7.3, h:2.7, align:"center", valign:"middle" });
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
})();
// ════════════════════════════════════════════════════════════════════════════
// SECTION 1 QUESTIONS — Present Simple (Q1–Q10)
// Questions are NEUTRAL (no negative starters).
// Answers show both positive and negative forms.
// ════════════════════════════════════════════════════════════════════════════
const posQs = [
{
q: "What do you usually do after school?",
pos: "I usually play outside / read a book / help at home.",
neg: "I don't usually watch TV after school."
},
{
q: "Where does your family go on weekends?",
pos: "My family goes to the park / market / grandparents' house.",
neg: "My family doesn't go out every weekend."
},
{
q: "What time do you wake up on school days?",
pos: "I wake up at 7 o'clock every morning.",
neg: "I don't wake up late on school days."
},
{
q: "What subject does your teacher teach every day?",
pos: "My teacher teaches English / Math / Science every day.",
neg: "My teacher doesn't teach Art every day."
},
{
q: "How do you travel to school?",
pos: "I travel to school by bus / on foot / by car.",
neg: "I don't travel to school by train."
},
{
q: "What do you like to eat for lunch?",
pos: "I like to eat rice / sandwiches / fruit for lunch.",
neg: "I don't like to eat junk food for lunch."
},
{
q: "What sport does your best friend play?",
pos: "My best friend plays football / basketball / cricket.",
neg: "My best friend doesn't play tennis."
},
{
q: "How many hours a day do you read at home?",
pos: "I read for one hour every day at home.",
neg: "I don't read for five hours — that is too many!"
},
{
q: "What language do people speak in your country?",
pos: "People speak English / Urdu / Arabic in my country.",
neg: "People don't speak Japanese in my country."
},
{
q: "What do you do to help your parents at home?",
pos: "I wash the dishes / tidy my room / water the plants.",
neg: "I don't sit and do nothing — I help every day."
},
];
for (let i = 0; i < posQs.length; i += 2) {
const s = pres.addSlide();
addBg(s, C.offWhite);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.52, fill:{color:C.green}, line:{color:C.green} });
s.addText("SECTION 1 — PRESENT SIMPLE QUESTIONS", {
x:0.2, y:0, w:9.6, h:0.52,
fontSize:13, bold:true, color:C.white, align:"center", valign:"middle",
});
const items = [posQs[i], posQs[i+1]].filter(Boolean);
const yPos = [0.68, 3.0];
items.forEach((item, idx) => {
const qNum = i + idx + 1;
const y = yPos[idx];
const cardBg = idx === 0 ? "E8F5E9" : "F1F8E9";
s.addShape(pres.ShapeType.roundRect, {
x:0.3, y, w:9.4, h:2.2,
fill:{color:cardBg}, line:{color:"A5D6A7", pt:1.5}, rectRadius:0.15,
});
badge(s, String(qNum), 0.38, y+0.16, 0.58, 0.58, C.green, C.white, 18);
s.addText(item.q, {
x:1.08, y:y+0.08, w:8.4, h:0.78,
fontSize:17, bold:true, color:C.green, valign:"middle",
});
s.addShape(pres.ShapeType.line, {
x:1.08, y:y+0.9, w:8.1, h:0,
line:{color:"A5D6A7", pt:1},
});
// positive answer
s.addText([
{text:"(+) ", options:{bold:true, color:C.green}},
{text:item.pos, options:{color:C.darkGray}},
], { x:1.08, y:y+0.97, w:8.4, h:0.5, fontSize:12, valign:"middle" });
// negative answer
s.addText([
{text:"(−) ", options:{bold:true, color:C.orange}},
{text:item.neg, options:{color:C.darkGray}},
], { x:1.08, y:y+1.52, w:8.4, h:0.5, fontSize:12, valign:"middle" });
});
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.green}, line:{color:C.green} });
s.addText(`Questions ${i+1}–${Math.min(i+2, 10)} of 10`, {
x:0, y:5.43, w:10, h:0.18, fontSize:9, color:"A5D6A7", align:"center", valign:"middle",
});
}
// ════════════════════════════════════════════════════════════════════════════
// SECTION 2 INTRO
// ════════════════════════════════════════════════════════════════════════════
(function sec2Intro() {
const s = pres.addSlide();
addBg(s, C.blue);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.15, fill:{color:C.yellow}, line:{color:C.yellow} });
s.addText("SECTION 2", {
x:0.3, y:0.28, w:9.4, h:1.1,
fontSize:62, bold:true, color:C.white, align:"center",
});
s.addText("PRESENT CONTINUOUS — Questions", {
x:0.3, y:1.35, w:9.4, h:0.7,
fontSize:24, bold:true, color:"BBDEFB", align:"center",
});
s.addShape(pres.ShapeType.roundRect, {
x:1.2, y:2.2, w:7.6, h:2.9,
fill:{color:"0D47A1"}, line:{color:"90CAF9", pt:2}, rectRadius:0.18,
});
s.addText([
{text:"How to ask:\n", options:{bold:true, color:C.yellow, fontSize:15}},
{text:"What are you doing … ? / Is he/she … ?\n\n", options:{bold:true, color:"81D4FA", fontSize:14}},
{text:"How to answer:\n", options:{bold:true, color:"90CAF9", fontSize:13}},
{text:"(+) Yes, I am. / She is reading a book.\n", options:{color:C.white, fontSize:12}},
{text:"(−) No, I am not. / He is not sleeping.", options:{italic:true, color:"E0E0E0", fontSize:12}},
], { x:1.35, y:2.3, w:7.3, h:2.7, align:"center", valign:"middle" });
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
})();
// ════════════════════════════════════════════════════════════════════════════
// SECTION 2 QUESTIONS — Present Continuous (Q11–Q20)
// Questions start NEUTRALLY. Answers show + and − forms.
// ════════════════════════════════════════════════════════════════════════════
const contQs = [
{
q: "What are you doing right now?",
pos: "I am learning English / answering questions / studying.",
neg: "I am not sleeping or playing right now."
},
{
q: "What is the weather doing outside at this moment?",
pos: "The sun is shining / the wind is blowing / it is raining.",
neg: "It is not snowing outside right now."
},
{
q: "What is your family doing at home this evening?",
pos: "My family is having dinner / watching a show / relaxing.",
neg: "My family is not working late tonight."
},
{
q: "What sport are children playing in the park today?",
pos: "Children are playing football / cricket / running races.",
neg: "Children are not playing indoors — they are outside."
},
{
q: "What is your friend wearing today?",
pos: "My friend is wearing a blue shirt / a red dress today.",
neg: "My friend is not wearing a hat today."
},
{
q: "What are people doing at the market right now?",
pos: "People are buying vegetables / fruit / meat at the market.",
neg: "People are not sitting — they are shopping."
},
{
q: "What is happening in the sky at this moment?",
pos: "Birds are flying / clouds are moving across the sky.",
neg: "Aeroplanes are not landing — they are flying high up."
},
{
q: "What are animals doing in the wild right now?",
pos: "Animals are hunting / sleeping / drinking water.",
neg: "Animals are not driving cars — they live in nature!"
},
{
q: "What is your mother or father doing at this hour?",
pos: "My mother is cooking / my father is working right now.",
neg: "My father is not watching TV — he is still at work."
},
{
q: "What is growing in your garden or neighbourhood this season?",
pos: "Flowers are blooming / trees are growing leaves this season.",
neg: "Trees are not losing their leaves — it is not autumn."
},
];
for (let i = 0; i < contQs.length; i += 2) {
const s = pres.addSlide();
addBg(s, C.offWhite);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.52, fill:{color:C.blue}, line:{color:C.blue} });
s.addText("SECTION 2 — PRESENT CONTINUOUS QUESTIONS", {
x:0.2, y:0, w:9.6, h:0.52,
fontSize:13, bold:true, color:C.white, align:"center", valign:"middle",
});
const items = [contQs[i], contQs[i+1]].filter(Boolean);
const yPos = [0.68, 3.0];
items.forEach((item, idx) => {
const qNum = 10 + i + idx + 1;
const y = yPos[idx];
const cardBg = idx === 0 ? "E3F2FD" : "EBF4FD";
s.addShape(pres.ShapeType.roundRect, {
x:0.3, y, w:9.4, h:2.2,
fill:{color:cardBg}, line:{color:"90CAF9", pt:1.5}, rectRadius:0.15,
});
badge(s, String(qNum), 0.38, y+0.16, 0.58, 0.58, C.blue, C.white, 18);
s.addText(item.q, {
x:1.08, y:y+0.08, w:8.4, h:0.78,
fontSize:17, bold:true, color:C.blue, valign:"middle",
});
s.addShape(pres.ShapeType.line, {
x:1.08, y:y+0.9, w:8.1, h:0,
line:{color:"90CAF9", pt:1},
});
s.addText([
{text:"(+) ", options:{bold:true, color:C.green}},
{text:item.pos, options:{color:C.darkGray}},
], { x:1.08, y:y+0.97, w:8.4, h:0.5, fontSize:12, valign:"middle" });
s.addText([
{text:"(−) ", options:{bold:true, color:C.orange}},
{text:item.neg, options:{color:C.darkGray}},
], { x:1.08, y:y+1.52, w:8.4, h:0.5, fontSize:12, valign:"middle" });
});
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.blue}, line:{color:C.blue} });
s.addText(`Questions ${10+i+1}–${Math.min(10+i+2, 20)} of 20`, {
x:0, y:5.43, w:10, h:0.18, fontSize:9, color:"90CAF9", align:"center", valign:"middle",
});
}
// ════════════════════════════════════════════════════════════════════════════
// FINAL SLIDE
// ════════════════════════════════════════════════════════════════════════════
(function finalSlide() {
const s = pres.addSlide();
addBg(s, C.darkPurple);
s.addShape(pres.ShapeType.rect, { x:0, y:0, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
s.addText("Great Work! ⭐", {
x:0.3, y:0.32, w:9.4, h:1.1,
fontSize:52, bold:true, color:C.yellow, align:"center",
});
s.addText("You practised 20 conversation questions today!", {
x:0.3, y:1.42, w:9.4, h:0.6,
fontSize:18, bold:true, color:"CE93D8", align:"center",
});
const boxes = [
{ label:"Section 1", sub:"Present Simple\n10 Questions", fillDark:"1B5E20", border:C.green },
{ label:"Section 2", sub:"Present Continuous\n10 Questions", fillDark:"0D47A1", border:C.blue },
];
boxes.forEach((b, idx) => {
const x = 0.7 + idx * 4.9;
s.addShape(pres.ShapeType.roundRect, {
x, y:2.18, w:4.4, h:1.8,
fill:{color:b.fillDark}, line:{color:b.border, pt:3}, rectRadius:0.18,
});
s.addText(b.label, { x:x+0.1, y:2.28, w:4.2, h:0.6, fontSize:20, bold:true, color:C.white, align:"center" });
s.addText(b.sub, { x:x+0.1, y:2.9, w:4.2, h:0.7, fontSize:13, color:"E0E0E0", align:"center" });
});
s.addShape(pres.ShapeType.roundRect, {
x:0.5, y:4.1, w:9, h:1.05,
fill:{color:"311B92"}, line:{color:"CE93D8", pt:1.5}, rectRadius:0.12,
});
s.addText([
{text:"Remember: ", options:{bold:true, color:C.yellow}},
{text:"Present Simple", options:{bold:true, color:"81D4FA"}},
{text:" = habits & routines | ", options:{color:C.white}},
{text:"Present Continuous", options:{bold:true, color:"A5D6A7"}},
{text:" = actions happening NOW", options:{color:C.white}},
], { x:0.6, y:4.15, w:8.8, h:0.9, fontSize:13, align:"center", valign:"middle" });
s.addShape(pres.ShapeType.rect, { x:0, y:5.43, w:10, h:0.18, fill:{color:C.yellow}, line:{color:C.yellow} });
})();
// ─── WRITE ───────────────────────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/tense-pdf/Mixed_Tense_Questions_v2.pptx" })
.then(() => console.log("Done!"))
.catch(e => { console.error(e); process.exit(1); });
cd /home/daytona/workspace/tense-pdf && node make_pptx_v2.js
Mixed Tense Questions v2
Presentation · PPTX
| Example | |
|---|---|
| (+) | I usually play outside / read a book / help at home. |
| (-) | I don't usually watch TV after school. |
Please replace question number 18,19,20 with more interesting question for 3rd grade ESL and logical not funny conversation with with answers.
~/tense-pdf/make_pptx_v2.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/tense-pdf/make_pptx_v2.js'
~/tense-pdf/make_pptx_v2.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/tense-pdf/make_pptx_v2.js'
cd /home/daytona/workspace/tense-pdf && node make_pptx_v2.js
Mixed Tense Questions v3
Presentation · PPTX
| # | New Question | Why it's better |
|---|---|---|
| 18 | What are you learning in school this month? | Relatable, encourages real reflection on subjects |
| 19 | Where are people in your city going on a typical morning? | Connects to everyday community life |
| 20 | What are farmers doing in the fields at this time of year? | Builds real-world awareness, seasonal thinking |
You can't used past form of verbs as I haven't taught him so ,far .Once again replace question number 18, 19,20 with more interesting personal logical questions along with answers.
~/tense-pdf/make_pptx_v2.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/tense-pdf/make_pptx_v2.js'
~/tense-pdf/make_pptx_v2.js
Successfully replaced 1 instance(s) of the string in '/home/daytona/workspace/tense-pdf/make_pptx_v2.js'
cd /home/daytona/workspace/tense-pdf && node make_pptx_v2.js
Mixed Tense Questions v4
Presentation · PPTX
| # | Question | (+) Answer | (-) Answer |
|---|---|---|---|
| 18 | What are you thinking about right now? | I am thinking about my favourite food / my friends / my next holiday. | I am not thinking about anything sad right now. |
| 19 | What is your favourite animal doing in nature at this moment? | My favourite animal is running / swimming / eating in nature right now. | My favourite animal is not sitting in an office - it lives outside! |
| 20 | What are you looking forward to this week? | I am looking forward to playing outside / eating my favourite meal / a family trip. | I am not looking forward to any difficult test this week. |