Merge branch 'alexandre/nitdoc-quicksearch'
authorJean Privat <jean@pryen.org>
Tue, 17 Apr 2012 17:00:24 +0000 (13:00 -0400)
committerJean Privat <jean@pryen.org>
Tue, 17 Apr 2012 17:00:24 +0000 (13:00 -0400)
Conflicts:
tests/sav/nitdoc_args1.sav

1  2 
src/nitdoc.nit
tests/sav/nitdoc_args1.sav

diff --combined src/nitdoc.nit
@@@ -157,7 -157,8 +157,8 @@@ class DocContex
                end
  
                var head = "<meta charset=\"utf-8\">" +
-                       "<script type=\"text/javascript\" src=\"scripts/jquery-1.7.1.min.js\"></script>\n" + 
+                       "<script type=\"text/javascript\" src=\"scripts/jquery-1.7.1.min.js\"></script>\n" +
+                       "<script type=\"text/javascript\" src=\"quicksearch-list.js\"></script>\n" +
                        "<script type=\"text/javascript\" src=\"scripts/js-facilities.js\"></script>\n" +
                        "<link rel=\"stylesheet\" href=\"styles/main.css\" type=\"text/css\"  media=\"screen\" />"
  
                add("<footer>{footer_text}</footer>")
                add("</body></html>\n")
                write_to("{dir}/full-index.html")
+               self.filename = "quicksearch-list"
+               clear
+               mainmod.file_quicksearch_list_doc(self)
+               write_to("{dir}/quicksearch-list.js")
        end
  
  
