Program do sprawdzania danych z bazy www

Program do sprawdzania danych z bazy www
GR
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:2
0

Witam. Nawet nie za bardzo wiedziałem, jak sformułować temat. Mam pytanie, czy jest możliwe napisanie programu, który byłby w stanie pobierać z listy (np z arkusza xls czy skopiowanej bezpośrednio do tego programu) numery NIP, wpisać je do formularza na stronie http://www.finanse.mf.gov.pl/web/wp/pp/sprawdzanie-statusu-podmiotu-w-vat , odczytać i zapisać w jakiejś bazie wynik weryfikacji? Oczywiście chodzi o masowe sprawdzenie całej listy, po jednokrotnym uruchomieniu mechanizmu. Strona nie posiada zabezpieczeń typu captcha, obrazki itp. Dla zobrazowania możecie wpisać np. 5250008028. Strona zwróci informację "Podmiot o podanym identyfikatorze podatkowym NIP jest zarejestrowany jako podatnik VAT czynny". Po wpisaniu np 0123456789 pojawi się informacja "Podmiot o podanym identyfikatorze podatkowym NIP nie jest zarejestrowany jako podatnik VAT". Nie pytam, jak to zrobić, bo nie jestem informatykiem i nie potrafiłbym tego zrobić, ale czy w ogóle jest to możliwe.

edytowany 1x, ostatnio: aurel
LI
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:518
0

Tak, jest to możliwe. Nie jest to też jakieś mega mega trudne.

Serwis który podałeś udostępnia API które sprawia że programista może napisać kod który pobiera dane z pliku xls etc a następnie wywołuje dla tych danych ileś razy funkcję udostępnioną przez ten serwis i zwraca Ci wynik.

https://nip24.pl/dokumentacja/

Jako source podana jest strona którą podałeś.


Life is Strange
edytowany 2x, ostatnio: lightinside
john_klamka
ale to nie jest api ministerstwa finansów tylko jakiejś firmy
LI
Tak, masz rację w dodatku nieźle płatne. Nie doczytałam.
GR
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 8 lat
  • Postów:2
0

OK. A do programisty specjalizującego się w jakim języku powinienem się zgłosić z takim zleceniem? Czy po prostu najlepiej zgłosić się do firmy informatycznej, która ma kilku pracowników i zapytać o możliwość wykonania programu i wycenę?

LI
  • Rejestracja:około 11 lat
  • Ostatnio:ponad 3 lata
  • Postów:518
0

Nie ma znaczenia jaki język zostanie zastosowany. Osobiście polecam pythona ale aplikacja może zostać napisana w każdym języku który jest wspierany przez API.


Life is Strange
0
gromit napisał(a):

OK. A do programisty specjalizującego się w jakim języku powinienem się zgłosić z takim zleceniem? Czy po prostu najlepiej zgłosić się do firmy informatycznej, która ma kilku pracowników i zapytać o możliwość wykonania programu i wycenę?

Z nip24.pl możesz pobrać dodatek do Excel i weryfikować status podatnika w VAT bez znajomości języka programowania: https://nip24.pl/sprawdzanie-statusu-vat-dodatek-do-excel/

Pawci_o
  • Rejestracja:ponad 9 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Czudec
  • Postów:59
0

Właśnie na to patrzę, założyłem konto i bez problemów po stronie c# uruchomiłem sprawdzanie na koncie darmowym, jednak jest tam tylko 100 zapytań, może ktoś mi podpowie jak zabrać się za odpytywanie strony ministerstwa o nipy - z tego co udało mi się dowiedzieć to zapytania idą jsonm..
pomoże ktoś ?

0

Może Phantomjs dla windows i skrypt sprawdzenieStatusuPodmiotuWVAT.js ze strony:
https://gist.github.com/srsbiz/1cd71dbe79369dd1682ddb2b2275a8e2

0

Funkcja w Excel do sprawdzenia Nip
lub w innych programach w technologii Ole

