# HG changeset patch # User wenzelm # Date 1555091309 -7200 # Node ID ad6d4a14adb51ab113969763ad33b47cf3377eda # Parent e69f00f4b897ad090ac9cb3f4e26daff8d5427c2 report document tags as seen in the text (not the active tag of Thy_Output.present_thy); diff -r e69f00f4b897 -r ad6d4a14adb5 src/Pure/PIDE/markup.ML --- a/src/Pure/PIDE/markup.ML Fri Apr 12 17:09:21 2019 +0200 +++ b/src/Pure/PIDE/markup.ML Fri Apr 12 19:48:29 2019 +0200 @@ -132,6 +132,7 @@ val plain_textN: string val plain_text: T val paragraphN: string val paragraph: T val text_foldN: string val text_fold: T + val document_tagN: string val document_tag: string -> T val markdown_paragraphN: string val markdown_paragraph: T val markdown_itemN: string val markdown_item: T val markdown_bulletN: string val markdown_bullet: int -> T @@ -512,17 +513,16 @@ val document_antiquotation_optionN = "document_antiquotation_option"; -(* text kind *) +(* document text *) val (raw_textN, raw_text) = markup_elem "raw_text"; val (plain_textN, plain_text) = markup_elem "plain_text"; - -(* text structure *) - val (paragraphN, paragraph) = markup_elem "paragraph"; val (text_foldN, text_fold) = markup_elem "text_fold"; +val (document_tagN, document_tag) = markup_string "document_tag" nameN; + (* Markdown document structure *) diff -r e69f00f4b897 -r ad6d4a14adb5 src/Pure/PIDE/markup.scala --- a/src/Pure/PIDE/markup.scala Fri Apr 12 17:09:21 2019 +0200 +++ b/src/Pure/PIDE/markup.scala Fri Apr 12 19:48:29 2019 +0200 @@ -307,17 +307,27 @@ val DOCUMENT_ANTIQUOTATION_OPTION = "document_antiquotation_option" - /* text kind */ + /* document text */ val RAW_TEXT = "raw_text" val PLAIN_TEXT = "plain_text" - - /* text structure */ - val PARAGRAPH = "paragraph" val TEXT_FOLD = "text_fold" + object Document_Tag + { + val ELEMENT = "document_tag" + val IMPORTANT = "important" + val UNIMPORTANT = "unimportant" + + def unapply(markup: Markup): Option[String] = + markup match { + case Markup(ELEMENT, Name(name)) => Some(name) + case _ => None + } + } + /* Markdown document structure */ diff -r e69f00f4b897 -r ad6d4a14adb5 src/Pure/PIDE/rendering.scala --- a/src/Pure/PIDE/rendering.scala Fri Apr 12 17:09:21 2019 +0200 +++ b/src/Pure/PIDE/rendering.scala Fri Apr 12 19:48:29 2019 +0200 @@ -216,6 +216,9 @@ Markup.Elements(Markup.META_TITLE, Markup.META_CREATOR, Markup.META_CONTRIBUTOR, Markup.META_DATE, Markup.META_DESCRIPTION, Markup.META_LICENSE) + val document_tag_elements = + Markup.Elements(Markup.Document_Tag.ELEMENT) + val markdown_elements = Markup.Elements(Markup.MARKDOWN_PARAGRAPH, Markup.MARKDOWN_ITEM, Markup.Markdown_List.name, Markup.Markdown_Bullet.name) @@ -698,4 +701,18 @@ }) Library.distinct(results.flatMap(_.info.reverse)) } + + + /* document tags */ + + def document_tags(range: Text.Range): List[String] = + { + val results = + snapshot.cumulate[List[String]](range, Nil, Rendering.document_tag_elements, _ => + { + case (res, Text.Info(_, XML.Elem(Markup.Document_Tag(name), _))) => Some(name :: res) + case _ => None + }) + Library.distinct(results.flatMap(_.info.reverse)) + } } diff -r e69f00f4b897 -r ad6d4a14adb5 src/Pure/Thy/document_marker.ML --- a/src/Pure/Thy/document_marker.ML Fri Apr 12 17:09:21 2019 +0200 +++ b/src/Pure/Thy/document_marker.ML Fri Apr 12 19:48:29 2019 +0200 @@ -83,7 +83,11 @@ then Document_Source.Command else Document_Source.Proof; val tag = Scan.optional Document_Source.tag_scope scope0 -- Document_Source.tag_name >> swap; - in Scan.lift tag end); + in Scan.lift (Parse.position tag) end); + +fun update_tags (tag as (name, _), pos) ctxt = + (Context_Position.report ctxt pos (Markup.document_tag name); + Document_Source.update_tags tag ctxt); (* concrete markers *) @@ -93,7 +97,7 @@ val _ = Theory.setup - (setup (Binding.make ("tag", \<^here>)) parse_tag Document_Source.update_tags #> + (setup (Binding.make ("tag", \<^here>)) parse_tag update_tags #> setup0 (Binding.make ("title", \<^here>)) Parse.embedded (meta_data Markup.meta_title) #> setup0 (Binding.make ("creator", \<^here>)) Parse.embedded (meta_data Markup.meta_creator) #> setup0 (Binding.make ("contributor", \<^here>)) Parse.embedded (meta_data Markup.meta_contributor) #>