@@@ -427,7 -433,7 +433,7 @@@ class AlphaSorter[E: Object
  end
  
  # Generalization of metamodel entities
 -class MMEntity
 +interface MMEntity
        # Return a link to
        fun html_link(dctx: DocContext): String is abstract
  
        # The doc node from the AST
        # Return null is none
        fun doc: nullable ADoc do return null
+       # Return a jason entry for quicksearch list JSON Object
+       fun json_entry(dctx: DocContext): String is abstract
+       # Return the qualified name as string
+       fun qualified_name: String is abstract
+               
  end
  
  redef class MMModule
                return "<a href=\"{html_name}.html\" title=\"{short_doc}\">{self}</a>"
        end
  
+       redef fun json_entry(dctx) do
+               return "\{txt:\"{self.qualified_name}\",url:\"{html_name}.html\"\},"
+       end
+       redef fun qualified_name do
+               var buffer = new Buffer
+               for m in mnhe.smallers do
+                       buffer.append("{m.html_name}::")
+               end
+               buffer.append("{self.name}")
+               return buffer.to_s
+       end
        fun require_doc(dctx: DocContext): Bool
        do
                if dctx.public_only and not is_toplevel then return false
                dctx.stage("</ul></article>\n")
                dctx.close_stage
        end
+       # Fill the quicksearch list JSON object
+       fun file_quicksearch_list_doc(dctx: DocContext)
+       do
+               var entities = new HashMap[String, Array[MMEntity]]
+               var props = new HashMap[MMGlobalProperty, Array[MMLocalProperty]]
+               for m in mhe.greaters_and_self do
+                       if not m.require_doc(dctx) then continue
+                       var a = new Array[MMEntity]
+                       a.add(m)
+                       entities[m.html_name] = a
+               end
+               for g in global_classes do
+                       var lc = self[g]
+                       if not lc.require_doc(dctx) then continue
+                       var a = new Array[MMEntity]
+                       a.add(lc)
+                       entities[lc.html_name] = a
+                       for gp in lc.global_properties do
+                               var lp = lc[gp]
+                               if not lp.require_doc(dctx) then continue
+                               if props.has_key(lp.global) then
+                                       if not props[lp.global].has(lp) then
+                                               props[lp.global].add(lp)
+                                       end
+                               else
+                                       props[lp.global] = [lp]
+                               end
+                       end
+               end
+               for k, v in props do
+                       entities[k.short_name] = v
+               end
+               var keys = entities.keys.to_a
+               var sorter = new AlphaSorter[String]
+               sorter.sort(keys)
+               
+               dctx.open_stage
+               dctx.stage("var entries = \{")
+               for key in keys do
+                       dctx.add("\"{key}\": [")
+                       for entity in entities[key] do
+                               dctx.add(entity.json_entry(dctx))
+                       end
+                       dctx.add("],")
+               end
+               dctx.stage("\};")
+               dctx.close_stage
+       end
  end
  
+ redef class MMGlobalProperty
+       # Return the short name of the property
+       fun short_name: String do
+               return self.intro.html_name
+       end
+ end 
  redef class MMLocalProperty
        super MMEntity
        # Anchor of the property description in the module html file
                return "PROP_{local_class}_{cmangle(name)}"
        end
  
+       redef fun json_entry(dctx) do
+               return "\{txt:\"{qualified_name}\",url:\"{local_class.html_name}.html#{html_anchor}\"\},"
+       end
+       redef fun qualified_name do
+               return "{intro_module.qualified_name}::{local_class.html_name}::{html_name}"
+       end
        fun html_open_link(dctx: DocContext): String
        do
                if not require_doc(dctx) then print "not required {self}"
@@@ -1107,6 -1199,14 +1199,14 @@@ redef class MMLocalClas
                return "<a href=\"{html_name}.html\" title=\"{short_doc}\">{self}</a>"
        end
  
+       redef fun json_entry(dctx) do
+               return "\{txt:\"{qualified_name}\",url:\"{html_name}.html\"\},"
+       end
+       redef fun qualified_name do
+               return "{intro_module.qualified_name}::{html_name}"
+       end
        redef fun short_doc do return global.intro.short_doc
  
        redef fun doc do return global.intro.doc
 -HashMap: not required HashCollection
 -HashSet: not required HashCollection
 -AbstractArray.html
 -AbstractArrayRead.html
 -AbstractSorter.html
 -AbstractString.html
 -Array.html
 -ArrayCapable.html
 -ArrayIterator.html
 -ArrayMap.html
 -ArrayMapKeys.html
 -ArrayMapValues.html
 -ArraySet.html
 -ArraySetIterator.html
 -BM_Pattern.html
 +A.html
 +B.html
  Bool.html
 -Buffer.html
 -BufferedIStream.html
 -Char.html
 -Collection.html
 -Comparable.html
 -ComparableSorter.html
 -Container.html
 -ContainerIterator.html
 -Couple.html
 -CoupleMap.html
 -CoupleMapIterator.html
 -Discrete.html
 -DummyArray.html
 -DummyIterator.html
 -FDIOStream.html
 -FDIStream.html
 -FDOStream.html
 -FDStream.html
 -FStream.html
 -FileStat.html
 -FilterIStream.html
 -FilterOStream.html
 -Float.html
 -HashMap.html
 -HashMapIterator.html
 -HashMapKeys.html
 -HashMapValues.html
 -HashSet.html
 -HashSetIterator.html
 -IFStream.html
 -IOProcess.html
 -IOS.html
 -IOStream.html
 -IProcess.html
 -IStream.html
 -IndexedIterator.html
  Int.html
 -Iterator.html
 -IteratorRange.html
 -List.html
 -ListIterator.html
 -Map.html
 -MapIterator.html
 -MapKeysIterator.html
 -MapRead.html
 -MapValuesIterator.html
 -Match.html
 -NaiveCollection.html
 -NativeArray.html
 -NativeString.html
 -OFStream.html
 -OProcess.html
 -OStream.html
  Object.html
 -Option.html
 -OptionArray.html
 -OptionBool.html
 -OptionContext.html
 -OptionCount.html
 -OptionEnum.html
 -OptionInt.html
 -OptionParameter.html
 -OptionString.html
 -OptionText.html
 -Pattern.html
 -Pointer.html
 -Process.html
 -Range.html
 -RemovableCollection.html
 -Sequence.html
 -SequenceRead.html
 -Set.html
 -SimpleCollection.html
 -Stderr.html
 -Stdin.html
 -Stdout.html
 -StreamCat.html
 -StreamDemux.html
 -String.html
 -StringCapable.html
 -Symbol.html
  Sys.html
 -abstract_collection.dot
 -abstract_collection.html
 -abstract_collection.map
 -abstract_collection.png
 -abstract_collection.s.dot
 -array.dot
 -array.html
 -array.map
 -array.png
 -array.s.dot
 -class_AbstractArray.dot
 -class_AbstractArray.map
 -class_AbstractArray.png
 -class_AbstractArray.s.dot
 -class_AbstractArrayRead.dot
 -class_AbstractArrayRead.map
 -class_AbstractArrayRead.png
 -class_AbstractArrayRead.s.dot
 -class_AbstractSorter.dot
 -class_AbstractSorter.map
 -class_AbstractSorter.png
 -class_AbstractSorter.s.dot
 -class_AbstractString.dot
 -class_AbstractString.map
 -class_AbstractString.png
 -class_AbstractString.s.dot
 -class_Array.dot
 -class_Array.map
 -class_Array.png
 -class_Array.s.dot
 -class_ArrayCapable.dot
 -class_ArrayCapable.map
 -class_ArrayCapable.png
 -class_ArrayCapable.s.dot
 -class_ArrayIterator.dot
 -class_ArrayIterator.map
 -class_ArrayIterator.png
 -class_ArrayIterator.s.dot
 -class_ArrayMap.dot
 -class_ArrayMap.map
 -class_ArrayMap.png
 -class_ArrayMap.s.dot
 -class_ArrayMapKeys.dot
 -class_ArrayMapKeys.map
 -class_ArrayMapKeys.png
 -class_ArrayMapKeys.s.dot
 -class_ArrayMapValues.dot
 -class_ArrayMapValues.map
 -class_ArrayMapValues.png
 -class_ArrayMapValues.s.dot
 -class_ArraySet.dot
 -class_ArraySet.map
 -class_ArraySet.png
 -class_ArraySet.s.dot
 -class_ArraySetIterator.dot
 -class_ArraySetIterator.map
 -class_ArraySetIterator.png
 -class_ArraySetIterator.s.dot
 -class_BM_Pattern.dot
 -class_BM_Pattern.map
 -class_BM_Pattern.png
 -class_BM_Pattern.s.dot
 +class_A.dot
 +class_A.map
 +class_A.png
 +class_A.s.dot
 +class_B.dot
 +class_B.map
 +class_B.png
 +class_B.s.dot
  class_Bool.dot
  class_Bool.map
  class_Bool.png
  class_Bool.s.dot
 -class_Buffer.dot
 -class_Buffer.map
 -class_Buffer.png
 -class_Buffer.s.dot
 -class_BufferedIStream.dot
 -class_BufferedIStream.map
 -class_BufferedIStream.png
 -class_BufferedIStream.s.dot
 -class_Char.dot
 -class_Char.map
 -class_Char.png
 -class_Char.s.dot
 -class_Collection.dot
 -class_Collection.map
 -class_Collection.png
 -class_Collection.s.dot
 -class_Comparable.dot
 -class_Comparable.map
 -class_Comparable.png
 -class_Comparable.s.dot
 -class_ComparableSorter.dot
 -class_ComparableSorter.map
 -class_ComparableSorter.png
 -class_ComparableSorter.s.dot
 -class_Container.dot
 -class_Container.map
 -class_Container.png
 -class_Container.s.dot
 -class_ContainerIterator.dot
 -class_ContainerIterator.map
 -class_ContainerIterator.png
 -class_ContainerIterator.s.dot
 -class_Couple.dot
 -class_Couple.map
 -class_Couple.png
 -class_Couple.s.dot
 -class_CoupleMap.dot
 -class_CoupleMap.map
 -class_CoupleMap.png
 -class_CoupleMap.s.dot
 -class_CoupleMapIterator.dot
 -class_CoupleMapIterator.map
 -class_CoupleMapIterator.png
 -class_CoupleMapIterator.s.dot
 -class_Discrete.dot
 -class_Discrete.map
 -class_Discrete.png
 -class_Discrete.s.dot
 -class_DummyArray.dot
 -class_DummyArray.map
 -class_DummyArray.png
 -class_DummyArray.s.dot
 -class_DummyIterator.dot
 -class_DummyIterator.map
 -class_DummyIterator.png
 -class_DummyIterator.s.dot
 -class_FDIOStream.dot
 -class_FDIOStream.map
 -class_FDIOStream.png
 -class_FDIOStream.s.dot
 -class_FDIStream.dot
 -class_FDIStream.map
 -class_FDIStream.png
 -class_FDIStream.s.dot
 -class_FDOStream.dot
 -class_FDOStream.map
 -class_FDOStream.png
 -class_FDOStream.s.dot
 -class_FDStream.dot
 -class_FDStream.map
 -class_FDStream.png
 -class_FDStream.s.dot
 -class_FStream.dot
 -class_FStream.map
 -class_FStream.png
 -class_FStream.s.dot
 -class_FileStat.dot
 -class_FileStat.map
 -class_FileStat.png
 -class_FileStat.s.dot
 -class_FilterIStream.dot
 -class_FilterIStream.map
 -class_FilterIStream.png
 -class_FilterIStream.s.dot
 -class_FilterOStream.dot
 -class_FilterOStream.map
 -class_FilterOStream.png
 -class_FilterOStream.s.dot
 -class_Float.dot
 -class_Float.map
 -class_Float.png
 -class_Float.s.dot
 -class_HashMap.dot
 -class_HashMap.map
 -class_HashMap.png
 -class_HashMap.s.dot
 -class_HashMapIterator.dot
 -class_HashMapIterator.map
 -class_HashMapIterator.png
 -class_HashMapIterator.s.dot
 -class_HashMapKeys.dot
 -class_HashMapKeys.map
 -class_HashMapKeys.png
 -class_HashMapKeys.s.dot
 -class_HashMapValues.dot
 -class_HashMapValues.map
 -class_HashMapValues.png
 -class_HashMapValues.s.dot
 -class_HashSet.dot
 -class_HashSet.map
 -class_HashSet.png
 -class_HashSet.s.dot
 -class_HashSetIterator.dot
 -class_HashSetIterator.map
 -class_HashSetIterator.png
 -class_HashSetIterator.s.dot
 -class_IFStream.dot
 -class_IFStream.map
 -class_IFStream.png
 -class_IFStream.s.dot
 -class_IOProcess.dot
 -class_IOProcess.map
 -class_IOProcess.png
 -class_IOProcess.s.dot
 -class_IOS.dot
 -class_IOS.map
 -class_IOS.png
 -class_IOS.s.dot
 -class_IOStream.dot
 -class_IOStream.map
 -class_IOStream.png
 -class_IOStream.s.dot
 -class_IProcess.dot
 -class_IProcess.map
 -class_IProcess.png
 -class_IProcess.s.dot
 -class_IStream.dot
 -class_IStream.map
 -class_IStream.png
 -class_IStream.s.dot
 -class_IndexedIterator.dot
 -class_IndexedIterator.map
 -class_IndexedIterator.png
 -class_IndexedIterator.s.dot
  class_Int.dot
  class_Int.map
  class_Int.png
  class_Int.s.dot
 -class_Iterator.dot
 -class_Iterator.map
 -class_Iterator.png
 -class_Iterator.s.dot
 -class_IteratorRange.dot
 -class_IteratorRange.map
 -class_IteratorRange.png
 -class_IteratorRange.s.dot
 -class_List.dot
 -class_List.map
 -class_List.png
 -class_List.s.dot
 -class_ListIterator.dot
 -class_ListIterator.map
 -class_ListIterator.png
 -class_ListIterator.s.dot
 -class_Map.dot
 -class_Map.map
 -class_Map.png
 -class_Map.s.dot
 -class_MapIterator.dot
 -class_MapIterator.map
 -class_MapIterator.png
 -class_MapIterator.s.dot
 -class_MapKeysIterator.dot
 -class_MapKeysIterator.map
 -class_MapKeysIterator.png
 -class_MapKeysIterator.s.dot
 -class_MapRead.dot
 -class_MapRead.map
 -class_MapRead.png
 -class_MapRead.s.dot
 -class_MapValuesIterator.dot
 -class_MapValuesIterator.map
 -class_MapValuesIterator.png
 -class_MapValuesIterator.s.dot
 -class_Match.dot
 -class_Match.map
 -class_Match.png
 -class_Match.s.dot
 -class_NaiveCollection.dot
 -class_NaiveCollection.map
 -class_NaiveCollection.png
 -class_NaiveCollection.s.dot
 -class_NativeArray.dot
 -class_NativeArray.map
 -class_NativeArray.png
 -class_NativeArray.s.dot
 -class_NativeString.dot
 -class_NativeString.map
 -class_NativeString.png
 -class_NativeString.s.dot
 -class_OFStream.dot
 -class_OFStream.map
 -class_OFStream.png
 -class_OFStream.s.dot
 -class_OProcess.dot
 -class_OProcess.map
 -class_OProcess.png
 -class_OProcess.s.dot
 -class_OStream.dot
 -class_OStream.map
 -class_OStream.png
 -class_OStream.s.dot
  class_Object.dot
  class_Object.map
  class_Object.png
  class_Object.s.dot
 -class_Option.dot
 -class_Option.map
 -class_Option.png
 -class_Option.s.dot
 -class_OptionArray.dot
 -class_OptionArray.map
 -class_OptionArray.png
 -class_OptionArray.s.dot
 -class_OptionBool.dot
 -class_OptionBool.map
 -class_OptionBool.png
 -class_OptionBool.s.dot
 -class_OptionContext.dot
 -class_OptionContext.map
 -class_OptionContext.png
 -class_OptionContext.s.dot
 -class_OptionCount.dot
 -class_OptionCount.map
 -class_OptionCount.png
 -class_OptionCount.s.dot
 -class_OptionEnum.dot
 -class_OptionEnum.map
 -class_OptionEnum.png
 -class_OptionEnum.s.dot
 -class_OptionInt.dot
 -class_OptionInt.map
 -class_OptionInt.png
 -class_OptionInt.s.dot
 -class_OptionParameter.dot
 -class_OptionParameter.map
 -class_OptionParameter.png
 -class_OptionParameter.s.dot
 -class_OptionString.dot
 -class_OptionString.map
 -class_OptionString.png
 -class_OptionString.s.dot
 -class_OptionText.dot
 -class_OptionText.map
 -class_OptionText.png
 -class_OptionText.s.dot
 -class_Pattern.dot
 -class_Pattern.map
 -class_Pattern.png
 -class_Pattern.s.dot
 -class_Pointer.dot
 -class_Pointer.map
 -class_Pointer.png
 -class_Pointer.s.dot
 -class_Process.dot
 -class_Process.map
 -class_Process.png
 -class_Process.s.dot
 -class_Range.dot
 -class_Range.map
 -class_Range.png
 -class_Range.s.dot
 -class_RemovableCollection.dot
 -class_RemovableCollection.map
 -class_RemovableCollection.png
 -class_RemovableCollection.s.dot
 -class_Sequence.dot
 -class_Sequence.map
 -class_Sequence.png
 -class_Sequence.s.dot
 -class_SequenceRead.dot
 -class_SequenceRead.map
 -class_SequenceRead.png
 -class_SequenceRead.s.dot
 -class_Set.dot
 -class_Set.map
 -class_Set.png
 -class_Set.s.dot
 -class_SimpleCollection.dot
 -class_SimpleCollection.map
 -class_SimpleCollection.png
 -class_SimpleCollection.s.dot
 -class_Stderr.dot
 -class_Stderr.map
 -class_Stderr.png
 -class_Stderr.s.dot
 -class_Stdin.dot
 -class_Stdin.map
 -class_Stdin.png
 -class_Stdin.s.dot
 -class_Stdout.dot
 -class_Stdout.map
 -class_Stdout.png
 -class_Stdout.s.dot
 -class_StreamCat.dot
 -class_StreamCat.map
 -class_StreamCat.png
 -class_StreamCat.s.dot
 -class_StreamDemux.dot
 -class_StreamDemux.map
 -class_StreamDemux.png
 -class_StreamDemux.s.dot
 -class_String.dot
 -class_String.map
 -class_String.png
 -class_String.s.dot
 -class_StringCapable.dot
 -class_StringCapable.map
 -class_StringCapable.png
 -class_StringCapable.s.dot
 -class_Symbol.dot
 -class_Symbol.map
 -class_Symbol.png
 -class_Symbol.s.dot
  class_Sys.dot
  class_Sys.map
  class_Sys.png
  class_Sys.s.dot
 -collection.dot
 -collection.html
 -collection.map
 -collection.png
 -collection.s.dot
  dep.dot
  dep.map
  dep.png
  dep.s.dot
 -dummy_array.dot
 -dummy_array.html
 -dummy_array.map
 -dummy_array.png
 -dummy_array.s.dot
 -environ.dot
 -environ.html
 -environ.map
 -environ.png
 -environ.s.dot
 -exec.dot
 -exec.html
 -exec.map
 -exec.png
 -exec.s.dot
 -file.dot
 -file.html
 -file.map
 -file.png
 -file.s.dot
 -filter_stream.dot
 -filter_stream.html
 -filter_stream.map
 -filter_stream.png
 -filter_stream.s.dot
  full-index.html
 -hash.dot
 -hash.html
 -hash.map
 -hash.png
 -hash.s.dot
 -hash_collection.dot
 -hash_collection.html
 -hash_collection.map
 -hash_collection.png
 -hash_collection.s.dot
  help.html
  index.html
 -kernel.dot
 -kernel.html
 -kernel.map
 -kernel.png
 -kernel.s.dot
 -list.dot
 -list.html
 -list.map
 -list.png
 -list.s.dot
 -math.dot
 -math.html
 -math.map
 -math.png
 -math.s.dot
 -opts.dot
 -opts.html
 -opts.map
 -opts.png
 -opts.s.dot
 +module_0.dot
 +module_0.html
 +module_0.map
 +module_0.png
 +module_0.s.dot
 +module_1.dot
 +module_1.html
 +module_1.map
 +module_1.png
 +module_1.s.dot
+ quicksearch-list.js
 -range.dot
 -range.html
 -range.map
 -range.png
 -range.s.dot
  resources/
  scripts/
 -sorter.dot
 -sorter.html
 -sorter.map
 -sorter.png
 -sorter.s.dot
 -standard.dot
 -standard.html
 -standard.map
 -standard.png
 -standard.s.dot
 -stream.dot
 -stream.html
 -stream.map
 -stream.png
 -stream.s.dot
 -string.dot
 -string.html
 -string.map
 -string.png
 -string.s.dot
 -string_search.dot
 -string_search.html
 -string_search.map
 -string_search.png
 -string_search.s.dot
  styles/
 -symbol.dot
 -symbol.html
 -symbol.map
 -symbol.png
 -symbol.s.dot
 -time.dot
 -time.html
 -time.map
 -time.png
 -time.s.dot