Kopiuj
Declare Sub Sleep Lib "kernel32" (ByVal milliseconds As Long)

Public Function nipoff(Nipo As String) As String

Dim inputElement As HTMLInputElement
Dim URL

Dim IE
Dim IEField As HTMLInputElement
Dim wyjm As HTMLInputElement
Dim cos As String

If Len(Nipo) <> 10 Then
niof = " Zły Nip "
Exit Function
End If


Set IE = CreateObject("internetexplorer.application")
URL = "https://ppuslugi.mf.gov.pl/?link=VAT&"
IE.Visible = False
IE.Navigate URL

Do While IE.readyState <> 4: DoEvents: Loop
Do While IE.Busy
Sleep (100)
Loop
Sleep (700)
Do While inputElement Is Nothing
Set inputElement = IE.Document.getElementById("b-7")
Loop

inputElement.Value = Nipo
IE.Document.getElementById("b-8").Click
Do While IE.readyState <> 4: DoEvents: Loop
Sleep (500)

Set wyjm = IE.Document.getElementById("caption2_b-3")

Dim ttyu As String

ttyu = wyjm.innerText

IE.Quit
Dim varCzyJest As Integer
varCzyJest = InStr(ttyu, "NIP jest zarejestrowany jako podatnik VAT czynny")
If varCzyJest > 0 Then
nipoff = "Czynny "
Exit Function
End If

Dim varCzy2 As Integer
varCzy2 = InStr(ttyu, "NIP nie jest zarejestrowany jako podatnik VAT")


If varCzy2 > 0 Then
nipoff = "NieCzynny"
Exit Function
End If



nipof = ttyu
End Function
edytowany 1x, ostatnio: flowCRANE
flowCRANE
Wstawiaj kod w znaczniki kolorujące składnię. Poza tym kod należy sformatować, zanim się go pokaże komukolwiek.
0

Tutaj jest gotowy program który sprawdza kontrahentów ze strony VIES oraz Ministerstwa Finansów http://nipreporter.pl/

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
0

Poczekaj do grudnia, wtedy MF powinien już udostępnić API do sprawdzenia aktywności NIP. Możesz sprawdzić przy pomocy Vies, ale tam dużo podmiotów brakuje... W sensie, podejrzewam, że tych którzy nie mają europejskiego NIP-u

Pawci_o
  • Rejestracja:ponad 9 lat
  • Ostatnio:6 miesięcy
  • Lokalizacja:Czudec
  • Postów:59
0

Wszystko super - ale może ktoś pomóc w napisaniu biblioteki c# do pobierania? proszę chociaż o sam fakt jak zacząć z czego korzystać - z nuget Net.Http ? czy może z czegoś innego ? bardzo proszę o pomoc.

0

Implementacja Powyższego algorytmu w C#

Kopiuj
public static int CheckVat(string Nipo)
        {
            var type = Type.GetTypeFromProgID("internetexplorer.application");
            dynamic ie = Activator.CreateInstance(type);

            ie.Visible = false;
            ie.Navigate("https://ppuslugi.mf.gov.pl/?link=VAT&");

            while (ie.readyState != 4)
            {
                while (ie.Busy)
                   Thread.Sleep(50);
                Thread.Sleep(50);
            }

            dynamic inputElement = null;
            while (inputElement == null)
              inputElement = ie.Document.getElementById("b-7");

            inputElement.Value = Nipo;
            ie.Document.getElementById("b-8").Click();

            Thread.Sleep(500);
            string ttyu = ie.Document.Body.innerText;
            ie.Quit();
            ie= null;

            if (ttyu.Contains("NIP jest zarejestrowany jako podatnik VAT czynny"))
               return 1;
            else
            if (ttyu.Contains("NIP nie jest zarejestrowany jako podatnik VAT"))
               return 0;

            return -1;
        }

i w Delphi

