2013-10-12 6 views
8

मैं समझने की कोशिश कर रहा हूं कि सीएसएस स्रोत मानचित्र कैसे काम करता है। मैंने एक बहुत ही सरल स्कैस फ़ाइल बनाई है।बेस 64 वीएलक्यू कोड कैसे पढ़ा जाए?

#navbar { 
    color: black; 
} 

जब मैं उपरोक्त स्कैस संकलित करता हूं, तो मुझे निम्न मानचित्र फ़ाइल मिलती है।

{ 
"version": "3", 
"mappings": "AAAA,OAAQ;EACP,KAAK,EAAE,KAAK", 
"sources": ["test.scss"], 
"file": "test.css" 
} 

जब मैं "मैपिंग" को डीकोड करता हूं, तो मुझे निम्न मान मिलते हैं।

0) [0,0,0,0], [7,0,0,8] 
1) [2,0,1,-7], [5,0,0,5], [2,0,0,2], [5,0,0,5] 

ये मूल्य क्या हैं?

उत्तर

3

मुझे "बेस 64 वीएलक्यू" अनुभाग के तहत http://www.thecssninja.com/javascript/source-mapping पर एक उदाहरण मिला और स्रोत मानचित्र को छोटा रखा गया "।

ऊपर चित्र AAgBC एक बार आगे संसाधित 0, 0, 32, 16, 1 वापसी होगी - 32 जा रहा है निरंतरता बिट कि 16 बी विशुद्ध रूप से Base64 में डीकोड के निम्नलिखित मूल्य निर्माण में मदद करता 1. तो है उपयोग किए जाने वाले महत्वपूर्ण मान 0, 0, 16, 1 हैं। इसके बाद हमें यह पता चलता है कि लाइन 1 (सेमीफाइनल द्वारा लाइनों को गिनती रखी जाती है) जेनरेट की गई फाइल मैप्स के कॉलम 0 को 0 फाइल करने के लिए 0 (फाइल 0 की सरणी foo है। जे एस), स्तंभ 1.

+0

महान मिली !!! बहुत बहुत धन्यवाद!! – Moon

3

http://www.murzwin.com/base64vlq.html पर लाइन 16 तुम/डिकोड SourceMap वी 3 और Base64 VLQ डेटा सांकेतिक शब्दों में बदलना कर सकते हैं।

1

उदाहरणों के बावजूद मुझे मिल सकता है, मुझे यह समझने में काफी समय लगा कि कोडिंग/डिकोडिंग वास्तव में कैसे काम करती है। तो मैंने सोचा कि मैं खुद को एक बहुत स्पष्ट, चरण-दर-चरण तरीके से कुछ करने की कोशिश करके सबसे अच्छा सीखूंगा। मैंने this blog,

पर वीएलक्यू के स्पष्टीकरण के साथ शुरुआत की, मैं Transcrypt के लिए स्रोतमैप उत्पन्न करने के लिए निम्न पायथन फ़ंक्शन का उपयोग करता हूं। कोड सरल है और मुझे लगता है कि कोडिंग/डिकोडिंग सिद्धांत रूप में कैसे काम करता है इस बारे में अच्छी जानकारी देता है। इसकी सादगी के बावजूद गति प्राप्त करने के लिए, यह पहले 256 नंबरों को कैश करता है, जिनका उपयोग अक्सर v3 स्रोतमैप उत्पन्न करने में किया जाता है।

import math 

class GetBase64Vlq: 
    def __init__ (self): 
     self.nBits32 = 5 
     self.encoding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/' 
     self.prefabSize = 256 
     self.prefab = [self (i, True) for i in range (self.prefabSize)] 

    def __call__ (self, anInteger, init = False): 
     if not init and 0 < anInteger < self.prefabSize: 
      return self.prefab [anInteger] 
     else: 
      signed = bin (abs (anInteger)) [2 : ] + ('1' if anInteger < 0 else '0') 
      nChunks = math.ceil (len (signed)/float (self.nBits32)) 
      padded = (self.nBits32 * '0' + signed) [-nChunks * self.nBits32 : ] 
      chunks = [('1' if iChunk else '0') + padded [iChunk * self.nBits32 : (iChunk + 1) * self.nBits32] for iChunk in range (nChunks - 1, -1, -1)] 
      return ''.join ([self.encoding [int (chunk, 2)] for chunk in chunks]) 

getBase64Vlq = GetBase64Vlq() 

उपयोग का उदाहरण:

while (True): 
    print (getBase64Vlq (int (input ('Give number:')))) 
संबंधित मुद्दे