001/** 002 * 003 * Copyright (c) 2014, the Railo Company Ltd. All rights reserved. 004 * 005 * This library is free software; you can redistribute it and/or 006 * modify it under the terms of the GNU Lesser General Public 007 * License as published by the Free Software Foundation; either 008 * version 2.1 of the License, or (at your option) any later version. 009 * 010 * This library is distributed in the hope that it will be useful, 011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 013 * Lesser General Public License for more details. 014 * 015 * You should have received a copy of the GNU Lesser General Public 016 * License along with this library. If not, see <http://www.gnu.org/licenses/>. 017 * 018 **/ 019/** 020 * Implements the CFML Function getfunctionlist 021 */ 022package lucee.runtime.functions.other; 023 024import java.util.Iterator; 025import java.util.Map; 026 027import lucee.runtime.PageContext; 028import lucee.runtime.config.ConfigImpl; 029import lucee.runtime.exp.PageException; 030import lucee.runtime.ext.function.Function; 031import lucee.runtime.type.Struct; 032import lucee.runtime.type.StructImpl; 033import lucee.transformer.library.tag.TagLib; 034import lucee.transformer.library.tag.TagLibTag; 035 036public final class GetTagList implements Function { 037 038 private static Struct sct; 039 040 041 public synchronized static lucee.runtime.type.Struct call(PageContext pc) throws PageException { 042 if(sct==null) { 043 sct=new StructImpl(); 044 //synchronized(sct) { 045 //hasSet=true; 046 TagLib[] tlds; 047 TagLibTag tag; 048 tlds = ((ConfigImpl)pc.getConfig()).getTLDs(); 049 050 for(int i=0;i<tlds.length;i++) { 051 String ns = tlds[i].getNameSpaceAndSeparator(); 052 053 054 Map tags = tlds[i].getTags(); 055 Iterator it = tags.keySet().iterator(); 056 Struct inner=new StructImpl(); 057 sct.set(ns,inner); 058 while(it.hasNext()){ 059 Object n=it.next(); 060 tag = tlds[i].getTag(n.toString()); 061 if(tag.getStatus()!=TagLib.STATUS_HIDDEN && tag.getStatus()!=TagLib.STATUS_UNIMPLEMENTED) 062 inner.set(n.toString(),""); 063 } 064 065 } 066 //} 067 } 068 return sct; 069 } 070}