Hide

Problem B
Mallåtergivning II

/problems/kth.dm1595.templaterendering2/file/statement/sv/img-0001.png
Denna uppgift är en utvidgning av uppgiften Mallåtergivning I. Förutom att uppfylla specifikationen i den föregånde uppgiften ska ditt program, för att bli godkänd på denna uppgift, också klara av följande:
  • Förutom uppslagslistor och strängar kan nu kontexter också innehålla vanliga listor.

  • Förutom put-taggen så används en ny sorts tagg i mallarna, for-taggen. Denna tagg går igenom varje element i en lista och renderar en mall med varje element i listan givet som kontext. Om det som förväntas vara en lista i for-taggen är odefinierat eller något annat än en lista förväntas taggen ersättas med en tom sträng (se exempel nedan).

Indata

Den första raden innehåller ett heltal $N$, antalet kommandon.

Därefter följer $N$ kommandon.

Det finns tre olika kommandon:

  • load_context K A, ladda in en kontext med namnet $K$, följande $A$ rader innehåller kontexten angiven i JSON.

  • load_template M B, ladda in en mall med namnet $M$, följande $B$ rader innehåller mallen.

  • render M K, återge den senast inladdade mallen med namnet $M$ utifrån den senast inladdade kontexten med namnet $K$ och skriv ut resultatet. Du kan anta att en sådan mall och en sådan kontext alltid existerar.

Utdata

Ditt program ska skriva ut resultatet av alla render-kommandon.

Sample Input 1 Sample Output 1
4
load_context student_context 13
{
  "course": {
    "code": "DM1595"
  },
  "students": [
    {
      "name": "Vera"
    },
    {
      "name": "Philip"
    }
  ]
}
load_template student_template 1
  - {{ put student.name }}
load_template master_template 3
Följande studenter:
{{ for student in students render student_template }}
Välkomnas härmed till kursen {{ put course.code }}
render master_template student_context
Följande studenter:
  - Vera
  - Philip
Välkomnas härmed till kursen DM1595
Sample Input 2 Sample Output 2
4
load_context bong_joon_ho_context 36
{
  "person": {
    "name": "Bong Joon-ho",
    "role": "Director",
    "movies": [
      {
        "name": "Okja",
        "year": "2017",
        "cast": [
          {
            "name": "Tilda Swinton",
            "role": "Actor"
          },
          {
            "name": "Paul Dano",
            "role": "Actor"
          }
        ]
      },
      {
        "name": "Parasite",
        "year": "2019",
        "cast": [
          {
            "name": "Song Kang-ho",
            "role": "Actor"
          },
          {
            "name": "Lee Sun-kyun",
            "role": "Actor"
          }
        ]
      }
    ]
  }
}
load_template movie_template 4
---
Movie: {{ put movie.name }} ({{ put movie.year }})
People:
{{ for person in movie.cast include person_template }}
load_template person_template 3
* Name: {{ put person.name }}
* Role: {{ put person.role }}
{{ for movie in person.movies include movie_template }}
render person_template bong_joon_ho_context
* Name: Bong Joon-ho
* Role: Director
---
Movie: Okja (2017)
People:
* Name: Tilda Swinton
* Role: Actor

* Name: Paul Dano
* Role: Actor

---
Movie: Parasite (2019)
People:
* Name: Song Kang-ho
* Role: Actor

* Name: Lee Sun-kyun
* Role: Actor

Sample Input 3 Sample Output 3
4
load_context context 8
{
    "a": "hi",
    "b": [],
    "c": {
        "a": "hi"
    },
    "d": ["hello"]
}
load_template sub_template 1
the message is {{ put message }}!
load_template super_template 4
a: {{ for message in a include sub_template }}
b: {{ for message in b include sub_template }}
c: {{ for message in c include sub_template }}
d: {{ for message in d include sub_template }}
render super_template context
a: 
b: 
c: 
d: the message is hello!

Please log in to submit a solution to this problem

Log in