Class: Dyndoc::PartTag
- Inherits:
-
Object
- Object
- Dyndoc::PartTag
- Defined in:
- lib/dyndoc/base/tags/part_tag.rb
Constant Summary collapse
- @@partTagDefault =
["main"]
- @@partEmbed =
["{","}"]
Class Method Summary collapse
- .append(partTag, tags) ⇒ Object
-
.apply_alias(partTag, aliases) ⇒ Object
partTag is modified at the end!.
- .global_alias(aliases) ⇒ Object
- .is_part_ok?(part, partTag) ⇒ Boolean
- .local_alias(aliases, input) ⇒ Object
-
.make_alias(aliases, alias_lines) ⇒ Object
alias_lines= array of lines of the form “alias1,…,aliasN=tag1,…,tagP”.
- .make_part(str) ⇒ Object
-
.out_tag_doc(txt, content, partTagLimit = [Regexp.escape("%("),Regexp.escape(")")]) ⇒ Object
filter out_tag in doc.
-
.part_doc(txt, partTag = [], partTagLimit = [Regexp.escape("%("),Regexp.escape(")")]) ⇒ Object
filter part in doc.
- .partTagDefault(out_tag) ⇒ Object
Class Method Details
.append(partTag, tags) ⇒ Object
46 47 48 49 50 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 46 def PartTag.append(partTag,) #puts "partTag";p partTag #puts "tags";p tags partTag.each_key{|o| partTag[o]+=} end |
.apply_alias(partTag, aliases) ⇒ Object
partTag is modified at the end!
29 30 31 32 33 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 29 def PartTag.apply_alias(partTag,aliases) #partTag is modified at the end! partTag.each_key{|o| partTag[o]=partTag[o].map{|e| ( (aliases.keys.include? e) ? aliases[e] : e )}.flatten.uniq } end |
.global_alias(aliases) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 11 def PartTag.global_alias(aliases) ## global aliases @@alias="" @@sys_alias=File.join(Dyndoc.cfg_dir[:sys],"alias") @@alias << File.read(@@sys_alias).chomp << "\n" if File.exists? @@sys_alias @@home_alias=File.join(Dyndoc.cfg_dir[:home],'alias') @@alias << File.read(@@home_alias).chomp << "\n" if File.exists? @@home_alias if Dyndoc.cfg_dir[:file] @@file_alias=File.join(Dyndoc.cfg_dir[:file],'.dyn_alias') @@alias << File.read(@@file_alias).chomp << "\n" if File.exists? @@file_alias end PartTag.make_alias(aliases,@@alias.chomp.split("\n")) end |
.is_part_ok?(part, partTag) ⇒ Boolean
52 53 54 55 56 57 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 52 def PartTag.is_part_ok?(part,partTag) part[0]=part[0][1..-1] if (neg=(part[0][0,1] == "-")) tmp= (partTag & part).empty? tmp = !tmp unless neg return tmp end |
.local_alias(aliases, input) ⇒ Object
25 26 27 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 25 def PartTag.local_alias(aliases,input) # @alias increased PartTag.make_alias(aliases,input.scan(/%%%alias\(([^\)]*)\)/).flatten) end |
.make_alias(aliases, alias_lines) ⇒ Object
alias_lines= array of lines of the form “alias1,…,aliasN=tag1,…,tagP”
5 6 7 8 9 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 5 def PartTag.make_alias(aliases,alias_lines) #alias_lines= array of lines of the form "alias1,...,aliasN=tag1,...,tagP" #p alias_lines alias_lines.map{|e| e.split(/[=>]/)}.map{|e,e2,e3| tmp=e.split(",").map{|ee| ee.strip};tmp2=e2.split(",").map{|ee| ee.strip}+tmp;tmp.map{|ee| aliases[ee] = tmp2}}.flatten #aliases updated! end |
.make_part(str) ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 59 def PartTag.make_part(str) if str.is_a? String str.split(",").map{|e| e.strip}.map{|t| if t[0,1]=="-" t else tmp=t.split(":") (0...tmp.length).map{|i| tmp[0..i].join(":")} end }.flatten else str end end |
.out_tag_doc(txt, content, partTagLimit = [Regexp.escape("%("),Regexp.escape(")")]) ⇒ Object
filter out_tag in doc
170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 170 def PartTag.out_tag_doc(txt,content,partTagLimit=[Regexp.escape("%("),Regexp.escape(")")]) parts=txt.scan(/#{partTagLimit[0]}([\#\d\w\-\:,]*)#{partTagLimit[1]}/).flatten parts=parts.map{|pa| pa.split(",").map{|e| e.strip}.map{|t| if t[0,1]=="-" t else tmp=t.split(":") (0...tmp.length).map{|i| tmp[0..i].join(":")} end }.flatten } blocks=txt.split(/#{partTagLimit[0]}[\#\d\w\-\:,]*#{partTagLimit[1]}/,-1) content.each_key{|ot| content[ot] << blocks[0]} parts.each_index{|i| parts[i].each{|ot| ot=:default if ot=="default" content[ot] += blocks[i+1] } } end |
.part_doc(txt, partTag = [], partTagLimit = [Regexp.escape("%("),Regexp.escape(")")]) ⇒ Object
filter part in doc
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 76 def PartTag.part_doc(txt,partTag=[],partTagLimit=[Regexp.escape("%("),Regexp.escape(")")]) return txt if partTag.empty? #nothing to do! parts=txt.scan(/#{partTagLimit[0]}([\#\d\w\-\:,]*[#{Regexp.escape(@@partEmbed[0]+@@partEmbed[1])}]?)#{partTagLimit[1]}/).flatten #p partTag #p parts #parts.map!{|pa| ( pa[0,1]==@@partEmbed[0] ? pa[1..-1]+pa[0,1] : pa ) } #Rule opentag! # 1) an opentag non closed is as a norma tag # 2) a closetag non related to an opentag is ignored # These rules may be useful! open_part,close_part={},{} stack=[] parts.each_index{|i| tag=parts[i] case tag[-1,1] when @@partEmbed[0] prec_tag=nil if i>0 prec_tag=parts[i-1] #p prec_tag case prec_tag[-1,1] when @@partEmbed[0] prec_tag=prec_tag[0...-1] when @@partEmbed[1] =begin p i p stack p open_part p close_part =end prec_tag=open_part[close_part[i-1]][:prec_tag] end else prec_tag="main" end stack.push({:index=>i,:name=>tag[0...-1],:prec_tag=>PartTag.make_part(prec_tag)}) when @@partEmbed[1] close_tag=tag[0...-1] open_tag=stack.pop if open_tag and close_tag==open_tag[:name] open_part[open_tag[:index]]={:tag_name=>open_tag[:name],:close_index=>i,:prec_tag=>open_tag[:prec_tag]} close_part[i]=open_tag[:index] #to retrieve the information of the associated open_part else stack.push(open_tag) if open_tag end #nothing is done if no associated open-close parts! end } parts=parts.map{|pa| pa=pa[0...-1] if pa[-1,1]=~/[#{Regexp.escape(@@partEmbed[0]+@@partEmbed[1])}]/ PartTag.make_part(pa) } blocks=txt.split(/#{partTagLimit[0]}[\#\d\w\-\:,]*[#{Regexp.escape(@@partEmbed[0]+@@partEmbed[1])}]?#{partTagLimit[1]}/,-1) txt2=blocks[0] open_keys,close_keys=open_part.keys,close_part.keys locked={};partTag.each_key{|ot| locked[ot]=nil} parts.each_index{|i| #is a open tag? if open_keys.include? i open_tag=open_part[i] part_tag=PartTag.make_part(open_tag[:tag_name]) #is locked or unlocked? partTag.each_key{|ot| locked[ot]=open_tag[:close_index] if !(PartTag.is_part_ok?(part_tag,partTag[ot])) } elsif close_keys.include? i #part_tag is the same before the open_tag! part_tag=open_part[close_part[i]][:prec_tag] #pop the last state of the open-close tag_block! partTag.each_key{|ot| locked[ot]=nil if locked[ot]==i} else part_tag=parts[i] end #RMK: N'y-a-t-il pas une différence entre ne outtag et un part_tag??? ## et les blocks ouvert et fermé n'ont-ils pas de sens que pour les part_tags? out_tag=[] partTag.each_key{|ot| out_tag << ot.to_s if !locked[ot] and PartTag.is_part_ok?(part_tag,partTag[ot]) } unless out_tag.empty? txt2 += "%("+out_tag.join(",")+")" txt2 += blocks[i+1] end } return txt2 end |
.partTagDefault(out_tag) ⇒ Object
37 38 39 40 41 42 43 44 |
# File 'lib/dyndoc/base/tags/part_tag.rb', line 37 def PartTag.partTagDefault(out_tag) partTag={} out_tag.each{|o| partTag[o]=@@partTagDefault.dup partTag[o] << o unless o==:default } partTag end |