Kopiuj
function VATCheck(Nipo:string):Integer;
var
  IE,inputElement,IEField,wyjm:OleVariant;
  URL:string;
  cos,ttyu:string;
  varCzyJest:Integer;
begin
  Result:=-1;
  if Length(Nipo) <> 10 then
     raise Exception.Create('Zły Nip');

  IE := CreateOleObject('internetexplorer.application');
  IE.Visible := False;
  IE.Navigate('https://ppuslugi.mf.gov.pl/?link=VAT&');

  while IE.readyState <> 4 do
  begin
    while IE.Busy do
      Sleep (50);
    Sleep (50);
  end;

  while VarIsEmpty(inputElement) or VarIsNull(inputElement) do
    inputElement := IE.Document.getElementById('b-7');

  inputElement.Value := Nipo;
  IE.Document.getElementById('b-8').Click;

  Sleep(500);
  ttyu := IE.Document.Body.innerText;
  IE.Quit;
  IE:=null;

  if Pos('NIP jest zarejestrowany jako podatnik VAT czynny', ttyu) > 0 then
     Result := 1
  else
  if Pos('NIP nie jest zarejestrowany jako podatnik VAT', ttyu) > 0 then
     Result := 0;
end;
JU
Wprowadziłem kod w C# ale uzyskuję tylko jedną odpowiedz prawidłową. Przy 2 próbie program sie sypie. Co robić?
KA
KA
  • Rejestracja:prawie 12 lat
  • Ostatnio:prawie 5 lat
  • Lokalizacja:Warszawa
  • Postów:1683
0

Jak coś napisałam taki wydajny program, który sprawdzi wam tysiące nipów. Oferuje łatwe REST API i panel webowy więc łatwo integruje się z większością Excel i programów księgowych.
Jak coś to priv


PROGRAMY NA ZAMÓWIENIE, ZALICZENIA STUDENCKIE, KONFIGURACJA SERWERÓW, SYSTEMÓW I BAZ DANYCH, STRONY INTERNETOWE, POMOC W PROGRAMOWANIU, POPRAWIENIE I OPTYMALIZACJA APLIKACJI
JAVA, C++, LINUX, WWW, SQL, PYTHON
POSIADAM KOMERCYJNE DOŚWIADCZENIE
TANIO, SZYBKO I PORZĄDNIE
Z KOMENTARZAMI OBJAŚNIAJĄCYMI KOD
PISZ NA PRYWATNĄ WIADOMOŚĆ
CENY JUŻ OD 49,99ZŁ ZA PROGRAM
ZAJMIJ SIĘ TYM CO CIĘ NAPRAWDĘ INTERESUJE!
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
1

Tak piszę, bo może niektórzy jeszcze nie wiedzą, ale MF udostępnił API do sprawdzenia aktywności NIP: https://www.finanse.mf.gov.pl/pp/komunikaty/-/asset_publisher/qqR2/content/id/6347532

0
Panczo napisał(a):

Tak piszę, bo może niektórzy jeszcze nie wiedzą, ale MF udostępnił API do sprawdzenia aktywności NIP: https://www.finanse.mf.gov.pl/pp/komunikaty/-/asset_publisher/qqR2/content/id/6347532

Nie mogę się podłączyć do tego API (Error 400) - komuś to działa?

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
0

Mi działa

0

A jaki adres usługi podajesz ?

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
0

sprawdz-status-vat.mf.gov.pl po SSL-u

0

W jaki sposób Pan się podłącza pod ten webserwis?
Próba podłączenia C# z adresem https://sprawdz-status-vat.mf.gov.pl/ kończy się błędem:

Podczas pobierania „https://sprawdz-status-vat.mf.gov.pl/” wystąpił błąd.
Żądanie nie powiodło się. Status HTTP 400: Bad Request.
There was an error downloading 'https://sprawdz-status-vat.mf.gov.pl/$metadata'.
The request failed with HTTP status 404: Not Found.

