+++ /dev/null
-# This file is part of NIT ( http://www.nitlanguage.org ).
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-# Documentation associated to an entity.
-module model::descriptions
-
-import json::static
-import json
-
-# Documentation associated to an entity.
-#
-# The documentation is written in Markdown format.
-#
-# ~~~nit
-# var doc = new Documentation
-#
-# doc.brief_description = "Do something."
-# doc.detailed_description = ["Do not lunch a rocket."]
-# assert doc.brief_description == "Do something."
-# assert doc.detailed_description == ["Do not lunch a rocket."]
-# assert doc.to_json == """["Do something.","Do not lunch a rocket."]"""
-#
-# doc.brief_description = ""
-# doc.detailed_description = ["The answer is `42`."]
-# assert doc.brief_description == "The answer is `42`."
-# assert doc.detailed_description == ["The answer is `42`."]
-# assert doc.to_json == """["The answer is `42`."]"""
-#
-# doc.detailed_description = ["The answer is `42`."]
-# doc.brief_description = ""
-# assert doc.brief_description == "The answer is `42`."
-# assert doc.detailed_description == ["The answer is `42`."]
-# assert doc.to_json == """["The answer is `42`."]"""
-#
-# doc.detailed_description = new Array[String]
-# doc.brief_description = ""
-# assert doc.is_empty
-# assert doc.brief_description == ""
-# assert doc.detailed_description == new Array[String]
-# assert doc.to_json == "[]"
-# ~~~
-class Documentation
- super Serializable
-
- private var content = new JsonStringArray
- private var has_brief_description: Bool = false
-
- # The brief description.
- #
- # If it is empty, the first element of `detailed_description` will be used
- # as brief description.
- fun brief_description=(brief_description: String) do
- if brief_description.is_empty then
- if has_brief_description then
- content.shift
- has_brief_description = false
- end
- else if has_brief_description then
- content.first = brief_description
- else
- content.unshift(brief_description)
- has_brief_description = true
- end
- end
-
- # The brief description.
- fun brief_description: String do
- if not is_empty then return content.first
- return ""
- end
-
- # The detailed description.
- #
- # Each element should represent a block.
- fun detailed_description=(detailed_description: SequenceRead[String]) do
- if has_brief_description then
- while content.length > 1 do content.pop
- else
- content.clear
- end
- content.add_all(detailed_description)
- end
-
- # The detailed description.
- #
- # Each element should represent a block.
- fun detailed_description: SequenceRead[String] do
- if not has_brief_description then return content
- if content.length > 1 then return content.subarray(1, content.length - 1)
- return new Array[String]
- end
-
- # Add a block of detailed description.
- fun add(block: String) do content.add block
-
- # Is the documentation empty?
- fun is_empty: Bool do return content.is_empty
-
- redef fun serialize_to(v) do content.serialize_to v
- redef fun accept_json_serializer(v) do content.serialize_to v
-end
-
-# A `Serializable` array of strings.
-private class JsonStringArray
- super JsonSequenceRead[String]
- super Array[String]
-end