Próbowałem też otwierać stronę w przeglądarce - też się nie otwiera.

Pozdrawiam

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
0

Po pierwsze to jest serwis SOAP więc nie podlącza się do niego wpisując adres, trzeba zbudować dokument SOAP, wysłać go na ten adres dodając nagłówki Content-Type i SOAPAction, więc poszukałbym przykładów, jak używać SOAP w C#:
https://stackoverflow.com/questions/4791794/client-to-send-soap-request-and-received-response

0

Dziękuję za podpowiedź. Spróbuję czegoś pod tym kontem jeszcze poszukać. Na razie coś jeszcze robię źle, bo dostaję błąd 500.

0

a w jakim języku udało się Panu podłączyć - może Pan udostępnić kawałek kodu ?

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 12 godzin
  • Postów:3866
0

Mój kod pewnie wiele ci nie pomoże bo używałem obiektów www.chilkatsoft.com, i napisałem to w VBScript, ale skoro chcesz, to masz:

Kopiuj
Function iapiCheckNIPMF(NIP)
 
    Set glb = CreateObject("Chilkat_9_5_0.Global")    
    glb.unlockbundle "xyz"
    Set http = CreateObject("Chilkat_9_5_0.Http")
    
	
	Set soapXml = CreateObject("Chilkat_9_5_0.XML")
    soapXml.Tag = "soapenv:Envelope"
    success = soapXml.addAttribute("xmlns:soapenv", "http://schemas.xmlsoap.org/soap/envelope/")
    success = soapXml.addAttribute("xmlns:ns", "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01")
    soapXml.UpdateChildContent "soapenv:Header", ""
    soapXml.UpdateChildContent "soapenv:Body|ns:NIP", NIP

   
    Set req = CreateObject("Chilkat_9_5_0.HttpRequest")
    req.HttpVerb = "POST"
    req.SendCharset = 0
    req.AddHeader "Content-Type", "text/xml; charset=utf-8"
    req.AddHeader "SOAPAction", "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01/WeryfikacjaVAT/SprawdzNIP"
    success = req.LoadBodyFromString(soapXml.GetXml(), "utf-8")

    http.FollowRedirects = 1

    Set resp = http.SynchronousRequest("sprawdz-status-vat.mf.gov.pl", 443, 1, req)
    If (resp Is Nothing) Then
        iapiCheckNIPMF = "Brak lączności z uslugą MF API"
    Else
        Set xmlResponse = CreateObject("Chilkat_9_5_0.XML")
        success = xmlResponse.LoadXML(resp.BodyStr)
        iapiCheckNIPMF = xmlResponse.getchildcontent("s:Body|WynikOperacji|Kod") & " - " & xmlResponse.getchildcontent("s:Body|WynikOperacji|Komunikat")
    End If


End Function


msgbox iapiCheckNIPMF("1234567890")
0

Również dziękuję za kod. Z jego pomocą znalazłem błąd u siebie - SOAPAction źle podawałem - teraz udało mi się podłączyć.

Pozdrawiam.

0

Dzięki za pomoc

0

Gotowe rozwiązanie w C#

Kopiuj
namespace mfSprawdzVat
{
    public class CheckVat
    {
        public const string mfNS = "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01";
        private const string enNS = "http://schemas.xmlsoap.org/soap/envelope/";
        private const string SOAPAction = "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01/WeryfikacjaVAT/SprawdzNIP";
        private const string SOAPActionNaDzien = "http://www.mf.gov.pl/uslugiBiznesowe/uslugiDomenowe/AP/WeryfikacjaVAT/2018/03/01/WeryfikacjaVAT/SprawdzNIPNaDzien";
        private const string mfUrl = "https://sprawdz-status-vat.mf.gov.pl";

        private readonly string _url;

        public CheckVat(string url = mfUrl)
        {
            _url = url;
        }

        public WynikOperacji Sprawdz(string nip, DateTime? naDzien = null)
        {
            var param = new Envelope<BodyRequest>() {
                Body = new BodyRequest() {
                    Nip = nip,
                    Data = naDzien
                }
            };

            var xmlString = Serialize<Envelope<BodyRequest>>(param);

            using (var httpClient = new HttpClient())
            {
                var httpContent = new StringContent(xmlString, Encoding.UTF8, "text/xml");
                if (naDzien == null)
                    httpContent.Headers.Add("SOAPAction", SOAPAction);
                else
                    httpContent.Headers.Add("SOAPAction", SOAPActionNaDzien);

                var result = httpClient.PostAsync(_url, httpContent).Result;
                var x = result.Content.ReadAsStringAsync().Result;
                var response = Deserialize<Envelope<BodyResponse>>(x);
                return response.Body.WynikOperacji;
            }
        }

        private T Deserialize<T>(string xml)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            using (TextReader textReader = new StringReader(xml))
            {               
                return (T)serializer.Deserialize(textReader);               
            }
        }

        private string Serialize<T>(T obj)
        {
            XmlSerializer serializer = new XmlSerializer(typeof(T));
            XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = new UnicodeEncoding(false, false);
            settings.Indent = true;
            settings.OmitXmlDeclaration = true;

            XmlSerializerNamespaces ns = new XmlSerializerNamespaces();

            ns.Add("soapenv", enNS);
            ns.Add("ns", mfNS);

            using (StringWriter textWriter = new StringWriter())
            {
                using (XmlWriter xmlWriter = XmlWriter.Create(textWriter, settings))
                {
                    serializer.Serialize(xmlWriter, obj, ns);
                }
                return textWriter.ToString(); 
            }
        }

        [XmlRoot(ElementName = "Envelope", Namespace = enNS)]
        public class Envelope<T>
        {
            public string Header { get; set; }
            public T Body { get; set; }
        }

        public class BodyRequest
        {
            [XmlElement(ElementName = "NIP", Namespace = mfNS)]
            public string Nip { get; set; }
            [XmlElement(Namespace = mfNS, IsNullable = true)]
            public DateTime? Data { get; set; }
        }

        public class BodyResponse
        {
            [XmlElement(Namespace = mfNS)]
            public WynikOperacji WynikOperacji { get; set; }

            [XmlNamespaceDeclarations]
            public XmlSerializerNamespaces xmlns = new XmlSerializerNamespaces();

            public BodyResponse()
            {
                xmlns.Add("", mfNS);
            }
        }
    }  

    public class WynikOperacji
    {
        [XmlElement(Namespace = CheckVat.mfNS)]
        public string Kod { get; set; }
        [XmlElement(Namespace = CheckVat.mfNS)]
        public string Komunikat { get; set; }        
    }
}

użycie

Kopiuj
            var x = new CheckVat();
            var resp = x.Sprawdz("6612154861");

lub

Kopiuj
            var x = new CheckVat();
            var resp = x.Sprawdz("6612154861", DateTime.Parse("2018-02-01"));
edytowany 1x, ostatnio: flowCRANE
PR
  • Rejestracja:ponad 6 lat
  • Ostatnio:ponad 6 lat
  • Postów:1
0
Panczo napisał(a):

Mój kod pewnie wiele ci nie pomoże bo używałem obiektów www.chilkatsoft.com, i napisałem to w VBScript, ale skoro chcesz, to masz:

Kopiuj
......

Dzięki serdeczne za ten kod. Od tygodnia szukałem po necie jak to zrobić w VisualFoxPro i nic jak już coś znalazłem, to klawisz na stronce nie chciał się kliknąć. A ten kod prawie bez zmian (tylko ubrałem w nawiasy parametry w wywołaniach funkcji i usunąłem SETy) zadziałał prawidłowo pod foxem :). Jeszcze raz wielkie dzięki.

edytowany 1x, ostatnio: Pracof
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)